【真题1】 下列给定程序中,函数fun()的功能是:根据整型参数m,计算如下公 式的值。 y=1/(100×100)+1/(200×200)+1/(300×300)+…+1/(m×m) 例如,若m=2000,则应输出0.000160。 试题程序: #include < conio.h >#include < stdio.h >__1__ fun (int m) { double y=0, d; int i; for(i=100;i< =m;i+=__2__) {d=(double)i*(double)i; y+=__3__/d; } return(y); } main() { int n=2000; printf("\nThe result is %1f\n",fun(n)); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是对子函数返回值类型的声明,因 为后面的计算中返回的变量y为double型的,所以返回值类型也应该定义成 double型。 填空2:根据题目的意思,此处是利用for 循环计算整个算式,可以根据算式的 形式总结出分母递进100 的规律,所以循环中使用100 作为步长。 填空3:由算法可以看出,此处是累加求算式的值,根据上面把变量i 强制转换 成double型可知,这里应该使用浮点数,即用"1.0" 。 答案:【1】double 【2】100 【3】1.0 【真题2】 给定程序modi.c 中,函数fun 的功能是:按顺序给s 所指数组中的元 素赋予从2 开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次 存放在w 所指的数组中,若s所指数组中元素的个数不是5 的倍数,多余部分忽略 不计。 例如,s 所指数组有14 个元素,则只对前10 个元素进行处理,不对最后的4 个元 素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h >#define SIZE 20 fun(double *s,double *w) { int k,i; double sum; for (k=2,i=0;i< SIZE;i++) { s[i]=k; k+=2; } /************found************/ sun=0.0; for(k=0,i=0;i< SIZE;i++) { sum+=s[i]; /************found************/ if (i+1%5==0) { w[k]=sum/5;sum=0;k++;} } return k; } main() { double a[SIZE],b[SIZE/5]; int i,k; k=fun(a,b); printf("The original data:\n"); for (i=0;i< SIZE;i++) { if(i%5==0) printf("\n"); printf("%4.0f",a[i]); } printf("\n\nThe result:\n"); for(i=0;i< k;i++) printf("%6.2f ",b[i]); printf("\n\n"); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 本题中的第一个错误:在函数中,未对变量sun 进行定义,由程序可知,函数 通过变量sum 来累计和值,需先为sum 赋初值0,所以程序中语句 "sun=0.0;"应改为"sum=0.0;"或相同作用的语句。 本题中的第二个错误:要注意算术运算符的优先级:*、/→%→+、-,由题意 可知,条件语句是用来判断元素的个数是不是5的倍数,所以程序中语句"if (i+1%5==0)"应改为"if ((i+1)%5==0)"或相同作用的语句。 【真题3】 请编写一个函数void fun(int m, int k, int xx[]),该函数的功能 是:将大于整数m 且紧靠m 的k个非素数存入所指的数组中。 例如,若输入15,5,则应输出16,18,20,21,22。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编 写的若干语句。 试题程序: #include < conio.h >#include < stdio.h >void fun(int m, int k, int xx[]) {……} main() { int m,n,zz[1000]; clrscr(); printf("\nPlease enter two integers: "); scanf("%d%d",&m,&n); fun(m, n, zz); for(m=0;m< n;m++) printf("%d ",zz[m]); printf("\n "); } (2011年2月) 解析: void fun(int m, int k, int xx[]) { int i,j,n; for(i=m+1,n=0;n< k;i++) /*找大于m 的非素数,循环k次,即找出紧靠 m 的k 个非素数*/ for(j=2;j< i;j++) /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数,放入数组xx中*/ break; /*并跳出本层循环,判断下一个数*/ } } |