1、国家二级( C语言)机试模拟试卷 379及答案与解析 一、程序填空题( 30分) 1 请补充函数 fun(),该函数的功能是:把字符下标为非素数的字符从字符串 sb中删除,把字符下标为素数的字符重新保存在字符串 e口中。字符串 sb从键盘输入,其长度作为参数传入函数 fun()。 例如,输入 “abcdefghijkl”,输出 “cdfhl”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 80 void fun(char s,int n) i
2、nt i, j, k, flag; 【 】 ; for(i=0; i n; i+) if (i 1) s k+ =s i; flag=I; for(【 】 ; j i j+) if (i%j=0) flag=0; 【 】 s k=0; main() int i=0, strlen=0; char strN; clrscr (); printf(“n Input a string:n“); gets (str); while (str i !=0) strlen+; i+; fun (str, strlen); printf(“n* display string *n“); puts (str)
3、; 二、程序修改题( 30分) 2 给定程序 MODllC中函数 fun的功能是:输出 M行 M列整数方阵,然后求两条对角线上各元素之和,返回此和数。 #inClude coMo.h #inClude stdio.h #dehne M 5 /*fOUnd*/ int fun(int n, int xx) int i,j, sum=0; printf(“n The%dx%d matrix: n“M, M); for(i=0; i M; i+) for(j=0;j M;j+) /*found*/ printf(“%f“, xxij); printf(“n“); for(i=0; i n; i+)
4、sum+=xxii+XXin-i-1; return(sum); main( ) int aaMM=1,2,3,4,5), 4,3,2,1,0), 6,7,8,9,0, 9,8,7,6,5,3,4,5,6,7; clrscr( ); printf(“n The sum Of all elements On 2 diagnals is %d.“fun(M,aa); 三、程序设计题( 40分) 3 请编写函数 fun,它的功能是:计算并输出 13(包括 n)以内能被 5或 9整除的所有自然数的倒数之和。 例如,在主函数中从键盘给 n输入 20后,输出为: s=0 583333。 注意:要求 n的值
5、不大于 100。 部分源程序在文件 PROGI C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include double fun(int n) NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int n, i; double s; rf=fopen(“in dat“, “r“), wf=fopen(“out dat“, “w“); for(i=0; i10; i+) fscanf(rf, “ d“, &n); s=fun(n); fprintf(wf, “
6、 lf n“, s); fclose(rf); fclose(wf); main() int n; double s; printf(“ nInput n: “), scanf(“ d“, &n); s=fLln(n); printf(“ n ns= f n“, s); NONO(); 国家二级( C语言)机试模拟试卷 379答案与解析 一、程序填空题( 30分) 1 【正确答案】 k=0 j=2 k- 【试题解析】 第一空:变量 k声明时没有初始化,所以要在使用前初始化为 0。第二空:如果一个数能被除了 1和其自身之外的数整除,即余数为 0,则这个数不是素数。所以除数 j从 2开始取数。第三
7、空:如果当前字符的下标为非素数,则应将此字符删除,所以变量 k减 1,使下一个字符覆盖它,达到删除的目的。 二、程序修改题( 30分) 2 【正确答案】 int fun(int n,int xx) 改为 int fun(int n,int xxM) printf(“%f, xxij); 改为 printf(“%d, “xxij); 【试题解析】 二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是 %d. 三、程序设计题( 40分) 3 【正确答案】 int 1; double sum=0 0; for(i=1; i=n; i+) if(i 5=0 | i 9=0) *被 5或 9整 除 * sum+=1 0 i; return sum; 【试题解析】 (1)首先,通过循环,判断小于等于 n的每一个整数是否符合题干中的要求。其中的判断条件能否被 5或者被 9整除为 i 5=0|i 9=0。 (2)然后求得符合 (1)要求的数的倒数的累加和。