1、国家二级 C语言机试(操作题)模拟试卷 475及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 统计形参 s所指的字符串中数字字符出现的次数,并存放在形参 t所指的变量中,最后在主函数中输出。 例如,若形参 s所指的字符串为 “abcdef35adgh3kjsdf7”,则输出结果为 4。 请在程序的下画线处填入正确内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*s, int*t) int i, n; n=0; /*found*/ for
2、(i=0; 【 1】 !=0; i+) /*found*/ if(si =0&si 【 2】 ) n+; /*found*/ 【 3】 ; main() char s80=“abcdef35adih3kjsdf7“; int t; printf(“nThe original string is: sn“, s); fun(s, &t); printf(“nThe result is: dn“, t); 二、程序修改题 2 下列给定程序中函数 fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。 例如,变量 a中的值原为 8, b中的值原为 3,程序运行后 a中的值为
3、3, b中的值为 8。 请改正程序中的错误,使它得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #inclucle stdio h int fun(int*x, int y) int t; /*found*/ t=x; x=y; /*found*/ return(y)= void main() int a=3, b=8; system(“CLS“); printf(“ d dn“, a, b); b=fun(&a, b); printf(“ d dn“, a, b); 三
4、、程序设计题 3 编写函数 fun,其功能是:求出 1 1000之间能被 7或 1 1整除,但不能同时被7和 1 1整除的所有整数,并将其放在 a所指的数组中,通过 n返回这些数的个数。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stcllib h #include conio h #include stdio h void fun(int*a, int*n) void main() int aa1 0 00, n, k; system(“CLS“); fun(aa, &n); f
5、or(k=0; k n; k+) if(k+1) 1 0=0) (printf(“ 5 d“, aak); printf(“n“); /*一行写 9个数 */ else pr2ntf(“ 5 d“, aak); 国家二级 C语言机试(操作题)模拟试卷 475答案与解析 一、程序填空题 1 【正确答案】 (1)si (2)9 (3)*t=n 【试题解析】 本题考查: for循环语句; if语句条件表达式;指针变量。 填空 1:通过 for循环语句来判断是否到字符型结尾,变量 i用来存放字符型数组下标,则应填入 s i。 填空 2:题目要求判断数字字符,所以此处应填入 9。 填空 3:将数字字符个
6、数存入变量 t中,此处需注意变量 t是指针变量。 if语句 的条件表达式一般会考查三方面的内容: (1)条件判断,即 与 =、 与 =、 =与! =的区别,需要仔细分析题干的意思,确定条件表达式的内容。 (2)逻辑判断,即 &(逻辑与)与 |(逻辑或)的区别,需要根据题干确定 if条件中若干个条件表达式的并存关系。 (3)=(赋值号)与 =(等于号)的区别,注意在 if条件中不会出现 =(赋值号)。 二、程序修改题 2 【正确答案】 (1)t=*x; *x=y; (2)return(t);或 retum t; 【试题解析】 本题考查:指针型变量的使用;通 过 return语句完成函数值的返回。
7、 首先,定义变量 t作为中间变量,然后进行数据交换,注意参数 x是指针变量,交换时应使用 *x,最后确定返回值;根据代码 b= fun(8a, b),可以知道返回值将赋给变量 b,而 b中应存放交换前 *x中的值,所以函数应返回变量 t。 三、程序设计题 3 【正确答案】 void fun (int*a,int *n) int i,j =0; for( i=1; 1 =1000; 1+) /*求 1到 1000之内能被 7或 11整除但不能同时被 7和 11整除的所有整 数,并放入数组 a中 */ if( (1 7一 =0 |i 11 =0) &1 77!=0) aj+=i; *n=j; /*
8、传回满足条件的数的个数 */ 【试题解析】 本题考查: if语句,用来判断能被 7整除或者能被 11整除,但又不能同时被 7和 11整除的数,此处需充分理解 “逻辑与 ”和 “逻辑或 ”的区别; for循环语句的循环条件用来控制循环变量取值范围。 该题需要运用循环判断结构来实现,其中循环语句比较容易,只要确定循环变量的范围即可,下面来看判断语句。题目要求找出能被 7或 11整除,但不能同时被7和 11整除的所有整 数,能同时被 7和 11整除的整数一定能被 77整除,且不能被 77整除的数不一定就是能被 7或 11整除的数,因而,可得出程序中的 if语句。注意 (j 7 =01 11 11 =0)两边必须要有小括号。