1、填空题1. 请补充main函数,该函数的功能是求方程ax
2+bx+c=0的两个实数根。方程的系数a、b、c从键盘输入,如果判别式 (disc=b
2-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,ac);
disc=b*b-4*a*c;
if(disc<0)
printf("disc=%f\n Input again!
\n",disc);
}while(
);
printf("****+* the result *+*****\n");
x1=
;
x2=
;
printf("\nx1=%6.2f\nx2=%6.2f\n",x1/x2);
}
【1】disc<0 【2】(-b+sqrt(disc))/(2*a) 【3】(-b-sqd(disc))/(2*a)
[解析] 填空1:题目要求当判别式disc小于0时,要重新输入a、b、c的值,所以do--while循环的执行条件是disc<0。
填空2:方程ax
2+bx+c=0的一个实数根是:

。填空3:方程ax
2+bx+c=0的另一个实数根是:

。
2、改错题1. 下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)
(m+1)/(m×m)
例如:m中的值为5,则应输出0.838611。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <conio.h>
#include <stdio.h>
double fun(int m)
{double y=1.0;
/**********found*************/
int j=1;
int i;
for(i=2;i<=m;i++)
{
j=-1*j;
/****************found*******+******/
y+=1/(i*i);
}
return(y);
}
main()
{
int n=5;
clrscr();
printf("\n The result is %lf\n",fun(n));
}
(1)错误:int j=1 正确:double j=1.0;
(2)错误:y+=1/(i*i); 正确:y+=j/(i*i);
[解析] 错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运算,通过来实现。
3、编程题1. 请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{
}
main()
{
int t[M] [N]={{68,32,54,12},{14,24,88,
58},{42, 22, 44, 56}};
int p[N],i,j,k;
clrscr();
printf("The riginal data is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nThe result is:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}
void fun(int tt[M][N],int pp[N])
{
int i,i,max;
for(j=0;j<N;j++)
{
max=tt[0][j]; /*假设各列中的第一个元素最大*/
for(i=0;i<M;i++)
if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/
max=tt[i][j];
pp[j]=max; /*将各列的最大值依次放入pp数组中*/
}
}
[解析] 本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。