| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 nie123 于 2020-11-5 19:37 编辑  
 
- #include <stdio.h>
 
 - struct student
 
 - {
 
 -   int xuehao;
 
 -   char name[30];
 
 -   float fen1;
 
 -   float fen2;
 
  
- } sheng[5];
 
  
- int main()
 
 - {
 
  
-   struct student max(struct student a[]);
 
 -   struct student xueba; //定义结构变量
 
 -   int i;
 
 -   for (int i = 0; i < 4; i++)
 
 -   {
 
 -     printf("请输入第%d名学生的学号、姓名和2门成绩\n", i + 1);
 
 -     scanf("%d%s%f%f", &sheng[i].xuehao, sheng[i].name, &sheng[i].fen1, &sheng[i].fen2);
 
 -   }
 
 -   xueba = max(sheng);
 
 -   printf("平均分最高的学生的信息如下:\n");
 
 -   printf("学号:%d\n姓名:%s\n2门成绩:%f,%f\n", xueba.xuehao, xueba.name, xueba.fen1, xueba.fen2);
 
 -   return 0;
 
 - }
 
  
- struct student max(struct student a[])
 
 - {
 
 -   float pingjunfen[5];
 
 -   int i, zuigao;
 
 -   for (int i = 0; i <= 4; i++)
 
  
-     pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
 
  
-   for (int zuigao = 0; i <= 4; i++)
 
  
-     if (pingjunfen[zuigao] > pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
 -   return (a[zuigao]);
 
 - }
 
 
  复制代码 
 
输出: 
请输入第1名学生的学号、姓名和2门成绩  
1 "a" 1.1 1.2 
请输入第2名学生的学号、姓名和2门成绩  
2 "b" 2.1 2.2 
请输入第3名学生的学号、姓名和2门成绩  
3 "c" 3.1 3.2 
请输入第4名学生的学号、姓名和2门成绩  
4 "d" 4.1 4.2 
 
代码没有完全输出,请问代码哪里有问题?
 本帖最后由 小甲鱼的铁粉 于 2020-11-5 20:05 编辑 
1. - int i;
 
 -   for (int i = 0; i < 4; i++)
 
  复制代码- int i, zuigao;
 
 -   for (int i = 0; i <= 4; i++)
 
  
-     pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
 
  
-   for (int zuigao = 0; i <= 4; i++)
 
  复制代码
已经定义过i,zuigao了,循环里面就不要再使用int i , int zuigao了 
2. -   for (int zuigao = 0; i <= 4; i++)
 
  
-     if (pingjunfen[zuigao] > pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
  复制代码
这里面的if判断反了,应该是
 -   for (zuigao = 0, i = 1; i < 4; i++)
 
  
-     if (pingjunfen[zuigao] < pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
  复制代码
3.输入的是四个学生的信息,先把0给zuigao,然后i从1开始到 i<4 这里面比较,如果大就赋值给zuigao
  
-   for (zuigao = 0, i = 1; i < 4; i++)
 
  
-     if (pingjunfen[zuigao] < pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
  复制代码
4.整个子函数的逻辑问题,我们只要找到成绩最好的人的下标就好了,所以返回就返回成绩最好的人的下标就好了
 - int max(student a[])
 
 - {
 
 -   float pingjunfen[5];
 
 -   int i, zuigao;
 
 -   for (i = 0; i <= 4; i++)
 
  
-     pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
 
  
-   for (zuigao = 0, i = 1; i < 4; i++)
 
  
-     if (pingjunfen[zuigao] < pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
 -   return zuigao;
 
 - }
 
 
  复制代码 
整个修改后的代码如下
 - #include<stdio.h>
 
 - #include<string.h>
 
  
- #include <stdlib.h>
 
 - typedef struct student
 
 - {
 
 -   int xuehao;
 
 -   char name[30];
 
 -   float fen1;
 
 -   float fen2;
 
  
- };
 
  
- int main()
 
 - {
 
  
-   int max(struct student a[]);
 
 -   student sheng[5];
 
 -   student xueba; //定义结构变量
 
 -   int i;
 
 -   for (i = 0; i < 4; i++)
 
 -   {
 
 -     printf("请输入第%d名学生的学号、姓名和2门成绩\n", i + 1);
 
 -     scanf("%d%s%f%f", &sheng[i].xuehao, sheng[i].name, &sheng[i].fen1, &sheng[i].fen2);
 
 -   }
 
 -   i = max(sheng);
 
 -   printf("平均分最高的学生的信息如下:\n");
 
 -   printf("学号:%d\n姓名:%s\n2门成绩:%f,%f\n", sheng[i].xuehao, sheng[i].name, sheng[i].fen1, sheng[i].fen2);
 
 -   system("pause");
 
 -   return 0;
 
 - }
 
  
- int max(student a[])
 
 - {
 
 -   float pingjunfen[5];
 
 -   int i, zuigao;
 
 -   for (i = 0; i < 4; i++)
 
  
-     pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
 
  
-   for (zuigao = 0, i = 1; i < 4; i++)
 
  
-     if (pingjunfen[zuigao] < pingjunfen[i])
 
 -     {
 
 -       zuigao = i;
 
 -     }
 
 -   return zuigao;
 
 - }
 
 
  复制代码 
 
 
 |   
 
 
 
 |