#include <stdio.h>
#include <math.h>
int stu[11][7]= {0}; //定义全局数组
void aver_stu(int t[11][7]); //定义学生平均分函数
void aver_course(int t[11][7]); //定义课程平均分函数
void high(int t[11][7]); //定义最高分函数
void vari(int t[11][7]); //定义方差函数
int main() {
int i, j;
for (i=0; i<10; i++) {
for (j=1; j<6; j++)
scanf("%d", &stu[i][j]);
} //循环输入10个学生各5门课的成绩
for (i=0; i<10; i++)
stu[i][0]=i+1;
printf("序号 课程1 课程2 课程3 课程4 课程5 平均分\n");
aver_stu(stu); //调用学生平均分函数
aver_course(stu); //调用课程平均分函数
for (i=0; i<11; i++) {
for (j=0; j<7; j++)
printf("%6d",stu[i][j]);
printf("\n");
}
high(stu); //调用最高分函数
vari(stu); //调用方差函数
return 0;
}
//学生平均分函数
void aver_stu(int t[11][7]) {
int i, j;
int k, ave;
for (i=0; i<10; i++) {
k=0;
for (j=1; j<6; j++) {
k+=t[i][j];
}
ave=k/5;
t[i][7]=ave;
}
}
//课程平均分函数
void aver_course(int t[11][7]) {
int i, j;
int k, ave;
for (j=1; j<6; j++) {
k=0;
for (i=0; i<10; i++) {
k+=t[i][j];
}
ave=k/10;
t[11][j]=ave;
}
}
//最高分函数
void high(int t[11][7]) {
int i, j, h,stu,cour;
for (i=0, h=0, stu=0, cour=0; i<10; i++) {
for (j=1; j<6; j++)
if (t[i][j]>h) {
h=t[i][j];
stu=i+1;
cour=j+1;
}
}
printf("\n最高分是 %d, 来自 No.%d 学生 & No.%d 课程\n", h, stu, cour);
}
//方差函数
void vari(int t[11][7]) {
int i, j, k, m;
float temp[10], var, x1, x2;
for (i=0, m=0; i<10; i++, m++) {
for (j=1, k=0; j<6; j++)
k+=t[i][j]; // 每个人的每门课累加循环
temp[m]=k/5; // 每个人的平均分
}
for (i=m=x1=x2=0; i<10; i++) {
x1+=pow(temp[i], 2);// 每个人的平均分平方的累加
x2+=temp[i]; // 每个人的平均分的累加
}
var=x1/10-pow(x2/10, 2); // 按公式求的平均分方差
printf("方差是 %f\n", var);
}
结果如下:
请教大神代码错在哪里?
你求了平均分好像并没有输出,你仔细看下。
输出正常,只是间隔没对齐而已
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员【8折】购 ,仅需→¥23.2,即可享受5次/月 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m