1、国家二级 C语言机试(操作题)模拟试卷 230及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读人并显示在终端屏幕上。 请存程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 void fun(char*s, int a, double f) 3 4 *found* 5 【 1】 fp; 6 char ch ; 7 fp=fopen(file1 txt, w)
2、; 8 fprintf(fp, s d f n, s, a, f); 9 fclose(fp); 10 fp=fopen(file1 txt, r); 11 printf( nThe result: n n); 12 ch=fgetc(fp)j 13 *found* 14 while(!feof(【 2】 ) 15 *found* 16 putchar(【 3】 ); ch=fgetc(fp); 17 putchar( n); 18 fclose(fp); 19 20 main() 21 char ai0=Hello!; 22 int b=12345; 23 double c=98 76; 2
3、7 fun(a, b, c); 25 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将十进制正整数 m转换成 k(2k9)进制数,并按位输出。例如,若输入 8和 2,则应输出 1000(即十进制数 8转换成二进制表示是 1000)。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include conio h 3 *found* 4 void fun (int m, int k); 5 int aa20, i; 6 for
4、(i=0; m; i+) 7 8 *found* 9 aai=m k; 10 m =k; 11 12: for(; i; i-) 13 *found* 14 printf( d, aai); 15 16 main() 17 18 int b, n; 19 printf( nPlease enter a num- ber and a base: n); 20 scanf( d d, n, b); 21 fun(n, b); 22 printf( n); 23 三、程序设计题 3 请编写甬数 void fun(int x, int pp, int*n),它的功能是:求出能整除 x且不是偶数的各整数
5、,并按从小到大的顺序放在 pp所指的数组中,这些除数的个数通过形参 n返同。 例如,若 x中的值为 30,则有 4个数符合要求,它们是 1、 3、 5、 15。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include conio h 2 #include stdio h 3 #include stdlib h 4 void fun(int x, int pp, int*n) 5 6 7 8 void main() 9 10 FILE * wf: 11 int x, aa100
6、0, n, i ; 12 system(CLS); 13 printf( nPlease enter an integer number: n); 14 scanf( d, x); 15 fun(x, aa, n); 16 for(i=0; in; i+) 17 printf( d, aai); 18 printf( n); 19 *found* 20 wf=fopen(out dat, w); 21 fun(30, aa, n); 22 for(i=0; in; i+) 23 fprintf(wf, d, aai); 24 fclose(wf); 25 *found* 26 国家二级 C语言
7、机试(操作题)模拟试卷 230答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fp (3)ch 【试题解析】 填空 1:由语句 fopen(filel txt, r)可知, fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2: feof函数只能对文件类型数据进行操作,因此本空应填写 fp。 填空 3: putchar()代表输入一个字符,从 ch=fgetc(fp)可以看出本题应该填写 ch。 二、程序修改题 2 【正确答案】 (1)void fun(int m, int k) (2)aai=m k; (3)printf( (1, aai-1); 【试题解析
8、】 (1)函数定义的格式错误,不应带有 ; 。 (2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数 n译出它的各位 k进制数值,需采用除 k取余的方法,即求 n除 k的余数,得到它的 k进制的个位数,接着将 n除以 k。在 n不等于 0的状况下循环,能顺序求出 n的 k进制的各个位上的数。 (3)在进行 for(i=0; m; i+)循环结束时, i已经多加了一个 1,所以这里要减去1。 三、程序设计题 3 【正确答案】 1 void fun(int x, int pp, int *n) 2 3 int i, j=0 ; 4 for(i=1; i=x; i=i+2) *i的初始值为 1,步长为 2,确保 i为奇数 * 5 if(x i=0) *将能整除 x的数存入数组 pp中 * 6 ppj+=i; 7 *n=j ; *传回满足条件的数的个数 * 8 【试题解析】 本题考查:偶数的判定方法;整除的实现。 本题题干信息是:能整除 x且不是偶数的所有整数。循环语句中变量 i从 1开始且每次增 2,所以 i始终是奇数。 整除的方法,已经讲过多次,这里就不再赘述了,对于本题目要求的不是偶数的判定方法,即该数对 2求余不为 0。除本题描述的方法外,还可以通过 for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1