[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc

上传人:testyield361 文档编号:503133 上传时间:2018-11-29 格式:DOC 页数:5 大小:33.50KB
下载 相关 举报
[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc_第1页
第1页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc_第2页
第2页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc_第3页
第3页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc_第4页
第4页 / 共5页
[计算机类试卷]国家二级(C语言)机试模拟试卷372及答案与解析.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、国家二级( C语言)机试模拟试卷 372及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:找出形参 s所指字符串中出现频率最高的字母(不区分大小写 ),并统计出其出现的次数。 例如,形参 s所指的字符串为: abcAbsmaxless,程序执行后的输出结果为: lettera;: 3 times letters: 3 times 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #include void fu

2、n(char *s) int k26=0,n,i,max=0; char ch; while(*s) if(isalpha(*s) /*found*/ ch=tolower(【 1】 ); n=ch-a; /*found*/ kn+= 【 2】 ; s+; /*found*/ if(max0;j-)/*found*/ aaj=aj-1; a0=k; for(m=0; m 三、程序设计题( 40分) 3 规定输入的字符串只包含字母和 *号。请编写函数 fun,它的功能是:将字符串中的前导 *号全部删除,中间和尾部的 *号不删 除。 例如,字符串中的内容为: *A*BC*DEF*G*,删除后,字符

3、串中的内容应当是: A*BC*DEF*G*。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(char *a) main() char s81; void NONO (); printf(“Enter a string:n“);gets(s); fun(s); printf(“The string after deleted:n“);puts(s); NONO(); void NONO() /* 本函数用于打开文件,输

4、入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i ; char s81 ; in = fopen(“in.dat“,“r“); out = fopen(“out.dat“,“w“); for(i = 0 ; i 10 ; i+) fscanf(in, “%s“, s); fun(s); fprintf(out, “%sn“, s) ; fclose(in); fclose(out); 国家二级( C语言)机试模拟试卷 372答案与解析 一、程序填空题( 30分) 1 【正确答案】 *s 1 kn 【试题解析】 第一空: “ch=tolower(_1_)

5、; n=ch-a;”可知统 一将字符 *s转化成小写字母,然后和字母 “a”比较,因此第一空处应为 “*s”。 第二空: “kn+=_2_;”是统计字符 “*s”出现的次数, “ch-a”得到了应存放的数组元素的下标位置 n, kn元素加 1标识该字符在上一次出现的基础上又出现了一次,故第二空处应为 “1”。 第三空: “if(maxkn) max=_3_;”如果 max比 kn还小,说明 kn代表的字符出现的次数更多,因此 max值应更新为 kn的值,故第三处应为 “kn”。 二、程序修改题( 30分) 2 【正确 答案】 void fun(int *a) aj=aj-1; 【试题解析】 (

6、 1)主函数中 a为数组名,传过去的形参应该是数组地址。因此, fun函数中的形参不能为整型,所以将 “void fun(int a)”改为 “void fun(int *a)”。 ( 2)第二个标识下 “aaj=aj-1; ”变量 aa没有定义,编译时会提示出错。根据题意, “k=aM-1;”语句是每一行的第一个值,第二个标识下的循环过程中的逻辑关系应该是前一个值赋值给当前值的后一个值。因此第二个标识下 “aaj=aj-1;”应该改为 “aj=aj-1;”。 三、程序设计题( 40分) 3 【正确答案】 int j=0; char *p=a; while(*p=*)p+; while(*p) aj+=*p; p+; aj=0; 【试题解析】 ( 1)首先,使用一个指针 p指向串的起始位置,然后对指针 p指向的字符进行判断,并且如果是 “*”,那么跳过该字符,这样确定了由头开始的第一个非 “*”的位置。 ( 2)然后,在循环过程中将第一个非 “*”字符起始到串尾 的字符拷贝到字符串 a。 ( 3)最后,在新生成的字符串尾加 0。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1