【真题1】 给定程序功能是计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n) 的值。例如,当n 为5 时,函数值应为:10.407143。 ┌(x+1)/(x-2) x >0 f(x) = ┤0 x=0 或 x=2 └(x-1)/(x-2) x< 0 #include < stdio.h >#include < math.h >float f( double x) { if (x == 0.0 || x == 2.0) /************found************/ return ___1___; else if (x < 0.0) return (x -1)/(x-2); else return (x +1)/(x-2); } double fun( int n ) { int i; double s=0.0, y; /************found************/ for (i= -n; i< =___2___; i++) {y=f(1.0*i); s += y;} /************found************/ return ___3___; } main ( ) { printf("%f\n", fun(5) ); } (2011年2月) 解析: 本题的考核点是C语言中的函数的入口参数和类型转换。 题中第一个空填"0.0":根据题意,当x=0或x=2时,f(x)返回0。因为f(x) 定义为float型,所以也可以返回0.0。 题中第二个空填"n":由程序可知,此处是设置循环的次数,其值是由主调函数 中的实参所确定。由于在主调函数中是以确定的值定义的,所以循环变量可以 由形参变量所确定,也可以用主调函数中的确定值所确定。 题中第三个空填"s":通过return 语句将被调用函数中s 的值带回主调函数中 去。 答案:【1】0.0 【2】n 【3】s 【真题2】 给定程序modi.c 中,函数fun 的功能是:求三个数的最小公倍数。 例如,给变量x1、x2、x3 分别输入15 11 2,则输出结果应当是:330。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h >fun(int x,int y,int z) { int j,t,n,m; /************found************/ j=0; t=j%x; /************found************/ m=t%y; n=j%z; while(t!=0||m!=0||n!=0) {j=j+1; t=j%x; /************found************/ m=t%y; n=j%z; } return j; } main() { int x1,x2,x3,j; printf("Input x1 x2 x3: ");scanf("%d%d%d",&x1,&x2,&x3); printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3); j=fun(x1,x2,x3); printf("The minimal common multiple is :%d\n",j); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 本题中的第一个错误:由程序可知,应从1 开始穷举数的最小公倍数,即j的 初始值应为1,所以程序中的语句"j=0;"应改为"j=1;"; 本题中的第二和第三个错误:变量j中存放的即为要求的最小公倍数,即j能够 整除x、y、z,所以程序中的语句" m=t%y;"应改为" m=j%y;"。 【真题3】 请编写一个函数void fun (char a[],char b[],int n),其功能是:删除 一个字符串中指定位置的字符。其中, a 存放原字符串, b存放删除后的字符串。 例如,输入一个字符串"World",然后输入3,则调用该函数后的结果为"Word"。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#include < conio.h >#define LEN 20 void fun (char a[], char b[], int n) {……} main( ) { char str1[LEN], str2[LEN] ; int n ; clrscr() ; printf("Enter the string:\n") ; gets(str1) ; printf("Enter the position of the string deleted:") ; scanf("%d", &n) ; fun(str1, str2, n) ; printf("The new string is: %s\n", str2) ; } (2011年2月) 解析: 本题的考核点是删除一个字符串中指定位置的字符。 解题思路: 1、建立循环,在原字符串a[]中定位到指定位置; 2、在以上循环中,当没有到达指定位置时,将a[]当前位置的字符复制到数组 b[]中; 3、当到达a[]中指定位置后,跳过这个字符,将下一个字符复制到数组b[] 中,直至复制完毕。 #include < stdio.h > #include < conio.h > #define LEN 20 void fun (char a[], char b[], int n) { int i=0,j=0; for( i=0,j=0; i< LEN; i++) { /*建立循环,在原字符串a[]中定位到指定位 置*/ if (i!=n) { /*在以上循环中,当没有到达指定位置时,将a[]当前位置的字符 复制到数组b[]中*/ b[j]=a[i]; j++; } } } |