1、国家二级 C语言机试(操作题)模拟试卷 330及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includestdlibh void fun(char*s
2、,int a,double f) *found* 【1】 fp; char str100,str1100, sir2100; int a1;double f1; fp=fopen(“file1txt“,“w“);fprintf(fp,“sdfn“,s,a,f); *found* 【2】 ; fp=fopen(“fileltxt“,“r“); *found* fscanf( 【3】 ,“sss“,str,str1,str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf(“nThe result:nnsdfn“,str,a1,f1); mai
3、n() char a10=“Hello!“; int b=12345; double c=9876; fun(a,b,c); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中函数 fun的功能是:逐个比较 P、q 所指两个字符串对应位置上的字符,并把 ASCII值大或相等的字符依次存放到 e所指的数组中,形成一个新的字符串。例如,若主函数中 a字符串为“aBCDeFgH”,b 字符串为“ABed”,则 c中的字符串应为“aBcdeFgH”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#
4、includestdioh#includestringhvoid fun(char*p,char*q,char*c)*found* int k=1 ;*found* while(*p!=*q) if(*p*q)ck=*q; else ck=*P; if(*P)P+; if(*q)q+; k+; main() char a10=“aBCDeFgH“,b10=“ABcd“,c80=0; fun(a,b,c); printf(“The string a:“);puts(a); printf(“The string b:“);puts(b); printf(“The result:“);puts(c)
5、;(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:求出 11000 之间能被 7或 11整除,但不能同时被 7和 11整除的所有整数,并将其放在 a所指的数组中,通过 n返回这些数的个数。注意:部分源程序给出如下:,请勿改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdlibh#includeconioh#includestdiohvoid fun(int=a,int*n)void main() int aa1000,n,k; system(“CLS“); fun(aa,n)
6、; for(k=0;kn;k+) if(k+1)10=0) printf(“5 d“,aak); printf(“n“);)*一行写 9个数* else printf(“5d“,aak);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 330答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下画线处填入正确的内容并把下
7、画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includestdlibh void fun(char*s,int a,double f) *found* 【1】 fp; char str100,str1100, sir2100; int a1;double f1; fp=fopen(“file1txt“,“w“);fprintf(fp,“sdfn“,s,a,f); *found* 【2】 ; fp=fopen(“fileltxt“,“r“); *found* fscanf( 【3】 ,“sss
8、“,str,str1,str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf(“nThe result:nnsdfn“,str,a1,f1); main() char a10=“Hello!“; int b=12345; double c=9876; fun(a,b,c); (分数:2.00)_正确答案:(正确答案:(1)FILE* (2)flzlose(fp) (3)fp)解析:解析:填空 1:从使用 fp=fopen(“fileltxt“,“w“)可知 fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2:当对 fp作打开
9、操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对 fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对 fp进行关闭,本空填fclose(fp)。 填空 3:fscanf()是把文本文件输出,因此本空只能填写 fp。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中函数 fun的功能是:逐个比较 P、q 所指两个字符串对应位置上的字符,并把 ASCII值大或相等的字符依次存放到 e所指的数组中,形成一个新的字符串。例如,若主函数中 a字符串为“aBCDeFgH”,b 字符串为“ABed”,则 c中的字符串应为“aBcdeFgH”。请改正程序中的错误,使它
10、能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdioh#includestringhvoid fun(char*p,char*q,char*c)*found* int k=1 ;*found* while(*p!=*q) if(*p*q)ck=*q; else ck=*P; if(*P)P+; if(*q)q+; k+; main() char a10=“aBCDeFgH“,b10=“ABcd“,c80=0; fun(a,b,c); printf(“The string a:“);puts(a); printf(“The s
11、tring b:“);puts(b); printf(“The result:“);puts(c);(分数:2.00)_正确答案:(正确答案:(1)int k=0; (2)while(*p*q)解析:解析:(1)变量 k存放数组 c的下标,因此应初始化为 0。 (2)while 循环语句的循环条件是判断两个字符串是否到达结尾。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:求出 11000 之间能被 7或 11整除,但不能同时被 7和 11整除的所有整数,并将其放在 a所指的数组中,通过 n返回这些数的个数。注意:部分源程序给出如下:,请勿改动主函数main和其他函
12、数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdlibh#includeconioh#includestdiohvoid fun(int=a,int*n)void main() int aa1000,n,k; system(“CLS“); fun(aa,n); for(k=0;kn;k+) if(k+1)10=0) printf(“5 d“,aak); printf(“n“);)*一行写 9个数* else printf(“5d“,aak);(分数:2.00)_正确答案:(正确答案:void fun(int*a,int*n) int i,j=0;
13、 for(i=1;i=1000;i+) *求 1到 1000之内能被 7或 11整除但不能同时被 7和 11整除的所有整数,并放入数组 a中* if(i7=0i11=0)i77!=0) aj+=i; *n=j; *传回满足条件的数的个数* )解析:解析:本题考查:if 语句,用来判断能被 7整除或者能被 11整除,但又不能同时被 7和 11整除的数,此处需充分理解“逻辑与”和“逻辑或”的区别;for 循环语句的循环条件用来控制循环变量取值范围。 该题需要运用循环判断结构来实现,其中循环语句比较容易,只要确定循环变量的范围即可,下面来看判断语句。题目要求找出能被 7或 11整除,但不能同时被 7和 11整除的所有整数,能同时被 7和 11整除的整数一定能被 77整除,且不能被 77整除的数不一定就是能被 7或 11整除的数,因而,可得出程序中的 if语句。注意(i7=0i11=0)两边必须要有小括号。