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