}
double f1(float a,float b,float c,double x) {
return 3*a*x*x+2*b*x+c; }
double root(float a,float b,float c,float d,double x) {
double x0; do
{ x0=x;
x=x0-f(a,b,c,d,x0)/f1(a,b,c,x0); }
while(fabs(x-x0)>1e-5); return x; }
void main() {
float a, b, c, d; double x;
a=1;b=2;c=3;d=4; x=1;
x=root(a,b,c,d,x);
printf (\}
8.13用递归方法求n阶勒让德多项式的值,递归公式为: #include \
double P(double x, int n) { if(n==0) return 1; if(n==1) return x;
if(n>1) return ((2*n-1)*x-P(x,n-1)-(n-1)*P(x,n-2))/n; }
void main()
{ double x; int n;
double P(double x, int n); scanf(\ printf(\
8.14输入10个学生5门课的成绩,分别用函数实现下列功能: (1)计算每个学生的平均分; (2)计算每门课的平均分;
(3)找出所有50个分数中的最高的分数所对应的学生和课程; (4)求出平均分方差;
其中, 为某一学生的平均分。
解:函数input_stu的执行结果是给全程变量学生成绩数组score各元素输入初值。
函数aver_stu的作用是计算每个学生的平均分,并将结果赋给全程变量数组a_stu中各元素。 函数aver_cour的作用是计算每门课的平均成绩,计算结果存入全程变量数组a_cour。 函数highest的返回值是最高分,r,c是两个全局变量,分别代表最高分所在的行,列号。 函数s_var的返回值是平均分的方差。 程序如下: 【程序一】
#include
float s_var(float a_stu[N]);
void highest(int score[N][M]); /* 函数原型声明 */ void input_stu(int score[N][M]); /* 函数原型声明 */ void aver_stu(int score[N][M],float a_stu[N]); /* 函数原型声明 */ void aver_cour(int score[N][M],float a_cour[M]); /* 函数原型声明 */
void main() {
int score [N][M];
float a_stu [N],a_cour[M]; /*各个学生平均分,各门课程平均分*/ int i,j;
input_stu(score ); /* 函数调用,输入10个学生成绩 */ aver_stu(score,a_stu); /* 函数调用,计算10个学生平均成绩 */ aver_cour(score,a_cour); /* 函数调用,计算5门课平均成绩 */ printf(\ cour1 cour2 cour3 cour4 cour5 aver\ for (i=0;i printf(\ /* 输出学生序号 */ for (j=0;j printf(\ /* 输出某个学生的平均成绩 */ } printf(\ for (j=0;j highest(score); /* 调用函数,求最高分和它属于哪个学生,哪门课 */ printf(\ /* 调用函数,计算和输出方差 */ } void input_stu(int score[N][M]) /* 输入10个学生成绩的函数 */ { int i,j; for (i=0;i printf(\ /* 学生号从1开始 */ for (j=0;j scanf(\ }} void aver_stu(int score[N][M],float a_stu[N]) /* 计算各个学生平均成绩的函数 */ { int i,j; float s; for (i=0;i s=0; for (j=0;j void aver_cour(int score[N][M],float a_cour[M]) /* 计算各门课的平均成绩的函数 */ { int i,j; float s; for (j=0;j s=0; for (i=0;i void highest(int score[N][M]) /* 求最高分和它属于哪个学生,哪门课的函数 */ { int high; int i,j,row,column; high=score[0][0]; for (i=0;i for (j=0;j high=score[i][j]; row=i+1; /* 数组行号i从0开始,学生号r从1开始,故row=i+1 */ column=j+1; /*数组列号j从0开始,学生号c从1开始,故column=j+1 */ } printf(\} float s_var(float a_stu[N]) /* 求方差的函数 */ { int i,j; float sumx,sumxn; sumx=0.0; sumxn=0.0; for (i=0;i sumx+=a_stu[i]*a_stu[i]; sumxn+=a_stu[i]; } return (sumx/N-(sumxn/N)*(sumxn/N)); }【程序二】 #include # define N 10 /*学生人数*/ # define M 5 /*课程数*/ void input_stu(int score[N+1][M+1]) /* 该函数的功能输入10个学生成绩 */ { int i,j; for (i=0;i scanf(\ } }void aver_stu(int score[N+1][M+1],int a_stu[N]) /* 该函数的功能:计算每个学生的平均成绩 */ { int i,j; for (i=0;i score[i][M]=0; for (j=0;j score[i][M]+=score[i][j]; score[i][M]=score[i][M]/M; a_stu[i]= score[i][M]; } } void aver_cour(int score[N+1][M+1]) /* 该函数的功能:计算每门课的平均成绩 */ { int i,j; for (j=0;j score[N][j]=0; for (i=0;i score[N][j]+=score[i][j]; score[N][j]=score[N][j]/N; } } void highest(int score[N+1][M+1]) /* 求最高分和它属于哪个学生,哪门课的函数 */ { int max; int i,j,row,col; max=score[0][0]; for (i=0;i for (j=0;j max=score[i][j]; row=i+1; col=j+1; } printf(\} float s_var(int a_stu[N]) /* 求方差的函数 */ { int i,j; float sumx,sumxn; sumx=0.0; sumxn=0.0; for (i=0;i sumx+=a_stu[i]*a_stu[i]; sumxn+=a_stu[i]; } return (sumx/N-(sumxn/N)*(sumxn/N)); } void output_stu(int score[N+1][M+1]) { int i,j; printf(\ Students Reprot\\n \ /* 输出结果*/ for(i=0;i<33;i++) printf(\ printf(\ for(i=0;i<=N;i++) { for(j=0;j<=M;j++) if(i