1、全国计算机等级考试二级 C语言机试真题 2009年 9月及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),并写入文件 myfile4.txt中,用-1作为字符串输入结束的标志,然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。注意 部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题源程序#includestdio.h#includestring.h
2、#includestdlib.hvoid WriteText(FILE *);void ReadText(FILE *);main()FILE *fp;if(fp=fopen(“myfile4.txt“, “W“)=NULL)printf(“open fail !/n“); exit(0);WriteText(fp);fclose(fp);if(fp=fopen(“myfile4.txt“, “r“)=NULL)printf(“open fail !1/n“); exit(0);ReadText(fp);fclose(fp);/*found*/void WriteText(FILE (1) )
3、char str81;printf(“/nEnter string with -1 to end :/n“);gets(str);while(strcmp(Str, “-1“)!=0)/*found*/fputs( (2) , fw);fputs(“/n“, fw);gets(str);void ReadText(FILE *fr)char str81;printf(“/nRead file and output to screen :/n“);fgets(str, 81, fr);while( !feof(fr)/*found*/printf(“%s“, (3) );fgets(str, 8
4、1, fr);(分数:30.00)填空项 1:_二、程序修改(总题数:1,分数:30.00)2.给定程序中函数 fun的功能是:从低位开始取出长整型变量 S中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当 s中的数为 7654321时,t 中的数为 642。请改正程序中的错误,使它能得到正确结果。注意 不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题源程序#includestdio.h/*found*/void fun(long s, long t)long s1=10;s/=10;*t=s% 10;/*found*/while(s0)s=s/1
5、00;*t=s% 10*s1+*t;s1=s1 *10;msin()long s, t;printf(“/nPlease enter s:“);scanf(“%ld“, s);fun(s, t);printf(“The result is: %ld/n“, t);(分数:30.00)_三、程序设计(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出 3n 之间(含 3和 n)所有素数的平方根之和。例如,在主函数中从键盘为 n输入 100后,输出为:sum=148.874270。注意 要求 n的值大于 2但不大于 100。注意 部分源程序给出如下。请勿改动主函数 main
6、和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题源程序#includemath.h#includestdio.hdouble fun(int n)main()int n;double sum;printf(“/n/nInput n:“);scanf(“%d“, n);sum=fun(n);printf(“kn/nsum=%f/n/n“, sum);(分数:40.00)_全国计算机等级考试二级 C语言机试真题 2009年 9月答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序的功能是:从键盘输入若干行文本(每
7、行不超过 80个字符),并写入文件 myfile4.txt中,用-1作为字符串输入结束的标志,然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。注意 部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题源程序#includestdio.h#includestring.h#includestdlib.hvoid WriteText(FILE *);void ReadText(FILE *);main()FILE *fp;if(fp=fopen(“myfile4.txt“
8、, “W“)=NULL)printf(“open fail !/n“); exit(0);WriteText(fp);fclose(fp);if(fp=fopen(“myfile4.txt“, “r“)=NULL)printf(“open fail !1/n“); exit(0);ReadText(fp);fclose(fp);/*found*/void WriteText(FILE (1) )char str81;printf(“/nEnter string with -1 to end :/n“);gets(str);while(strcmp(Str, “-1“)!=0)/*found*/
9、fputs( (2) , fw);fputs(“/n“, fw);gets(str);void ReadText(FILE *fr)char str81;printf(“/nRead file and output to screen :/n“);fgets(str, 81, fr);while( !feof(fr)/*found*/printf(“%s“, (3) );fgets(str, 81, fr);(分数:30.00)填空项 1:_ (正确答案:1 fw2 str3 str)解析:解析 填空 1:在该函数中,对已有的语句 fputs(“/n“, fw);分析可知:由于文件流变量 fw
10、在函数体中没有定义过,故应填*fw 或 fw。填空 2:要把从键盘上输入的内容写入指定的文件中,键盘上输入的内容已存入字符串 str变量中,故应填写 str。填空 3:要把已存入文件中的内容从文件中读出且已存入字符串变量 str中,最后在屏幕上显示出来,故应填写 str。二、程序修改(总题数:1,分数:30.00)2.给定程序中函数 fun的功能是:从低位开始取出长整型变量 S中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当 s中的数为 7654321时,t 中的数为 642。请改正程序中的错误,使它能得到正确结果。注意 不要改动 main函数,不得增行或删行,也
11、不得更改程序的结构。试题源程序#includestdio.h/*found*/void fun(long s, long t)long s1=10;s/=10;*t=s% 10;/*found*/while(s0)s=s/100;*t=s% 10*s1+*t;s1=s1 *10;msin()long s, t;printf(“/nPlease enter s:“);scanf(“%ld“, s);fun(s, t);printf(“The result is: %ld/n“, t);(分数:30.00)_正确答案:(1)错误:voidfun(long s, longt)正确:voidfun(l
12、ong s, long *t)(2)错误:while(s0)正确:while(s0)解析:解析 错误 1:在函数体 fun中,t 是一个指针型变量,定义形参时也应定义指针。错误 2:从题目可知,此处条件应该是 s0,故这里应为:while(s0)。三、程序设计(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出 3n 之间(含 3和 n)所有素数的平方根之和。例如,在主函数中从键盘为 n输入 100后,输出为:sum=148.874270。注意 要求 n的值大于 2但不大于 100。注意 部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fu
13、n的花括号中填入所编写的若干语句。试题源程序#includemath.h#includestdio.hdouble fun(int n)main()int n;double sum;printf(“/n/nInput n:“);scanf(“%d“, n);sum=fun(n);printf(“kn/nsum=%f/n/n“, sum);(分数:40.00)_正确答案:(double fun(int n)int i, j=0;double s=0;for (i=3; i=n;i+)for(j=2; ji; j+)if(i%j=0)break;if(j=i)s=s+sqrt(i);return s;)解析:解析 计算并输出 3到 n之间(含 3和 n)所有素数的平方根之和。