C语言中有关结构体的请教

2025-05-04 19:03:16
推荐回答(1个)
回答1:

if (max_score

     temp=max_score;

     max_score=stu[i].score[j];

     stu[i].score[j]=temp;

     p=i;

    }

你一段 是想做什么?

而且,在你的源代码中,这一段是错误的,此时的stu[i].score[j]是一个随机数!j==3,越界了! 

而且,你所说 的错误,就是上面这一段代码引起的,此时的stu[i].score[j]实际上就是stu.aver,所以,执行的时候,将 max_score的初始值 : 0 赋值给stu.aver了,所以,你看到的第一个人的aver是0 

这个是我根据猜测你的 意图,修改出来的,

#include

struct student {

  int num;

  char name[10];

  float score[3];

  float aver;

 }stu[5];

int main()

{

 int i,j,max_score=0,p;

 float sum,temp;

 for (i=0;i<5;i++) {

   sum=0;

   printf("Input %d student information\n",i+1);

   printf("NO.:");

   scanf("%d",&stu[i].num);

   printf("name:");

   scanf("%s",&stu[i].name);

   for (j=0;j<3;j++) {

     printf("%d course score:",j+1);

     scanf("%f",&stu[i].score[j]);

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

     

     if (max_score

     /*temp=max_score;*/

     max_score=stu[i].score[j];

     /*stu[i].score[j]=temp;*/

     p=i;

    }

    }

    stu[i].aver=sum/3.0;

   printf("%-8.2f\n",stu[i].aver);

/*   if (max_score

     temp=max_score;

     max_score=stu[i].score[j];

     stu[i].score[j]=temp;

     p=i;

    }*/

  }

 printf("\n");

 printf("%-3d\t%-3s\t%-6.2f\t",stu[p].num,stu[p].name,stu[p].aver);

 for (j=0;j<3;j++)

  printf("%-3.0f\t",stu[p].score[j]);

 printf("\n");

 printf("NO.\tname\tscore1\tscore2\tscore3\taver\n");

 for (i=0;i<5;i++) {

   printf("%-3d\t%-3s\t",stu[i].num,stu[i].name);

   for (j=0;j<3;j++)

    printf("%-3.0f\t",stu[i].score[j]);

   printf("%4.2f\t",stu[i].aver);

   printf("\n");

  }

  

  

  return 0;

}

这里是运行截图: