1、国家二级 C+机试(操作题)模拟试卷 157及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include void fun(char*s, 2nt a, double f) *found* 【 1】 p; char sir100
2、, str1100, sir2100; int a1; double f1; fp=fopen(“filel txt“, “w“); fprintf(fp, “ s d f n“, s, a, f); *found* 【 2】; fp=fopen(“filel txt“, “r“); *found* fscanf(【 3】, “ s s s“, sir, str1, str2); fclose(fp); al=atoi(strl); f1=atof(str2); printf(“ nThe result: n n s d f n“, str, al, f1); main() char a10=
3、“Hello!“; int b=12345; double c=98 76; fun(a, b, c); 二、简 单应用题 2 下列给定函数中,函数 fun的功能是:统计字符串中各元音字母 (即 A、 E、 I、O、 U)的个数。注意:字母不分大小写。 例如,输入 ”THIs is a boot”,则应输出是 1 0 2 2 0。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODIl C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #include *found* fun(char*s, int
4、num5) (int k, i=5; for(k=0; k=0) rlLlmi+; void main() char s181; int hum15, i; system(“CLS“); printf (“ nplease enter a string: “); gets(s1); fun(s1, num1); for(i=0; i #define N 80 int fun(char * sir) main() char sN; FILE*out; char*test=“1234321“, “123421“, “123321“, “abcdCBA“; int i; printf(“Enter
5、a string: “); gets(s); prLntf(“ n n“); puts(s); if(fun(s) printf(“YES n“); else printf(“NO n“); * out=fopen(“out dat“, “w“); for(i=0; i4; i+) if(fun(testi) fprintf(out, “YES n“); else fprintf(out, “NO n“); fclose(out); * 国家二级 C+机试(操作题)模拟试卷 157答案与解析 一、基本操作题 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析
6、】 填空 1:从使用 fp=fopen(“filel txt“, “w“)可知 fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2:当对 fp作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对 fp进行写操 作,而在第二次打开后进行的是读操作,因此应该先对 fp进行关闭,本空填 fclose(fp)。 填空 3: fscanf()是把文本文件输出,因此本空只能填写 fp。 二、简单应用题 2 【正确答案】 (1)void fun(char*s, int num5) (2)numk=0; (3)switch(*s) 【试题解析】 switch语句说明如下:
7、(1)switch后的表达式,可以是整型或字符型,也可以是枚举类型。在新的ANSIC标准中允许表达式的类型为任何类型。 (2)每个 case后的常量表达式只能是由常量组成的表达式,当 switch后表达式的值与某一个常量表达式的值一致时,程序就转到此 case后的语句开始执行。如果没有一个常量表达式的值与 switch后的值一致,就执行 default后的语句。 (3)各个 case后的常量表达式的值必须互不相同。 (4)各个 case的次序不影响执行结果,一般情况下,尽量将出现概率大的 case放在前面。 (5)在执行完一个 case后面的语句后,程序会转到下一个 case后的语句开始执行,
8、因而必须使用 break语句 才能跳出。 三、综合应用题 3 【正确答案】 int fun(char*str) int i, n=0, fg=1; char*p=str; while(*p) *将指针 p置位到字符串末尾,并统计字符数 * n+; p+; for(i=0; in 2; i+) *循环比较字符 * if(stri=strn一 1一 i); *相同,什么都不作 * else *不同,直接跳出循环 * fg=0; break; return fg; 【试题解析】 判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。