1、国家二级 C语言机试(操作题)模拟试卷 654及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将自然数 110及其平方根写到名为 myfile3 txt的文本文件中,然后再顺序读出显示在屏幕上。 请在程序下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include math h #include stdio h int fun(char*fname) FIL
2、E*fp; int i, n; float x; if(fp=fopen(fname, “w“) =NULL) return0; for(i=1; i =10; i+) *found* fprintf(【 1】 , “ d f n“, i, sqrt(double)i); printf(“ nSucceed! n“); *found* 【 2】 ; printf(“ nThe data in file: n“); *found* if(fp=fopen(【 3】 , “r“)= NULL) return0; fscanf(fp, “ d f“, &n, &x); while(!feof(fP)
3、 printf(“ d f n“, n, x); fscanf(fp, “ d f“, &n, &x); fclose(fp); reLurn1; main() char fname=“myfile3 txt“; fun(fname); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:将 m(1m10)个字符串连接起来,组成一个新串,放入 pt所指存储区中。例如:把三个串 “abe”、“CD”、 “EF”连接起来,结果是 “abcCDEF”。 请改正程序中的错误,使它能得出
4、正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h void fun(char str10, int m, char*pt) *found* Tnt k, q, i; for(k=0; k m; k+) q=strlen($trk); for(i=0; i q; i+) *found* pti=strk, i; pt+=q; pt0=0; main() int m, h; char s1010, p120; printf(“Please enter m: “); scanf(“
5、d“, &m); gets(s0); printf(“Please enter d string: “, m); for(h=0; h m; h+) gets(sh); fun(s, m, p); printf(“The result is: s“, p); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,定义了 NN的二维数组 ,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a数组中的值为: 0 1 2 7 9 1 9
6、7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1 则返回主程序后 s的值应为 3 375。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio h #include conio h #include stdlib h #define N5 double fun(int wN) void main() FILE*wf; int aNN=0, 1, 2, 7, 9, 1, 9, 7, 4, 5, 2, 3, 8, 3, 1, 4, 5, 6, 8
7、, 2,5, 9, 1, 4, 1; int i, j; doubie s; system(“CLS“); printf(“*The array* n“); for(i=0; i N; i+) for(j=0; j N; j+) print: f(“ 4d“, aij); ) print: f(“ n“); s=fun(a); printf(“*THE RESULT* n“); printf(“The sum is: lf n“, s); *found* wf=fopen(“out dat“, “w“); fprintf(wf, “ lf“, s); fclose(wf); *found* 国
8、家二级 C语言机试(操作题)模拟试卷 654答案 与解析 一、程序填空题 1 【正确答案】 (1)fp (2)fclose(fp) (3)fname 【试题解析】 填空 1: fprintf函数的形式是: fprintf(文件指针,格式字符串,输出表列 );,所以填入文件指针 fp。 填空 2:文件一旦使用完毕,应使用关闭函数 fclose将文件关闭,以避免发生文件数据丢失等错误。 填空 3: fopen函数用来打开一个文件,其一般形式为:文件指针名: fopen(文件名,使用文件方式 );因此应填入文件名 fname。 二、程序修改题 2 【正确答案】 (1)int k, q, i; (2)
9、pti=strki; 【试题解析】 (1)关键字书写错误,定义整型变量的关键字应使用 int,而非 Int。 (2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别括起来,即 strk, i应改为: strki。 三、程序设计题 3 【正确答案】 double fun(int wN) int i, j, k=0; double sum=0 0; for(i=0; i N; i+) for(j=0; j N; j+) if(i=0|i=N-1|j=0| j=N-1) *只要下标中有一个为 0或 N-1,则它一定是周边元素 * sum=sum+wij; * 将周边元素求和 * k+; return sum k; *求周边元素的平均值 * 【试题解析】 本题要求计算二维数组周边元素的平均值, for循环语句控制循环过程, if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0或 N-1,所以只要下标中有一个为 0或 N-1,那么它一定是周边元素。 计算周边元素个数的方式是当给 sum累加一个值时, k也加 1。