【真题1】 下列给定程序中,函数fun()的功能是:从N 个字符串中找出最长的那 个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数 组中。 试题程序: #include < string.h >#include < stdio.h >#define N 5 #define M 81 __1__fun(char (*sq)[M]) {int i; char *sp; ___2___; for(i=0;i< N;i++) if(strlen(sp)< strlen(__3__)) sp=sq[i]; return sp; } main() {char str[N][M], *longest; int i; printf("Enter %d lines:\n ",N); for(i=0;i< N;i++) gets(str[i]); printf("\nThe %d string :\n ",N); for(i=0;i< N;i++) puts(str[i]); longest=fun(str); printf("\nThe longest string :\n "); puts(longest); } (2011年2月) 解析: 填空1:从C 语言的学习中我们知道,这里应该是对子函数返回值类型 的定义,由下面返回的指针型变量sp可以知道,应该定义成char *,注意中 间的空格。 填空2:根据题目的意思,此处应该是先假设指针数组的第1 个元素所指的字 符串最长,之后对字符串指针数组进行遍历,即给sp赋初值。 填空3:由算法可以看出,这里应该是把二维数组的每一行作为一个字符串的首 地址进行长度比较,所以若遇字符串长度大于待定最长字符串,则令该字符串 为待定最长字符串,如此循环直至指针数组末尾,即可得到最长字符串的地 址。 答案:【1】char * 【2】sp=sq[0] 【3】sq[i] 【真题2】 下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母, 形成新的字符串,并取代原字符串。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include < stdio.h >#include < conio.h >void fun(char *s) {int i,j; for(i=0,j=0; s[i]!= '\0'; i++) /**********************found***********************/ if((s[i] >= 'A'&&s[i]< = 'Z')&&(s[i] >= 'a'&&s[i]< = 'z')) s[j++]=s[i]; /**********************found***********************/ s[j]= "\0"; } main() { char item[80]; clrscr(); printf("\nEnter a string: "); gets(item); printf("\n\nThe string is:\%s\n",item); fun(item); printf("\n\nThe string of changing is :\%s\n",item); } (2011年2月) 解析: (1)错误:if((s[i] >= 'A'&&s[i]< = 'Z')&&(s[i] >= 'a'&&s[i]< = 'z')) 正确:if((s[i] >= 'A'&&s[i]< = 'Z')||(s[i] >= 'a'&&s[i]< = 'z')) (2)错误:s[j]= "\0"; 正确:s[j]='\0'; 错误1:字母包括小写字母和大写字母,这里是"或"的关系,所以用"||"运算 符。 错误2:字符串的结束标志符为字符,而不是字符串。 【真题3】 请编写函数fun,其功能是:计算并输出下列多项式的值: 1 1 1 1 1 S=(1 - ─) + (─ - ─) +…+ (── - ──) 2 3 4 2n-1 2n 例如,在主函数中从键盘给n 输入8 后,输出为:s=0.662872。 注意:要求n 的值大于1 但不大于100。 部分源程序在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >double fun(int n) {……} main() { int n; double s; printf("\nInput n: "); scanf("%d",&n); s=fun(n); printf("\ns=%f\n",s); } (2011年2月) 解析: 本题的考核点是求模运算和基本c 语句的使用。 提示思路:该题考查的是数学上的一个数列,其通式为:1/(2*n-1)- 1/(2*n)。在给出的参考程序中,由于函数要求的返回值为双精度型,所以将 sum 定义为双精度型,其初值为0.0,再判断输入的n 是否符合条件,如果条 件为真,则执行for 循环,分别计算出1.0/(2*i-1)-1.0/(2*i)相应的每一个多 项式的值,同时累加到变量sum 中,并将该结果返回。 double fun(int n) { int i; double sum=0.0; /*定义sum 为双精度型变量,并给其赋初值为0.0*/ if (n >1&&n< =100) {for(i=1;i< =n;i++) sum+=1.0/(2*i-1)-1.0/(2*i); /*计算出1.0/(2*i-1)-1.0/(2*i)相应的每 一个多项式的值,同时累加到变量sum 中*/ } return sum; /*返回计算结果*/ } |