02 学生成绩表(C语言)

题目:
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过40人参加考试。请编程计算:(1)每个学生的总分和平均分;(2)每门课程的总分和平均分。

//二维数组输入学生的成绩
#include <stdio.h>
#define STUD_N 40  //最多学生人数
#define COURSE_N 3 //考试科目数
void ReadScore(int score[][COURSE_N], long num[], int n);
void AverforStud(int score[][COURSE_N], int sum[], float aver[], int n);
void AverforCourse(int score[][COURSE_N], int sum[], float aver[], int n);
void Print(int score[][COURSE_N], long num[], int sumS[], float averS[], int sumC[], float averC[], int n);
int main(void)
{
    int score[STUD_N][COURSE_N], sumS[STUD_N], sumC[STUD_N], n;
    long num[STUD_N];
    float averS[STUD_N], averC[STUD_N];
    printf("input the total number of the students(n<=40):");
    scanf("%d", &n);                                //读入多少个学生;
    ReadScore(score, num, n);                       //读入n个学生的学号和成绩
    AverforStud(score, sumS, averS, n);             //计算每个学生的总分平均分
    AverforCourse(score, sumC, averC, n);           //计算每门课程的总平均分
    Print(score, num, sumS, averS, sumC, averC, n); //输出学生成绩
    return 0;
}

//函数功能:输入n个学生的学号及其三门课的成绩
void ReadScore(int score[][COURSE_N], long num[], int n)
{
    int i, j;
    printf("Input student's ID and score as: MT EN PH:\n");
    for (i = 0; i < n; i++)
    {
        scanf("%ld", &num[i]);         //以长整型格式输入每个学生的学号
        for (j = 0; j < COURSE_N; j++) //对所有课程进行循环
        {
            scanf("%d", &score[i][j]); //输入每个学生的各门课成绩
        }
    }
}

//函数功能:计算每个学生的总分和平均分
void AverforStud(int score[][COURSE_N], int sum[], float aver[], int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        sum[i] = 0;
        for (j = 0; j < COURSE_N; j++) //对所有课程进行循环
        {
            sum[i] = sum[i] + score[i][j]; //计算第i个学生的总分
        }
        aver[i] = (float)sum[i] / COURSE_N; //计算第i个学生的平均分
    }
}

//函数功能:计算每门课程的总分和平均分
void AverforCourse(int score[][COURSE_N], int sum[], float aver[], int n)
{
    int i, j;
    for (j = 0; j < COURSE_N; j++)
    {
        sum[j] = 0;
        for (i = 0; i < n; i++) //对所有学生进行循环
        {
            sum[j] = sum[j] + score[i][j]; //计算第j门课程的总分
        }
        aver[j] = (float)sum[j] / n; //计算第j门课程的平均分
    }
}

//函数功能:打印每个学生的学号、各门课程成绩、总分和平均分,以及每门课的总分和平均分
void Print(int score[][COURSE_N], long num[], int sumS[],
           float averS[], int sumC[], float averC[], int n)
{
    int i, j;
    printf("Student's ID\t MT\t EN\tPH\tSUM\tAVER\n");
    for (i = 0; i < n; i++)
    {
        printf("%12ld\t", num[i]); //以长整型格式打印学生的学号
        for (j = 0; j < COURSE_N; j++)
        {
            printf("%4d\t", score[i][j]); //打印学生的每门课成绩
        }
        printf("%4d\t%5.1f\n", sumS[i], averS[i]); //打印学生的总分和平均分
    }
    printf("SumoCourse\t");
    for (j = 0; j < COURSE_N; j++)
    {
        printf("%4d\t", sumC[j]);
    }
    printf("\nAverofCourse\t");
    for (j = 0; j < COURSE_N; j++)
    {
        printf("%4.1f\t", averC[j]);
    }
    printf("\n");
}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值