1、国家二级 C语言机试(操作题)模拟试卷 543及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 把形参 s所指字符串中最右边的 n个字符复制到形参 t所指字符数组中,形成一个新串。若 s所指字符串的长度小于 n,则将整个字符串复制到形参 t所指字符数组中。 例如,形参 s所指的字符串为: abedefgh, n的值为 5,程序执行后 t所指字符数组中的字符串应为: defgh。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdi
2、o h #include string h #define N 80 void fun(char*s, int n, char, *t) int fen, 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 a string: “); gets(s); printf(“Enter n: “); scanf(“ d“
3、, &n); fun(s, n, t); printf(“The string t: “), puts(t); 二、程序修改题 2 下列给 定程序中,函数 fun的功能是:找出一个大于给定整数 m且紧随 m的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 NODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h int fun(int m) int i, k; for(i=m+1; i+) for(k=2;
4、k i; k+) *found* if(i k!=0) break; *found* if(k i) return(i); void main() int n; system(“CLS“); printf(“ nplease enter n: “); scanf(“ d“, &n); printf(“ d n“, fun(n); 三、程序设计题 3 请编写函数 void fun(int x, int pp, int * n),它的功能是:求出能整除 x且不是偶数的各整数,并按从小到大的顺序放在 pp所指的数组中,这些除数的个数通过形参 n返回。 例如,若 x中的值为 30,则有 4个数符合要求
5、,它们是 1、 3、 5、 15。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include stdlib h void fun(int x, int pp, int * n) void main() FILE * wf; int x, aa1000, n, i; system(“CLS“); printf(“ nPlease enter aninteger number: n“); scanf(“ d“, &x)
6、; fun(x, aa, &n); for(i=0; i n; i+) printf(“ d“, aai); printf(“ n“); *found* wf=fopen(“out dat“, “w“); fun(30, aa, &n); for(i=0; i n; i+) fprintf(wf, “ d“, aai); fclose(wf); *found* 国家二级 C语言机试(操作题)模拟试卷 543答案与解析 一、程序填空题 1 【正确答案】 (1)t, s (2)si (3)0或 0 【试题解析】 填空 1:当给定的长度 n大于该字符 串 s的长度,那么把该字符串直接拷贝到 t就可以
7、了,所以应填 t, s。 填空 2:使用 for循环语句,把最右边 n个字符依次添加到 t中,所以应填 si。 填空 3:字符串操作结束,需要给 t加一个字符串结束符,所以应填 0或 0。 二、程序修改题 2 【正确答案】 (1)if(i k=0) (2)if(k=i) 【试题解析】 (1)判断当前数是否为素数,若存在一个数 (除 l和其自身 )能整除当前数,则跳出本次循环,所以 if条件应为 i k=0。 (2)如果 i是素数,则循环结束时 k=i,将该值返回。 三 、程序设计题 3 【正确答案】 void fun(int x, int pp, int*n) int i, j=0; for(i=1; i =x; i: i+2) *i 的初始值为 1,步长为 2,确保 i为奇 数 * if(x i=0) *将能整除 x的数存入数组 pp中 * ppj+=i; *n=j; *传回满足条件的数的个数 * 【试题解析】 本题考查:偶数的判定方法;整除的实现。 本题题干信息是:能整除 x且不是偶数的所有整数。循环语句中变量 i从 1开始且每次增 2,所以 i始终是奇数。 整除的方 法,已经讲过多次,这里就不再赘述了。对于本题目要求的不是偶数的判定方法,即该数对 2求余不为 0。除本题描述的方法外,还可以通过 for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。