...姓名,数学,英语,计算机3门课,成绩和总分。要求编写c程序

发布网友 发布时间:2024-10-23 16:57

我来回答

1个回答

热心网友 时间:9分钟前

/*
* 有30个学生,每个学生的数据包括学号、姓名、数学,英语,计算机3门课成绩和总分。
* 要求编写C程序,完成以下任务:
*   1. 从键盘输入30个学生的数据信息,计算每个学生3门课的总成绩,并按总分的高低依次输出每个学生的学号、姓名,3门课成绩及总分。
*   2. 统计各课最高分和最低分,并输出对应学生的数据信息
*   3. 统计各课及格和不及格的人数,输出对应学生的数据信息。
*/
#include<stdio.h>
#define N 30
struct STUDENT
{
    char  num[6];
    char  name[20];
    float score[3];
    float sum;
};
struct STUDENT stu[N];

void print_student(struct STUDENT user)
{
    printf("学号:%s\t姓名:%s\t数学:%3.2f\t英语:%3.2f\t计算机:%3.2f\t总分:%3.2f\n",
           user.num,
           user.name,
           user.score[0],
           user.score[1],
           user.score[2],
           user.sum
           );
}


int main()
{
    int i, j, temp, k;
    char* score[3] = {"数学", "英语", "计算机"};
    int sort[N];
    int ss[3][N];
    for(i=0; i<N; i++)
    {
        printf("输入学生信息[%d]:\n",i+1);
        printf("学号:");
        scanf("%s",stu[i].num);
        printf("姓名:");
        scanf("%s",stu[i].name);
        for(k=0; k<3; k++)
        {
            printf("%s成绩:", score[k]);
            scanf("%f",&stu[i].score[k]);
        }
        stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
        sort[i] = i;
    }

    /* 1.按总分排序 */
    for(i=0; i<N-1; i++)
    {
        for(j=0; j<N-i-1; j++)
        {
            if (stu[sort[j]].sum < stu[sort[j+1]].sum)
            {
                temp = sort[j];
                sort[j] = sort[j+1];
                sort[j+1] = temp;
            }
        }
    }
    for(i=0; i<N; i++)
    {
        print_student(stu[sort[i]]);
    }

    /* 2.按各科分排序 */
    for(k=0; k<3; k++)
    {
        for(i=0; i<N; i++)
        {
            for(j=0; j<N-i-1; j++)
            {
                if (stu[sort[j]].score[k] < stu[sort[j+1]].score[k])
                {
                    temp = sort[j];
                    sort[j] = sort[j+1];
                    sort[j+1] = temp;
                }
            }
        }
        /* 统计每科数据 */
        for(i=0; i<N; i++)
        {
            ss[k][i] = sort[i];
        }
        printf("%s最高分学生:\n", score[k]);
        print_student(stu[sort[0]]);
        printf("%s最低分学生:\n", score[k]);
        print_student(stu[sort[N-1]]);
    }
    /* 3. 统计各课及格和不及格的人数,输出对应学生的数据信息。 */
    for(k=0; k<3; k++)
    {
        j = 0;
        for(i=0; i<N; i++)
        {
            if(stu[ss[k][i]].score[k] >= 60)
            {
                j++;
            }
        }
        printf("%s及格学生人数(%d):\n", score[k], j);
        for(i=0; i<j; i++)
        {
            print_student(stu[ss[k][i]]);
        }

        printf("%s不及格学生人数(%d):\n", score[k], N-j);
        for(i=j; i<N; i++)
        {
            print_student(stu[ss[k][i]]);
        }
    }

    return 0;
}

这样就可以了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com