分享好友 最新动态首页 最新动态分类 切换频道
项目记录:C语言学生成绩排名程序
2024-12-28 11:25

  一个很简单的小项目,大一的学生作业。我简单介绍一下相关功能和代码之类的吧~

项目记录:C语言学生成绩排名程序

  本来题目不强制要求菜单的,我有点强迫症加了菜单。

【1】题目

  一个班40名学生,期末有10门课程成绩,要求计算并输出如下数据

(1)按每行6人输出每个学生总成绩

(2)按每行5门输出每一科的平均成绩

(3)提供菜单选择按某一科成绩、总成绩进行升序、降序排名输出 (每行6人).

【2】功能代码分析(需求分析分解

(1)功能一: 计算并打印学生的总分。

【1】目标:对每个学生的各科成绩进行累加,得出总分,并打印出每个学生的姓名和对应的总分。

【2】详细要求

1.系统应支持添加学生成绩信息,包括学生的姓名和各科成绩。

2.系统应能够自动计算每个学生的总分。

3.系统应支持打印出所有学生的姓名和对应的总分。

(2)功能二: 打印各科的平均成绩。

【1】目标: 计算每门科目所有学生的总成绩,然后除以学生人数,得出每门科目的平均分,并打印出来。

【2】详细要求

1.系统应支持统计每门科目的总成绩。

2.系统应能够计算每门科目的平均成绩(总成绩/学生人数)。

3.系统应支持打印出每门科目的名称和对应的平均成绩。

(3)功能三: 按科目成绩排序。

【1】目标: 允许用户选择一个科目,然后根据该科目的成绩对学生进行升序或降序排序,并打印排序后的学生姓名和成绩。

【2】详细要求

1.系统应支持用户选择想要排序的科目。

2.系统应支持用户选择排序方式(升序或降序)。

3.系统应能够根据所选科目和排序方式对学生进行排序。

4.系统应支持打印出排序后的学生姓名和对应的科目成绩。

(4)功能四: 按总分排序。

【1】目标: 根据学生的总分对学生进行升序或降序排序,并打印排序后的学生姓名和成绩。

【2】详细要求

1.系统应支持用户选择排序方式(升序或降序)。

2.系统应能够根据学生的总分对学生进行排序。

3.系统应支持打印出排序后的学生姓名、总分以及各科成绩(可选)。

(5)其他考虑

1.用户界面:系统应提供用户友好的界面,便于用户进行操作和查看结果。(我这里做了一个三级的菜单

2.错误处理:系统应能够妥善处理可能出现的错误,如数据输入错误、文件读取错误等,并给出相应的错误提示。

  菜单模块包括以下

【1】主菜单: 提供按科目成绩排序、按总分排序和退出程序的选项。

【2】科目排序菜单: 提供显示所有科目、选择科目并排序的选项。

【3】总分排序菜单: 提供按总分升序排序和降序排序的选项。

【3】功能代码实现

1.结构体、相关参数介绍

[1]Student结构体: 用于存储学生的姓名、各科成绩、总分。

  这里姓名使用字符串数组存储,各科成绩使用整型数组存储,总分用整型变量存储。

//学生的结构体定义

typedef struct {

    char name[20];

    int scores[SUBJECT_COUNT];

    int totalScore;

} Student;

[2]subjects数组: 存储科目名称的字符串数组,方便在打印和排序时使用科目名称而非索引,使用const关键字定义的。

//添加一个数组来存储科目名称

const char* subjects[SUBJECT_COUNT] = {

    "语文", "数学", "英语", "物理", "化学",

    "生物", "历史", "地理", "政治", "体育"

};

(1总分成绩输出:输入学生数据,调用calculateTotalScores函数计算总分,调用printTotalScores函数打印总分。

【1】核心代码

void calculateTotalScores(Student students[], int count) {

    for (int i = 0; i < count; ++i) {

        int sum = 0;

        for (int j = 0; j < SUBJECT_COUNT; ++j) {

            sum += students[i].scores[j];

        }

        students[i].totalScore = sum;

    }

}

void printTotalScores(Student students[], int count) {

    printf("学生姓名    总分 ");

    for (int i = 0; i < count; ++i) {

        printf("%-10s %4d ", students[i].name, students[i].totalScore);

    }

}

【2】运行界面截图: 显示每个学生的姓名和总分。

(2单科平均成绩输出:输入学生数据,调用printAverageScores函数计算并打印平均分。

【1】核心代码

void printAverageScores(Student students[], int count) {

    float averages[SUBJECT_COUNT] = {0};

    for (int i = 0; i < count; ++i) {

        for (int j = 0; j < SUBJECT_COUNT; ++j) {

            averages[j] += students[i].scores[j];

        }

    }

    printf("各科平均分");

    for (int i = 0; i < SUBJECT_COUNT; ++i) {

        printf("科目%d: %.2f ", i + 1, averages[i] / count);

    }

}

【2】运行界面截图: 显示每门科目的平均分。

(3单科升序/降序成绩输出:输入学生数据,显示科目供用户选择,用户输入科目编号和排序方向,调用sortStudentsBySubject函数进行排序,调用printSortedStudents函数打印排序后的学生信息。

【1】核心代码

void sortStudentsBySubject(Student students[], int count, int subjectIndex, bool ascending) {

    for (int i = 0; i < count - 1; ++i) {

        for (int j = 0; j < count - i - 1; ++j) {

if (ascending ? students[j].scores[subjectIndex] > students[j + 1].scores[subjectIndex] :

            students[j].scores[subjectIndex] < students[j + 1].scores[subjectIndex]) {

                Student temp = students[j];

                students[j] = students[j + 1];

                students[j + 1] = temp;

            }

        }

    }

}

void printSortedStudents(Student students[], int count, int subjectIndex, bool ascending) {

    printf(" 按%s成绩%s序排名", subjectIndex >= 0 ? subjects[subjectIndex] : "总分", ascending ? "升序" : "降序");

    printf("学生姓名    成绩 ");

    for (int i = 0; i < count; ++i) {

        // 确保只打印已初始化的学生数据

        if (students[i].totalScore != 0) {

            int scoreToPrint = subjectIndex >= 0 ? students[i].scores[subjectIndex] : students[i].totalScore;

            printf("%-10s %4d ", students[i].name, scoreToPrint);

        }

    }

}

【2】运行界面截图: 显示按选定科目排序后的学生信息。

(4总分升序/降序成绩输出:输入学生数据,用户选择排序方向,调用sortStudentsByTotal函数进行排序,调用printSortedStudents函数打印排序后的学生信息。

【1】核心代码

void sortStudentsByTotal(Student students[], int count, bool ascending) {

    for (int i = 0; i < count - 1; ++i) {

        for (int j = 0; j < count - i - 1; ++j) {

            if (ascending ? students[j].totalScore < students[j + 1].totalScore :

                           students[j].totalScore > students[j + 1].totalScore) {

                Student temp = students[j];

                students[j] = students[j + 1];

                students[j + 1] = temp;

            }

        }

    }

}

void printSortedStudents(Student students[], int count, int subjectIndex, bool ascending) {

    printf(" 按%s成绩%s序排名", subjectIndex >= 0 ? subjects[subjectIndex] : "总分", ascending ? "升序" : "降序");

    printf("学生姓名    成绩 ");

    for (int i = 0; i < count; ++i) {

        // 确保只打印已初始化的学生数据

        if (students[i].totalScore != 0) {

            int scoreToPrint = subjectIndex >= 0 ? students[i].scores[subjectIndex] : students[i].totalScore;

            printf("%-10s %4d ", students[i].name, scoreToPrint);

        }

    }

}

最新文章
广东易达智能机械有限公司成立,布局智能制造新未来
近日,广东易达智能机械有限公司正式成立,法定代表人为唐立炯,注册资本高达1000万人民币。该公司致力于智能制造领域,涵盖广泛的经营范围,包括仪器仪表制造、电气设备、智能设备、金属加工等,标志着又一新兴智能科技企业的崛起。广东易
科目二补考预约排名靠后能约上吗
科目二补考预约排名靠后能约上吗能约上但有一定条件。 科目二、科目三排序规则是以科目一合格那天开始算别人比你早合格一天排名就靠前。 非首次预约科目一考试以上次考试时间为排序时间。若考试预约后因自身原因取消以取消时间为排序时间非
通达信散户人数指标详解:掌握股市人气风向标
通达信散户人数指标:洞悉股市人气动向在股市中,每一个指标背后都隐藏着大量的数据和投资者的情绪变化。通达信散户人数指标便是其中之一,它为我们提供了观察股市人气变化的重要视角。今天就来详细解读这一指标,帮助大家更好地掌握股市风
南昌网站优化公司
从而促进网站搜索引擎排名和页面的搜索质量,让网站快速出现在百度首页。企业网络推广如何做好 企业网站建设价格报,南昌网站优化公司,重视网站优化工作进程,还要按照网站优化的结果,南昌网站优化公司,在单页面网站优化中,优化标签,有
SEO 广告如何提高品牌知名度
良好的网站内容不仅能够提升用户体验,也能够帮助企业在搜索引擎中获得更高的排名。通过关键词研究,企业可以找到与其产品或服务相关的高搜索热度关键词,并以此为基础优化网站内容。企业还需要注重内容的质量和可读性,为用户提供有价值的信息
如何优化建站以提升谷歌SEO效果?
`等)能够清晰地表达页面内容的结构和层次,有助于搜索引擎更好地理解页面内容。合理使用这些标签,可以显著提升网站的SEO效果。二、内容优化:打造高质量、有价值的内容内容是网站的灵魂,也是吸引用户和搜索引擎的关键。一个优质的内容策
淘宝新店怎么起爆?如何在淘宝上开通店铺?(淘宝新店怎么起流量)
如何让淘宝新店迅速崭露头角,吸引大量关注和购物者,是每个创业者都关心的问题。本文将深入探讨如何在淘宝上开通新店,以及有效的起爆策略,帮助您成功打造一个备受瞩目的电商新星。一、如何在淘宝上开通店铺注册淘宝账号: 首先,您需要
【E520淘宝下载】明泰E520淘宝10.41.12免费下载
淘宝是一个好逛、丰富、有趣的消费生活社区,每天有亿万消费者来淘宝“逛街”:发现好物、找到乐趣、表达体验……淘宝能满足人们生活中的各种需求:搜索和浏览商品、加入购物车、下单支付、物流查询、客服交流、发表购物评论、分享优质商品
穿越时空9D裸眼飞行影院,带您上天入地,遨游天际!
号外!号外!9D环幕穿越影院入驻濮水小镇啦!超视觉 / 沉浸式 / 强互动9D裸眼轨道电影采用尖端环幕技术9D裸眼360°范围内沉浸式效果媲美迪斯尼飞跃地平线技术裸眼9D飞行悬空效果,超6K高清球幕影片360度全感观体验,沉浸式穿越体验空中飞行
盛色暗夜武士D72u:高刷与高分辨率的完美结合,电竞玩家的新宠?
我感觉现在不管是什么行业都是在卷啊,为了提高自家产品的售卖量,双十一一过,接着而来的就是双十二了,无论是手机设备还是电脑搭配设备,全都是价格越来越便宜,但是配置越来越丰富,最近我想入手一款具有性价比的游戏显示器,最好是又有
相关文章
推荐文章
发表评论
0评