.编写程序。有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);
}

...结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名...
include<stdio.h> define max 5 \/*设定要输入成绩的学生个数*\/ double zpj; \/*总平均值*\/ struct student \/*结构体*\/ { int num;char name[10];int score1;int score2;int score3;double pj;};struct student stu[max],temp;void Input() \/*输入函数*\/ { int i;for(i...

有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5...
for(i=0;i<5;i++) { if(stu[i].aver>stu[m].aver) { m=i; } } printf("\\n成绩最高的学生是:\\n");printf("平均成绩:%6.2f\\n",stu[m].aver);\/\/平均成绩在输出函数中是输不出的因为输出函数中没有m的值 return stu[m];}void print( Student stu){ printf("学号:...

有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五...
改成printf("%3d%3d",(p1+m)->num,(p1+m)->name);即把*( )去掉

有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5...
printf("\\n成绩最高的学生是:\\n"); printf("学号:%d\\n姓名:%d\\n三门课成绩:%5.1f%5.1f%5.1f\\n平均成绩:%6.2f\\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);}出来一堆错。。。谁知道怎么回事啊。。。多谢大家帮忙! 展开  我来答 分享 微信扫一扫 网络繁忙请稍后重试 ...

...1) 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩_百度知...
printf("3门课总平均成绩: %4.2f\\n",avertotal) ;printf("最高分同学有%d个: \\n",stumax_num) ;printf("姓名 学号 成绩一 成绩二 成绩三 \\n") ;for(i=0; i<stumax_num; i++){ printf("%4s %4s %-4.2f %-4.2f %-4.2f\\n",stumax[i].name,stumax[i].stunum,stumax...

编写一个数组用于存放5个学生的英语成绩,输入5个学生的英语成绩,并输出...
\/ 3、 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚...

有五个学生,每个学生有三门课的成绩,从键盘上输入学生的学号,姓名...
public static void main(String[] args) { Scanner sc = new Scanner(System.in);\/\/定义学生类数组,里面存放五个学生的信息 Student[] stus = new Student[5];System.out.println("请输入5个学生的信息:");for(int i=0;i<stus.length;i++){ String str = sc.nextLine();\/\/001 张三 ...

...5名学生信息登记表,每个学生的信息包括学号,姓名,性别及三门课程的...
1、在电脑桌面空白处点击右键选择新建EXCEL文件。2、选中该文件点击右键选择重命名。3、在出现的重命名编辑框中输入文件名称如学生信息登记表。4、打开该学生信息登记表选中两行,点击上方的合并居中按钮并输入文件表头。5、然后分别在对应的单元格中输入需要的文字信息。6、再分别选中序号、学号姓名和性别...

从键盘输入5个学生信息(学号姓名三门课的成绩),输出三门课的总平均成 ...
看程序你的意思应该是这样,但是不得不说你的程序要求的那些实在没有实际意义。首先,三门成绩的总和还是每个学生都求一下的好,你求的是全部学生的全部成绩然后除15(这个15是不是因为你的学生数组定义了5的容量?);其次,最高分的话,按照每门课来统计比较好吧,你是在全部学生的全部课程中找一...

JAVA题目:求一份 输入5个学生姓名,每个学生3个成绩,平均分的代码
\/\/【程序50】TestStu.java 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), \/\/计算 出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io....

相似回答