求c++高手 帮改错!!!!

原题是
某班有10名学生,每名学生的数据包括学号、姓名、3门课程的成绩。
编写程序从键盘输入10名学生数据,并打印出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均成绩)。
下面是我编的程序
帮改下!!
#include<stdio.h>
main()
{
struct student
{
long num;
char name;
char score[3];
};
struct student stu[10];
int i,s=0,j,b,c,d,max0,max1,max2;
double aver;
for(i=0;i<10;i++)
scanf("%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
for(i=0;i<10;i++)
if(stu[i].score[0]>0)
max0=stu[i].score[0];
b=i;
for(j=0;j<3;j++)
printf("%d%c%lf\n",stu[b].num,stu[b].name,stu[b].score[j]);
for(i=0;i<10;i++)
if(stu[i].score[1]>0)
max1=stu[i].score[1];
c=i;
for(j=0;j<3;j++)
printf("%d%c%lf\n",stu[c].num,stu[c].name,stu[c].score[j]);
for(i=0;i<10;i++)
if(stu[i].score[2]>0)
max2=stu[i].score[2];
d=i;
for(j=0;j<3;j++)
printf("%d%c%lf\n",stu[d].num,stu[d].name,stu[d].score[j]);
for(i=0;i<10;i++)
for(j=0;j<3;j++)
{
s=s+stu[i].score[j];
}
aver=s/30;
printf("aver=%lf\n",aver);
}

scanf("%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
电脑无法识别你输入的是什么
比如
10abc10101010
那么学号为10,学生名为abc,但是后边的数字呢?1010,可以理解成1010分,后边依次是10分,1分,0分。
可以换成:
scanf("%d %s %d %d %d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
依次用空格隔开。这样学生名里边就不能有空格了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-27
一方面是你的scanf控制不好
再就是你的写的代码有点多了
其实每个的平均值之类的都是可以通过循环直接控制的

下面的根据你的改写的
#include<stdio.h>
#define N 2
struct student
{
long num;
char name[10];
int score[3];

};

int main(void)
{
//这里定义了10个学生信息
struct student stu[N];

//下面的数据用来存储过程变量值
int i,s=0,j,h;
//
double aver;
//定义3个最大值和和值,用来分别统计3门课程的最大值和总分
int max[3],sum[3];

//这里用来读入学生信息
printf("Pls enter your Info,as :2007 aaa 97 98 99\n");
for(i=0;i<N;i++)
{
scanf("%ld %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

// printf("%d,%s,%d,%d,%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}

//下面是用来显示输入的用户信息
for(i=0;i<N;i++)
{
printf("%d\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

}

//获取到每科成绩的最大值,并输出最高者的信息。也输出每科的最高平均成绩

for(j=0; j<3; ++j)
{
max[j] = 0;
sum[j] = 0;
for(i=0;i<N;i++)
{
if(stu[i].score[j]>max[j])
{
max[j]=stu[i].score[j];
h=i;
}

sum[j] += stu[i].score[j];

}
printf("The first class_Info is that:\n");
aver = 1.0*sum[j]/N;
printf("\tThe Aver is %lf\n", aver);
printf("\tThe Highest Score is:%d \n\tThe Score Highest stu info is :%d %s %d\n",max[j], stu[h].num,stu[h].name,stu[h].score[j]);
}

return 0;
}

人数的控制可以通过#define N 2中N后面数字的改动实现本回答被提问者采纳
相似回答