1、国家二级 C语言机试(操作题)模拟试卷 715及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:找出 100 999之间 (含 100和 999)所有整数中各位上数字之和为 x(x为一正整数 )的整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 X值为 5时, 100 999之间各位上数字之和为 5的整数有: 104、113、 122、 131、 140、 203、 212、 221、 230、 302、 3ll、 320、 401、 410、 500。共有 15个。当 x值为 27时,各位数字之和为 27的整数是: 999。 只有 1个。 请在程序的下划线处填入
2、正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 int fun(int x) 3 int n, s1, s2, s3, t; 4 n=0; 5 t=100; 6 *found* 7 while(t =_1_) 8 *found* 9 s1=t%10; s2=(_2_) 10; s3=t 100; 10 *found* 11 if(s1+s2+s3=_3_) 12 printf( d, t); 13 n+; 14 15 t+; 16 17 return n
3、; 18 19 main() 20 int x=-1; 21 while(x 0) 22 printf(Please input(x 0): ); scanf( d, 18 printf(The result is: %1d n, t); 19 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 S中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序在文件 PROG1 C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编 写的若干语句。 1 #include stdio h
4、 2 #define N 16 3 typedef struct 4 char num10; 5 int s; 6 STREC; 7 void fun(STREC a) 8 9 10 main() 11 STREC sN=GA005, 85, GA003, 76, GA002, 69,GA004, 85, GA001, 91, GA007, 72, GA008, 64, GA006,87, -GA015, 85, GA013, 91, GA012, 64, GA014, 91,GA011, 66, ”GA017”, 64, GA018”, 64, GA016, 72; 12 int i; FI
5、LE *out; 13 fun(s); 14 printf(The data after sorted: n); 15 for(i=0; i N; i+) 16 if(i) 4=0)printf( n); 17 printf( s 4d, si num, si s); 18 19 printf( n); 20 out=fopen(out dat, w); 21 for(i=0; i N; i+) 22if(i) 4=0 i)fprintf(out, n); 23 fprintf(out, 4d, si s); 24 fprintf(out, n); 25 fclose(out); 国家二级 C
6、语言机试(操作题)模拟试卷 715答案与解析 一、程序填空题 1 【正确答案】 (1)999 (2)t 10 (3)x 【试题解析】 在 100 999之间 (含 100和 999)所有整数中,取 x的个位、十位和百位,可由 x 10, x 10再对 10求余、 x 100分别得到。第一空:是补充 while循环的终止条件,题干要求 fun寻找 100 999之间满足条件的数 x,因此,循环终止条件是 999,故第一空处应填 “999”。第二空: “s1=t 10; s2(_2_) 10;s3=t 100; ”可知 s1求得 t的个位数, s3求得 t的百位数,因此, s2是求 t的十位数。
7、(t 10)变量 t变成两位数,再次对 10取余便得到 t的十位数,因此第二空处应为 “t 10”。第三空: “if(s1+s2+s3=_3_)”是判断 t是否满足题干条件:各位上数字之和为 x,故第三空处应为 “x”。 二、程序修改题 2 【正确答案】 (1)void fun(long s, long *t) (2)while(s 0) 【试题解析】 函数目的是取出长整型变量 s中偶数位上的数。 (1)第一个标识下的形参 t被定义为一个 long型变量,而对应的主函数中的实参却是一个地址值。因此, t在函数定义中应该被定义为一个指针变量,即 “void fun(long s, long t)
8、”改为“void fun(longs, long*t)”。 (2)第二个标识下的 while循环控制表达式 “s 0”要求 s小于 0才进入循 环。而 s的值总是大于 0,故将 “while(s 0)”改为 “while(s 0)”。 三、程序设计题 3 【正确答案】 1 STREC tmp; 2 int i, j; 3 for(i=0; i N; i+) 4 for(j=i+1; j N; j+) 5 if(ai s aj s) 6 tmp-ai; 7 ai=aj; 8 aj=tmp; 【试题解析】 (1)在 fun函数中,通过循环对成绩记录进行排序。 (2)首次查找到最大的记录,第二次循环查找第二大的记录, 依次实现对成绩记录的排序。