【真题1】 给定程序的功能是根据公式求P 的值,结果由函数值带回。m 与n 为两 个整数且要求m >n。 m! P = ───── n!(m-n)! 例如:m=11,n=4 时,运行结果为330.000000。 请在程序的下划线处填入正确的内容并把下划线删除,使 程序得出正确结果。 #include < stdio.h > long jc(int m) { long s=1; int i ; /**************found**************/ for(i=1;i< =m;i++) s=___1___ ; return s; } float fun(int m, int n) { float p; /**************found**************/ p=1.0*jc(m)/jc(n)/jc(___2___) ; /**************found**************/ ___3___; } main() { printf("p=%f\n", fun (11,4)); } (2011年2月) 解析: 本题的考核点是求阶乘的算法。 提示思路:分别通过for 循环来求得m的阶乘,n 的阶乘,(m-n)的阶乘。求 m 阶乘的方法是:从1 到m 累计乘积。 答案:1、s*m 2、m-n 3、return p 【真题2】 给定程序modi.c 中,函数fun 的功能是:求两数平方根之和,作为函 数值返回。 例如,输入12 和20,输出结果是:y=7.936238。 请改正程序中的 错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h > #include < math.h > /************found************/ double fun(double *a,*b) { double c; /************found************/ c=sqr(a)+sqr(b); return c; } main() { double a,b,y; clrscr(); printf("Enter a&b :");scanf("%lf%lf",&a,&b); y=fun(&a,&b); printf("y=%f\n",y); } (2011年2月) 解析: 本题的考核点是C语言中函数的入口参数的用法。 本题中的第一个错误:函数的参数表是由逗号分隔的变量表,变量表由变量类 型和变量名组成,与普通的变量说明不同,函数参数必须同时具有变量类型和 变量名,程序中"double fun(double *a,*b)"语句第二个函数参数没有变量类 型,是错误的,应该改为"double fun(double *a,double *b)"或相同作用的 语句。 本题中的第二个错误:a、b为指针地址,应引用它们的值*a、*b,所以程序中 语句"c=sqr(a)+sqr(b);"应改为"c=sqrt(*a)+sqrt(*b);"或相同作用的语 句。 【真题3】 请编写一个函数unsigned fun(unsigned w),w 是一个大于10 的无 符号整数,若w 是n(n≥2)位的整数,函数求出w 的后n-1 位的数作为函数值返 回。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中 的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 #include < conio.h > #include < stdio.h > unsigned fun(unsigned w) {……} main() { unsigned x; clrscr(); printf("Enter a unsigned integer number: ");scanf("%u",&x); printf("The original data is :%u\n",x); if (x< 10) printf("Data error!"); else printf("The result:%u\n",fun(x)); } (2011年2月) 解析: 本题的考核点是c 语言中循环语句的使用和对数组的操作。 提示思路: 先把w 由无符号的整型数转换为字符串,然后再把w 的后n - 1 位转换为无符 号的整型数,并将结果返回。我们给出的参考函数中,第一个for循环将整型数 转换为字符串,并把整型数的每一位按照从低位到高位的顺序分别存放在字符 串str 中;第二个for 循环将字符串中的每一位取出,从低位到高位(去除最高 位)分别与该位的权相乘并加到变量result中,最后将result返回。 unsigned fun ( unsigned w ) {int i, j, sqr = 1; unsigned result; char * str,ch[5]; str=ch; for (i = 1; (i < 6) && (w >= 1); i++) { str[i - 1] = '0' + w % 10; /*将无符号整数w 中的每一位转换 成字符并按照从低位到高位的顺序分别存放在字符串str 中*/ w /= 10; } str[i - 1] = 0; result = str[0] - '0'; /求出无符号整数w 中的个位数的整数值 */ for (j = 1; j < i - 2; j++ ) { sqr *= 10; result += (str[j] - '0') * sqr; /*从低位到高位(除最高位 外)分别与该位的权值相乘并加到变量result 中*/ } return result; } |