了解结构体以及结构体数组

news2025/1/11 21:06:58
C语言的结构体你真的了解吗?   一起来看一下吧!!!
1.结构体是啥?

          结构体是多种数据类型的组合体

2.格式(一般放在主函数前,也就是int main()前面 )
关键字  结构体名字  {成员列表}
sturct  结构体名字  {成员列表}
//例如
struct date{
int year;
int month;   // 类型名 + 成员名
int day;
};                //   !!!不要忘记这里的‘;’
3.简单结构体展示
#include <bits/stdc++.h>
using namespace std;
struct date{
	int year;
	int month;
	int day;
};
int main(){
	struct date today;     //定义结构体变量
	today.year = 2024;     // 输入结构体成员的值(!!!法一)
	today.month = 1;
	today.day = 10;
	printf("today is %d.%02d.%02d",today.year,today.month,today.day);
                                                //   %02d 是将不足两位的补零
	
	return 0;
}
运行结果:
today is 2024.01.10
声明两个日期(声明变量):

法一:(注意today,tomoorrow;位置)

#include <bits/stdc++.h>
using namespace std;
struct date{
	int year;
	int month;
	int day;
}today,tomoorrow;    //在在在在在在在这声明了两个日期,后面可以直接用了 
int main(){

	today.year = 2024;     // 输入结构体成员的值
	today.month = 1;
	today.day = 10;

	struct date tomorrow = {.year = 2024,.month = 1,.day = 11	};
	
	printf("today is %d.%02d.%02d\n",today.year,today.month,today.day);
	printf("tomorrow is %d.%02d.%02d",tomorrow.year,tomorrow.month,tomorrow.day);
                                                //   %02d 是将不足两位的补零
	
	return 0;
}

法二:

#include <bits/stdc++.h>
using namespace std;
struct date{
	int year;
	int month;
	int day;
};    
int main(){
	struct date today,tomoorrow;    //在在在在在在在这声明了两个日期
	today.year = 2024;              // 法法法111输入结构体成员的值
	today.month = 1;
	today.day = 10;
	struct date tomorrow = {.year = 2024,.month = 1,.day = 11	};
                                               //法法法222输入输入结构体成员的值
	
	printf("today is %d.%02d.%02d\n",today.year,today.month,today.day);
	printf("tomorrow is %d.%02d.%02d",tomorrow.year,tomorrow.month,tomorrow.day);
                                                //   %02d 是将不足两位的补零
	
	return 0;
}

运行结果:
today is 2024.01.10
tomorrow is 2024.01.11

先不要着急,为什么看不懂,前两个代码的运行和结果让你先看看结构体,看看就行,有个了解

4.上题目:实践起来

5.代码:
#include <bits/stdc++.h>
using namespace std;
struct student {
	string name;                  
	int g;
}a[25];                         //定义结构体 
bool cmp(student x,student y){

    if (x.g == y.g) return x.name < y.name;   //如果结构体中x的成绩与y的成绩一样,就比较名字的首字母字典排序    
    else return x.g>y.g;}                     // 找出结构体中成绩高的 
int main()
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
    	cin>>a[i].name>>a[i].g;             //输入结构体成员的值 
	}
	sort(a,a+n,cmp);                        //sort排序 
	for(int i=0;i<n;i++)     
	    {
	    	cout<<a[i].name<<" "<<a[i].g<<endl;  //输出结构体 
		}
	return 0;
}
6.主要知识点:
       (1)怎样写结构体的cmp函数;
bool cmp(student x,student y){  //类型很重要,这里用结构体的类型

    if (x.g == y.g) return x.name < y.name;   //如果结构体中x的成绩与y的成绩一样,就比较名字的首字母字典排序    
    else return x.g>y.g;}                     // 找出结构体中成绩高的 
      (2)cmp的字典排序:

因为return x.g>y.g返回的是倒序,这个字母大小是按ascll码排序的 所以要用

return x.name < y.name  //因为name是字符,不用考虑其他的东西
   (3)输入结构体成员:(输出同理)
int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
    	cin>>a[i].name>>a[i].g;             //输入结构体成员的值 
	}
7.来再刷一道题,巩固巩固刚刚学到的知识
               题目:

              代码: 
#include <bits/stdc++.h>
using namespace std;
struct stu{
	string x;
	string y;
	double z;
	
}a[25];

bool cmp(stu a,stu b)  
{
	return a.z<b.z;
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	    {
	    	cin>>a[i].x>>a[i].y>>a[i].z;
		}
	sort(a,a+n,cmp);
   	for(int i=0;i<n;i++) 
   	    cout<<a[i].x<<"\t"<<a[i].y<<"\t"<<fixed<<setprecision(2)<<a[i].z<<endl;
	
	return 0;
}
100.补充:使用typedef 简化结构体

        每次定义时都要输入struct  结构体名字   xxx;我们想办法让他简单一点,就使用typedef函数,因为时间原因,作为码农的你去收集资料弄懂吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1373316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全B模块(笔记详解)- Web信息收集

Web信息收集 1.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,查看该命令的完整帮助文件),并将该操作使用命令中固定不变的字符串作为Flag提交; Flag:nikto -H 2.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,扫描目标服务器8080端口,…

springCould中的Bus-从小白开始【11】

目录 &#x1f9c2;1.Bus是什么❤️❤️❤️ &#x1f32d;2.什么是总线❤️❤️❤️ &#x1f953;3.rabbitmq❤️❤️❤️ &#x1f95e;4.新建模块3366❤️❤️❤️ &#x1f373;5.设计思想 ❤️❤️❤️ &#x1f37f;6.添加消息总线的支持❤️❤️❤️ &#x1f9…

Redis不同环境缓存同一条数据,数据内部值不同

背景 现实中&#xff0c;本地环境&#xff08;dev&#xff09;和开发环境&#xff08;feature&#xff09;会共同使用相同的中间件&#xff08;本篇拿Redis举例&#xff09;&#xff0c;对于不同环境中的&#xff0c;图片、视频、语音等资源类型的预览地址url&#xff0c;需要配…

Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)

0x01 产品简介 Ncast盈可视 高清智能录播系统是广州盈可视电子科技有限公司一种先进的音视频录制和播放解决方案,旨在提供高质量、高清定制的录播体验。该系统采用先进的摄像和音频技术,结合强大的软件平台,可以实现高清视频录制、多路音频采集、实时切换和混音、定制视频分…

thinkphp学习07-数据库的数据查询

单数据查询 单条数据查询&#xff0c;一般是一维数组 Db::table()中 table 必须指定完整数据表&#xff08;包括前缀&#xff09;&#xff0c;如果配置了表前缀&#xff0c;Db::name()中可以忽略 如果希望只查询一条数据&#xff0c;可以使用 find()方法&#xff0c;需指定 wh…

赋能智慧农业生产,基于YOLOv7开发构建农业生产场景下油茶作物成熟检测识别系统

AI赋能生产生活场景&#xff0c;是加速人工智能技术落地的有利途径&#xff0c;在前文很多具体的业务场景中我们也从实验的角度来尝试性地分析实践了基于AI模型来助力生产生活制造相关的各个领域&#xff0c;诸如&#xff1a;基于AI硬件实现农业作物除草就是一个比较熟知的场景…

IDEA中在Java项目中添加Web模块 与配置tomcat服务器

现有项目添加直接走第二步 生成普通新项目 给项目添加框架支持 勾选 Web Application 选项, 点击OK 得到项目目录结构 , 出现web目录结构, 且web目录文件夹出现小蓝点 web或webapp 没有出现小蓝点 说明web配置没有出现或是手动构建的目录结构 , 在IDE关闭或者迁移项目时会出…

【申请SSL证书】免费申请阿里云SSL证书

注意&#xff1a;申请 SSL证书的前提是有一个域名且备案了 第一部&#xff1a;申请免费证书 免费 CA 证书购买地址&#xff08;请戳这里&#xff09; 选择合适的选项如下图 为了解决免费证书近期存在的吊销、统计等问题&#xff0c;自2021年起&#xff0c;免费证书申请申请将…

Hive基础知识(八):Hive对数据库的增删改查操作

1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment]#注释 [LOCATION hdfs_path]#指定当前库的hdfs目录 [WITH DBPROPERTIES (property_nameproperty_value,...)]; #备注创建作者和创建时间 1&#xff09;创建一个数据库&#xff0c;数据…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用…

Java 对象的内存布局

目录 一. 前言 二. Java 对象的内存布局 三. Java 对象结构 3.1. 对象头 3.1.1. Mark Word 3.1.2. 类型指针&#xff08;Class Metadata Pointer&#xff09; 3.1.3. 数组长度&#xff08;Length&#xff09; 3.2. 实例数据 3.3. 对齐填充&#xff08;Padding&#xf…

Python-12-正则

当然内容不是很全&#xff0c;可以参考: 正则表达式学习资料 https://blog.csdn.net/weixin_40907382/article/details/79654372

解决录制的 mp4 视频文件在 windows 无法播放的问题

解决录制的 mp4 视频文件在 windows 无法播放的问题 kazam 默认录制保存下来的 mp4 视频文件在 windows 中是无法直接使用的&#xff0c;这是由于视频编码方式的问题。解决办法&#xff1a; 首先安装 ffmeg 编码工具&#xff1a; sudo apt-get install ffmpeg 然后改变视频的…

kivy,一个超级厉害的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超级厉害的 Python 库 - kivy。 Github地址&#xff1a;https://github.com/kivy/kivy Python是一种广泛使用的编程语言&#xff0c;而Kivy是一个用于创建跨平台移动应用和多点触控应用的开源…

【局域网window10系统搭建共享文件夹或与手机共享】

局域网window10系统搭建共享文件夹或与手机共享 1、Window 10之间搭建共享文件夹1.1 ping通两台window 10 电脑1.2 创建共享账号&#xff08;window 10专业版&#xff09;1.3 创建共享文件夹以及配置1.4访问共享文件夹 2、手机访问window10 共享文件夹&#xff08;结合步骤一&a…

kubeSphere DevOps自定义容器环境JDK11

kubeSphere DevOps自定义容器环境JDK11 &#x1f342;前言&#x1f342;增加JDK11容器环境&#x1f341;检查是否成功 &#x1f342;不生效的原因排查&#x1f341;按步骤执行如下命令 &#x1f342;前言 kubeSphere 版本v3.1.1 遇到问题:kubeSphere默认支持容器只有JDK8,目前…

【Axure高保真原型】树控制内联框架

今天和大家分享树控制内联框架的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击最后一级人物节点&#xff0c;可以切换右侧内联框到对应的页面&#xff0c;左侧的树是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表格即…

基于JavaWeb+BS架构+SpringBoot+Vue智能菜谱推荐系统的设计和实现

基于JavaWebBS架构SpringBootVue智能菜谱推荐系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目 录 目 录 III 第一章 概述 1 1.1 研究背景 1 1.2研究目的及意义 1 1.3…

Java:爬虫htmlunit实践

之前我们已经讲过使用htmlunit及基础&#xff0c;没有看过的可以参考Java&#xff1a;爬虫htmlunit-CSDN博客 我们今天就来实际操作一下&#xff0c;爬取指定网站的数据 1、首先我们要爬取一个网站数据的时候我们需要对其数据获取方式我们要进行分析&#xff0c;我们今天就拿双…

【数据库系统概论】期末复习2

系列文章 期末复习1 系列文章定义并理解下列术语&#xff0c;说明它们之间的联系与区别试述关系模型的完整性规则。在参照完整性中&#xff0c;什么情况下外码属性的值可以为空值&#xff1f;关系代数 定义并理解下列术语&#xff0c;说明它们之间的联系与区别 &#xff08;1…