【真题1】 下列给定程序中,函数fun()的功能是:计算函数F(x,y,z)=(x+y)/(xy)+( z+y)/(z-y)的值。其中x 和y 不相等,z 和y 不等。例如,当x 的值为9,y 的值为11,z 的值为15 时,函数值为-3.50。 试题程序: #include < stdio.h >#include < math.h >#define FU(m,n) (m)/(n) float fun(float a,float b,float c) { __1__ value; value=FU(a+b,a-b)+FU(c+b,c-b); return(value); } main() { float x,y,z,sum; printf("Input x y z:: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n ",x,y,z); if(x==y__2__y==z) {printf("Data error! \n ");} sum=fun(x,y,z); printf("The result is:%5.2f\n ",__3__); } (2011年2月) 解析: 【解析】填空1:在子程序中我们看到value是作为存放函数值的变量 而使用的,由题目的分析我们知道函数值是浮点型的,因此这里我们用float对 变量进行声明。 填空2:在题目中我们看到x和y不相等,z和y不相等,由选择支我们知道这 里是判断自变量是否符合要求的,而这两个条件任何一个不满足就会使函数结 果无意义,因此这里用"||"符号。 填空3:在主程序中,函数的返回值赋给了sum,由输出语句我们知道这是输 出结果的语句,所以这里填变量sum。 答案:【1】float 【2】|| 【3】sum 【真题2】 给定程序modi.c 中,函数fun 的功能是:求出两个非零正整数的最大 公约数,并作为函数值返回。 例如,若给num1 和num2分别输入49 和21,则输出的最大公约数为7;若给 num1 和num2 分别输入27 和81,则输出的最大公约数为27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h >int fun(int a,int b) {int r,t; if(a< b) {t=a;b=a;a=t;} r=a%b; while(r!=0) {a=b;b=r;r=a%b;} /************found************/ return(a); } main() {int num1,num2,a; printf("Input num1 num2: ");scanf("%d%d",&num1,&num2); printf("num1=%d num2=%d\n\n",num1,num2); a=fun(num1,num2); printf("The maximun common divisor is %d\n\n",a); } (2011年2月) 解析: 提示思路:当a与b的余数为零时,即可求得a、b的最大公约数。 当余数为零时,最大公约数放在除数变量中,即变量b,即应返回变量b的 值,所以程序中的语句"return(a);"应改为"return(b);"或相同作用的语句。 【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为奇数的字符删除,串 中剩余字符形成一个新串放在t 所指的数组中。 例如,若s 所指字符串中的内容为“ABCDEFG12345”,其中字符A 的ASCII码值 为奇数、…、字符1 的ASCII码值也为奇数、…都应当删除,其他依次类推。最后t 所指的数组中的内容应是:“BDF24”。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >#include < string.h >void fun(char *s, char t[]) {……} main() { char s[100], t[100]; clrscr(); printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); } (2011年2月) 解析: 本题的考核点是数组、循环语句。 提示思路:使用循环语句将数组元素与2 做取余操作,如果余数为零则将其值 存入另外一个数组中。 void fun(char *s, char t[]) { int i,slenth,n=0; slenth=strlen(s); /*统计字符串s中字符的个数*/ /*判断字符s[i]其值的ASCII码值是否为奇数,如果是,则继续下一个字符的 判断,否则将字符s[i]复制到t数组中*/ for(i=0;i< slenth;i++) if(s[i]%2==0) t[n++]=s[i]; t[n]='\0'; } |