完成以下程序,并进行调试某班期末考试科目为数学、英语和计算机,有最多不超过30人参加考试。

这是一个C++程序,用于处理不超过30名学生的数学、英语和计算机考试成绩。程序功能包括计算每个学生的总分和平均分,按总分排序,打印名次表,以及根据学号查找学生排名和成绩。程序通过二维数组存储成绩,一维数组存储学号、总分和平均分,并使用冒泡排序进行成绩排序。
摘要由CSDN通过智能技术生成

完成以下程序,并进行调试
某班期末考试科目为数学、英语和计算机,有最多不超过30人参加考试,考试后要求:1)计算每个学生的总分和平均分;
2)按总分成绩由高到低排出成绩的名次;
3)打印出名次表,表格内包括学生学号、各科分数、总分和平均分;
4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

【提示】:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。
程序代码:

#include <stdio.h>
void total(int score[][3],int n,int sum[])//计算总分
{
    int i,j;
    for (i=0;i<n;i++)
    {
        sum[i] = 0;
        for(j=0;j<3;j++)
            sum[i] += score[i][j];
    }
}
void averger(int sum[],int n,float aver[])//计算平均分
{
    int i;
    for(i=0;i<n;i++)
        aver[i] = 1.0 * sum[i]/3;
}
void sort(int sum[],int n,int score[][3],float aver[],int num[])//按总分排序
{
    int i,j;
    int t,k;
    float f;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if (sum[j] < sum[j+1])
            {
                t = sum[j];
                sum[j] = sum[j+1];
                sum[j+1]=t;

                f=aver[j];//交换平均分
                aver[j+1]=aver[j+1];
                aver[j+1]=f;
                for(k=0;k<3;k++)//交换score
                {
                    t = score[j][k];
                    score[j][k]= score[j+1][k];
                    score[j+1][k] = t;
                }
                t = num[j];//交换学号
                num[j]=num[j+1];
                num[j+1]=t;
            }
        }
    }
}
void pm(int sum[],int pm[],int n)//排名,并保存名次
{
    int i = 0;
    int mc = 1;
    pm[0] = 1;
    for (i=1;i<n;i++)
    {
        if(sum[i]== sum[i-1])
            pm[i] = mc;
        else
        {
            mc++;
            pm[i] = mc;
        }
    }
}
void printmc(int num[],int n,int mc[])//打印名次表
{
    int i;
    printf("学号  排名\n");
    for (i=0;i<n;i++)
    {
        printf("%2d    %d\n",num[i],mc[i]);
    }
}
int find(int num[],int score[][3],int n,int sum[],int mc[],int k)//查找k
{
    int i=0;
    for (i=0;i<n;i++)
    {
        if(num[i] == k)
        {
            printf("学号:%d\n",num[i]);
            printf("成绩:%d %d %d\n",score[i][0],score[i][1],score[i][2]);
            printf("总成绩:%d\n",sum[i]);
            printf("名次:%d\n",mc[i]);
            break;
        }
    }
    if(i==n)
    {
        printf("未找到该学号学员\n");
    }
    return 0;
}
 
int main()
{ int score[30][3],sum[30],num[30],mc[30];
    float aver[30];
    int n,k,i,j;
    printf("请输入学员人数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("请输入学员%d的数学、英语、计算机成绩:",i+1);
        num[i] = i+1;
        for(j=0;j<3;j++)
            scanf("%d",&score[i][j]);
    }
    total(score,n,sum);//计算总成绩
    averger(sum,n,aver);//计算平均成绩
    sort(sum,n,score,aver,num);//根据总成绩排序
    pm(sum,mc,n);//排名
    printmc(num,n,mc);//打印排名
    printf("请输入要查找的学员学号:");
    scanf("%d",&k);
    find(num,score,n,sum,mc,k);//查找某个学号学员的信息
    return 0;
}

50dd2958d5eb40968902f0b96502f7ce.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值