【真题1】 请补充函数fun,该函数的功能是比较字符串str1 和str2 的大小,并返 回比较的结果。 例如: 当str1=“cdef”,str2=“cde”时,函数fun()返回“ >”。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编 写的若干表达式或语句。 试题程序: #include< stdio.h >#include< conio.h >#define N 80 char *fun(char *str1,char *str2) { char *p1=str1,*p2=str2; while(*p1&&*p2) { if(【1】) return "< "; if(【2】) return " >"; p1++; p2++; } if(*p1==*p2) return "=="; if(*p1==【3】) return "< "; else return " >"; } main() { char str1[N],str2[N]; clrscr(); printf("Input str1:\n"); gets(str1); printf("Input str2:\n"); gets(str2); printf("\n*****the result*****\n"); printf("\nstr1 %s str2",fun(str1,str2)); } (2011年2月) 解析: 填空1:比较两个字符串的大小,是从第一个字符开始比较,如果两字 符不相等,则由字符的大小决定字符串的大小;如果两字符相等,则继续比较 下一个字符,如果所有字符都相等,则两字符串相等。指针P1 指向字符串 str1,指针P2指向字符串str2,如果p1 所指的字符小于p2 所指的字符,则 字符串str1 小于字符串str2。填空2:如果p1 所指的字符大于p2 所指的字 符,则字符串str1 大于字符串str2。填空3:如果str1是str2 的前一部分, 则str1 的所有字符都等于str2 中的对应字符,而字符串结束标记符‘\0'小于其 他字符,所以,这里如果p1 所指的字符等于'\0',则表示字符串str1 小于字符 串str2。 答案:【1】*p1< *p2 【2】*p1 >*p2 【3】′\0′ 【真题2】 给定程序modi.c 中,函数fun 的功能是:根据以下公式求π 值,并作 为函数值返回。 π 1 1 2 1 2 3 1 2 3 4 ─ = 1 + ─ + ─×─ + ─×─×─ + ─×─×─×─ +…… 2 3 3 5 3 5 7 3 5 7 9 例如,给指定精度的变量eps 输入0.0005 时,应当输出Pi=3.140578。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < math.h >#include < stdio.h >double fun(double eps) { double s,t; int n=1; s=0.0; /************found************/ t=0; while (t >eps) {s+=t; t=t*n/(2*n+1); n++; } /************found************/ return(s); } main() {double x; printf("\nPlease enter a precision:");scanf("%lf",&x); printf("\neps=%lf,Pi=%lf\n\n",x,fun(x)); } (2011年2月) 解析: 本题的考核点是根据公式求π 值。 本题中的第一个错误:变量t是用来累计表达式的乘积,它的初值应为1,所以 程序中的语句"t=0;"应改为"t=1;"; 本题中的第二个错误:由程序可知,变量s 中存放的是π/2 的值,而不是π的 值,所以程序中的语句"return(s);"应改为"return(s*2);"或相同作用的语 句。 本评析仅作参考。 【真题3】 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和 它所在的下标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函 数中赋予。主函数中x是数组名, n 是x中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdlib.h >#include < stdio.h >void fun(int a[], int n , int *max, int *d ) {……} main() { int i, x[20], max , index, n = 10; randomize() ; for (i=0;i < n;i++) {x[i] = rand()%50; printf("%4d", x[i]) ; } printf("\n"); fun( x, n , &max, &index); printf("Max =%5d , Index =%4d\n",max, index ); } (2011年2月) 解析: 本题的考核点是数组、循环语句和比较算法。 提示思路:先取出数组中的第一个元素,然后通过循环语句依次用数组中的其 他元素与其作比较,如果大于第一个元素则交换两者的值,并记录此数组元素 的下标,直到数组中的元素都比较完为止。 #include < stdlib.h > #include < stdio.h > void fun(int a[], int n , int *max, int *d ) { int i,base,subscript; base=a[0]; /*假定第一个元素的值最大*/ subscript=0; /*subscript 用于存放数组下标*/ for(i=1;i< n;i++) { if(a[i] >base) { /*将数组中的其他元素与变量base作比较,如果大于它则 交换两者的值*/ subscript=i; base=a[i]; } } *max=base; /*将最大值元素的值赋给*max*/ *d=subscript; /*将最大值元素的下标赋给*d*/ } |