C语言实现输入 10 个学生 5 门课的成绩,分别用函数实现下列功能: ①计算每个学生的平均分; ②计算每门课的平均分; ③找出所有 50 个分数中最高的分数所对应的学生和课程; ④计算平均分方差

完整代码:

/*输入 10 个学生 5 门课的成绩,分别用函数实现下列功能: ①计算每个学生的平均
分; ②计算每门课的平均分; ③找出所有 50 个分数中最高的分数所对应的学生和课
程; ④计算平均分方差,平均分为每个学生的平均分*/
#include<stdio.h>
//学生个数
#define N 10
//课程数量
#define n 5

//计算每个学生的平均分
void student_avg(int stu[N][n]){
    for (int i = 0; i < N; i++)
    {
        //sum为一个学生所有课程分数总和
        double sum=0;
        for (int j = 0; j < n; j++)
        {
            sum+=stu[i][j];
        }
        //分数总和除以课程数就得学生的平均分
        printf("第%d个学生的平均成绩为:%lf\n",i+1,sum/n);
    }
}

// 计算每门课的平均分
void class_avg(int stu[N][n]){
    for (int i = 0; i < n; i++)
    {
        //sum为所有学生这一门课的成绩总和
        double sum=0;
        for (int j = 0; j < N; j++)
        {
            sum+=stu[j][i];
        }
        //总和除以学生人数就得这门课学生的平均成绩
        printf("第%d门课的平均成绩为:%lf\n",i+1,sum/N);
    }  
}
//找出所有 50 个分数中最高的分数所对应的学生和课程
void getMax(int stu[N][n]){
    //最高分数
    int max=0;
    //对应的学生
    int student;
    //对应的课程
    int grade;
    //遍历所有数据
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (stu[i][j]>max)
            {
                max=stu[i][j];
                //加一是因为数组下标从零开始的
                student=i+1;
                grade=j+1;
            }
        }
    }  
    printf("最高分数是第%d名学生的第%d门成绩,分数为:%d\n",student,grade,max);
}

//计算平均分方差
double getVariance(int stu[N][n]){
    //辅助变量
    double temp;
    //所有学生的平均分
    double avg;
    //所有学生所有课程分数总和
    double sum=0;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < n; j++)
        {
            sum+=stu[i][j];
        }
    }
    //总和除以人数除以课程就得平均分
    avg=sum/(N*n);
    for (int i = 0; i < N; i++)
    {
        //每个学生五门课程的平均分
        double stdAvg=0;
        for (int j = 0; j < n; j++)
        {
            stdAvg+=stu[i][j];
        }
        //方差就为每个学生的平均分减去所有学生的平均分的平方之和
        temp+=((stdAvg/n)-avg)*((stdAvg/n)-avg);
    }
    return temp/N;
}

int main(){
    int stu[N][n];
    int grade=0;
    //输入数据
    for (int i = 0; i <N ; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("请输入第%d个学生,第%d门的成绩:",i+1,j+1);
            scanf("%d",&grade);
            stu[i][j]=grade;
        }
    }
    printf("---------------\n");
    //打印数组
    for (int i = 0; i <N ; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%3d ",stu[i][j]);
        }
        printf("\n");
    }
    student_avg(stu);
    printf("---------------\n");
    class_avg(stu);
    printf("---------------\n");
    getMax(stu);
    printf("---------------\n");
    printf("方差为%lf",getVariance(stu));
    return 0;
}

运行截图:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值