循环结构程序设计思想

某人需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科成绩(例如:英语、数学、体育、计算机),计算每个学生的总分、平均分,然后按照总分由高到低排名,输出原始的成绩单和排名后的成绩单。利用一维、二维数组 c语言


#include <stdio.h>
#include <stdlib.h>
 
#define NUM 5 //5个学生,方便修改
 
typedef struct _Student 
{
    char id[11];  // 学号
    char name[11];  // 姓名
    float score[4];  // 4科成绩
    float total;  // 总分
    float avg;  // 平均分
}Student;
 
int main() 
{
    Student stu[NUM];  // 学生信息数组
    int i, j;
 
    // 输入学生信息和成绩
    for (i = 0; i < NUM; i++) 
    {
        printf("请输入第%d个学生的学号:",i+1);
        scanf("%s",stu[i].id);
        printf("请输入第%d个学生的姓名:",i+1);
        scanf("%s",stu[i].name);
        stu[i].total = 0;
        for (j = 0; j < 4; j++) 
        {
            printf("请输入第%d个学生的第%d门课成绩:",i+1,j+1);
            scanf("%f", &stu[i].score[j]);
            stu[i].total += stu[i].score[j];
        }
        stu[i].avg = stu[i].total/4;
    }

    printf("原始成绩单:\n");
    printf("%12s%12s%10s%10s%10s%10s%10s%10s\n","学号","姓名","英语","数学","体育","计算机","总分","平均分");
    for (i = 0; i < NUM; i++) 
    {
        printf("%12s%12s", stu[i].id, stu[i].name);
        for (j = 0; j < 4; j++) 
        {
            printf("%10.1f", stu[i].score[j]);
        }
        printf("%10.1f%10.1f", stu[i].total, stu[i].avg);
    }

    for (i = 0; i < NUM - 1; i++) 
    {
        for (j = 0; j < NUM - i - 1; j++) 
        {
            if (stu[j].total < stu[j+1].total) 
            {
                Student temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
            }
        }
    }
 
    printf("\n排序后成绩单:\n");
    printf("%12s%12s%10s%10s%10s%10s%10s%10s\n","学号","姓名","英语","数学","体育","计算机","总分","平均分");
    for (i = 0; i < NUM; i++) 
    {
        printf("%12s%12s", stu[i].id, stu[i].name);
        for (j = 0; j < 4; j++) 
        {
            printf("%10.1f", stu[i].score[j]);
        }
        printf("%10.1f%10.1f", stu[i].total, stu[i].avg);
    }
    system("pause");
    return 0;
}
#include <stdio.h>
#include <string.h>

#define N 5
#define M 4

struct Student {
    char id[11];  // 学号
    char name[11];  // 姓名
    int score[M];  // 4科成绩
    int sum;  // 总分
    float avg;  // 平均分
    int rank;  // 排名
};

int main() {
    struct Student students[N];  // 学生信息数组
    int i, j;

    // 输入学生信息和成绩
    for (i = 0; i < N; i++) {
        printf("请输入第%d个学生的学号、姓名和4科成绩,用空格分隔:", i+1);
        scanf("%s%s", students[i].id, students[i].name);
        for (j = 0; j < M; j++) {
            scanf("%d", &students[i].score[j]);
        }
    }

    // 计算每个学生的总分和平均分
    for (i = 0; i < N; i++) {
        students[i].sum = 0;
        for (j = 0; j < M; j++) {
            students[i].sum += students[i].score[j];
        }
        students[i].avg = (float)students[i].sum / M;
    }

    // 排名
    for (i = 0; i < N; i++) {
        students[i].rank = 1;
        for (j = 0; j < N; j++) {
            if (students[j].sum > students[i].sum) {
                students[i].rank++;
            }
        }
    }

    // 输出原始成绩单
    printf("\n原始成绩单:\n");
    printf("学号\t姓名\t英语\t数学\t体育\t计算机\t总分\t平均分\n");
    for (i = 0; i < N; i++) {
        printf("%s\t%s\t", students[i].id, students[i].name);
        for (j = 0; j < M; j++) {
            printf("%d\t", students[i].score[j]);
        }
        printf("%d\t%.2f\n", students[i].sum, students[i].avg);
    }

    // 按总分排名
    for (i = 0; i < N-1; i++) {
        for (j = i+1; j < N; j++) {
            if (students[i].sum < students[j].sum) {
                struct Student temp = students[i];
                students[i] = students[j];
                students[j] = temp;
            }
        }
    }

    // 输出排名后成绩单
    printf("\n排名后成绩单:\n");
    printf("排名\t学号\t姓名\t总分\t平均分\n");
    for (i = 0; i < N; i++) {
        printf("%d\t%s\t%s\t%d\t%.2f\n", students[i].rank, students[i].id, students[i].name, students[i].sum, students[i].avg);
    }

    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 5     // 班级人数

// 定义结构体 Student,用于存储每个学生的信息
struct Student {
    char id[11];        // 学号
    char name[11];      // 姓名
    int scores[4];      // 成绩,包括英语、数学、体育、计算机
    int total_score;    // 总分
    float avg_score;    // 平均分
    int rank;           // 排名
};

int main() {
    struct Student students[N];     // 定义一个学生结构体数组,存储班级学生信息

    // 通过循环依次读入学生信息
    for (int i = 0; i < N; i++) {
        printf("请输入第%d个学生的信息(学号、姓名、英语成绩、数学成绩、体育成绩、计算机成绩):\n", i+1);
        scanf("%s%s%d%d%d%d", students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].scores[3]);

        // 计算学生总分和平均分
        students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2] + students[i].scores[3];
        students[i].avg_score = (float)students[i].total_score / 4;
    }

    // 对学生按照总分由高到低进行排序
    for (int i = 0; i < N - 1; i++) {
        for (int j = 0; j < N - i - 1; j++) {
            if (students[j].total_score < students[j+1].total_score) {
                struct Student temp = students[j];
                students[j] = students[j+1];
                students[j+1] = temp;
            }
        }
    }

    // 给每个学生排名,并输出原始成绩单
    printf("\n原始成绩单:\n");
    printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "学号", "姓名", "英语成绩", "数学成绩", "体育成绩", "计算机成绩", "总分");
    for (int i = 0; i < N; i++) {
        students[i].rank = i + 1;
        printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].total_score);
    }

    // 输出排名后的成绩单
    printf("\n排名后的成绩单:\n");
    printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "排名", "学号", "姓名", "英语成绩", "数学成绩", "体育成绩", "计算机成绩", "总分");
    for (int i = 0; i < N; i++) {
        printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n", students[i].rank, students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].total_score);
    }

    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632