【真题1】 下列给定程序中,函数fun()的功能是:计算s 所指字符串中含有t 所指 字符串的数目,并作为函数值返回。 试题程序: #include < conio.h >#include < string.h >#include < stdio.h >#define N 80 int fun(char *s,char *t) { int n; char *p, *r; n=0; while(*s) { p=s; r=t; while(*r) if(*r==*p) {r++; ___1__;} else break; if(*r==__2___) n++; __3___; } return n; } main() {char a[N],b[N]; int m; printf("\nPlease enter string a: ");gets(a); printf("\nPlease enter substring b: "); gets(b); m=fun(a,b); printf("\nThe result is :m=%d\n",m); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是把要比较的字符串和原字符串的 一部分进行逐个字符的比较,所以指向原字符串的指针p也应该进行每步加一 的操作。 填空2:根据题目的意思,此处是判断上一步的比较是否与r 指向的完整的字符 串相等,如果完全相同,则r应该指向字符串的末尾,即'\0'。 填空3:由算法可以看出,这里应该是进行的整个while循环,即应该控制s 指针不停的向后移动直到字符串结尾。 答案:【1】p++ 【2】'\0' 【3】s++ 【真题2】 给定程序modi.c 中,函数fun 的功能是:求S 的值。设 1^2 4^2 6^2 (2k)^2 S = ── * ── * ── * …… * ─────── 1*3 3*5 5*7 (2k-1)*(2k+1) 例如,当k 为10 时,函数值应为:1.533852。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >#include < math.h >/************found************/ fun(int k) { int n;float s,w,p,q; n=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++; } /************found************/ return s } main() {clrscr(); printf("%f\n",fun(10)); } (2011年2月) 解析: 本题着重考察考生对C 语言中函数定义、引用及参数传递的掌握情况。 本题中的第一个错误:由于函数返回的值应为float型或double型,所以程序 中的语句"fun(int k)"应改为"float fun(int k)"或相同作用的语句。 本题中的第二个错误:在C 语言中,语句以分号作为分隔符,所以程序中语句 "return s"应改为"return s;"或相同作用的语句。 【真题3】 请补充main 函数,该函数的功能是:如果数组aa 的前一个元素比后一 个元素小,则把它保存在数组bb 中并输出。 例如,输入“40,51,62,33,35,52,48,95,66,73”,则结果输出“40, 51,33,35,48,66”。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在main 函数的横线处填入所编 写的若干表达式或语句。 试题程序: #include < stdio.h >#define N 10 main() { int i,n=0; int aa[N]={40,51,62,33,35,52,48,95, 66,73}; int bb[N]; clrscr(); ____________________ } (2011年2月) 解析: 在以上横线处编写代码如下: for(i=0;i< N-1;i++) if(aa[i]< aa[i+1]) bb[n++]=aa[i]; printf("\n*** display bb ***\n"); for(i=0;i< n;i++) printf("bb[%d]=%2d ", i,bb[i]); |