1、二级 C语言分类模拟题 242及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:统计形参 s所指字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。例如,形参 s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #includestdio.h void fun(char*s, int*t) int i
2、, n; n=0; /*found*/ for(i=0; _ !=0; i+) /*found*/ if(si=“0“ /*found*/ _; main() char s80=“abcdef35adgh3kjsdf7“; int t; printf(“/nThe original string is: %s/n“, s); fun(s, printf(“/nThe result is: %d/n“, t); (分数:30.00)_二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如
3、变量 a中的值原为 8,b 中的值原为 3,程序运行后 a中的值为 3,b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #includestdio.h int fun(int*x, int y) int t; /*found*/ t=x; x=y; /*found*/ return(y); main() int a=3, b=8; printf(“%d %d/n“, a, b); b=fun( printf(“%d %d/n“, a, b); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00
4、)3.请编写函数 fun,它的功能是:求出 1到 1000之间能被 7或 11整除、但不能同时被 7和 11整除的所有整数并将它们放在 a所指的数组中,通过 n返回这些数的个数。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includestdio.h void fun(int*a, int*n) main() int aa1000, n, k; void NONO(); fun(aa, for (k=0; kn; k+) if(k+1)%10=0)printf (“/n“); else pri
5、ntf(“%5d“, aak); NONO(); VOid NONO() /*本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*/ int aa1000, n, k; FILE*fp; fp=fopen(“out.dat“, “w“); fun(aa, for(k=0; kn; k+) if(k+1)%10=0)fprintf(fp, “/n“); else fprintf(fp, “%5d“, aak); fclose(fp); (分数:40.00)_二级 C语言分类模拟题 242答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:3
6、0.00)1.给定程序中,函数 fun的功能是:统计形参 s所指字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。例如,形参 s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #includestdio.h void fun(char*s, int*t) int i, n; n=0; /*found*/ for(i=0; _ !=0; i+) /*found*/ if(si=“0“
7、/*found*/ _; main() char s80=“abcdef35adgh3kjsdf7“; int t; printf(“/nThe original string is: %s/n“, s); fun(s, printf(“/nThe result is: %d/n“, t); (分数:30.00)_正确答案:()解析:(1)si (2)“9“ (3)*t=n 答案考生文件夹 解析 搜索整个字符串,判断 si=“0“且 si=“9“,满足该条件后,计数变量加1,因此 第一空:循环终止条件是达到了字符串的尾部,字符串以“/0”(或 NULL)结束,故第一空处应为 si。 第二空:数
8、字字符的判断是 si=“0“且 si=“9“,故第二空处应为“9“”。 第三空:这里是将数字字符出现的次数存放在形参 t里,n 记录了数字字符的个数,而形参 t是指针变量,故第三处应为“*t=n”。 考点 字符数组和字符串、for 循环结构。二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a中的值原为 8,b 中的值原为 3,程序运行后 a中的值为 3,b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程
9、序的结构! #includestdio.h int fun(int*x, int y) int t; /*found*/ t=x; x=y; /*found*/ return(y); main() int a=3, b=8; printf(“%d %d/n“, a, b); b=fun( printf(“%d %d/n“, a, b); (分数:30.00)_正确答案:()解析:(1)t=*x; *x=y; (2)return(t); 答案考生文件夹 解析 (1)根据 fun中 x变量的定义,x 为指针型变量,所以第一个错误标识下的“t=x; x=y; ”改为“t=*x; *x=y; ”。 (
10、2)交换之后 t中存放原来 x的值,x 存放原来 y的值,这里应该是返回原来 x的值,所以第二个标识下的“return(y); ”应该改为“return(t); ”或者“return t; ”。 考点 指针作为函数的参数、函数的定义以及调用。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,它的功能是:求出 1到 1000之间能被 7或 11整除、但不能同时被 7和 11整除的所有整数并将它们放在 a所指的数组中,通过 n返回这些数的个数。 注意:部分源程序在文件 PROG1.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干
11、语句。 #includestdio.h void fun(int*a, int*n) main() int aa1000, n, k; void NONO(); fun(aa, for (k=0; kn; k+) if(k+1)%10=0)printf (“/n“); else printf(“%5d“, aak); NONO(); VOid NONO() /*本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*/ int aa1000, n, k; FILE*fp; fp=fopen(“out.dat“, “w“); fun(aa, for(k=0; kn; k+) i
12、f(k+1)%10=0)fprintf(fp, “/n“); else fprintf(fp, “%5d“, aak); fclose(fp); (分数:40.00)_正确答案:()解析:int i; *n=0; for(i=7; i1000; i+) if(i%7)=0|(i%11)=0) 答案考生文件夹 解析 进入 fun函数,判断是否被 7整除判断是否被 11整除并且不被 77整除按要求返回计算结果, 首先,*n 置 0,设置为累计器,计算符合条件的数的个数。 然后,通过循环,判断小于 1000的每一个整数是否符合题干中的要求。其中的判断条件能否被 7或者被11整除为 i%7=0|i%11=0,不能被 11和 7同时整除为 i%77!=0,它们之间的并关系就用&连接,最后结果即为(i%7=0|i%11=0)&i%77!=0。 最后,将符合条件的整数存入数组 a中,同时对*n 进行白加,返回结果。 考点 for 循环结构、if 语句及其构成的选择。