6-3 结构体-成绩单排序

定义函数处理结构体数组,按成绩从高到低降序排列。

函数接口定义:

struct stu {
    int num;
    char name[20];
    int score;  };

void  fun ( struct stu *p, int n );

p是结构体数组的起始地址,n是结构体单元个数。
结构体成员:num是学号,name是姓名,score是成绩。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
struct stu{
    int num;
    char name[20];
    int score;
};
void fun( struct stu *p, int n );
int main()
{   struct stu a[20];
    int n, i;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &a[i].num, a[i].name, &a[i].score);
    } 
   fun(a,n);
   for(i = 0; i < n; i++)
       printf("%d %s %d\n", a[i].num, a[i].name, a[i].score);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

6
1001 anny 85
1002 boy 75
1003 car 65
1004 dan 55
1005 emm 95
1006 pa 35

输出样例:

在这里给出相应的输出。例如:

1005 emm 95
1001 anny 85
1002 boy 75
1003 car 65
1004 dan 55
1006 pa 35
void  fun ( struct stu *p, int n ){
    int i;
    int j;
    for(i=0;i<n;i++){
        for(j=0;j<n-i;j++){
            if(p[j+1].score>p[j].score){
                struct stu temp;
                temp=p[j];
                p[j]=p[j+1];
                p[j+1]=temp;
            }
        }
    }
}

 

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
高级语言程序设计(1)课程设计 1. 程序设计说明书 【设计题目】 数学1001班期末学生成绩管理系统 【问题描述】 对数学1001班每个同学本学期期末八门课的成绩进行处理。每个同学的成绩用该软 件通过键盘敲入并以文本文件方式存放在磁盘,内容为十二列:学号、姓名、概率 论与数理统计、复变函数与积分变换、高级语言程序设计、C语言课程设计、大学 英语(4)、大学体育(4)、思政概论、选修课、平均成绩和排名情况。并对我班 所有同学的成绩进行分析。编写程序,求出各个学生的平均成绩以及每个学生成绩 的方差,计算出我班学生的总体平均成绩,及格率和优秀率,统计平均分于60分 的学生名单。并可以对每位同学的成绩和排名进行查看,以及修改等。 【基本要求】 1. 通过此软件可以直接录入各个学生的各科成绩,并且会将成绩自动保存到盘上。 2. 通过此软件可以直接对已录入学生成绩进行修改,并且修改完成后会将更改后的成 绩情况自动保存到原磁盘文件中。 3. 通过此软件可以直接对各个学生的各科成绩、平均成绩和排名情况进行查询。 4. 通过此软件可以统计我班学生的及格率,优秀率和均分于60学生情况。 5. 可以计算出我班的班平均成绩以及计算出班上每个同学成绩的方差。 【算法思想】 1. 构造一个结构体类型,成员包括11项:字符型数组,存放学生名称;9个整形变量 ,分别存放学号、八门课的成绩;1个实型变量,存放平均成绩。 2. 录入各个学生成绩时,通过循环语句将学生名称与成绩得分输入到结构体中,然后 通过循环语句算出平均分、成绩方差并写入文本文件中,并存入磁盘。 3. 查询成绩排名时,直接通过已经存在的文本文件进行读出到结构体中,并将结构提 数组通过平均分的大小用冒泡法进行排序,然后将结果显示在屏幕。 4. 通过循环语句计算出班上学生成绩的总体平均分,并计算出我班学生的及格率和优 秀率等。 【模块划分及调用关系】 1:程序设计组成框图: 2:模块功能说明: 1 输入功能:输入学生姓名学号及成绩。 2 查看功能:输出姓名学号及各科成绩。 3 查询功能:通过学号查询学生姓名及各科成绩。 4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。 5 修改功能:通过输入学号修改指定学生的错误信息。 6添加功能:添加学生信息。 7删除功能:通过输入学号输入指定学生信息。 8保存功能:将学生信息保存。 9 退出系统。 3:主要函数之间的调用关系及各自功能: 主要函数函数原型 void inputscore(void); void savescore(void); void avergescore(void); void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void); void modify(void); void delscore(void); void menu(void); i. 在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。 ii. 在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高排序输。出,同时lookscore()函数调用avergesc ore()函数实现各个学生平均分的计算。 iii. 在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能 。 iv. 在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方 差,不及格学生名单。 v. 在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能 vi. 在菜单界面输入6,调用add()函数实现添加学生成绩。 vii. 在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。 viii. 在菜单界面输入8,调用savescore()函数将学生成绩信息保存。 ix. 在菜单界面输入9,退出成绩管理系统。 【模块流程图】 main函数 Inputscore函数 ...... Lookscore函数 Searchscore函数 Statistic函数 Modify函数 【程序使用方法】 1. 执行程序,按照界面提示进行选择。输入 "1",进入成绩的输入。 2. 按照程序提示,分别输入第一个同学的学号,姓名和8科成绩的分数。(注:这里只 要求输入每个学生学号的最后两位,因为数学1001班学生前10位学号都为20100103 01) 3. 输入成功后,按任意键返回主界面。输入"8",进入成绩保存。在按任意键返回主菜 单,输入"2"查看成绩,程序自动将各个已录入保存的学生成绩及排名情况输出到屏 幕上。 4. 按任意键返回
好的,针对你的问题,我可以给出以下思路: 1. 定义一个链表节点结构体,包含学生姓名、学号、成绩等信息; 2. 读入学生信息,创建链表; 3. 对链表进行排序,可以使用冒泡排序、快速排序等算法; 4. 输出排序后的链表。 以下是示例代码: ```c++ #include <iostream> #include <string> using namespace std; // 定义链表节点结构体 struct Node { string name; int id; int score; Node* next; }; // 冒泡排序 void bubbleSort(Node* head) { if (head == nullptr || head->next == nullptr) { return; } bool flag = true; while (flag) { flag = false; Node* p = head->next; while (p->next != nullptr) { if (p->score < p->next->score) { swap(p->name, p->next->name); swap(p->id, p->next->id); swap(p->score, p->next->score); flag = true; } p = p->next; } } } int main() { // 读入学生信息,创建链表 Node* head = new Node(); Node* p = head; int n; cout << "请输入学生人数:"; cin >> n; for (int i = 0; i < n; i++) { Node* node = new Node(); cout << "请输入第" << i + 1 << "个学生的姓名、学号、成绩:"; cin >> node->name >> node->id >> node->score; p->next = node; p = p->next; } p->next = nullptr; // 对链表进行排序 bubbleSort(head); // 输出排序后的链表 p = head->next; while (p != nullptr) { cout << p->name << " " << p->id << " " << p->score << endl; p = p->next; } // 释放链表内存 p = head; while (p != nullptr) { Node* q = p; p = p->next; delete q; } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值