1、国家二级 C语言机试(操作题)模拟试卷 246及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返同,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 47、 30、 32、 40、 6、 17、 45、 15、 48、 26,其平均值为30 500000。 移动后的输出为: 30、 6、 17、 15、 26、 47、 32、 40、 45、 48。 请在程序的下画线处填入正确的内容并把下画线删
2、除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdlib h 2 #include stdio h 3 #define N 10 4 double fun(double*x) 5 int i, j; double av, yN; 6 av=0; 7 for(i=0; i N; i+) 8 *found* 9 av+=【 1】 ; 10 for(i=j=0; i N; i+) 11 if(xi av) 12 yj=xi; x i=-1; 13 *found* 14 【 2】 ; 15 16
3、i=0; 17 while(i N) 18 if(xi!=-1) yj+=xi; 19 *found* 20 【 3】 ; 21 22 for(i=0; i N; i+)xi=yi; 23 return av; 24 25 main() 26 int i; double xN; 27 for(i=0; i N; i+) 28 xi=rand() 50; 29 printf( 4 0 f, xi); 30 printf( n); 31 printf( nThe average is: f n, fun(x); 32 printf( nThe result: n, fun(x); 33 for(i
4、=0 ; i N; i+) 34 printf( 5 0 f, xi); 35 printf( n); 36 二、程序修改题 2 下列给定程序中函数 fun的功能是:在字符串的最前端加入 n个 *号,形成新串,并且覆盖原串。 字符串的长度最长允许为 79。 请改正程序中的错误,使它能得出正确的结果。 注意 :部分源程序在文件 NODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include string h 3 void fun(char s, int n) 4 5 char a80, *p; 6 int
5、 i; 7 * found* 8 s=p; 9 for(i=0; in ; i+)ai=*; 10 do 11 ai=*p; 12 i+; 13 14 *found* 15 while(*p+) 16 ai=0 ; 17 strcpy(s, a); 18 19 main() 20 int n; char s80; 21 printf( nEnter a string: ); 22 gets(s); 23 printf( nThe string s n, s); 24 printf( Enter n(number of*): ); 25 scanf( d, n); 26 fun(s, n); 2
6、7 printf( nThe string after in-sert s、 、 n, s); 28 三、程序设计题 3 请编函数 fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用 strlen函数求字符串的长度。例如:在键盘输入字符串 2345210,函数返回长整型数 2345210。 注意:部分源 程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序: 1 #include stdio h 2 #include string h 3 void NONO(); 4 long fun(cha
7、r*s) 5 6 7 8 main() 9 char s10; long r; 10 printf(请输入一个长度不超过 9个字符的数字字符串: ); 11 gets(s); 12 r=fun(s); 13 printf(r= ld n, r); 14 NONO(); 15 16 void NONO() 17 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 18 FILE * fp, *wf; 19 int i ; long r; 20 char s10, *p; 21 fp=fopen(in dat, r); 22 wf=fopen(out dat, w); 23 for
8、(i=0; i10 ; i+) 24 fgets(s, 10, fp); 25 p=strchr(s, n); 26 if(p)*p=0; 27 r=fun(s); 28 fprintf(wf, 1d n, r); 29 30 fclose(fp); 31 fclose(wf); 32 国家二级 C语言机试(操作题)模拟试卷 246答案与解析 一、程序填空题 1 【正确答案】 (1)xi N (2)j+或 +j (3)i+或 +i 【试题 解析】 填空 1: av代表平均值,本题考查了怎样求平均值,因此本空应该填写 xi N。 填空 2:通过 for循环和 if判断找到 xi中比平均值小的数,
9、并把这些值赋值给yj,因此本空应该填写 j+或者 +j。 填空 3:通过 while循环语句,把 xi中比平均值大的数放在数组 y的后半部分,因此本空应该填写 i+或者 +i。 二、程序修改题 2 【正确答案】 (1)p=s; (2)while(*p+); 【试题解析】 (1)指针 p应指向 s,所以应改为 p=s;。 (2)循环等待,当 while循环 执行一次,临时变量 p应该指向字符串的下一位置,所以应改为 while(*p+);。 三、程序设计题 3 【正确答案】 1 long fun(char*s) 2 3 int i, len; 4 long sum=0; 5 len=strlen(s); 6 for(i=0 ; ilen; i+) 7 8 sum=sum * 10+*s-0; 9 s+; 10 11 return sum; 12 【试题解析】 要把一个数字字符转为相应的数字 ,只要用它的 ASCII码减去 48即可。要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘 10再加上下一位数字。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1