1、国家二级 C语言机试(操作题)模拟试卷 233及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:找出形参 s所指字符串中出现频率最高的字母(不区分大小写 ),并统计出其出现的次数。 例如,形参 s所指的字符串为: abcAbsmaxless,程序执行后的输出结果为: lettera: 3times letters: 3times 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不 得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio.h 2 #include string h
2、 3 #include ctype h 4 void fun(char*s) 5 int k26=0), n, i, max=0; char ch; 6 while(*s) 7 if(isalpha(*s) 8 *found* 9 ch=tolower(【 1】 ); 10 n=ch-a; 11 *found* 12 kn+=【 2】 ; 13 14 s +; 15 *found* 16 if(max【 3】 ; 17 18 printf( nAfter count: n); 19 for(i=0; i 2 6; i+) 20 if(ki=max) 21 printf( nletter c :
3、 d times n, i+a, ki); 22 23 main() 24 char s81; 25 printf( nEnter a string: n n); 26 gets(s); 27 fun(s); 28 二、程序修改题 2 下列给定程序中函数 Creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋 0到 m-1的值。 请改正函数 Creatlink中指定部位的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include
4、stdlib h 3 typedef struct aa 4 int data; 5 struct aa*next; 6 NODE; 7 NODE*Creatlink(int n, int m) 8 NODE*h=NULL, *p, *s; 9 int i; 10 *found* 11 p=(NODE)malloc(sizeof(NODE); 12 h=p; 13 p-next=NULL; 14 for(i=1 ; idata=rand() m; 17 s-next=p-next; 18 p-next=s; p=p-next; 19 20 *found* 21 return p; 22 23
5、outlink(NODE*h) 24 NODE*p; 25 p=h-next; 26 printf( n nTHE LIST: n n HEAD); 27 while(p) 28 printf(- d, p-data); 29 p=p-next; 30 31 printf( n); 32 33 main() 34 NODE *head; 35 head=Creatlink(8, 22); 36 outlink(head); 37 三、程序设计题 3 编写函数 fun,其功能是:将两个两位数的正整数 a、 b合并成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放在 c数的个位和百位
6、上, b数的十位和个位数依次放在 c数的十位和千位上。 例如,当 a=45, b=12时,调用该函数后 e=2514。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内 容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序 : 1 #include conio h 2 #include stdio h 3 void fun(int a, int b, long*c) 4 5 6 7 main() 8 9 int a, b; 10 long c; 11 printf(Input a, b: ); 12 scanf( d d, a, b); 13 fun(a, b
7、, c); 14 printf(The result is: 1d n, c); 15 国家二级 C语言机试(操作题)模拟试卷 233答案与解析 一、程序填空题 1 【正确答案】 (1)*s (2)1 (3)kn 【试题解析】 本题统计字符串中各字母的个数,建立了一个包括 26个整型变量的数组,用来存储每个字母的个数。 填空 1: isalpha函数的作用是判断当前字符是否为字母, tolower函数的作用是将当前字母转换为小写字母,所以应填 *s。 填空 2:把该字母出现的个数累加到指定的 数组中,所以应填 1。 填空 3: max用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数
8、大于最大次数 max,那么把该次数赋值给 max,所以应填 kn。 二、程序修改题 2 【正确答案】 (1)p=(NODE * )malloc(sizeof(NODE); (2)return h; 【试题解析】 (1)由变量定义可知 p为指向结点的指针。指向刚分配的结构指针,所以应改为 p=(NODE*)malloc(sizeof(NODE)。 (2)在动态分配内存的下一行语句是,使用临时结构指 针变量 h保存 p指针的初始位置,最后返回不能使用 p,是因为 p的位置已经发生了变化,所以应改为 return h。 三、程序设计题 3 【正确答案】 1 void fun(int a, int b, long*c) 2 3 *b 10获取 b的个位, a 10获取 a的十位, a 10获取 a的个位, b 10获取 b的十位 * 4 *c=a 10+(b 10)*10+(a 10)*100+(b 10)*1000; 5 【试题解析】 本题的主要问题是如何取出 a和 b的个位数和十位数,取出后 如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除 10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1,就可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。