鱼C论坛

 找回密码
 立即注册
查看: 1608|回复: 1

[已解决]C语言问题!!!求助!!!

[复制链接]
发表于 2020-3-24 16:04:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
struct student
{
        int num;
        char name[20];
        float score1;
        float score2;
        float score3;
        float aver;
};
void Find(struct student myClass[5],int *high,float *aver);
int main(void)
{
        int high;  /* high记录平均分最高的学生的序号 */
int i,aver=0;
struct student myClass[5];
printf("Please input students  info:Num Name score1 score2 score3\n");
for(i=0;i<5;i++)
{
        scanf("%d %s %d %d %d",&myClass[i].num,myClass[i].name,&myClass[i].score1,&myClass[i].score2,&myClass[i].score3);
}
Find(myClass,&high,&aver);
        printf("\nThe Highest is %s(%d)\nscore1=%.2f  score2=%.2f  score3=%.2f  aver=%.2f\n",
                myClass[high].name, myClass[high].num,
                myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);

        return 0;
}

void Find(struct student myClass[5],int *high,float *aver)
{
        float sum=0;
        int i;
        for(i=0;i<5;i++)
        {
                sum=sum+myClass[i].score1+myClass[i].score2+myClass[i].score3;
                if((sum/6.0)>sum)
                {
                        *aver=(float)(sum/6);
                        *high=i;
                }
        }
}
代码如上,问题如下:
有五个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,显示最高平均分的学生的信息(用结构体编程),有没有大佬告诉我这段代码到底错哪了?程序始终运行不起来

最佳答案
2020-3-24 16:08:39
#include <stdio.h>
struct Student
 {
  int num;
  char name[20];
  float score[3];
  float aver;
 };//这里要分号的  把这个结构体放到main函数之前
int main()
{
 void input(Student stu[]);//这3行放到结构体Student后面  且可以不加关键词struct 
 Student max(Student stu[]);
 void print(Student stu);
 Student stu[5],*p=stu;//这里可以不要strcut
 input(p);
 print(max(p));
 return 0;
}
void input(Student stu[])//可以不加关键词struct
{
 int i,k;
 printf("请输入学生姓名和学号,三门课成绩\n");
 for(i=0;i<5;i++)
 {
  scanf("%s",stu[i].name);//用scanf更好  不然每次输入完姓名后就要按回车键
  scanf("%d",&stu[i].num);
 for(k=0;k<3;k++)
 {
  scanf("%f",&stu[i].score[k]);//要加取地址符号
 }
 stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
 }
}
Student max(Student stu[])
{
 int i,m;
 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("学号:%d\n姓名:%s\n三门课成绩:%5.1f%5.1f%5.1f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-24 16:08:39 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
struct Student
 {
  int num;
  char name[20];
  float score[3];
  float aver;
 };//这里要分号的  把这个结构体放到main函数之前
int main()
{
 void input(Student stu[]);//这3行放到结构体Student后面  且可以不加关键词struct 
 Student max(Student stu[]);
 void print(Student stu);
 Student stu[5],*p=stu;//这里可以不要strcut
 input(p);
 print(max(p));
 return 0;
}
void input(Student stu[])//可以不加关键词struct
{
 int i,k;
 printf("请输入学生姓名和学号,三门课成绩\n");
 for(i=0;i<5;i++)
 {
  scanf("%s",stu[i].name);//用scanf更好  不然每次输入完姓名后就要按回车键
  scanf("%d",&stu[i].num);
 for(k=0;k<3;k++)
 {
  scanf("%f",&stu[i].score[k]);//要加取地址符号
 }
 stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
 }
}
Student max(Student stu[])
{
 int i,m;
 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("学号:%d\n姓名:%s\n三门课成绩:%5.1f%5.1f%5.1f\n",stu.num,stu.name,stu.score[0],stu.score[1],stu.score[2]);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 04:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表