【真题1】 请补充main 函数,该函数的功能是求方程ax2+bx+c=0 的两个实数 根。方程的系数a、b、c 从键盘输入,如果判别式(disc=b2-4ac)小于0,则要 求重新输入a、b、c 的值。 例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00, x2=-1.00。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编 写的若干表达式或语句。 试题程序: #include "math.h" #include < stdio.h >main() { float a,b,c, disc,x1,x2; clrscr(); do { printf("Input a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); disc=b*b-4*a*c; if(disc< 0) printf("disc=%f\n Input again!\n",disc); }while(【1】); printf("*******the result*******\n"); x1=【2】; x2=【3】; printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2); } (2011年2月) 答案:【1】disc< 0 【2】(-b+sqrt(disc))/(2*a) 【3】(-b-sqrt(disc))/(2*a) 【真题2】 下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的 值。 t=1-1/2+1/3-1/4+…+(-1)(m+1)/m 例如,若输入5,则应输出0.783333。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 #include < conio.h >#include < stdio.h >/**********************found***********************/ int fun(int m) { double t=1.0,j=1.0; int i; /**********************found***********************/ for(i=1;i< m;i++) {j=-1*j;t+=j/i;} return t; } main() { int m; clrscr(); printf("\nPlease enter 1 integer number: "); scanf("%d",&m); printf("\nThe result is %lf\n", fun(m)); } (2011年2月) 解析: (1)错误:int fun(int m) 正确:double fun(int m) (2)错误:for(i=1;i< m;i++) 正确:for(i=2;i< =m;i++) 错误:函数的返回值为实型数,所以应定义为double类型。 错误2:根据题目的公式,参加运算的数应从2到m,包括m。 疑难解答 → http://www.51pass.org/jxqzsl 【真题3】 请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n 个整数,要求把下标从0 到p(含p,p 小于等于n-1)的数组元素平移到数组的最 后。 例如,一维数组中的原始内容为: 1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一 维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#define N 80 void fun(int *w, int p, int n) {……} main() { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15; printf("The original data:\n"); for(i=0; i< n; i++)printf("%3d",a[i]); printf("\n\nEnter p: ");scanf("%d",&p); fun(a,p,n); printf("\nThe data after moving:\n"); for(i=0; i< n; i++)printf("%3d",a[i]); printf("\n\n"); } 解析: 本题的考核点是一维数组的应用。 解题思路:本题要求把下标从0到p(含p,p小于等于n-1)的数组元素平移 到数组的最后,可以根据输入的p值,通过for 循环语句,将p+1 到n-1(含 n-1)之间的数组元素依次向前移动p+1个存储单元,即w[j-1]=w[j];,同 时将0 到p个数组元素逐一赋给数组w[n-1],也就是通过语句w[n-1]=ch; 来实现此操作的。 void fun(int *w, int p, int n) {int x,j,ch; for(x=0;x< =p;x++) {ch=w[0]; for(j=1;j< n;j++) /*通过for 循环语句,将p+1到n-1(含n-1)之间的 数组元素依次向前移动p+1 个存储单元*/ { w[j-1]=w[j]; } w[n-1]=ch; /*将0到p个数组元素逐一赋给数组w[n-1]*/ } } |