【真题1】 给定程序中,函数fun 的功能是:求ss 所指字符串数组中长度最短的字 符串所在的行下标,作为函数值返回,并把其串长放在形参n 所指变量中。ss 所指 字符串数组中共有M 个字符串,且串长< N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 #include < stdio.h >#include < string.h >#define M 5 #define N 20 int fun(char (*ss)[N], int *n) { int i, k=0, len= N; /**********found**********/ for(i=0; i< ___1___; i++) { len=strlen(ss[i]); if(i==0) *n=len; /**********found**********/ if(len ___2___ *n) { *n=len; k=i; } } /**********found**********/ return(___3___); } main() { char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"}; int n,k,i; printf("\nThe original strings are :\n"); for(i=0;i< M;i++)puts(ss[i]); k=fun(ss,&n); printf("\nThe length of shortest string is : %d\n",n); printf("\nThe shortest string is : %s\n",ss[k]); } (2011年2月) 解析: 本题考查的是字符串长度的比较。 由于在fun 函数中要对字符串数组中的每个字符串(共有M个)都要求其长 度,故在外层循环中,其循环条件应为i< M,故第一空应填M;在比较时,先 使长度的初始值*n 为第一个字符串的长度,然后逐个比较其它字符串的长度 len,如果长度len 小于*n,则将len 赋值给*n,并记录下此时字符串在字符 串数组中的下标i。故第二空应为< 或< =;最后要返回数组的下标,即代码中 的k,故第三空应为k。 答案:【1】M 【2】< 【3】k 【真题2】 下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串反 着连接起来,组成一个新串,放入pt 所指字符串中,例如:把3 个串DEG,ac,df 反着串联起来,结果是dfacDEG。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或者删行,也不得改变程序的结构! 试题程序: #include < conio.h >#include < string.h >#include < stdio.h >void fun(char str[][10],int m, char *pt) {int k,q,i,j=0; /**********************found***********************/ for(k=m;k >0;k--) { q=strlen(str[k]); j+=q; for(i=0;i< q;i++) pt[i]=str[k][i]; pt+=q; pt[0]=0; } /**********************found***********************/ pt=j; } main() { int m, h; char s[10][10],p[120]; clrscr(); printf("\nPlease enter m: "); scanf("%d",&m); printf("\nPlease enter %d string:\n ",m); gets(s[0]); for(h=0;h< m;h++) gets(s[h]); fun(s,m,p); printf("\nThe result is :%s\n ",p); } (2011年2月) 解析: (1)错误:for(k=m;k >0;k--) 正确:for(k=m-1;k >=0;k--) (2)错误:pt=j; 正确:pt-=j; 错误1:本题旨在考查二维数组下标的灵活使用,如果二维数组有m 行,则行 下标取值从0到m-1。 错误2:此时指针pt指向字符串的尾部,而函数返回的应是字符串的首地址, 所以pt向前移动j个字符,则到达字符串的首部。 【真题3】 请编写函数fun,其功能是:计算并输出当x< 0.97 时下列多项式的值, 直到|S(n)-S(n-1)|< 0.000001 为止。 0.5(0.5-1) 0.5(0.5-1)(0.5-2) 0.5(0.5-1)(0.5-2)…(0.5-n+1) S=1+0.5x+─────x^2+─────────x^3… +────────── ────x^n 2! 3! n! 例如,在主函数中从键盘给x 输入0.21 后,输出为:s=1.100000。 注意:部分源程序在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#include < math.h >double fun(double x) {……} main() { double x,s; printf("Input x: "); scanf("%lf",&x); s=fun(x); printf("s=%f\n",s); } (2011年2月) 解析: 本题的考核点是c 语言中多项式的运算。 解题思路:本题是求多项式的和,解此类题的关键是找出其中的规律,观察表 达式可得出x(n)=x(n-1)*x*(0.5-n+1)/n。 #include < stdio.h > #include < math.h > 可以通过while循环求出各项表达式的值,然后进行累加。 double fun(double x) { int n=1; /* 循环计数*/ double sn=1; /* 累计数*/ double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/ while(fabs(xn-xn1) >=0.000001)/*绝对值是否合格*/ { xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1; sn+=xn; /*sn 累加上xn*/ } return(sn); } |