C语言编程,输入10个学生5门课的成绩,分别用函数实现以下功能:

2024-12-04 20:26:09
推荐回答(5个)
回答1:

#include
#include
main()
{
int i,j,li=0,lj=0;
float score[10][5],average[10],a1,a2,a3,a4,a5,largest=0,fc=0,a=0;
//score是50个学生的成绩,average是5门课的平均成绩,a1-a5分别是5门课的平均成绩,li是最高分的学生
//lj是最高分的学科,largest是最高分,fc是平均分方差,a是50个成绩的平均分
printf("请输入10个学生的成绩,按照语文、数学、英语、物理、化学的顺序依次输入:\n");
for(i=0;i!=10;++i)
{
printf("第%d个学生:\n",i+1);
for(j=0;j!=5;++j)
{
scanf("%f",&score[i][j]);
if(largest{
largest=score[i][j];
li=i+1;
lj=j+1;
}
a=a+score[i][j];
}
average[i]=(score[i][0]+score[i][1]+score[i][2]+score[i][3]+score[i][4])/5;
a1=a1+score[i][0];
a2=a2+score[i][1];
a3=a3+score[i][2];
a4=a4+score[i][3];
a5=a5+score[i][4];
}
a=a/50;
for(i=0;i!=10;++i)
{
for(j=0;j!=5;++j)
{
fc=fc+(score[i][j]-a)*(score[i][j]-a);
}

}
fc=fc/50;
a1=a1/10;
a2=a2/10;
a3=a3/10;
a4=a4/10;
a5=a5/10;
printf("50个学生的成绩如下:\n");
printf("学生编号 语文 数学 英语 物理 化学\n");
for(i=0;i!=10;++i)
{
printf("%8d ",i);
for(j=0;j!=5;++j)
{
printf("%2.2f ",score[i][j]);
}
printf("\n");
}
for(i=0;i!=10;++i)
printf("第%d个学生的平均分为:%.2f\n",i+1,average[i]);
printf("第1门课的平均分为:%.2f\n",a1);
printf("第2门课的平均分为:%.2f\n",a2);
printf("第3门课的平均分为:%.2f\n",a3);
printf("第4门课的平均分为:%.2f\n",a4);
printf("第5门课的平均分为:%.2f\n",a5);
printf("50个分数中最高的分数是第%d个学生的第%d门课,分数为:%.2f\n",li,lj,largest);
printf("平均分方差为:%.2f\n",fc);
system("pause");
}

回答2:

#include
#include

//定义了5门科目的名字,自己改科目名字。
#define SUBJECT1 "语文"
#define SUBJECT2 "数学"
#define SUBJECT3 "英语"
#define SUBJECT4 "物理"
#define SUBJECT5 "综合"

float averagescore[100]={0}; //存放每个学生的平均分

int main()
{
void allnamescore(char name[][100],float score[][5],int count); //输出所有学生成绩
void print_sbaverage(char name[][100],float score[][5],int count); //打印每个学生的平均分
void subjectaverage(char name[][100],float score[][5],int count); //每门科目的平均分
void highscore(char name[][100],float score[][5],int count); //所有成绩中最高分对应的学生和科目
void variancescore(char name[][100],float score[][5],int count); //每个学生平均分方差

char name[100][100]={'\0'}; //存放学生名字,最多存放100个学生
float score[100][5]={0}; //存放学生各科成绩,最多存放100条记录,每条记录5门科目
int i,count; //专用于循环,count是统计学生数量
char sign; //sign是操作列表菜单值

while(1) //主程序核心代码循环,用于程序重新运行,即重新录入所有学生所有信息。
{
//输入名字
printf("说明:\n名字输入结束后,请输入0结束名字输入\n");
for(i=0;i<100;i++)
{
printf("请输入第%d个名字:",i+1);
gets(name[i]);
if(name[i][0]=='0')break;
}
count=i;

//输入成绩
printf("说明:\n每个学生分别输入%s %s %s %s %s的成绩,用空格隔开。\n",SUBJECT1,SUBJECT2,SUBJECT3,SUBJECT4,SUBJECT5); //SUBJECT1~5见开头define
printf("当发现上一个学生成绩输入错误,请输入-1。\n当发现有更前的成绩输入错误是,请输入-2进行所有成绩重新输入。\n");
for(i=0;i{
printf("请输入%s的成绩,用空格隔开:",name[i]);
scanf("%f",&score[i][0]);
if(score[i][0]==-1)
{
i-=2;continue;
}
else if(score[i][0]==-2)
{
i=-1;continue;
}
scanf("%f %f %f %f",&score[i][1],&score[i][2],&score[i][3],&score[i][4]);
getchar();
}

allnamescore(name,score,count);//输出所有学生成绩

while(1)
{
printf("请输入要进行操作对应的数字:\n");
printf("1、查询所有学生成绩:\n");
printf("2、计算每个学生的平均分:\n");
printf("3、计算每一门科目的平均分:\n");
printf("4、找出所有成绩中分数最高的那个学生及对应的科目:\n");
printf("5、计算每一位同学的平均分方差:\n");
printf("0、格式化全部数据(清空学生名字和所有成绩):\n");
scanf("%c",&sign);
getchar();
switch(sign)
{
case '1':allnamescore(name,score,count);break;
case '2':print_sbaverage(name,score,count);break;
case '3':subjectaverage(name,score,count);break;
case '4':highscore(name,score,count);break;
case '5':variancescore(name,score,count);break;
case '0':;break;
default :printf("输入有误,请重新输入\n");break;
};

if(sign=='0')break; //退出循环,即进入重新运行程序的循环操作
}

//已经没有核心代码,准备结束程序了。按0就结束程序,否则程序重新走一遍。
printf("输入0退出程序,输入其他内容重新开始程序\n");
scanf("%c",&sign);
getchar();
if(sign=='0')break;
}

return 0;
}

//输出所有人的成绩
void allnamescore(char name[][100],float score[][5],int count)
{
int i;
printf("%20s\t%s\t%s\t%s\t%s\t%s\n"," ",SUBJECT1,SUBJECT2,SUBJECT3,SUBJECT4,SUBJECT5);
for(i=0;i{
printf("%20s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",name[i],score[i][0],score[i][1],score[i][2],score[i][3],score[i][4]);
}
}

//计算每个学生的平均分
void sbaverage(char name[][100],float score[][5],int count)
{
int i;
for(i=0;i{
averagescore[i]=(score[i][0]+score[i][1]+score[i][2]+score[i][3]+score[i][4])/5;
}
}

//打印每个学生的平均分
void print_sbaverage(char name[][100],float score[][5],int count)
{
void sbaverage(char name[][100],float score[][5],int count); //声明计算每个学生的平均分
int i;
if(averagescore[0]==0)sbaverage(name,score,count); //当发现没有值时,表示没有计算过平均分,得调用函数计算一下平均分
for(i=0;i{
printf("%20s\t%.2f\n",name[i],averagescore[i]);
}
}

//每门科目的平均分
void subjectaverage(char name[][100],float score[][5],int count)
{
float average[5]={0}; //用于存放5门科目的平均分。先放总分,再除count得到平均分
int line,item; //line表示行,item表示列

//计算每门科目的平均分
for(item=0;item<5;item++) //一共有5门科目
{
for(line=0;line{
average[item]+=score[line][item]; //暂存总分,最后再除count得到平均分
}
average[item]/=count; //总分最后除count得到平均分
}

//输出每门科目的平均分
printf("%20s\t%s\t%s\t%s\t%s\t%s\n%20s","科目:",SUBJECT1,SUBJECT2,SUBJECT3,SUBJECT4,SUBJECT5,"平均分:");
for(item=0;item<5;item++) //一共有5门科目
{
printf("\t%.2f",average[item]);
}
printf("\n");
}

//所有成绩中最高分对应的学生和科目
void highscore(char name[][100],float score[][5],int count)
{
float maxscore; //存放最高分
char subject[10]={'\0'}; //存放最高分的科目
int line,item,maxline,maxitem; //line和item分别是行列标。maxline存放最高分的行号,maxitem存放最高分的列号

//查找最高分的坐标
for(line=maxscore=0;line{
for(item=0;item<5;item++)
{
if(score[line][item]>maxscore)maxscore=score[maxline=line][maxitem=item];
}
}

//最高分的科目是哪一科。
switch(maxitem)
{
case 0:strcpy(subject,SUBJECT1);break;
case 1:strcpy(subject,SUBJECT2);break;
case 2:strcpy(subject,SUBJECT3);break;
case 3:strcpy(subject,SUBJECT4);break;
case 4:strcpy(subject,SUBJECT5);break;
}
printf("%s的%s最高分,分数为%.2f\n",name[maxline],subject,score[maxline][maxitem]);
}

//每个学生平均分方差
void variancescore(char name[][100],float score[][5],int count)
{
void sbaverage(char name[][100],float score[][5],int count); //声明计算每个学生的平均分
float variance; //方差值
float average2,average1; //average2存放每个平均分的平方和,average1存放每个平均分的总和。
int i; //计数专用

if(averagescore[0]==0)sbaverage(name,score,count);
else
{
//average2存放每个平均分的平方和
for(i=average2=0;i{
average2+=averagescore[i]*averagescore[i];
}

//average1存放每个平均分的总和
for(i=average1=0;i{
average1+=averagescore[i];
}

variance=average2/count-(average1/count)*(average1/count); //方差
printf("平均分方差:%f\n",variance);
}
}

回答3:

#include
#include
main()
{
int
i,j,li=0,lj=0;
float
score[10][5],average[10],a1,a2,a3,a4,a5,largest=0,fc=0,a=0;
//score是50个学生的成绩,average是5门课的平均成绩,a1-a5分别是5门课的平均成绩,li是最高分的学生
//lj是最高分的学科,largest是最高分,fc是平均分方差,a是50个成绩的平均分
printf("请输入10个学生的成绩,按照语文、数学、英语、物理、化学的顺序依次输入:\n");
for(i=0;i!=10;++i)
{
printf("第%d个学生:\n",i+1);
for(j=0;j!=5;++j)
{
scanf("%f",&score[i][j]);
if(largest{
largest=score[i][j];
li=i+1;
lj=j+1;
}
a=a+score[i][j];
}
average[i]=(score[i][0]+score[i][1]+score[i][2]+score[i][3]+score[i][4])/5;
a1=a1+score[i][0];
a2=a2+score[i][1];
a3=a3+score[i][2];
a4=a4+score[i][3];
a5=a5+score[i][4];
}
a=a/50;
for(i=0;i!=10;++i)
{
for(j=0;j!=5;++j)
{
fc=fc+(score[i][j]-a)*(score[i][j]-a);
}
}
fc=fc/50;
a1=a1/10;
a2=a2/10;
a3=a3/10;
a4=a4/10;
a5=a5/10;
printf("50个学生的成绩如下:\n");
printf("学生编号
语文
数学
英语
物理
化学\n");
for(i=0;i!=10;++i)
{
printf("%8d
",i);
for(j=0;j!=5;++j)
{
printf("%2.2f
",score[i][j]);
}
printf("\n");
}
for(i=0;i!=10;++i)
printf("第%d个学生的平均分为:%.2f\n",i+1,average[i]);
printf("第1门课的平均分为:%.2f\n",a1);
printf("第2门课的平均分为:%.2f\n",a2);
printf("第3门课的平均分为:%.2f\n",a3);
printf("第4门课的平均分为:%.2f\n",a4);
printf("第5门课的平均分为:%.2f\n",a5);
printf("50个分数中最高的分数是第%d个学生的第%d门课,分数为:%.2f\n",li,lj,largest);
printf("平均分方差为:%.2f\n",fc);
system("pause");
}

回答4:

(1)求每个学生的平均分;
(2)求每门课程的平均分。
#include
#include
#define num 10

typedef struct student
{
char name[20];
float math;
float englis;
float computer;
float Chinese;
float history;
}STUDENT;

int main(void)
{
STUDENT stu[num];
int i;
float score,sum,average;
char s[10];
float scoreMath,scoreEng,scoreCom,scoreChi,scoreHis;

for(i=0;i {
printf("Name: ");
gets(stu[i].name);

printf("math score: ");
scanf("%f",&score);
stu[i].math = score;

printf("englis score: ");
scanf("%f",&score);
stu[i].englis = score;

printf("computer score: ");
scanf("%f",&score);
stu[i].computer = score;

printf("Chinese score: ");
scanf("%f",&score);
stu[i].Chinese = score;

printf("history score: ");
scanf("%f",&score);
stu[i].history = score;

gets(s);//功能是接受最后一个回车符,然后下一次gets(stu[i].name);才能起到作用

}

//求每个学生的平均分数
for(i=0;i {
sum=0;
sum +=stu[i].math;
sum +=stu[i].englis;
sum +=stu[i].computer;
sum +=stu[i].Chinese;
sum +=stu[i].history;
average = sum/5;

printf("%s's average score is:%f\n",stu[i].name,average);
}

//求每门课的平均成绩
scoreMath=0;
scoreEng=0;
scoreCom=0;
scoreChi=0;
scoreHis=0;
for(i=0;i {
scoreMath += stu[i].math;
scoreEng += stu[i].englis;
scoreCom += stu[i].computer;
scoreChi += stu[i].Chinese;
scoreHis += stu[i].history;
}

printf("math's average score is:%f\n",scoreMath/num);
printf("englis's average score is:%f\n",scoreEng/num);
printf("computer's average score is:%f\n",scoreCom/num);
printf("Chinese's average score is:%f\n",scoreChi/num);
printf("history's average score is:%f\n",scoreHis/num);

return 0;
}

回答5:

#include
#include
main()
{
int
i,j,li=0,lj=0;
float
score[10][5],average[10],a1,a2,a3,a4,a5,largest=0,fc=0,a=0;
//score是50个学生的成绩,average是5门课的平均成绩,a1-a5分别是5门课的平均成绩,li是最高分的学生
//lj是最高分的学科,largest是最高分,fc是平均分方差,a是50个成绩的平均分
printf("请输入10个学生的成绩,按照语文、数学、英语、物理、化学的顺序依次输入:\
");
for(i=0;i!=10;++i)
{
printf("第%d个学生:\
",i+1);
for(j=0;j!=5;++j)
{
scanf("%f",&score[i][j]);
if(largest{
largest=score[i][j];
li=i+1;
lj=j+1;
}
a=a+score[i][j];
}
average[i]=(score[i][0]+score[i][1]+score[i][2]+score[i][3]+score[i][4])/5;
a1=a1+score[i][0];
a2=a2+score[i][1];
a3=a3+score[i][2];
a4=a4+score[i][3];
a5=a5+score[i][4];
}
a=a/50;
for(i=0;i!=10;++i)
{
for(j=0;j!=5;++j)
{
fc=fc+(score[i][j]-a)*(score[i][j]-a);
}
}
fc=fc/50;
a1=a1/10;
a2=a2/10;
a3=a3/10;
a4=a4/10;
a5=a5/10;
printf("50个学生的成绩如下:\
");
printf("学生编号
语文
数学
英语
物理
化学\
");
for(i=0;i!=10;++i)
{
printf("%8d
",i);
for(j=0;j!=5;++j)
{
printf("%2.2f
",score[i][j]);
}
printf("\
");
}
for(i=0;i!=10;++i)
printf("第%d个学生的平均分为:%.2f\
",i+1,average[i]);
printf("第1门课的平均分为:%.2f\
",a1);
printf("第2门课的平均分为:%.2f\
",a2);
printf("第3门课的平均分为:%.2f\
",a3);
printf("第4门课的平均分为:%.2f\
",a4);
printf("第5门课的平均分为:%.2f\
",a5);
printf("50个分数中最高的分数是第%d个学生的第%d门课,分数为:%.2f\
",li,lj,largest);
printf("平均分方差为:%.2f\
",fc);
system("pause");
}