弹琴不如撸猫 2023-04-10 21:43 采纳率: 77.8%
浏览 34
已结题

循环结构程序设计思想

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

  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2023-04-11 08:50
    关注
    
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 ciflog-smart磁性定位子系统
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示