1、国家二级 C语言机试(操作题)模拟试卷 320及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。 例如,输入一个整数 27638496,函数返回值为 64862。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h unsigned long fun(unsigned long n) unsigned long x=0; int t; whil
2、e(n) t=n 10; *found* if(t 2=【 1】 ) *found* x=【 2】 +t; *found* n=【 3】 ; return x; main() unsigned long n= 1; while(n 99999999n 0) printf(“Please input(0 n 100000000): “); scanf(“ ld“, n); printf(“ nThe result is: ld n“, fun(n); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将主函数中两个变量的值进行交换。例如,若变量 a中的值为 8, b中的值为 3,则程序运
3、行后, a中的值为 3, b中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include Stdio h 2 *found* 3 void fun(int x, int y) 4 int t; 5 *found* 6 t=x; x=y; y=t; 7 8 void main() 9 int a, b; 10 a=8; 11 b=3; 12 fun( a, b); 13 printf(“ d d n“, a, b); 14 三、程序设计题 3 请编函数 fu
4、n,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用 strlen函数求字符串的长度。例如:在键盘输入字符串 2345210,函数返回长整型数 2345210。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序: #include stdio h #include string h void NONO(); long fun(char*s) main() char s10; long r; printf(“请输入一个长度不超过 9个字符的数字字符串: “); gets(s); r=f
5、un(s); printf(“r= ld n“, r); NONO(); void NONO() ( *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE* fp, *wf; int i; long r; Char s10, *p; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+) fgets(s, 10, fP); P=strchr(s, n); if(p)*p=0; r=fun(s); fprintf(wf, “ ld n“, r); fclose(fp); fclose(wf
6、); 国家二级 C语言机试(操作题)模拟试卷 320答案与解析 一、程序填空题 1 【正确答案】 (1)0 (2)10*x (3)n 10 【试题解析】 填空 1:定义变量 t用来存放某数的各个位数值,此处判断 t是否为偶数,即对 2求余结果是否为 0。 填空 2:将 t作为 x的个位数,原来 x的各个位上升 1位,即 x=10*x+t。 填空 3:每循环一次,通过除法运算,去掉数值最后一位。 二、程序修改题 2 【正确答案】 (1)void fun(int*x, int*y) (2)t=*x; *x=*y; *y=t; 【试题解析】 (1)本题考查指针变量作函数参数。一般变量作参数时,不能改
7、变实参的值,采用指针变量作 为参数则能够改变实参的值。主函数中 fun函数的调用方式表明 fun函数的参数应当为指针类型。 (2)此处是一个变量交换操作错误,可知 x、 y是指针类型,变量类型不同,因而x、 y不能与 t进行值的交换。 三、程序设计题 3 【正确答案】 long fun(char*s) int i, len ; long sum=0; len=strlen(s); for(i=0; i len; i+) sum=sum*10+*s 0; s+; return sum; 【试题解析】 要把一个数字字符转为相应的数字,只要用它的, ASCII码减去48即可。要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘 10再加上下一位数字。