1、国家二级 C语言机试(操作题)模拟试卷 203及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算出形参 S所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。 例如,形参 S所指的字符串为: This is a C language program,函数的返回值为6。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include int fun(char*s) int n=0, flag=0; while(*s!= 0
2、) if(*s!= flag=0) *found* _1_; flag=1; *found* if(*s= )flag=_2_; *found* _3_; return n; main() char str81; int n; printf(“ nEnter a line text: n“); gets(Str); n=fun(Str); printf(“ nThere are d words in thiS text n n“, n); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:应用递归算法求形参 a的平方根。求平方根的迭代公式如下: 例如, a为 2时,平方根值为
3、:1 414214。 请改正程序中的错误 ,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 #include#include*found* double fun(double a, dounle x0)double x1, y; x1=(x0+a x0) 2 0; *found* if(fabs(x1-x0)0 00001) y=fun(a, x1); else y=xl; return y; main()double x; printf(“Enter x: “);scanf(“ 1f“, x); printf(“The square root of
4、 1fis f n“, x, fun(x, 1 0); 三、程序设计题 3 请编写函数 fun,函数的功能是:判断字符串是否为回文 ?若是,函数返回 1,主函数中输出: YES:否则返回 0,主函数中输出 NO。回文是指顺读和倒读都一样的字符串。 例如,字符串 LEVEL是回文,而字符串 123312就不是回文。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #define N 80 int fun(char*str) msin() char sN; void N
5、ONO(); printf(“Enter a string: “); gets(s); printf(“ n n“); putS(S); if(fun(s)printf(“YES n“); else printf(“NO n“); NONO(); void NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int i; char sN; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0 ; i0 00001 ) 【试题解析】 (1)主函数中 “fun(x
6、, 1 0)”, x是 double型变量, 1 0是浮点数,可知 fun有两个 double型参数,而第一标识下 “dounle”不是 C语言关键字,所以应将 “double fun(double a, dounle x0)”改为 “double fun(double a,double x0)”。 (2)第二个标识下的 if语句是判断进行递归运算的条件,第二标识下变量 xo没有定义,根据题意,这里是判断 x1和 x0的差值的绝对值是否比 0 00001大,所以第二个标识下 “if(fabs(x1x0)0 00001)”改为 “if(fabs(x1-x0)0 00001)”。 三、程 序设计题
7、 3 【正确答案】 int i, n=0, flag=1; 初始设置标识位 flag=1 char*p=str; 设置工作指针 while(*p) 取字符串大小 n+; p+; for(i=0; in 2; i+) 循环判断字符串 S是否为回文 if(stri=strn-1-i); 设置比较位 j为 n-1-i else 若不符合条件,标识位设为 0,跳出循环 flag=0; break; return flag ; 【试题解析】 进入 fun函数,根据前面的分析: 主要思路是: (1)首先用整型变量 i表示所判断的字符串中前面对应元素的下标。 i初值为 0, n是字符串的长度,通过循环来求得 n。 (2)然后,把下标为 i的字符与下标为 “n-1-i”的字符比较,如果相同, i加 1,继续进行一对一的字符比较。不断重复此过程,直到 in 2为止。在此过程中,如果下标为 i的字符与下标为 “n-1-i”的字符不相同,则可以断定字符串不是回文,立即退出函数。 (3)如果正常 结束循环,就说明字符串符合回文条件。