C语言的一段代码 帮忙看看哪里除了问题,代码稍微长一点,但是很简单,帮忙看一下,谢谢

有n个结构体变量,内涵学生学号、姓名和3门课程门票的成绩。要求输出平均成绩最高的学生信息(包括学号、姓名、3门课程成绩和平均成绩)。#include<stdio.h>vo... 有n个结构体变量,内涵学生学号、姓名和3门课程门票的成绩。要求输出平均成绩最高的学生信息(包括学号、姓名、3门课程成绩和平均成绩)。
#include<stdio.h>
void max(struct student stu[],int n);
struct student
{
int num;
char name[5];
float grade[3];
}stu[3];
int main()
{
int i,j,n=3;
for(i=0;i<3;i++)
{printf("请输入第[%d]位学生的信息:\n",i+1);
scanf("%d%s",&stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{printf("请输入第%d位学生第%d门成绩:\n",i+1,j+1);
scanf("%f",&stu[i].grade[j]);
}
}
max(stu,n);
}
void max(struct student stu[],int n)
{
int i,max=0;
float s,a[3];
struct student *p;
p=stu;
for(p=stu,i=0;p<stu+3;p++,i++)
{for(i=0;i<3;i++)
s=s+(*p).grade[i];
a[i]=s/n;
}
for(i=1;i<3;i++)
if(a[max]<a[i])
max=i;
p=stu;
printf("%d,%s,",(p+max)->num,(p+max)->name);
for(i=0;i<3;i++)
{p=stu;
printf("%d",(p+max)->grade[i]);
}
}
展开
 我来答
百度网友c3bd8dc
2014-01-04
知道答主
回答量:25
采纳率:0%
帮助的人:12.6万
展开全部
#include<stdio.h>
void max(struct student stu[],int n);
struct student{ 
 int num; 
 char name[5]; 
 float grade[3];
}stu[3];
int main()

 int i,j,n=3;
 for(i=0;i<3;i++)
 {
  printf("请输入第[%d]位学生的信息:\n",i+1);
  scanf("%d%s",&stu[i].num,&stu[i].name);
  for(j=0;j<3;j++)
  {
   printf("请输入第%d位学生第%d门成绩:\n",i+1,j+1);
   scanf("%f",&stu[i].grade[j]);
  }
 } 
 max(stu,n);
}
void max(struct student stu[],int n)

 int i,j,max=0; 
 float s,a[3]; 
 struct student *p; 
 p=stu; 
 for(p=stu,i=0;i<3;p++,i++)
 {
  s=0;
  for(j=0;j<3;j++)
   s=s+(*p).grade[j];
  a[i]=s/n;
 } 
 for(i=1;i<3;i++)
  if(a[max]<a[i])
   max=i; 
 p=stu; 
 printf("%-10d%-10s",(p+max)->num,(p+max)->name);
 for(i=0;i<3;i++)
 {
  printf("%-10.2f",(p+max)->grade[i]); 
 }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xyll1993
2014-01-04
知道答主
回答量:18
采纳率:0%
帮助的人:9.8万
展开全部
void max(struct student stu[],int n)
{ int i,max=0;
float s,a[3];
struct student *p;
p=stu;
for(p=stu,i=0;p<stu+3;p++,i++) /*i++没有意义,错误1*/
{for(i=0;i<3;i++) s=s+(*p).grade[i]; /*s没有赋初值0,错误2*/
a[i]=s/n; /*i的变化没有考虑清楚,i始终是3,错误3*/
}
for(i=1;i<3;i++)
if(a[max]<a[i])
max=i;
p=stu;
printf("%d,%s,",(p+max)->num,(p+max)->name);
for(i=0;i<3;i++)
{p=stu;
printf("%d",(p+max)->grade[i]);
}
}
追问
  1. void max(struct student stu[],int n)

  2. {

  3. int i,j,max=0;

  4. float s=0,a[3];

  5. struct student *p;

  6. p=stu;

  7. for(p=stu,j=0;p<stu+3;p++,j++)

  8. {for(i=0;i<3;i++)

  9. s=s+(*p).grade[i];

  10. a[j]=s/n;

  11. }


改成这样得出的结果还是不对呢

追答
void max(struct student stu[],int n)
{
int i,j,max=0;
float s=0,a[3];
struct student *p;
p=stu;
for(p=stu,j=0;p<stu+3;p++,j++)
{
/*这边每次都要将s赋值0,即s=0*/
for(i=0;i<3;i++)
s=s+(*p).grade[i];
a[j]=s/n;
}
/*还有你最后的输出,记住你的grade是float型,要用%f*/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-04
展开全部
max里面S没有赋初值
追问
赋值了 也给把a[i]的i变量换成用j来循环 还是出错 无语
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式