【真题1】 下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串连接 起来,组成一个新串,放入pt所指字符串中,例如:把3 个串abc,CD,EF串联 起来,结果是abcCDEF。 试题程序: #include < conio.h >#include < string.h >#include < stdio.h >void fun(char __1___,int m, char *pt) { int k,q,i,j=0; for(k=0;k< m;k++) { q=strlen(str[k]); j+=q; for(i=0;i< q;i++) pt[i]=str[k][i]; pt+=q; pt[0]=__2__; } pt-=___3___; } main() { int m, h; char s[10][10],p[120]; printf("\nPlease enter m: "); scanf("%d",&m); gets(s[0]); printf("\nPlease enter %d string:\n ",m); for(h=0;h< m;h++) gets(s[h]); fun(s,m,p); printf("\nThe result is :%s\n ",p); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是对子函数参数的声明,根据主函 数的调用可以看出,这个参数应该是一个二维数组,在C 语言中二维或多维数 组作参数都是第一维空,其余照写,考生要牢记。 填空2:根据题目的意思,此处是每次连接一个新的字符串之后,加入一个字符 串结束标志,由上一步把pt指针向后移动了字符串长度那么大就可以看出来, 这个题目较难,考生注重理解。 填空3:由算法可以看出,指向新的字符串的指针pt在函数的运行过程中被不 断的后移,为了跳出函数之后pt仍然指向新的字符串,必须把它启动到字符串 开头,由前面变量j的使用可以知道,j存储整个字符串长度。 答案:【1】str[][10] 或 (*str)[10] 【2】0 【3】j 【真题2】 给定程序modi.c 中,函数fun 的功能是:根据整型形参m,计算如下 公式的值。 1 1 1 1 y = ──── + ──── + ──── + …… + ─── 100×100 200×200 300×300 m×m 例如,若m=2000,则应输出:0.000160。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >/************found************/ fun (int m) { double y=0,d; int i; /************found************/ for (i=100,i< =m,i+=100) { d=(double)i*(double)i; y+=1.0/d; } return(y); } main() { int n=2000; clrscr(); printf("\nThe result is %lf\n",fun(n)); } (2011年2月) 解析: 本题的考核点是C语言中的函数的入口参数和for 循环控制的格式。 函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普 通的变量说明不同,函数参数必须同时具有变量类型和变量名;另外,当函数 前面的返回数据类型省略时,C 语言默认函数返回整型,本题中n 是整型数 据,由"printf ("\nThe result is %lf\n ",fun ( n ) );"可以看出fun 函数应 该返回浮点型数据,所以fun 函数的返回数据类型不能省略。综上所述,应该 把程序中的"fun ( int m)"语句改为"float fun(int m)"或相同作用的语句。 for 循环语句的一般形式为: for(表达式1;表达式2;表达式3)语句 各表达 式之间用分号间隔。所以,应该把语句"for(i=100,i< =m,i+=100)", 改为 "for(i=100;i< =m;i+=100)"。 【真题3】 请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻 两个元素之平均值的平方根之和。 例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、 18.0、3.0、11.0,输出应为:s=35.951014。 注意:部分源程序在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#include < math.h >double fun(double x[9]) {……} main() { double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0}; int i; printf("\nThe original data is :\n"); for(i=0;i< 9;i++)printf("%6.1f",a[i]); printf("\n\n"); s=fun(a); printf("s=%f\n\n",s); } (2011年2月) 解析: 本题的考核点是c 语言中的基本算法和for 循环语句的使用。 解题思路:本题要求计算并输出给定数组中每相邻两个元素之平均值的平方根 之和,并作为函数值返回。在给出的参考程序中,由于函数要求的返回值为双 精度型,所以先将变量avg、sum定义为双精度型,初值为0.0,然后通过for 循环分别求出相邻两个元素的平均值放入变量avg中,再使用求平方根函数 sqrt()对各平均值开方求和,最终结果输出到变量sum 中并返回。 double fun(double x[9]) {int i ; double avg=0.0,sum=0.0; /*将变量avg、sum定义为双精度型,并给其 赋初值为0.0*/ for (i=0;i< 8;i++) {avg=(x[i]+x[i+1])/2; /*通过for 循环分别求出相邻两个元素的平均值放入 变量avg中*/ sum+=sqrt(avg); /*使用求平方根函数sqrt()对各平均值开方求和,最终结 果输出到变量sum*/ } return sum; /*返回计算结果*/ } |