1、国家二级 C语言机试(操作题)模拟试卷 625及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将形参 n所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针 n传回所指变量。 例如,若输入一个数 27638496,则新数为 739。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行 或删行,也不得更改程序的结构 ! 试题程序: #include stdio
2、 h void fun(unsigned long*n) unsigned long x=0, i; int t; i=1; while(*n) *found* t=*n 【 1】 ; *found* if(t 2!=【 2】 ) x=x+t*i; i=i*10; *n=*n 10; *found* *n=【 3】 ; main() unsigned long n=-1; while(n 99999999|n 0) printf(“Please input(0 n 100000000): “); scanf(“ ld“, &n); fun(&n); printf(“ nThe result i
3、s: ldkn“, n); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是 :删除指针 p所指字符串中的所有空白字符 (包括制表符、回车符及换行符 )。 输入字符串时用 “#”结束输入。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也 不得更改程序的结构 ! 试题程序: #include string h #include stdio h #include ctype h fun(char*p) int i, t; char】
4、c80; *found* For(i=0, t=0; pi; i+) if(!isspace(*(p+i) ct+=pi; *found* ct=“ 0“; strcpy(p, c); void main() char c, s80; int i=0; printf(“Input a string: “); c=getchar(); while(c!=#) si=c; i+; c=getchar(); si= 0; fun(s); puts(s); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中
5、,编写函数 fun,其功能是:将两个两位数的正整数 a、 b合并成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放在 c数的十位和千位上, b数的十位和个位数依次放在 c数的百位和个位上。 例如,当 a=45, b=12时,调用该函数后, c=5142。 注意:部分源程序给出如下。数据文件 IN DAT中的数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中 填入编写的若干语句。 试题程序: #include stdlib h #include stdio h #include conio h void fun(int a, int b, l
6、ong*c) void main() int a, b; long c; system(“CLS“); printf(“Input a, b: “); scanf(“ d d“, &a, &b); fun(a, b, &c); printf(“The result is: id n“, c); 国家二级 C语言机试(操 作题)模拟试卷 625答案与解析 一、程序填空题 1 【正确答案】 (1)10 (2)0 (3)x 【试题解析】 填空 1:通过 t对 10求余,取出该数值的各个位。 填空 2:通过 if条件语句实现奇偶数的判定。如果条件表达式对 2求余为 0即为偶数,反之则为奇数。 填空 3
7、:最后将剩余的数赋给 n所指向的元素。 二、程序修改题 2 【正确答案】 (1)for(i=0, t=0; pi; i+) (2)ct= 0; 【试题解析】 该题目考查 C语言关键字的书写, C语言中关键字是区分大小写的。另外为 字符串结尾添加结束符时应书写为 0,而非 “ 0”, “ 0”表示一个字符串。该程序的 if条件中应用了 isspace函数,该函数的功能是检查 ch是否为空格、跳格符 (制表符 )或换行符。 三、程序设计题 3 【正确答案】 void fun(int a, int b, long*c) *b 10获取 b的个位, a 10获取 a的十位, a 10获取 a的个位, b 10获取 b的十位 * *c=b 10+(a 10)*10+(b 10)*100+(a 10)*1000; 【试题解析】 本题主要的问题是如何取 出 a和 b的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 b都是只有两位的整数,所以分别对它们除 10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1即可得到 c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。