1、国家二级 C语言机试(操作题)模拟试卷 412及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestdlibh3 void
2、fun(char *s,int a,double f)4 5 *found*6 _1_ fp;7 char str100,str1100,str2100;8 int a1;double f1;9 fp=fopen(fileltxt,w);10 fprintf(fp,sdfn,s,a,f);11 *found*12 _2_;13 fp=fopen(file1txt,r);14 *found*15 fscanf(_3_,sss, str,str1,str2);16 fclose(fp);17 a1=atoi(str1);18 f1=atof(str2);19 printf(nThe result:
3、nnsdfn,str,a1, f1);20 21 main()22 char a10=Hello!;int b=12345;23 double c=9876;24 fun(a,b,c);25 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:求出 s所指字符串中最后一次出现的 t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串:若未找到,则函数值为 NULL。 例如,当字符串中的内容为abcdabfabcdx“,t 中的内容为“ab”时,输出结果应是“abcdx”。 当字符串中的内容为“abcdabfabc
4、dx”,t 中的内容为“abd”时,则程序输出未找到信息“notbe found!”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestringh3 char *fun(char*s,char*t)4 5 char *p, *r, *a;6 *found*7 a=Null;8 while(*s)9 p=s;r=t;10 while(*r)11 *found*12 if(r=p)13 r+;p+;)14 else break;15 if(*r=0)a=s;16 s+;17 18
5、 return a;19 20 main()21 22 char s100,t100,*p;23 printf(nPlease enter string s:);scanf(s,s);24 printf(nPlease enter substringt:);scanf(s,t);25 p=fun(s,t);26 if (p)printf(nThe result is:sin,p);27 else printf(nNot found!n);28 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 (分数:2.00)_
6、国家二级 C语言机试(操作题)模拟试卷 412答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestdlibh3 void f
7、un(char *s,int a,double f)4 5 *found*6 _1_ fp;7 char str100,str1100,str2100;8 int a1;double f1;9 fp=fopen(fileltxt,w);10 fprintf(fp,sdfn,s,a,f);11 *found*12 _2_;13 fp=fopen(file1txt,r);14 *found*15 fscanf(_3_,sss, str,str1,str2);16 fclose(fp);17 a1=atoi(str1);18 f1=atof(str2);19 printf(nThe result:n
8、nsdfn,str,a1, f1);20 21 main()22 char a10=Hello!;int b=12345;23 double c=9876;24 fun(a,b,c);25 (分数:2.00)_正确答案:(正确答案:(1)FILE* (2)fclose(fp) (3)fp)解析:解析:第一空:“fp=fopen(fileltxt,w);”可知 fp是文件型指针,故第一空处 fp的定义应为“FILE*”。 第二空:第二处的后面一句是“fp=fopen(fileltxt“,r);”再次打开fileltxt,因此在第二次打开 fileltxt 之前必须将文件关闭,故第二处是关闭文件,
9、即“fclose(fp)”。第三空:fscanf 的调用形式是:fscanf(fp,格式字符串,输入列表),因此第三空处应为“fp”,从文件中读出字符串、整数、浮点数。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:求出 s所指字符串中最后一次出现的 t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串:若未找到,则函数值为 NULL。 例如,当字符串中的内容为abcdabfabcdx“,t 中的内容为“ab”时,输出结果应是“abcdx”。 当字符串中的内容为“abcdabfabcdx”,t 中的内容为“abd”时,则程序输
10、出未找到信息“notbe found!”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestringh3 char *fun(char*s,char*t)4 5 char *p, *r, *a;6 *found*7 a=Null;8 while(*s)9 p=s;r=t;10 while(*r)11 *found*12 if(r=p)13 r+;p+;)14 else break;15 if(*r=0)a=s;16 s+;17 18 return a;19 20 main()
11、21 22 char s100,t100,*p;23 printf(nPlease enter string s:);scanf(s,s);24 printf(nPlease enter substringt:);scanf(s,t);25 p=fun(s,t);26 if (p)printf(nThe result is:sin,p);27 else printf(nNot found!n);28 (分数:2.00)_正确答案:(正确答案:(1)a=NULL; (2)if(*r=*p)解析:解析:函数功能是求得字符串中某子串最后一次出现的地址。(1)第一个标识下面:语句“a=Null;”中的
12、 Null未定义。NULL 代表空值,但程序中写成了 Null。所以,改成“a=NULL;”。(2)程序的主体是二重循环,其中外循环使指针 s逐个指向字符串的字符,直到遇到串结束符退出循环,内循环检查指针 p与 r所指字符串是否匹配。因为这里 p、r 是指针,如果使用判断表达式“if(r=p)”,那么比较的是地址,而题目要求比较它们所指的字符。所以,改为:“if(*r=*p)”。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 (分数:2.00)_正确答案:(正确答案:1 double s=10,y=x ; 2 int i; 3 long k=1; 4 for(i = 1 ; i =n ; i+) 5 k=k*i; 6 s += y k ; 7 y *=x ; 8 9 return s ;)解析:解析:(1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘以 x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第 n项是 n。 (2)在循环中求得每一项,然后对其进行累加求和。