1、国家二级 C语言机试(操作题)模拟试卷 407及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),写到文件 myfile4txt 中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includ
2、estringh3 #includestdlibh4 void WriteText(FILE *);5 void ReadText(FTLE *);6 main()7 FILE *fp;8 if(fp=fopen(myfile4txt,w)=NULL)9 printf(open fail!n);exit(0);10 WriteText(fp);11 fclose(fp);12 if(fp=fopen(myfile4txt,r)=NULL)13 printf(open fail!n);exit(0);14 ReadText(fp);15 fclose(fp);16 17 *found*18 vo
3、id WriteText(FTLE _1_ )19 char str81;20 printf(nEnter string with-1 to end:n);21 gets(sir);22 while(strcmp(str,-1)!=0)23 *found*24 fputs(_2_,fw);fputs(n,fw);25 gets(str);26 27 28 void ReadText(FILE *fr)29 char str81;30 printf(nRead file and output to screen:n);31 fgets(str,81,fr);32 while(!feof(fr)3
4、3 *found*34 printf(s,_3_);35 fgets(str,81,fr);36 37 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:将 tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。 例如,若输入Ab,cD,则输出AB,CD。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestringh3 char* fun(char tt)4 5 int i;6 for(i=0;tti;i
5、+)7 *found*8 if(a=tti)(tti=z)9 *found*10 tti+=32;11 return(tt);12 13 main()14 15 char tt8 1;16 printf(nPlease enter a string:);17 gets(tt);18 printf(nThe result string is:ns,fun(tt);19 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源
6、程序在文件 PROG1C 文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 #define N 163 typedef struct4 char num10;5 int s;6 STREC;7 void fun(STREC a)8 9 10 main()11 STREC sN=GA005,85,GA003,76,GA002,69,GA004,85,GA001”,91,GA007,72,GA008,64,GA006,87,GA015,85,GA013,91,GA012,64,GA014,91,GA011,
7、66,GA017,64,GA018,64,GA016,72;12 int i;FILE *out;13 fun(s);14 print;f(The data after sorted:n);15 for(i=0; iN;i+)16 if(i)4=0)printf(n);17 printf(s4d,sinum,sis);18 19 printf(n);20 out=fopen(outdat,w);21 for(i=0;iN;i+)22 if(i)4=0 i) fprintf(out,n);23 fprintf(out,4d,sis);24 fprintf(out,n);25 fclose(out
8、);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 407答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序的功能是:从键盘输入若干行文本(每行不超过 80个字符),写到文件 myfile4txt 中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdi
9、oh2 #includestringh3 #includestdlibh4 void WriteText(FILE *);5 void ReadText(FTLE *);6 main()7 FILE *fp;8 if(fp=fopen(myfile4txt,w)=NULL)9 printf(open fail!n);exit(0);10 WriteText(fp);11 fclose(fp);12 if(fp=fopen(myfile4txt,r)=NULL)13 printf(open fail!n);exit(0);14 ReadText(fp);15 fclose(fp);16 17 *
10、found*18 void WriteText(FTLE _1_ )19 char str81;20 printf(nEnter string with-1 to end:n);21 gets(sir);22 while(strcmp(str,-1)!=0)23 *found*24 fputs(_2_,fw);fputs(n,fw);25 gets(str);26 27 28 void ReadText(FILE *fr)29 char str81;30 printf(nRead file and output to screen:n);31 fgets(str,81,fr);32 while
11、(!feof(fr)33 *found*34 printf(s,_3_);35 fgets(str,81,fr);36 37 (分数:2.00)_正确答案:(正确答案:(1)*fw (2)str (3)str)解析:解析:第一空:此处是补充函数参数名,参数类型已知是 FILE文件指针,“fputs(n,fw)”是将字符“n”写入文件,可知 fw是文件指针名,因此第一空处应该是“void Write Text(FILE *fw)”。 第二空:“while(strcmp(str,”-1”)!=0)”循环的结束标志是 str字符串等于“-1”时循环退出,如果 str不等于“-1”,执行循环体内容:用
12、 fputs函数将 str字符串写入文件。fputs 函数的调用形式是:“fputs(s,fp)”,其中 s是指向字符串的指针或字符串数组名,fp 是指向将要被写入的文件的文件指针,因此第二处应该是“fputs(str,fw)”。 第三空:“while(!feof(fr)”循环的作用是不断读取文件直到到达文件尾,每次最多读 81个,将读到的数据放在 str字符串里,并用 printf输出到屏幕,因此第三处应该是“printf(s,str)”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:将 tt所指字符串中的小写字母都改为对应的大写字母,其他字
13、符不变。 例如,若输入Ab,cD,则输出AB,CD。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestringh3 char* fun(char tt)4 5 int i;6 for(i=0;tti;i+)7 *found*8 if(a=tti)(tti=z)9 *found*10 tti+=32;11 return(tt);12 13 main()14 15 char tt8 1;16 printf(nPlease enter a string:);17 gets(tt);
14、18 printf(nThe result string is:ns,fun(tt);19 (分数:2.00)_正确答案:(正确答案:(1)if(a=tti) iN;i+)16 if(i)4=0)printf(n);17 printf(s4d,sinum,sis);18 19 printf(n);20 out=fopen(outdat,w);21 for(i=0;iN;i+)22 if(i)4=0 i) fprintf(out,n);23 fprintf(out,4d,sis);24 fprintf(out,n);25 fclose(out);(分数:2.00)_正确答案:(正确答案:1 STREC tmp; 2 int i,j; 3 for(i=0 ; iN; i+) 4 for(j=i+1; jN; j+) 5 if(aisajs) 6 tmp=ai; 7 ai=aj; 8 aj=tmp;)解析:解析:(1)在 fun函数中,通过循环对成绩记录进行排序。(2)首次查找到最大的记录,第二次循环查找第二大的记录,依次实现对成绩记录的排序。