首页 > 编程语言 >C++U3-第4课-结构体应用

C++U3-第4课-结构体应用

时间:2023-12-11 14:14:23浏览次数:40  
标签:int sum cmp C++ U3 应用 排序 输入 总分

上节课作业分析讲解:

链接:https://pan.baidu.com/s/15b4fJq1Xxd2X6uB9CJuVXw?pwd=r9nt
提取码:r9nt

结构体应用

 sort排序函数回顾

 结构体排序

结构体排序,排序的时候给cmp函数传递的是新创建的结构体类型,所以函数里形参类型就是结构体的类型

 例题1

#include<iostream>
#include<algorithm>
using namespace std;

// 定义学生结构体
struct student{
    string name; // 学生姓名
    int id;      // 学生学号
    double sum;  // 学生总分
} x[110];       // 存放学生的数组,最多存放110个学生

// 比较函数,用于排序学生数组
bool cmp(student x, student y){
    return x.sum > y.sum; // 根据学生总分降序排序
}

int main(){
    int n;
    cin >> n; // 输入学生数量
    for(int i = 1; i <= n; i++) {
        cin >> x[i].name >> x[i].id >> x[i].sum; // 输入每个学生的姓名、学号和总分
    }
    sort(x + 1, x + 1 + n, cmp); // 对学生数组进行排序
    for(int i = 1; i <= n; i++) {
        cout<<x[i].name<<" "<<x[i].id<<" "<<x[i].sum<<endl; // 输出排序后的学生信息
    }
    return 0;
}
View Code

 

例题2

 cmp函数内部编写排序逻辑

定义一个结构体,成员有六个,分别为字符串类型存储姓名、整数类型存储学号、浮点数类型存储语、数、英成绩,总分。定义一个结构体数组,然后输入每个人信息,先按总分从高到低排序,如果总分相同,就按语文成绩从高到低排序,如果语文成绩也相同那么就按学号从小到大排序。

1、定义变量,声明结构体类型,包含姓名,语数英成绩,总分,学号

2、输入变量 n 和 n 个学生的信息

3、排序

​ 3.1、总分从高到低排序

​ 3.2、总分相同,就按语文成绩从高到低排序

​ 3.3、总分和语文成绩都相同,学号从小到大排序

4、输出

【参考代码】
#include<iostream>
#include<algorithm>
using namespace std;
struct stu
{
    string name;  //姓名
    int id;    //学号
    double chinese , math , english , sum;    //语文成绩 数学成绩 英语成绩 总分
} x[110];
bool cmp(stu a , stu b)
{
    if(a.sum != b.sum)
        return a.sum > b.sum;
    else if(a.chinese != b.chinese)
        return a.chinese > b.chinese;
    else
        return a.id < b.id;
}
int main()
{
    //1、定义变量,声明结构体类型,包含姓名,语数英成绩,总分,学号 
    int n;
    //2、输入变量 n 和 n 个学生的信息 
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> x[i].name >> x[i].chinese >> x[i].math >> x[i].english;
        x[i].id = i;
        x[i].sum = x[i].chinese + x[i].math + x[i].english;
    }
    //3、排序 
    sort(x + 1 , x + 1 + n , cmp);
    //4、输出 
    cout << x[1].name << " " << x[1].sum << endl;
    cout << x[2].name << " " << x[2].sum << endl;
    return 0;
}
View Code

 

 pair

 

 例题3:

 

【思路分析】
定义一个结构体,成员有两个,分别为字符串类型存储姓名、整数类型存储效率。然后定义一个结构体数组,然后输入每个人信息,然后按照效率进行降序排序。最后按照格式进行输出。

1、定义变量,声明结构体类型,包含两个属性,分别为姓名和效率

2、输入 n 和 n 个人的信息

3、排序

4、输出

【参考代码】
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 19;
struct people
{
    string name;
    int w;
} a[maxn];
bool cmp(people x, people y)
{
    return x.w > y.w;
}
int main()
{
    //1、定义变量,声明结构体类型,包含两个属性,分别为姓名和效率 
    int n;
    //2、输入 n 和 n 个人的信息 
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i].name >> a[i].w;
    //3、排序 
    sort(a, a + n, cmp);
    //4、输出 
    for (int i = 0; i < n; i++)
        cout << a[i].name << " " << a[i].w << '\n';
    return 0;
}
View Code

例题3  生日

【题意分析】
输入 n 和 n 个人的信息,按照年龄从大到小排序,年龄一样,后输入的先输出。

【思路分析】
定义一个结构体,成员有四个,分别为字符串类型存储姓名、四个整数类型存储生日的年、月、日以及下标。然后定义一个结构体数组,然后输入每个人信息,然后按照年龄从大到小进行排序,注意题目要求如果有多个生日一样,则后面的先输出。最后按照格式进行输出。

1、定义变量,声明结构体类型,包含五个属性,姓名,年月日,输入顺序

2、输入 n 和 n 个人的信息

3、结构体排序

​ 3.1、年份不同,年份从小到大排序

​ 3.2、年份相同,月份不同,月份从小到大排序

​ 3.3、年份相同,月份相同,日子不同,日期从小到大排序

​ 3.4、年月日相同,输入顺序从大到小排序

4、输出

【参考代码】
#include <iostream>
#include<algorithm>
using namespace std;

const int maxn = 109;
struct people
{
    string name;
    int year,month,day,id;
} a[maxn];
bool cmp(people x, people y)
{
    if (x.year != y.year)
    {
        return x.year < y.year;
    }
    if (x.month != y.month)
    {
        return x.month < y.month;
    }
    if (x.day != y.day)
    {
        return x.day < y.day;
    }
    return x.id > y.id;
}
int main()
{
    //1、定义变量,声明结构体类型,包含五个属性,姓名,年月日,输入顺序 
    int n;
    //2、输入 n 和 n 个人的信息 
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day;
        a[i].id = i;
    }
    //3、结构体排序
    //3.1、年份不同,年份从小到大排序
    //3.2、年份相同,月份不同,月份从小到大排序
    //3.3、年份相同,月份相同,日子不同,日期从小到大排序
    //3.4、年月日相同,输入顺序从大到小排序 
    sort(a, a + n, cmp);
    //4、输出 
    for (int i = 0; i < n; i++)
        cout << a[i].name << '\n';
    return 0;
}
View Code

 

 

本节课作业讲解:

链接:https://pan.baidu.com/s/1ixdm3IlY6oFCqIROOYP0zw?pwd=enrc
提取码:enrc

 

标签:int,sum,cmp,C++,U3,应用,排序,输入,总分
From: https://www.cnblogs.com/jayxuan/p/17894243.html

相关文章

  • 简述—下ORM,并列举不少于两个应用实例
    简述—下ORM,并列举不少于两个应用实例ORM(Object-RelationalMapping)是一种编程技术,用于将对象模型和关系数据库之间建立映射,从而实现对数据库的操作更加方便、面向对象化。ORM框架负责将数据库表的记录映射为对象,同时也能将对象的操作映射为数据库的操作。以下是两个ORM的应用实......
  • C++(std::shared_ptr)
    std::shared_ptr是C++标准库中的一个智能指针类,用于管理动态分配的内存。它提供了一种共享拥有权(sharedownership)的机制,通过引用计数来跟踪指向同一块内存的所有std::shared_ptr实例。当最后一个std::shared_ptr被销毁时,它会自动释放所拥有的内存。基本用法:#include<me......
  • C++中的虚函数和纯虚函数详细讲解
    1.虚函数1.1概念(1)定义一个函数为虚函数,不代表函数为不被实现的函数。(2)定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。1.2简介假设我们有下面的类层次classA{public:virtualvoidfoo(){cout<<"A::foo()iscalled"<<endl;}};c......
  • 抽象工厂模式:角色解析与应用探索
    前言工厂模式一般指的是简单工厂模式、工厂方法模式、抽象工厂模式,这是三种工厂模式的最后一篇,其他两种的文章链接如下:设计模式之是简单工厂模式_凡夫编程的技术博客_51CTO博客工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客建议三种模式放在一起对比学习,更能......
  • 《大学生梦幻联动文心大模型,800个AI应用在杭州“卷”不停》
    12月8日,杭州,一位“白发老人”突然摔倒在地,此时,身旁的机器人已经识别出“老人”摔倒的场景,自动电话联系了家人和医生……这一幕发生在中国计算机大赛-人工智能创意赛(以下简称“C4-AI大赛”)的现场。原来,这是哈尔滨工业大学(威海)王子康带着他的AI作品,在为C4-AI大赛决赛做“路演”。:::......
  • 微服务 - 应用性能监测 · 链路追踪 · 概念规范 · 产品接入 · 方法级追踪 · 创建
    系列目录微服务-概念·应用·架构·通讯·授权·跨域·限流微服务-Consul集群化·服务注册·健康检测·服务发现·负载均衡微服务-Redis缓存·数据结构·持久化·分布式·高并发微服务-Nginx网关·进程机制·限流熔断·性能优化......
  • webrtc应用上线cpu偏高的问题排查
    现象 如上图,上线后服务全量使用的cpu统计明显增高,大概在50%左右. 排查比对上一稳定版本和本次版本代码diff,无异常比对依赖lib版本,无异常使用perf和FlameGraph生成火焰图比对两个版本差异.发现几个问题:有些调用栈不同,缺少一些中间函数调用栈;新版本在音频......
  • yew 基于rust 以及wasm 创建web 应用的框架
    yew基于rust以及wasm创建web应用的框架,我们可以基于一些定好好的rust宏,实现基于webassembly的web应用开发包含的特性基于组件使用了类似rect以及elm的开发模式html宏类似reactjsx的定义ssr支持服务端渲染,默认属于客户端选择,但是可以通过ServerRenderer设......
  • CH395+EMQX实现MQTT应用(Windows系统)
    MQTT协议1.MQTT简介MQTT是一种基于 发布/订阅模式的轻量级消息协议,工作在TCP/IP协议族上。其最大的优点是用极少量的代码和有限的宽带为设备间提供实时可靠的消息服务。在物联网(IOT)和机器与机器(M2M)等方面有较广泛的应用。2.MQTT特性2.1发布/订阅模式,提供一对多的消息发布......
  • C++基础 -3- 匿名空间,命名空间跨文件使用
    ———————匿名空间,命名空间跨文件———————匿名空间仅限本文件使用 ......