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