某班学生的学习成绩登记表如下,要求用多个二维数组进行存储,并求出每个学生的平均分,用一维数组存储,最后按平均分排升序,重新输出学生的纪录。
学生成绩登记表:
学号 姓名 数学 物理 英语 计算机
99077101 张红 85 90 92 88
99077102 王建 90 95 95 90
99077103 王连 76 78 80 70
99077104 李立 56 36 66 97
99077105 刘虹 78 79 87 89
99077106 丁平 89 79 70 87
程序输出:
学号 姓名 数学 物理 英语 计算机 平均成绩
99077104 李立 56 36 66 97 63.5
99077103 王连 76 78 80 70 76
99077106 丁平 89 79 70 87 81.2
99077105 刘虹 78 79 87 89 83.2
99077101 张红 85 90 92 88 88.5
99077102 王建 90 95 95 90 92.5
//我是从文件读的最后一行也要回车
学号 姓名 数学 物理 英语 计算机
99077101 张红 85 90 92 88
99077102 王建 90 95 95 90
99077103 王连 76 78 80 70
99077104 李立 56 36 66 97
99077105 刘虹 78 79 87 89
99077106 丁平 89 79 70 87
学号 姓名 数学 物理 英语 计算机 平均成绩
99077104 李立 56 36 66 97 63.75
99077103 王连 76 78 80 70 76.00
99077106 丁平 89 79 70 87 81.25
99077105 刘虹 78 79 87 89 83.25
99077101 张红 85 90 92 88 88.75
99077102 王建 90 95 95 90 92.50
Press any key to continue
#include <stdio.h>
#include <string.h>
main()
{
int i=0,j,s[4]={0};
float aver[6]={0},tmp;
FILE *fp=fopen("data.txt","r");
char line[150]={0},info[6][150]={0};
fgets(line,149,fp);
printf("学号\t\t姓名\t数学\t物理\t英语\t计算机\n");
while (fgets(line,149,fp))
{
printf("%s",line);
j=strlen(line);
line[j-1]='\0';
strcpy(info[i],line);
sscanf(line,"%*s %*s %d %d %d %d\n",&s[0],&s[1],&s[2],&s[3]);
aver[i++]=(float)((s[0]+s[1]+s[2]+s[3])/4.0);
}
for (i=0;i<6-1;i++)
{
for (j=0;j<6-i-1;j++)
{
if (aver[j]>aver[j+1])
{
tmp=aver[j];
aver[j]=aver[j+1];
aver[j+1]=tmp;
strcpy(line,info[j]);
strcpy(info[j],info[j+1]);
strcpy(info[j+1],line);
}
}
}
printf("学号\t\t姓名\t数学\t物理\t英语\t计算机\t平均成绩\n");
for (i=0;i<6;i++)
{
printf("%s\t%.2f\n",info[i],aver[i]);
}
}
追问能写成手动输入么?
追答更简单
学号 姓名 数学 物理 英语 计算机
99077101 张红 85 90 92 88
99077102 王建 90 95 95 90
99077103 王连 76 78 80 70
99077104 李丽 56 36 66 97
99077105 刘虹 78 79 87 89
99077106 丁平 89 79 70 87
^Z
学号 姓名 数学 物理 英语 计算机 平均成绩
99077104 李丽 56 36 66 9 41.75
99077103 王连 76 78 80 7 60.25
99077106 丁平 89 79 70 8 61.50
99077105 刘虹 78 79 87 8 63.00
99077101 张红 85 90 92 8 68.75
99077102 王建 90 95 95 9 72.25
Press any key to continue
#include
#include
main()
{
int i=0,j,s[4]={0};
float aver[6]={0},tmp;
char line[150]={0},info[6][150]={0};
printf("学号\t\t姓名\t数学\t物理\t英语\t计算机\n");
while (gets(line))
{
j=strlen(line);
line[j-1]='\0';
strcpy(info[i],line);
sscanf(line,"%*s %*s %d %d %d %d\n",&s[0],&s[1],&s[2],&s[3]);
aver[i++]=(float)((s[0]+s[1]+s[2]+s[3])/4.0);
}
for (i=0;iaver[j+1])
{
tmp=aver[j];
aver[j]=aver[j+1];
aver[j+1]=tmp;
strcpy(line,info[j]);
strcpy(info[j],info[j+1]);
strcpy(info[j+1],line);
}
}
}
printf("学号\t\t姓名\t数学\t物理\t英语\t计算机\t平均成绩\n");
for (i=0;i<6;i++)
{
printf("%s\t%.2f\n",info[i],aver[i]);
}
}