1、国家二级( C语言)机试模拟试卷 388及答案与解析 一、程序填空题( 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(max #include #define N 5 #define M 81 /*found*/ fun(char (*sq)N) int i; char *sp; sp=sq0; for(i=0;iN;i+) if(strlen(sp)strlen(sqi) sp=sqi ; /*found*/ return sq
3、; main() char strNM, *longest; int i; printf(“Enter %d lines :n“,N); for(i=0; iN; i+) gets(stri); printf(“nThe N string :n“,N); for(i=0; iN; i+) puts(stri); longest=fun(str); printf(“nThe longest string :n“); puts(longest); 三、程序设计题( 40分) 3 请编写一个函数 fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组
4、元素中的值已在主函数中赋予。 主函数中 x是数组名, n是 x中的数据个数, max存放最大值, index存放最大值所在元素的下标。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdlib.h #include stdio.h void fun(int a, int n, int *max, int *d) main() int i, x20, max, index, n=10; randomize(); for(i=0; i =n; i+) xi=rand()%50; prin
5、tf(“%4d“,xi); /*输出一个随机数组 */ printf(“n“); fun(x,n, printf(“Max=%5d, Index=%4dn“, max,index); 国家二级( C语言)机试模拟试卷 388答案与解析 一、程序填空题( 30分) 1 【正确答案】 *s 1 kn 【试题解析】 第一空: “ch=tolower(_1_); n=ch-a;”可知统一将字符 *s转化成小写字母,然后和字母 “a”比较,因此第一空处应为 “*s”。 第二空: “kn+=_2_;”是统计字符 “*s”出现的次数, “ch-a”得到了应存放的数组元素的下标位置 n, kn元素加 1标识该
6、字符在上一次出现的基础上又出现了一次,故第二空处应为 “1”。 第三空: “if(maxkn) max=_3_;”如果 max比 kn还小,说明 kn代表的字符出现的次数更多,因此 max值应更新为 kn的值,故第三处应为 “kn”。 二、程序修改题( 30分) 2 【正确答案】 char *fun(char (*sq)M) return sp; 【试 题解析】 ( 1)第一个错误标识下 fun函数的定义根据题目要求,返回最长的字符串,原题的 “fun(char (*sq)N)”的定义没有指定返回值,所以 “fun(char (*sq)N)”应该改为 “char *fun(char (*sq)
7、M)”,指定返回值为字符串。 ( 2) fun函数中定义 sp指针首先指向第一个串,用来存放最长的那个串,然后在循环中 sp指向的串与 sq指向的其他串长度进行比较,如果 sp指向的串长度小于sq指向的串,则 sq的值替换 sp指向的串,这样保证 sp指向的还是最大的串,所以返回最 长的串应将 “return sq;”改为 “return sp;”。 三、程序设计题( 40分) 3 【正确答案】 void fun(int a, int n, int *max, int *d) int i; *max=a0; *d=0; for(i=0; i n; i+) /*将最大的元素放入指针 max所指的单元,最大元素的下标放入指针 d所指的单元 */ if(*max ai) *max=ai; *d=i; 【试题解析】 该程序直接使用形参 max和 d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即 *号运算。