1、国家二级 C语言机试(操作题)模拟试卷 670及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行 或删行,也不得更改程序的结构 ! 试题程序: #include stdio h
2、 #include stdlib h void fun(char*s, int a, double f) *found* 【 1】 fp; char str100, str1100, str2100; int a1; double f1; fp=fopen(“file1 txt“, “w“); fprintf(fp, “ s d f n“, s, a, f); *found* 【 2】 ; fp=fopen(“file1 txt“, “r“); *found* fscanf(【 3】 , “ s s s“, str, str1, str2); fclose(fp); a1=atoi(Strl)
3、; f1=atof(str2); printf(“ nThe result: n n s d f n“, str, a1, f1); main() char a10=“Hello!“; int b=12345; double c=98 76; fun(a, b, c); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 mMi1 c。在此程序中,函数 fun的功能是:从 P所指字符串中找出 ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。 例如,调用 fun函数之前给字符串输入 “ABCDe
4、FGH”,调用后字符串中的内容应为“eABCDFGH”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增 行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*p) char max, *q; int i=0; max=pi; while(pi!=0) if(max pi) max=pi; *found* q=p+i i+; *found* while(q p) *q=*(q-1); q-; p0: max; void main() char str80; printf(“Enter a string:
5、“); gets(str); printf(“ nThe original string: “); puts(str); fun(str); printf(“ nThe string after moving: “); puts(str); printf(“ n n“); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,规定输入的字符串中只包含字母和,一 c号。编写函数 fun,其功能是:除了字符串前导和尾部的 *号外,将串中其他的木号全部删除。形参 h已指向字符串中第一个字母,形参 p指向字符
6、串中最后一个字母。在编写函数时,不得使用 c语言提供的字符串函数。 例如,若字符串中的内容为 “*A*BC*DEF*G*”,删除后,字符串中的内容应当是 “*ABCDEFG*”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include conio h #include string h void fun(char*a, char*h, char*p) main() char s81, *t, *f; printf(“Enter a string: n“); ge
7、ts(s); t=f=s; while(*t) t+; t-; while(*t=*) t-; while(*f=*) f+; fun(s, f, t); printf(“The string after deleted: n“); puts(s); 国家二级 C语言机试(操作题)模拟试卷 670答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析】 填空 1:从使用 fp=fopen(“filel txt“, “w“)可知 fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2:当对 fp作打开操 作的时候,并进行不同的
8、操作前,应该对其关闭,因为在第一次打开时是对 fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对 fp进行关闭,本空填 fclose(fp)。 填空 3: fscanf()是把文本文件输出,因此本空只能填写 fp。 二、程序修改题 2 【正确答案】 (1)q=p+i; (2)while(q p) 【试题解析】 解答本题需要三个步骤,首先找到字符串中 ASCII码值最大的字符并保存;然后将该字符复制,并将该字符前面的字符串顺次后移;最后将ASCII码值最大的字符赋给字符串的第一 个字符。要找到 ASCII码值最大的字符可以通过定义一个字符变量一,该字符变量初始时等于字符串的第一个字符,
9、若字符串的下一个字符大于 max,则将下一个字符赋给 max,如此循环到字符尾,即可得到 ASCII码值最大的字符,同时令指针 q指向最大字符。此后对最大字符前面的子串顺次后移,可采用 while语句实现。 三、程序设计题 3 【正确答案】 void fun(char*a, char*h, char*p) int i=0; char*q=a; *将前导 *号保存到 a中 * while(q h) ai=*q; q+; i+; *继续遍历数组 * while(q p) if(*q!=*) *如果不是 *保存到 a中 * ai=*q; i+; q+; *将末尾 *号保存到 a中 * while(*q) ai=*q; i+; q+; ai= 0; 【试题解析】 本题的重点是要选择好判断条件,首先是需要判断前导 *号的结束,然后判断是否指向最后一个字母,最后补充尾部 *号,只要思路对了即可正确解答。