【真题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 的功能是:求出以下分数序列的前n 项 之和。 1 2 3 5 8 13 ─,─,─,─,─,─,…… 2 3 5 8 13 21 和值通过函数值返回main 函数。 例如,若n 的值为:5,则应输出:3.007051。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h >double fun(int n) { int i; double t,s,a,b,c; /************found************/ s=1; a=1;b=2; for(i=0;i< n;i++) { t=a/b; s=s+t; /************found************/ ______; a=b; b=c; } return s; } main() { int n; printf("Enter n: ");scanf("%d",&n); printf("\nThe result: %f \n",fun(n)); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 本题中的第一个错误:程序中的变量s是用来统计分式和的,它的初始值应为 0,所以程序中语句"s=1;"应改为"s=0;"或相同作用的语句。 本题中的第二个错误:由题意可知,变量c 是用来求前一分式的分子与分母的 和,所以在横线处应填入"c=a+b;"或相同作用的语句。 【真题3】 给定程序prog.c 中,在主函数中从键盘输入若干个数放入数组中,用0 结束输入并放在最后一个元素中。下列程序中,函数fun 的功能是:计算数组元素中 值为正数的平均值(不包括0)。 例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结 果为:19.250000。 #include < conio.h >#include < stdio.h >double fun(int x[]) {……} 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语言中不同数据类型的使用以及运算符的使用。 答案:double fun(int x[]) {double sum=0.0; int c=0,i=0; while (x[i]!=0) { if (x[i] >0) { sum+=x[i];c++;} i++; } sum/=c; return sum; } |