1、二级 C 语言-207 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序的功能是:从键盘输入若干行字符串(每行不超过 80 个字符),写入文件 myfile4.txt 中,用-1 作字符串输入结束的标志,然后将文件的内容显示在屏幕上。文件的读写分别由函数 ReadText 和WriteText 实现。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #includ
2、estdlib.h void 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!/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 EeadText(FILE *fr) char str81; ptintf(“/nRead file and output to screen: /n“); fgets(str,81,fr); while(!feof(fr) /*found*/ printf(“%s“, 3); fgets(str,
4、81,fr); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:从低位开始依次取出长整型变量 s 中奇数位上的数,构成一个新数存放在 t 中。高位仍在高位,低位仍在低位。 例如,当 s 中的数为 7654321 时,t 中的数为 7531。 请改正程序中的错误,使它能得出正确的结果。 注意 :不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h /*found*/ void fun(long s,long t) long s1=10; *t=s%10; while(s0) s=
5、s/100; *t=s%10,s1+*t; /*found*/ s1=s1*100; main() long s,t; printf(“/nPlease enter s:“); scanf(“%1d“, fun(s, printf(“The result is:%1d/n“,t); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.学生记录由学号和成绩组成,N 名学生的数据已放入主函数中的结构体数组中,请编写函数 fun,其功能是:把分数最低的学生数据放入 b 所指的数组中。注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。 注意 :部分源程序给出如下。 请勿改
6、动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdio.h #define N 16 typedef struct char num10; int s; STREC; int fun(STREC *a,STREC *b) main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,59,“GA04“,85, “GA01“,91,“GA07“,72,“GA08“,64,“GA06“,87, “GA015“,85,“GA013“,91,“GA012“,64,“GA014“,91, “GA011
7、“,91,“GA017“,64,“GA018“,64,“GA016“,72; STREC hN; int i, n; FILE *out; int i,n; n=fun(s,h); printf(“The %d lowest score:/n“,n); for(i=0;in;i+) printf(“%s %4d/n“,hi.num,hi.s); printf(“/n“); out=fopen(“out,dat“,“w“); fprintf out, “%drn“,n); forli=0;i(n;i+) fprintf(out,“%40|n“,hi,s); fclose(out); (分数:40
8、.00)_二级 C 语言-207 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序的功能是:从键盘输入若干行字符串(每行不超过 80 个字符),写入文件 myfile4.txt 中,用-1 作字符串输入结束的标志,然后将文件的内容显示在屏幕上。文件的读写分别由函数 ReadText 和WriteText 实现。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意 :部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #in
9、cludestdlib.h void 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!/n“); exit(0); ReadText(fp); fclose(fp); /*found*/ void WriteText(FILE
10、 1) 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 EeadText(FILE *fr) char str81; ptintf(“/nRead file and output to screen: /n“); fgets(str,81,fr); while(!feof(fr) /*found*/ printf(“%s“, 3); fgets(
11、str,81,fr); (分数:30.00)解析:*fw str str 解析 填空 1:定义函数,函数的形参是一个文件类型的指针。 填空 2:此处考查 fputs 函数的形式,应填入 str。 填空 3:依据 printf 函数的格式,输出字符串内容,即 printf(“%s“,str);。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:从低位开始依次取出长整型变量 s 中奇数位上的数,构成一个新数存放在 t 中。高位仍在高位,低位仍在低位。 例如,当 s 中的数为 7654321 时,t 中的数为 7531。 请改正程序中的错误,使它能得出正确的结
12、果。 注意 :不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h /*found*/ void fun(long s,long t) long s1=10; *t=s%10; while(s0) s=s/100; *t=s%10,s1+*t; /*found*/ s1=s1*100; main() long s,t; printf(“/nPlease enter s:“); scanf(“%1d“, fun(s, printf(“The result is:%1d/n“,t); (分数:30.00)解析:void fun(long s,
13、long *t) s1=s1*10; 解析 (1)主函数中调用函数的参数为地址,因此函数fun 的形式参数应为指针类型。 (2)重新组合一个数,从个位开始,然后十位,依次类推,因此每增加一位数,原数值需乘以 10,即s1s1*10;。三、程序设计题(总题数:1,分数:40.00)3.学生记录由学号和成绩组成,N 名学生的数据已放入主函数中的结构体数组中,请编写函数 fun,其功能是:把分数最低的学生数据放入 b 所指的数组中。注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。 注意 :部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号
14、中填入你编写的若干语句。 试题程序: #includestdio.h #define N 16 typedef struct char num10; int s; STREC; int fun(STREC *a,STREC *b) main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,59,“GA04“,85, “GA01“,91,“GA07“,72,“GA08“,64,“GA06“,87, “GA015“,85,“GA013“,91,“GA012“,64,“GA014“,91, “GA011“,91,“GA017“,64,“GA018“,64,“GA016“,
15、72; STREC hN; int i, n; FILE *out; int i,n; n=fun(s,h); printf(“The %d lowest score:/n“,n); for(i=0;in;i+) printf(“%s %4d/n“,hi.num,hi.s); printf(“/n“); out=fopen(“out,dat“,“w“); fprintf out, “%drn“,n); forli=0;i(n;i+) fprintf(out,“%40|n“,hi,s); fclose(out); (分数:40.00)_正确答案:()解析:int fun(STREC *a, STREC *b) int i,j=0,min=a0.s; for(i=0;iN;i+) if(minai.s) min=ai.s; /*找出最小值*/ for(i=0;iN;i+) if(min=ai.s) bj+=ai; /*找出成绩与 min 相等的学生的记录,存入结构体 b 中*/ return j; 解析 本题中第一个循环语句的作用是遍历数组求出最低分数,第二个循环语句的作用是将数组中的元素与最低分比较,查找是否存在与最低分相等的成绩。