1、国家二级 C语言机试(操作题)模拟试卷 604及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:把形参 s所指字符串中最右边的 n个字符复制到形参 t所指字符数组中,形成一个新串。若 s所指字符串的长度小于 n,则将整个字符串复制到形参 t所指字符数组中。 例如,形参 s所指的字符串为: abed吨 h, n的值为 5,程序执行后 t所指字符数组中的字符串应为: defgh。 请在程序的下画线处填入正 确的内容并把下画线删除,使程序得出正确的结果。 注意:部
2、分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #define N80 void fun(char*s, int n, char*t) int len, i, j=0; len=strlen(s); *found* if(n =len)strcpy(【 1】 ); else *found* for(i=len-n; i =len-1; i+) tj+=【 2】 ; *found* tj=【 3】 ; main() char sN, tN; int n; printf(“Enter
3、a string: “); gets(s); printf(“Enter n: “); scanf(“ d“, &n); fun(s, n, t); printf(“The string t: “); puts(t); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中, fun函数的功能是:删除 b所指数组中小于 10的数据。主函数中输出删除后数组中余下的数据。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题
4、程序: #include stdio h #include stdlib h #define N20 int fun(int*b) *found* int tN, i, num for(i=0; i N; i+) if(bi =10) *found* t+num=bi; *found* for(i=0; i num; i+) bi=ti; return(FtUm); main() int aN, i, num; printf(“a数组中的数据: n“); for(1=0; 1 N; 1+) ai=rand() 21; printf(“ 4“, ai); printf(“ n“); num=fu
5、n(a); for(i=0; i num; i+) print(“ 4d“, ai); printf(“ n“); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,已知学生的记录由学号和学习成绩构成, N名学生的数据已存入 a结构体数组中。请编写函数 fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数 (规定只有一个最低分 )。已给出函数的首部,请完成该函数。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填
6、入你编写的若干语句。 试题程序: #include stdio h #include string h #include conio h #include stdlib h #define N10 typedef struct ss char num10; int s; STU; fun(STU a, STU*s) void main() FILE*wf; STU aN=“A01“, 81, “A02“, 89), “A03“, 66), “A04“, 87), “A05“,77, “A06“, 90, “”A07“, 79, “A08“, 61, “A09“, 80, “A10“, 71,m
7、; int i; system(“CLS“); printf(“*The original data* n“); for(i=0; i N; i+) printf(“No= s Mark= d n“, a i num, ai s); fun(a, &m); printf(“*THE RESULT* n“); printf(“The lowest: s, d n“, m num, m s); *found* wf=fopen(“out dat“, “w“); fprintf(wf, “ s, d“, m num, m s); fclose(wf); *found* 国家二级 C语言机试(操作题)
8、模拟试卷 604答案与解析 一、程序填空题 1 【正确答案】 (1)t, s (2)si (3)0或 0 【试题解析】 填空 1:当给定的长度 n大于该字符串 s的长度,那么把该字符串直接拷贝到 t就可以了,所以应填 t, s。 填空 2:使用 for循环语句,把最右边 n个字符依次添加到 t中,所以应填 si。 填空 3:字符串操作结束,需要给 t加一个字符串结束符,所以应填 0或 0。 二、程序修改题 2 【正确答案】 (1)int tN, i, num=0; (2)tnum+=bi;或 tnum=bi; num+; (3)for(i=0; i num; i+) 【试题解析】 要删除数组
9、b中小于 10的数,应依次取出数组数组 b中的元素与10进行比较,若不小于 10,则将其存入数组 t中,遍历完成后,数组 t中的元素即为所求,再将数组 t中的元素保存到数 组 b中即可。 (1)元素 num存放不小于 10的元素的个数,应将其初始化为 0。 (2)将数组 b中不小于 10的元素存入数组 t中,同时使数组 t的下标加 1。 (3)语法错误,没有 nun这个变量,应该为 num。 三、程序设计题 3 【正确答案】 fun(STU a, STU*s) int i; *s=a0;木先认为第 1个值最小 * for(i=0; i N; i+) *如果在循环的过程中再发现比第 1个值更小的则赋给 *s* if(s- s ai s) *s=ai; 【试题解析】 找出 结构体数组元素中的最小值。先认为第 1个值最小,即*s=a0;,如果在循环的过程中发现比第 1个值更小的,就将指针 s指向该元素,直到找到最小元素。