急。 某班学生的学习成绩登记表如下,要求用多个二维数组进行存储,并求出每个学生的平均分,急需呀。。。

某班学生的学习成绩登记表如下,要求用多个二维数组进行存储,并求出每个学生的平均分,用一维数组存储,最后按平均分排升序,重新输出学生的纪录。
学生成绩登记表:
学号 姓名 数学 物理 英语 计算机
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]);
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-18
建议你把数据存入数据库。。。怎么说呢,考虑到现在操作系统问题,还是建议你用ACCESS吧。
存入后,你的所有问题都解决了。AVG,ORDER BY就这两个关键词
第2个回答  2017-09-06
用数组公式,很方便的。
相似回答
大家正在搜