.编写程序。有5个1学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出31

1.编写程序。有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。我的程序不知道哪里写错了?求高手指点!
#include<stdio.h>
typedef struct
{ int num;
char name[10];
float score[3];
double aver;
}student;
void inputs(student stu[])
{ int i,k;
for(i=0;i<2;i++)
{ printf(" 第%d个学生:",i+1);
scanf("%ld%s",&stu[i].num,stu[i].name);/* 输入学生学号、姓名*/
printf("输入分数");
for(k=0;k<3;k++)
scanf("%lf",&stu[i].score[k]); /*输入学生三门课的分数*/
}
}
void average( student stu[]) /*求学生的平均分*/
{ int i,k;
for(i=0;i<2;i++)
{ float sum=0.0;
for(k=0;k<3;k++)
sum+=stu[i].score[k];
stu[i].aver=sum/3;
}
}
void Printf( student stu[])/*输出学生信息*/
{ int i,k;
printf("输出执行结果:\n");
for(i=0;i<2;i++)
{
printf("\t第%d个学生:\t学号: \t姓名:%ld%12s",i+1,stu[i].num ,stu[i].name[10]);
for(k=0;k<3;k++)
printf("%5.1lf",stu[i].score[k]);
printf("\t平均分:%lf",stu[i].aver );
printf("\n");
}

}
void Max( student stu[])
{int i;
int max=0;
for(i=1;i<2;i++)
if(stu[max].aver <stu[i].aver )
max=i;
printf("%ld",stu[max].aver );
}

void main()
{
student stu[2];
printf("输入数据:\n");
inputs(stu);
average(stu);
Printf(stu);
Max(stu);

}
为了好运行程序,我只设置了输入前两组数据。

#include<stdio.h>
typedef struct
{ int num;
char name[10];
float score[3];
double aver;
}student;
void inputs(student stu[])
{ int i,k;
for(i=0;i<2;i++)
{ printf(" 第%d个学生:",i+1);
scanf("%d%s",&stu[i].num,stu[i].name);/* 输入学生学号、姓名*/
printf("输入分数");
for(k=0;k<3;k++)
scanf("%f",&stu[i].score[k]); /*输入学生三门课的分数*/
}
}
void average( student stu[]) /*求学生的平均分*/
{ int i,k;
for(i=0;i<2;i++)
{ float sum=0.0;
for(k=0;k<3;k++)
sum+=stu[i].score[k];
stu[i].aver=sum/3;
}
}
void Printf( student stu[])/*输出学生信息*/
{ int i,k;
printf("输出执行结果:\n");
for(i=0;i<2;i++)
{
printf("\t第%d个学生:\t学号:%d \t姓名:%s\t分数:",i+1,stu[i].num ,stu[i].name);
for(k=0;k<3;k++)
printf("%g ",stu[i].score[k]);
printf("\t平均分:%g",stu[i].aver );
printf("\n");
}

}
void Max( student stu[])
{int i;
int max=0;
for(i=1;i<2;i++)
if(stu[max].aver <stu[i].aver )
max=i;
printf("%g\n",stu[max].aver );
}

void main()
{
student stu[2];
printf("输入数据:\n");
inputs(stu);
average(stu);
Printf(stu);
Max(stu);

}追问

我的程序哪里出了问题?除了输出格式有些不一样,还有stu[i].name[10]不一样,其它的基本一样了,能不能告诉我是哪里的问题?万分感谢!

追答

主要是输入输出格式
int num; %d,错误%ld
char name[10]; %s
float score[3]; %f,错误%lf
double aver;%lf,错误%ld
float double输出用%g 可以避免过多的0。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-04
嗯...
首先,你的max的函数原型应该是int max(struct student stu[]);不应该是void,返回平均分数最高的下标即可。
然后求平均分数的函数也有些问题,函数类型是void的,可是有return语句,而且return语句在for循环中,想通过这种方法返回3个平均值,可是函数执行完第一个return语句后就就推出函数了,所以这个有点问题。
总问题就是void函数不能够有返回值,也就是不能够有return语句。
这里面还有好多问题,我语言表达能力有限,我把我改的程序给你看一下,要是有不懂的可以问,和你的程序差不多,在你的基础上改的。

#include "stdio.h"
struct student
{
char num[6];
char name[20];
float score[3];
float aver;
}stu[3];
void input(struct student stu[])
{
int i;
printf("please enter the information of student:\n");
for(i=0;i<3;i++)
scanf("%s %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
void avg(struct student stu[])
{
int i,j;
float sum;
for(j=0;j<3;j++)
{
sum=0;
for(i=0;i<3;i++)
sum+=(stu[i].score[j]);
stu[i].aver=sum/3.0; //有修改
}
}
int max(struct student stu[]) //有修改
{
int i,m;
for(i=0;i<3;i++)
{
m=0;
stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
if(stu[i].aver>stu[m].aver)
m=i;
}
return m; //有修改
}
void main()
{
int i, m; //有修改,m用于保存最高平均分数的下标
void input(struct student stu[]);
void avg(struct student stu[]);
int max(struct student stu[]);
input(stu);
avg(stu);
m = max(stu);
for (i = 0; i < 3; i++) //有修改
printf("第%d科平均成绩avg:%f\n", i + 1, stu[i].aver); //有修改
printf("num:%s\nname:%s\nscore:%f %f %f\navg:%f\n",stu[m].num,stu[m].name,stu[m].score[0],stu[m].score[m],stu[m].score[2],stu[m].aver);
}