结构体(c++语言)

在实际问题中,一组数据往往具有不同的数据类型。例如,人口大普查时,我们需要记录每一位公民的姓名,年龄,性别,住址,身份证号码。这些信息分别要用整型,字符型,字符串型来记录。为了解决问题,C++语言给出了另一种构造数据类型——“结构体”,它在数据存储方面相当于其他高级语言中的记录,但它有着面向对象的优势。

一、结构体定义和操作

   1. 定义结构体及结构体变量

   结构体变量的定义有两种方式:

   

   定义结构体的同时定义结构体变量

   struct 结构体名 {  //其中 struct 是关键字

    成员表   //可以有多个成员

    成员函数  //可以有多个成员函数,也可以没有

   }  结构体变量表; //可以同时定义多个结构体变量

   

   结构体变量名列表的各个变量用“,”隔开。

    例如:

   struct DATA{

    int a[2];                        //成员为一个数组

    int c;      

    }data_a,data_b;   

 当然,我们也可以先定义结构体再定义结构体变量

   struct 结构体名{

    成员表

    成员函数

   };

   结构体名  结构体变量表;//同样可以同时定义多个结构体变量

    例如:

   struct DATA{

    int a[2];                      

    int c;      

    };

   DATA data_a,data_b;//这种定义方式与上一种方式的效果是相同的

  在定义结构体变量时注意,结构体变量名和结构体名不能相同。在定义结构体时,系统对之不分配实际内存。只有定义结构体变量时,系统才为其分配内存。

 2.成员调用

   结构体变量与各个成员之间引用的一般形式为:

   结构体变量名. 成员名

    对于上面定义的结构体变量,我们可以这样操作:

    cin>>data_a.a[0]>>data_a.a[1];  //一般情况下不能写 cin>>data_a;

    int a=data_a.a[0]+data_a.a[1];    //就像用整形变量一样用a[0]、a[1]

     data_b=data_a;       //结构体之间的相互赋值是合法的

    data_a.c=0;       //就如同给整形变量赋值

    实际上结构体成员的操作与该成员类型所具有的操作是一致的。

成员运算符“.”在存取成员数值时使用,其优先级最高,并具有左结合性。在处理包含结构体的结构体时,可记作:

   strua. strub. membb

   这说名结构体变量 strua 有结构体成员 strub;结构体变量 strub 有成员 membb。   

   3.成员函数调用

   结构体成员函数调用的一般形式为:

   结构体变量名. 成员函数  

   结构体成员函数默认将结构体变量作为引用参数。

二、结构体操作实例

   现在,我们先定义一个简单的结构体,这个结构体将用来记录一个学生的大致情况,所以它的成员应该有学号、姓名、性别、年龄、成绩、家庭住址等。

   #include<iostream>

   using namespace std;

   struct student{

    int num;   //学号

    char name[21];  //姓名

    char sex;   //性别

    int age;   //年龄

    float score;   //成绩

    char address[51];  //家庭住址

   };  //此处不可忽略分号

   struct student a,b;

   int main()

   {

    cin>>a.num>>a.name>>a.sex>>a.age>>a.score>>a.address;

    cin>>b.num>>b.name>>b.sex>>b.age>>b.score>>b.address;

    cout<<a.num<<' '<<a.name<<' '<<a.sex<<' '<<a.age<<' '<<a.score<<' '<<a.address<<endl;

    cout<<b.num<<' '<<b.name<<' '<<b.sex<<' '<<b.age<<' '<<b.score<<' '<<b.address<<endl;

    return 0;

   }

学生信息 查看测评数据信息

输入一个学生的信息,包括姓名、性别、年龄、体重,再输出这些信息。(要求使用结构体)

输入格式

一行,依次是学生的姓名、性别、年龄、体重。

输出格式

一行,依次是学生的姓名、性别、年龄、体重(体重保留一位小数)。

输入/输出例子1

输入:

wangshuting  f  12  70.69

输出:

wangshuting  f  12  70.7

#include<bits/stdc++.h>
using namespace std;
struct stu{string name;char x;int a;double b;
}n;
int main(){cin>>n.name>>n.x>>n.a>>n.b;cout<<n.name<<" "<<n.x<<" "<<n.a<<" ";printf("%.1lf",n.b);return 0;
}

成绩排名次 查看测评数据信息

输入N个学生的姓名和语文成绩,按语文成绩高低排出名次,并且从大到小输出每个学生的姓名。

输入格式

输入第一行:N,表示N个学生。( 0 < n < 60 )

第二到第N+1行:两个变量:A姓名,B学生成绩(保证成绩没有相同)。学生的姓名不超过20个字符。

输出格式

输出N行,按学生成绩由高到低输出。

每行输出学生名次、姓名和成绩,中间用空格隔开。

输入/输出例子1

输入:

3

xiaofang 89

xiaotian 100

chenhao 60

输出:

1 xiaotian 100

2 xiaofang 89

3 chenhao 60

#include<bits/stdc++.h>
using namespace std;
struct stu{string name;int a;
}m[1005];
int n; 
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>m[i].name>>m[i].a;}for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(m[i].a<m[j].a)swap(m[i].name,m[j].name),swap(m[i].a,m[j].a);}}for(int i=1;i<=n;i++){cout<<i<<" "<<m[i].name<<" "<<m[i].a<<endl;}return 0;
}

身高问题 查看测评数据信息

输入 n 个学生的信息,每个学生信息包括姓名、身高、学号。编程输出身高最高的学生的信息。

输入格式

第 1 行一个正整数 n,表示学生个数,n≤100。

以下 n 行,每一行依次输入学生的姓名、身高、学号。

输出格式

输出最高的学生信息,如存在身高一样的请输出学号小的那个同学。

输入/输出例子1

输入:

5

John 172 20160302

David 173 20160306

Jason 168 20160309

Jack 152 20160311

Kitty 147 20160319

输出:

David 173 20160306

#include<bits/stdc++.h>
using namespace std;
struct a{string name;int sg;int xh;
}x[105];
int n;
bool cmp(a x,a y){if(x.sg!=y.sg)return x.sg>y.sg;else return x.xh<y.xh;
}
int main(){int n;cin>>n;for(int i=1;i<=n;i++)cin>>x[i].name>>x[i].sg>>x[i].xh;sort(x+1,x+n+1,cmp);cout<<x[1].name<<" "<<x[1].sg<<" "<<x[1].xh;return 0;
}

乐乐的礼物(xx10nhoi) 查看测评数据信息

        圣诞节到了,乐乐所在的班准备搞一个圣诞晚会,晚会的其中一个环节是全班同学互送礼物。已知每个同学都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。有些人准备了较多的钱,有些人准备了较少的钱。现在乐乐想知道晚会结束后哪些同学收到的礼物的总价值最大(包含无法送出的钱)。

输入格式

第1行一个整数n,表示乐乐所在的班的人数(2≤n≤100);

第2至n+1行(n行),按班里的学号顺序给出每个同学的姓名。(姓名只包含大写或小写字母,姓名的长度不超过10个字母);

第n+2至2*n+2行(n行),按学号顺序给出每个同学送礼物的信息:第一个是整数m(0≤m≤5000),表示该同学准备用来送礼的钱;第二个是整数k(0≤k≤20),表示该同学准备把钱平均分给k个好朋友(给每个朋友的钱都是整数,并尽量全部用完,剩下无办法再分的钱自己保留);接着是k个姓名,每个姓名之间用一个空格分开,表示要分给哪k个朋友。

输出格式

输出文件有n行,按最后的钱数从大到小的顺序输出每个同学的姓名和钱数。如果钱数相同的按学号顺序从小到大输出。

输入/输出例子1

输入:

5

Dave

laura

owen

vick

amr

200 3 laura owen vick

500 1 Dave

150 2 vick laura

600 1 amr

0 0

输出:

amr 600

Dave 502

laura 141

vick 141

owen 66

样例解释

Dave的200元分给了3人,每人66元,剩下2元,还收到了2号给他的500元,因此他最后有502元。

laura的500元给了同学,收到1号给他的66元和3号给他的75元,他最后有141元。

owen的150元给了2人,每人75元,收到1号给他的66元,他最后有66元。

vick的600元给了同学,收到1号给他的66元和3号给他的75元,他最后有141元。

amr没钱给人,收到5号给他的600元,他最后有600元。

#include<bits/stdc++.h>
using namespace std;
struct pp{string name;int mon,id;
}a[105];
int n;
bool cmp(pp x,pp y){if(x.mon!=y.mon)return x.mon>y.mon;else return x.id<y.id;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].name;a[i].id=i;}int m,k;for(int i=1;i<=n;i++){cin>>m>>k;if(k==0){a[i].mon=a[i].mon+m;continue;}int pj=m/k;a[i].mon=a[i].mon+m%k;string s;for(int j=1;j<=k;j++){cin>>s;for(int h=1;h<=n;h++){if(a[h].name==s){a[h].mon+=pj;}}}}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){cout<<a[i].name<<" "<<a[i].mon<<endl;}return 0;
}

考试成绩 查看测评数据信息

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。

输入格式

第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的 k(1≤k≤n)。  

其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。

输出格式

输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)

输入/输出例子1

输入:

5 3 

90788001 67.8 

90788002 90.3

90788003 61

90788004 68.4

90788005 73.9

输出:

90788004 68.4

#include<bits/stdc++.h>
using namespace std;
struct a{int xh;double cj;
}x[1005];
int n,k;
bool cmp(a x,a y){if(x.xh!=y.xh)return x.cj>y.cj;else return x.xh<y.xh;
}
int main(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>x[i].xh>>x[i].cj;}sort(x+1,x+n+1,cmp);printf("%d %g",x[k].xh,x[k].cj);return 0;
}

谁获得了最高奖学金 查看测评数据信息

某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
  1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
  2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
  3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
  4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
  5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
  只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
  现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

输入格式

第一行输入数据N,表示学生的总数( 0 < N < 100 ),。接下来的n行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。  

输出格式

输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这n个学生获得的奖学金的总数。

输入/输出例子1

输入:

4

YaoLin 87 82 Y N 0

ChenRuiyi 88 78 N Y 1

LiXin 92 88 N N 0

ZhangQin 83 87 Y N 1

输出:

ChenRuiyi

9000

28700

#include<bits/stdc++.h>
using namespace std;
struct node{string xm;int qm,bj;char bgb,xb;int lw,ans,sum;
}a[101];
int n,tot=0;
bool cmp(node x,node y){if(x.ans==y.ans)return x.sum<y.sum;else return x.ans>y.ans;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){cin>>a[i].xm>>a[i].qm>>a[i].bj>>a[i].bgb>>a[i].xb>>a[i].lw;if(a[i].qm>80&&a[i].lw>=1)a[i].ans+=8000;if(a[i].qm>85&&a[i].bj>80)a[i].ans+=4000;if(a[i].qm>90)a[i].ans+=2000;if(a[i].xb=='Y'&&a[i].qm>85)a[i].ans+=1000;if(a[i].bj>80&&a[i].bgb=='Y')a[i].ans+=850; a[i].sum=i; tot+=a[i].ans;}sort(a+1,a+n+1,cmp);cout<<a[1].xm<<endl<<a[1].ans<<endl<<tot;return 0;
}

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

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

相关文章

Promise.any 使用方法

Promise.any() 是 JavaScript 中的一个静态方法&#xff0c;用于处理多个 Promise&#xff0c;并返回第一个成功解决&#xff08;fulfilled&#xff09;的 Promise 的结果。它在 ES2021&#xff08;ES12&#xff09;中引入&#xff0c;是 Promise 类的一部分。 语法 Promise.…

【教学类-40-01】20240607类似MJ的免费AI绘画工具——文心一格与通义万相

背景需求&#xff1a; 风变的AI对话大师一年到期了&#xff0c;也没有看到续费的按钮。不能使用它写代码了。 MJ早就用完了&#xff0c;最后480次&#xff0c;我担心信息课题会用到它生图&#xff0c;所以不敢用。 最近探索其他类似MJ的免费出图工具 一、文心一格&#xff08;…

windows10使用触控板、鼠标(magic trackpad)———附带BootCamp6驱动下载链接

文章目录 0 背景1 步骤1.1 下载1.2 解压1.3 安装驱动 参考 0 背景 最近在台式机&#xff08;windows10系统&#xff09;上使用mac设备&#xff0c;键盘magic keybord连上数据线就可以直接使用&#xff0c;但是触控板magic trackpad却不行&#xff0c;只有鼠标左键&#xff0c;…

每日一题——Python实现PAT甲级1077 Kuchiguse(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方案1&#x…

CloudFlare 防火墙规则里开放合法 Bot 爬虫的方法

明月使用 CloudFlare 也算是有一阵子了,可以说效果非常好更是非常满意,毕竟每天成千上万的 Web 攻击和 cc 攻击都能控制在几乎可以忽略不计的程度了,上次因调试需要关闭了国内线路上的网站卫士统计图覆对比就很能说明这点儿: 这是关闭防火墙当天的实时防御统计结果 这是开启…

刘强东的拼搏哲学与产品创新的启示

在当今这个快速变化的时代&#xff0c;成功不再是偶然&#xff0c;而是需要一种敢于挑战、敢于拼搏的精神。正如京东创始人刘强东所说&#xff1a;“实现梦想&#xff0c;记住这句话就够了。敢于挑战&#xff0c;敢于拼搏的人不一定能成功&#xff0c;但成功的人一定是敢于挑战…

linux Ubuntu安装samba服务器与SSH远程登录

目录 1&#xff0c;下载安装包 2&#xff0c;添加服务器 3&#xff0c;修改服务器配置 3.1 备份配置文件 3.2 修改配置 4&#xff0c;开启samba服务器 5&#xff0c;开关电脑与服务器设置 6&#xff0c; SSH远程登录 1&#xff0c;下载samba服务器安装包 sudo apt in…

unity3d:GameFramework+xLua+Protobuf+lua-protobuf,生成.cs,.pb工具流

概述 1.区分lua&#xff0c;cs用的proto 2.proto生成cs&#xff0c;使用protogen.exe&#xff0c;通过csharp.xslt修改生成cs样式 3.proto生成lua加载.pb二进制文件&#xff0c;并生成.pb列表文件&#xff0c;用于初始化加载 4.协议id生成cs&#xff0c;lua中枚举 区分cs&…

Splashtop正式入驻长三角(杭州)制造业数字化能力中心,赋能企业向数字化转型

2024年6月&#xff0c;Splashtop正式入驻长三角&#xff08;杭州&#xff09;制造业数字化能力中心。作为全球领先的远程桌面控制软件供应商&#xff0c;Splashtop致力于提供适用于远程办公、IT 和 MSP 远程支持等多场景的高性能远程桌面控制软件和解决方案&#xff0c;赋能企业…

监控易监测对象及指标之:全面监控定制版微软活动目录

随着企业信息化建设的深入&#xff0c;微软活动目录&#xff08;Active Directory, AD&#xff09;作为企业身份管理、资源访问控制及策略应用的核心组件&#xff0c;其稳定性和性能对企业业务的连续性和效率至关重要。为了满足不同企业的特定需求&#xff0c;定制版微软活动目…

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)

效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(

SpringBoot+Vue学生宿舍管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生宿管员管理员 功能截图

基于非下采样小波包分析的滚动轴承故障诊断(MATLAB R2021B)

小波变换具有良好的时频局部化特性和多分辨率特性&#xff0c;可准确定位信号的突变点并可在不同尺度上描述信号的局部细节特征&#xff0c;被广泛应用于信号降噪。但标准正交小波变换不具有平移不变性&#xff0c;采用标准正交小波对信号消噪后&#xff0c;会在脉冲尖峰处产生…

Polar Web【简单】PHP反序列化初试

Polar Web【简单】PHP反序列化初试 Contents Polar Web【简单】PHP反序列化初试思路EXP手动脚本PythonGo 运行&总结 思路 启动环境&#xff0c;显示下图中的PHP代码&#xff0c;于是展开分析&#xff1a; 首先发现Easy类中有魔术函数 __wakeup() &#xff0c;实现的是对成员…

VisionPro的应用和入门教程

第1章 关于VisionPro 1.1 康耐视的核心技术 1. 先进的视觉系统 康耐视的视觉系统结合了高性能的图像传感器、复杂的算法和强大的计算能力&#xff0c;能够实时捕捉、分析和处理高分辨率图像。其视觉系统包括固定式和手持式两种&#xff0c;适用于各种工业环境。无论是精密电…

深度学习、神经网络领域经常听到一个术语 “量化“,比如 “量化算子“,“量化“具体什么含义呢?( 百度 AI 对话回答 )

问题&#xff1a;深度学习、神经网络领域经常听到一个术语 "量化"&#xff0c;比如 "量化算子"&#xff0c;"量化"具体什么含义呢&#xff1f; 百度 AI 回答&#xff1a; 在深度学习和神经网络领域中&#xff0c;“量化”是一个重要的技术术语…

[经验] 场效应管是如何发挥作用的 #知识分享#学习方法#职场发展

场效应管是如何发挥作用的 在现代电子技术领域&#xff0c;场效应管&#xff08;MOSFET&#xff09;是一种重要的半导体元器件。它的作用非常广泛&#xff0c;例如在集成电路中扮演着关键的角色。在本文中&#xff0c;我们将详细探讨场效应管的作用及其在实际应用中的意义。 简…

SpringBoot+Vue企业客户管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 员工管理员 功能截图

git根据历史某次提交创建新分支

有时候项目在做版本管理的时候&#xff0c;忘记了创建某次版本的分支&#xff0c;而直接在主分支上进行开发了&#xff0c;这个时候&#xff0c;想要对某次提交单独拉出来一个版本分支&#xff0c;就需要用到这个功能&#xff1a; git checkout -b 新分支名 某次提交的id 找到…

数据交换平台_07_实现消息的路由和过滤

数据交换平台_07_实现消息的路由和过滤 目录概述需求:设计思路实现思路分析1.消息路由2.消息过滤拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for ch…