【真题1】 下列给定程序中,函数fun()的功能是:求S 的值。设 S=(22/(1*3))*(42/(3*5))*(62/(5*7))* …*(2k)2/((2k-1)*(2k+1)) 例如,当k 为10 时,函数的值应为1.533852。 试题程序: #include < conio.h >#include < stdio.h >#include < math.h >double fun(int k) { int n; double s, w, p, q; __1__; s=1.0; while(n< =k) { w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } __2__ } main() { printf("%f\n ",fun(10)__3__; } (2011年2月) 解析: 填空1:在这个空之前我们可以看到定义了整型变量n,下面紧接着对 n 的值进行了比较,可见该语句应该是对n 进行赋值,由下面的语句我们可以 看到n 作为级数的项数应该从1开始,所以这里对n 赋初值1。 填空2:这是一个double型的函数,而且在函数末尾,因而必定要在这里填返 回值语句。 填空3:这是一个语法错误,它提醒我们在写程序时一定要注意这些小的语法错 误。 答案:【1】n=1 【2】return s ; 【3】) 【真题2】 给定程序modi.c 中,在主函数中从键盘输入若干个数放入数组中,用0 结束输入并放在最后一个元素中。下列程序中,函数fun 的功能是:计算数组元素中 值为正数的平均值(不包括0)。 例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结 果为:19.250000。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >double fun(int x[]) {************found************/ int sum=0.0; int c=0,i=0; while (x[i]!=0) { if (x[i] >0) { sum+=x[i];c++;} i++; } /************found************/ sum\=c; return sum; } main() { int x[1000];int i=0; clrscr(); printf("\nPlease enter some data (end with 0):"); do { scanf("%d",&x[i]);} while (x[i++]!=0); printf("%f\n",fun(x)); } (2011年2月) 解析: 本题的考核点是C语言中不同数据类型的使用以及运算符的使用。 观察题目可知,sum 是一个实数型,且已赋值sum=0.0,所以,应定义 double sum=0.0; "\"不是一个运算符, 除法运算符的正确表示应该是"/",所以,求平均值的写 法应为: sum=sum/c;或sum/=c; 【真题3】 请编写函数fun,函数的功能是:统计一行字符串中单词的个数作为函数 值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若 干个空格隔开,一行的开始没有空格。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#include < string.h >#define N 80 int fun( char *s) {……} main() { char line[N]; int num=0; printf("Enter a string :\n"); gets(line); num=fun( line ); printf("The number of word is : %d\n\n",num); } (2011年2月) 解析: 本题的考核点是统计字符串中单词个数的算法。 提示思路:本题要求统计一行字符串中单词的个数,并作为函数值返回。在给 出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单 词数累加1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累 加1,程序细节可以参考程序的注释部分。 int fun( char *s) {int i=1,j=0;/*i用来记录是否遇到过了空格,j用来记录单词数*/ while(*s){ if((i==1) && (*s!=32)) {j++;i=0;} /*当i==1且当前s 所指向的是字符,则j自增加1,同时将i设 为0*/ if(*s==32) i=1; /*用i来判断是否遇到了空格,假如遇到了空格则i=1*/ s++; /*检测是否是空格,如果是空格则指针变量s向后移动一位*/ } return j; /*返回统计结果*/ } |