祁远-_- 2024-11-29 11:27 采纳率: 0%
浏览 11

关于#c语言#的问题,请各位专家解答!

多个学生多门课成绩的排序没看懂这个错误有没有专家讲解一下这个错误

img

  • 写回答

1条回答 默认 最新

  • 想要AC的dly 2024-11-29 15:07
    关注
    1. #include"stdio.h" 和 #include"string.h" 应该没有引号或者使用尖括号,即 #include <stdio.h> 和 #include <string.h>
    2. main() 应该明确指定返回类型为 int,即 int main()
    3. sum[i] 应该在每次循环开始时初始化为0,而不是在输入循环之前
    4. 条件判断 if(sum[j] < sum[j+1]) 应该是 if(sum[j] > sum[j+1]),因为按照总分从高到低排序
    5. 在字符串复制时,strcpy(name[j], name[j+1]); 应该是 strcpy(nn, name[j]); strcpy(name[j], name[j+1]); strcpy(name[j+1], nn);
    6. 在打印平均分时,使用了 printf("%d\t",score[i][j]); 这应该是 printf("%.1f\t", avg[i]); 来打印浮点数
    7. Printf 应该是 printf
    8. for(i=0; i < N; i++) 后面缺少了大括号 {
    9. 交换成绩时,t=score[j][0]; 应该是 t=score[j][0]; score[j][0]=score[j+1][0]; score[j+1][0]=t;,其他两门课的成绩也是
    #include <stdio.h>
    #include <string.h>
    #define N 5
    
    int main() {
        int i, j, t;
        int score[N][3];
        char name[N][10];
        float sum[N] = {0}, avg[N];
    
        printf("请输入五个同学的成绩:\n");
        for (i = 0; i < N; i++) {
            printf("第%d个同学的记录:", i + 1);
            scanf("%s", name[i]);
            for (j = 0; j < 3; j++) {
                scanf("%d", &score[i][j]);
            }
        }
    
        for (i = 0; i < N; i++) {
            for (j = 0; j < 3; j++) {
                sum[i] += score[i][j];
            }
            avg[i] = sum[i] / 3.0;
        }
    
        for (i = 0; i < N - 1; i++) {
            for (j = 0; j < N - i - 1; j++) {
                if (sum[j] < sum[j + 1]) {
                    t = sum[j]; sum[j] = sum[j + 1]; sum[j + 1] = t;
                    t = avg[j]; avg[j] = avg[j + 1]; avg[j + 1] = t;
                    for (int k = 0; k < 3; k++) {
                        t = score[j][k]; score[j][k] = score[j + 1][k]; score[j + 1][k] = t;
                    }
                    char nn[10];
                    strcpy(nn, name[j]); strcpy(name[j], name[j + 1]); strcpy(name[j + 1], nn);
                }
            }
        }
    
        printf("------------------------------------------------------------------------------------------------\n");
        printf("排序\t姓名\t课1\t课2\t课3\t总分\t平均分\n");
        for (i = 0; i < N; i++) {
            printf("第%d名:\t%s\t", i + 1, name[i]);
            for (j = 0; j < 3; j++) {
                printf("%d\t", score[i][j]);
            }
            printf("%d\t%.1f\n", sum[i], avg[i]);
        }
        printf("\n");
    
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 11月29日
  • 修改了问题 11月29日
  • 创建了问题 11月29日