1、国家二级 C语言机试(操作题)模拟试卷 433及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参 s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s所指的字符串为 abs5def126jkm8,程序执行后的输出结果为 22。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh #include stringh #
2、include ctypeh int fun(char*s) int sum=0; while(*s) /*found*/ if(isdigit(*s) sum+=*s一 【1】 ; /*found*/ 【2】 ; /*found*/ return 【3】 ; main() char s81;int n; pr2ntf(“/nEnter a string:/n/n“); gets(s); n=fun(s); printf(“/nThe result is:d/n/n“,n); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定的程序中,函数 fun的功能是:计算并输出
3、 k以内最大的 10个能被 13或 17整除的自然数之和。k 的值由主函数传人,若 k的值为 500,则函数的值为 4622。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MOD11C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include stdioh #include conioh #include atdlibh int fun(int k)int m=0,mc=0,j; while(k =2)&(mc 1 0) /*found*/ if(k13=0)|(k17=0) ra=m+k;mc+;) k 一一 j/*found*/
4、 return m;void main()system(“CLS“); printf(“ct/n“,fun(5 00);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是:求小于形参 n同时能被 3与 7整除的所有自然数之和的平方根,并作为函数值返回。 例如,若 n为 1000时,程序输出应为:s=153909064。 注意:部分源程序在文件PROG1c 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include mathh #include stdioh double fun
5、(int n)main()/*主函数*/ void NONO(); printf (“s=f/n“,fun(1000); NONO();void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE*fp, *wf; int ifn; double s; fp=fopen(“indat“,“r“); wf=fopen (“outdat“, “w“); for(i=0;i 10;i+) fscanf(fp,“d“, &n); s= fun (n); fprintf (wf,“f/n“, s); fclose(fp); fclose (wf);(分数:2.00
6、)_国家二级 C语言机试(操作题)模拟试卷 433答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参 s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s所指的字符串为 abs5def126jkm8,程序执行后的输出结果为 22。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh #include stringh
7、#include ctypeh int fun(char*s) int sum=0; while(*s) /*found*/ if(isdigit(*s) sum+=*s一 【1】 ; /*found*/ 【2】 ; /*found*/ return 【3】 ; main() char s81;int n; pr2ntf(“/nEnter a string:/n/n“); gets(s); n=fun(s); printf(“/nThe result is:d/n/n“,n); (分数:2.00)_正确答案:(正确答案:(1)48 或0 (2)s+ (3)sum)解析:解析:本题是把字符串中是
8、数字字符转换成对应的数值并进行累加。 填空 1:0字符对应的ASCII码值是 48,因此数字字符转换成对应数值时只要减去 48,即是该数字字符对应的数值,所以应填48或者0。 填空 2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填 s+。 填空 3:返回累加和 sum,所以应填 sum。二、程序修改题(总题数:1,分数:2.00)2.下列给定的程序中,函数 fun的功能是:计算并输出 k以内最大的 10个能被 13或 17整除的自然数之和。k 的值由主函数传人,若 k的值为 500,则函数的值为 4622。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MOD
9、11C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include stdioh #include conioh #include atdlibh int fun(int k)int m=0,mc=0,j; while(k =2)&(mc 1 0) /*found*/ if(k13=0)|(k17=0) ra=m+k;mc+;) k 一一 j/*found*/ return m;void main()system(“CLS“); printf(“ct/n“,fun(5 00);(分数:2.00)_正确答案:(正确答案:(2) retum m,)解析:解析:(
10、1)C 语言中,x 能被 y整除的表示方法是 xy=0,而不是题目中所表示的 xy=0。所以,if ( (k13 =0)|(k17 =0)修改后的结果应该是答案所示信息。 (2)程序中缺少程序完整所需的“,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失“的错误信息是“Compound statementmissingin function fun“。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是:求小于形参 n同时能被 3与 7整除的所有自然数之和的平方根,并作为函数值返回。 例如,若 n为 1000时,
11、程序输出应为:s=153909064。 注意:部分源程序在文件PROG1c 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include mathh #include stdioh double fun(int n)main()/*主函数*/ void NONO(); printf (“s=f/n“,fun(1000); NONO();void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/ FILE*fp, *wf; int ifn; double s; fp=fopen(“indat“,
12、“r“); wf=fopen (“outdat“, “w“); for(i=0;i 10;i+) fscanf(fp,“d“, &n); s= fun (n); fprintf (wf,“f/n“, s); fclose(fp); fclose (wf);(分数:2.00)_正确答案:(正确答案:double fun ( int n) double sum =0 0; int i; sum + =i; return sqrt (sum) ; )解析:解析:本题考查算术运算的算法,首先利用一个 for循环判断小于 n且能同时被 3和 7整除的整数,并将满足条件的整数累加到 sum,之后调用 sqrt函数计算 sum的平方根,并作为函数的返回值。