1、1真题 1】 函数 fun 的功能是进行数字字符转换。若形参 ch 中是数字字符09,则0 转换成9,1 转换成8,2 转换成7,9转换成0;若是其它字符则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序的结构!#include /*found*/_【1】_ fun(char ch)/*found*/if (ch=0 return ch;main() char c1, c2;printf(“nThe result :n“);c1=2; c2 =
2、fun(c1);printf(“c1=%c c2=%cn“, c1, c2);c1=8; c2 = fun(c1);printf(“c1=%c c2=%cn“, c1, c2);c1=a; c2 = fun(c1);printf(“c1=%c c2=%cn“, c1, c2);解析: 由主函数中的语句“c2=fun(c1);“可知:函数 fun 的返回类型为字符,故第一个空应填 char;在题面中要求对数字字符进行转换,故第二空的目的是判断字符 ch 是否为一数字字符,即 ch 是否在0 9 之间所以第二个空应填ch#include char fun(char c) if(c=A clrscr
3、();printf(“Enter a string:“);gets(a);printf(“The original string is :“);puts(a);fun(a);printf(“The string after modified: “);puts(a);(2011 年 2 月)解析: 本题的考核点是 c 语言中的循环语句和条件判断语句的使用。 提示思路:从本题的要求来看,我们应该采用外循环内条件判断的算法。本参考函数使用 for 循环从头到尾扫描字符串,并在扫描时进行条件判断,对z,Z和其它字符进行不同的处理。fun (char *s) int i, length;length =
4、 strlen(s);/*求得字符串 s 的长度*/for(i = 0; i=a /*found*/else if (k=0)return 1L;main() int k=10;clrscr();printf(“%d!=%ldn“, k, fun(k);解析: 本题的考核点是 C 语言的一些基本常识和 if 语句的使用。C 语言提供了三种形式的 if 语句:61.if(表达式) 语句2.if(表达式) 语句 1else 语句 23.if(表达式 1) 语句 1else if(表达式 2) 语句 2else if(表达式 3) 语句 3:else if(表达式 m) 语句 melse 语句 n所
5、以,综上所述“if k0 “ 应改为“if (k0)“或相同作用的语句。C 语言中“=“表示赋值,而“=“才表示“等于“ ,由题意看出, “else if (k=0)“应为“else if (k=0) “或相同作用的语句。【真题 3】 请编写函数 fun,函数的功能是:在字符串中的所有数字字符前加一个$字符。 例如,输入 A1B23CD45,则输出为:A$1B$2$3CD$4$5。 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。#include void fun(char *s)main() c
6、har s80;printf(“Enter a string:“); scanf(“%s“, s);fun(s);printf(“The result:%sn“, s);(2011 年 2 月)解析: 本题的考核点是在字符串中的数字之前加一$字符的算法。 提示思路:通过一中间数组和一循环来实现。方法是:从字符串的首字符开始,判断字符是否为数字,若是,将字符$和数字字符赋给中间数组,反之,将字符直接赋给中间数组,直至字符串尾,最后将中间数组赋给原字符串。void fun(char *s) char p80;int i=0,j=0;while (si!=0) /*假如 si不为字符串结束符,则继续
7、循环*/ if (si=0) case 1: _【1】_: return 1;return (_【2】_);main() long fib; int n;printf(“Input n:“); scanf(“%d“,_【3 】_);printf(“n=%dn“,n);fib=fun(n);printf(“fib=%dnn“, fib);(2011 年 2 月)解析: 填空 1:根据题目的意思,这里应该是对于值为 1 和 2 的时候的处理,注意 case 语句常量后应用的是冒号,而且不同的 case 对应同一个值可以连续写(像题目中那样) 。填空 2:根据题目的意思,此处是求值的递归部分,由递推
8、公式可以很容易的得到答案的形式,对于这种简单的递归考生一定要掌握。填空 3:由算法可以看出,此处是输入数列的项数 n,使用了 scanf 函数,其参数应该是变量的地址,即使用符号“/*found*/if (n=1)c=10;elsec=fun(n-1)+2;return(c);main() int n;printf(“Enter n:“); scanf(“%d“,printf(“The result:%dnn“, fun(n);解析: 本题着重考察考生对递归算法的掌握情况。在 C 语言中,“=“是指赋值号,要判断表达式相等,需用“=“,所以程序中的语句“if (n=1)“应改为“if (n=1
9、)“或相同作用的语句。【真题 3】 规定输入的字符串中只包含字母和* 号。请编写函数 fun,它的功能是:使字符串最前面连续的*号不得多于 n 个;若多于 n 个,则删除多余的*号;若少于或等于 n 个,则什么也不做,字符串中间和尾部的*号不删除。例如,字符串中的内容为:*A*BC*DEF*G*,若 n 的值为 4,删除后,字符串中的内容应当是:*A*BC*DEF*G*;若 n 的值为 8,则字符串中的内容仍为:*A*BC*DEF*G*。n 的值在主函数中输入。在编写函数时,不得使用C 语言提供的字符串函数。 注意:部分源程序存在文件 prog.c 中。 请勿改动主函数 main 和其他函数中
10、的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。#include 9#include void fun(char *a, int n)main() char s81;int n;printf(“Enter a string:n“); gets(s);printf(“Enter n:“); scanf(“%d“,fun(s,n);printf(“The string after deleted:n“); puts(s);(2011 年 2 月)解析: 本题的考核点是删除字符串中字符的算法。 解题思路:先统计字符串前连续的*号个数,与指定的个数进行判断,若小于等于指定的数,什么也不做
11、,若大于指定的数,则删除多余的*,删除的方法是:用一个循环先生成指定个数个*放入到一字符串中,再将从原串中非* 字符开始至字符串尾的字符追加其后,最后用新串覆盖原串。 本评析仅供参考。void fun(char *a,int n) char b81;int i=0, j=0, s=0, k;while (ai=*) s+;i+; /*统计字符串前连续的*号个数*/if (sn) /*判断字符串前连续的*号个数是否大于 n*/ for (k=0; k#include 10_【 1】_ fun(double a, double x0) double x1, y;_【 2】_;if(fabs(x1-
12、x0)=0.00001)_【 3】_;else y=x1;return y;main() double x;printf(“Enter x:“); scanf(“%lf“,printf(“The square root of %lf is %1fn“, x,fun(x,1.0);(2011 年 2 月)解析: 填空 1:这里要问的是函数的类型,由主函数 main()对函数的调用可以得到函数的类型是 double 型的,当然也可以由函数的返回值语句得到。填空 2:我们看到在下一条语句中已经开始对变量 x1 的值进行比较了,所以这里要对 x1 进行赋值,由题意可知 x1=(x0+a/x0)/2.0
13、。填空 3:用 C 语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本题要求用递归法。该程序采用了 if 语句,程序的含义是当迭代结果差小于误差时进行循环。答案:【1】 double 【2】x1=(x0+a/x0)/2.0 【3 】y=fun(a,x1)【真题 2】 给定程序 modi.c 中,函数 fun 的功能是:判断字符 ch 是否与 str 字符串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,#include #include #include /*found*/void fun(char str,char ch) while (*str /*found*/if (*str=ch) str0=ch;/*found*/str1=0;