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
    评论
学生成绩管理系统是一个用于管理学生信息和成绩的软件系统。在C语言中,可以使用链来实现学生成绩管理系统。 链是一种数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在学生成绩管理系统中,可以使用链来存储学生的信息和成绩。 以下是使用链实现学生成绩管理系统的一般步骤: 1. 定义学生结构体:首先,需要定义一个学生结构体,包含学生的基本信息和成绩等字段。例如: ```c typedef struct Student { int id; // 学号 char name[20]; // 姓名 float score; // 成绩 struct Student* next; // 指向下一个节点的指针 } Student; ``` 2. 创建链:通过动态内存分配函数malloc,创建一个头节点,并将头节点的指针赋给链的头指针。例如: ```c Student* head = (Student*)malloc(sizeof(Student)); head->next = NULL; ``` 3. 添加学生信息:通过遍历链找到最后一个节点,然后创建一个新节点,并将新节点插入到链的末尾。例如: ```c Student* newNode = (Student*)malloc(sizeof(Student)); // 设置新节点的数据 newNode->id = 1; strcpy(newNode->name, "张三"); newNode->score = 90.5; newNode->next = NULL; // 遍历链找到最后一个节点 Student* temp = head; while (temp->next != NULL) { temp = temp->next; } // 将新节点插入到链的末尾 temp->next = newNode; ``` 4. 查询学生信息:通过遍历链,根据学号或姓名等条件查找学生信息。例如: ```c int searchId = 1; Student* temp = head->next; while (temp != NULL) { if (temp->id == searchId) { // 找到了对应学号的学生信息 printf("学号:%d,姓名:%s,成绩:%f\n", temp->id, temp->name, temp->score); break; } temp = temp->next; } ``` 5. 修改学生信息:通过遍历链,根据学号或姓名等条件找到要修改的学生节点,并修改其数据。例如: ```c int modifyId = 1; Student* temp = head->next; while (temp != NULL) { if (temp->id == modifyId) { // 找到了要修改的学生节点 strcpy(temp->name, "李四"); temp->score = 80.5; break; } temp = temp->next; } ``` 6. 删除学生信息:通过遍历链,根据学号或姓名等条件找到要删除的学生节点,并将其从链中删除。例如: ```c int deleteId = 1; Student* preNode = head; Student* curNode = head->next; while (curNode != NULL) { if (curNode->id == deleteId) { // 找到了要删除的学生节点 preNode->next = curNode->next; free(curNode); break; } preNode = curNode; curNode = curNode->next; } ``` 以上是使用链实现学生成绩管理系统的基本步骤。通过链,可以方便地进行学生信息的添加、查询、修改和删除等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值