C++_第五周做题总结_类与对象

id:27 A.对象数组(类和对象)

题目描述

课堂上我们谈到类这个概念,比如第一题我们有学生类这个抽象的概念,成千上万个学生都具有同样的属性,但针对某个具体学生来说,他/她具有自己的鲜明个性,比如计算机专业的王海同学,信息工程学院的李慧同学,那么我们是定义一个该类的变量:Student student; 假设该类包含姓名、学号、性别、所属学院、联系电话等;在程序运行过程,把变量student赋予不同值就可以让它表示是王海还是李慧,尝试定义一个学生数组(比如四个元素大小,请思考此时四个对象是如何初始化的呢?),然后输入四个不同学生各项属性给数组里学生初始化(最好定义一个输入函数),然后输出该学生对象数组的各对象的姓名。

输入

输入数组元素的大小

依次每行输入每个对象的各项属性值,各属性值最大长度不超过30

输出

每行输出一个学生类对象的姓名

输入样例

3
tom 2013333333 男 计算机学院 13766666666
Marry 2012222222 女 信息工程学院 13555555555
John 2014444444 男 管理学院 13888888888

输出样例

tom
Marry
John

题解

  • 输出中有中文字符,故可以考虑用string来定义,使用string的话,要包含头文件string;电话位数过长,对于int来说可能装不下,可以考虑用字符数组或者long long来定义;对于输入的数据,我们可以考虑在结构内定义一个函数,专为这个结构体所用
  • 需要定义一个学生数组,数组的每一个元素都是一个有关学生的信息,然后一个for循环,调用函数,注意,当传递数组作为参数是,不需要在参数后面再次使用[],所以,我们调用时写成student[i].in(i, student);
  • 然后再用一个for循环,输出学生的名字

代码实现

#include <iostream>
#include <string>
using namespace std;struct Student
{string name;int num;string gender;string college;long long phone;void in(int i, Student student[]);
};void Student::in(int i, Student student[])
{cin >> name >> num;cin >> gender >> college;cin >> phone;
}int main()
{int n, i;Student student[1000];cin >> n;for (i = 0; i < n; i++){student[i].in(i, student);}for (i = 0; i < n; i++){cout << student[i].name << endl;}return 0;
}

id:162 B.身体评估(类与对象)

题目描述

评估成年人身体健康有多个指标,包括BMI、体脂率等
设计一个身体健康类,包含私有成员:姓名、身高(米)、体重(公斤),腰围(厘米),实现两个公有方法如下:
BMI方法,返回BMI数值(整数,四舍五入到个位),计算公式BMI= 体重 / 身高的平方
体脂率方法,返回体脂率数值(浮点数),计算过程如下:
1)参数a=腰围(cm)×0.74
2)参数b=体重(kg)×0.082+34.89
3)体脂肪重量(kg)=a-b
4)体脂率 = 体脂肪重量÷体重
其它方法根据需要自行定义

输入

第一行输入t表示有t个测试实例
第二行起,每行输入四个参数:姓名、身高、体重、腰围,姓名的最大长度不超过20
依次输入t行

输出

输出t行,每行输出一个实例的BMI和体脂率,BMI四舍五入到个位,体脂率小数数值精确到小数点后2位

提示

在C++中,输出指定精度的参考代码如下:

#include <iostream>#include <iomanip> //必须包含这个头文件using namespace std;void main( ){double a =3.14;cout<<fixed<<setprecision(2)<<a<<endl;  //输出小数点后2位}

输入样例

2
张高 1.85 78.5 85.2
李圆 1.55 67.6 77.3

输出样例

张高的BMI指数为23–体脂率为0.28
李圆的BMI指数为28–体脂率为0.25

题解

  • 由于需要定义中文字符,计算BMI和输出指定精度,所以头文件包含<string>, <iomanip>, <cmath>
  • 定义一个结构体,包含所需要的参数
  • 在主函数中,正常的进行数据的输入及有关计算即可,但需要注意的是,题目要求的BMI要四舍五入,如果用int来定义BMI,就不是四舍五入,所以我们就需要使用函数库里面的round函数来进行BMI的四舍五入计算

代码实现

#include <iostream>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;struct health
{string name;double high;double weight;double yao;
};int main()
{int t, i, ans;double T, BMI;health man;cin >> t;for (i = 0; i < t; i++){cin >> man.name >> man.high >> man.weight >> man.yao;BMI = man.weight / (man.high * man.high);ans = round(BMI);T = ((man.yao * 0.74) - (man.weight * 0.082 + 34.89)) / man.weight;cout << man.name << "的" << "BMI指数为" << ans << "--" << "体脂率为";cout << fixed << setprecision(2) << T << endl;}return 0;
}

id:160 C.最胖的加菲(类与对象 + 数组)

题目描述

有一群猫猫,每只猫都有自己的名称和体重。
用类来描述猫,名称和体重都是私有属性,要求加入属性的get方法。其他函数根据需要自己定义

创建一个动态的猫对象数组,存储各只猫的名称和体重
根据猫的体重对数组做升序排序,并输出排序后每只猫的名称

题目涉及的数值均用整数处理

输入

第一行输入n表示有n只猫
第二行输入一只猫的名称和体重,名称的最大长度为30
依次输入n行

输出

输出一行,输出排序后的猫的名称

输入样例

4
巧克力胖三斤 1500
自来水瘦八两 400
芝士蛋糕肥六斤 3000
蔬菜沙拉轻四两 200

输出样例

蔬菜沙拉轻四两 自来水瘦八两 巧克力胖三斤 芝士蛋糕肥六斤

题解

  • 看到测试样例中的输入是中文,故可以考虑用string来定义,所以需要包含头文件<string>
  • 在结构体中,我还定义了两个函数,一个函数用来对整个数组做升序排序,升序排序的方法是,我使用冒泡排序,在这个函数中,因为反复需要调换两个元素的值,所以我把这个调换值的过程又写成一个函数,因为值的互换改变了两个元素的值并且都需要返回,所以我们需要用到两个指针作为参数
  • 冒泡排序的原理是通过使用两个for循环,在比较的过程中,使得最大的值在一轮轮的比较中都放在当轮的最后一位,下一次循环时这个位就不参与循环过程
  • 使用指针作为参数进行调换就是一个简单的将指针所指的对象进行互换
  • 在主函数中,进行正常的处理数据输入输出即可,在此过程中,因为要调用结构体里的函数,而我们有定义了一个数组,但是我们就是要把整个数组传递过去,所以不用管用数组的哪个元素来调用这个函数

代码实现

#include <iostream>
#include <string>
using namespace std;struct Cat
{string name;int weight;void sort(Cat cat[], int n); // 升序排序void swap(Cat* px, Cat* py);
};void Cat::sort(Cat cat[], int n)
{int i, j;for (i = 1; i < n; i++){for (j = 0; j < n - i; j++){if (cat[j].weight > cat[j + 1].weight){cat[0].swap(&cat[j], &cat[j + 1]); // 调用函数交换值}}}
}void Cat::swap(Cat* px, Cat* py)
{Cat t;t = *px;*px = *py;*py = t;
}int main()
{int n, i;Cat cat[1000];cin >> n;for (i = 0; i < n; i++){cin >> cat[i].name >> cat[i].weight;}cat[1].sort(cat, n);for (i = 0; i < n; i++){cout << cat[i].name << " ";}cout << endl;return 0;
}

id:30 D.点和圆(类与对象)

题目描述

设计一个点类Point,包含属性:x坐标和y坐标,方法:设定坐标(setPoint),获取x坐标(getX),获取y坐标(getY)

设计一个圆类Circle,包含属性:圆心坐标x和y、半径r;方法包括:

  1. 设定圆心(setCenter),设置圆心x坐标和y坐标

  2. 设定半径(setRadius),设置半径长度

  3. 计算面积(getArea),计算公式:面积=3.14rr

  4. 计算周长(getLength),计算公式:周长=23.14r

  5. 包含(contain),判断一个圆是否包含一个点,计算圆心到这个点的距离,然后和半径做比较,大于则不包含,小于等于则包含

注意:提交代码时必须用注释划分出三个区域:类定义、类实现、主函数,如下

//-----类定义------class XXX{ // 写类定义代码};//----类实现------void XXX::process(){// 写类定义代码};//-----主函数-----int main(){//自定义一些变量//创建一个圆对象和一个点对象//输入圆对象和点对象的属性数值,并做初始化//输出圆的面积和圆的周长//输出圆是否包含点,包含则输出yes,否则输出noreturn 0;}

输入

第一行输入圆的三个整数参数:圆心的x和y坐标,半径

第二行输入点的两个整数参数:x和y坐标

输出

第一行输出圆的面积和周长,结果之间用空格隔开,输出精度到小数点后2位

第二行输出圆是否包含点,包含则输出yes,否则输出no

在C++中,输出指定精度的参考代码如下:

#include <iostream>#include <iomanip> //必须包含这个头文件using namespace std;void main( ){double a =3.14;cout<<fixed<<setprecision(3)<<a<<endl;  //输出小数点后3位}

输入样例

1 1 1
2 2

输出样例

3.14 6.28
no

提示

求两点距离的公式 dis =sqrt [ (x1-x2)^2 + (y1-y2)^2 ] , ^2表示平方,sqrt表示开平方根,本公式只是表示含义,不是真实代码

在C++使用sqrt函数可以求平方根,头文件包含cmath

题解

  • 在点的类定义中,定义两个私有的变量和三个公有的函数,一个用来设定坐标,一个用来获取横坐标,一个用来获取纵坐标。设定坐标就是把传入的两个参数赋值给私有的定义的变量,获取横纵坐标就是返回私有定义的那两个变量
  • 在圆的类定义中,定义三个私有变量和五个公有的函数,在公有的函数中,一个用来设定圆心,一个用来设定半径,还有计算面积,计算周长和判断圆是否包含点。设定圆心就是把传入的两个参数赋值给私有定义的两个变量,设定变量也是如此,这两个函数的目的就是把主函数传入的参数进行赋值
  • 计算面积和周长都是把计算好的面积和周长传出,在类实现中可以使用结构中定义的变量,尽管他们在函数中没有被定义,但是也都是可以使用的
  • 在判断圆是否包含点的函数中,调用获取点的横纵坐标函数并进行计算,然后进行判断输出即可
  • 在主函数中,进行简单的输入输入处理,然后调用设定圆心,半径和设定坐标函数将输入的值进行传递,最后进行简单的数据输出即可

代码实现

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;// -----类定义------
class Point
{
private:int x;int y;
public:void setPoint(int _x, int _y); // 设定坐标int getX(); // 获取坐标int getY();
};class Circle
{
private:int cx;int cy;int cr;
public:void setCenter(int _cx, int _cy); // 设定圆心void setRadius(int _r); // 设定半径double getArea(); // 计算面积double getLength(); // 计算周长bool contain(Point p); // 判断圆是否包含点
};// ----类实现------
void Point::setPoint(int _x, int _y) // 设定坐标
{x = _x;y = _y;
}
int Point::getX() // 获取坐标
{return x;
}
int Point::getY()
{return y;
}
void Circle::setCenter(int _cx, int _cy) // 设定圆心
{cx = _cx;cy = _cy;
}
void Circle::setRadius(int _cr) // 设定半径
{cr = _cr;
}
double Circle::getArea() // 计算面积
{return 3.14 * cr * cr;
}
double Circle::getLength()// 计算周长
{return 2 * 3.14 * cr;
}
bool Circle::contain(Point p) // 判断圆是否包含点
{double dis;dis = sqrt((p.getX() - cx) * (p.getX() - cx) + (p.getY() - cy) * (p.getY() - cy));if (dis <= cr){return true;}else{return false;}
}// -----主函数-----
int main()
{int cx, cy, cr, x, y;Circle circle;Point point;cin >> cx >> cy >> cr; // 输入有关参数cin >> x >> y;circle.setCenter(cx, cy); // 设定圆心circle.setRadius(cr); // 设定半径point.setPoint(x, y); // 设定坐标cout << fixed << setprecision(2) << circle.getArea() << " " << circle.getLength() << endl;if (circle.contain(point)){cout << "yes" << endl;}else{cout << "no" << endl;}return 0;
}

id:156 E.存折类定义(类与对象)

题目描述

定义一个存折类CAccount,存折类具有帐号(account, long)、姓名(name,char[10])、余额(balance,float)等数据成员,可以实现存款(deposit,操作成功提示“saving ok!”)、取款(withdraw,操作成功提示“withdraw ok!”)和查询余额(check)的操作,取款金额必须在余额范围内,否则提示“sorry! over limit!”。编写主函数,建立这个类的对象并测试,输入账号、姓名、余额后,按照查询余额、存款、查询余额、取款、查询余额的顺序调用类方法并输出。

输入

第一个存折的账号、姓名、余额

存款金额

取款金额

第二个存折的账号、姓名、余额

存款金额

取款金额

输出

第一个存折的账户余额

存款操作结果

账户余额

取款操作结果

账户余额

第二个存折的账户余额

存款操作结果

账户余额

取款操作结果

账户余额

输入样例

9111 Tom 1000
500
1000
92220 John 500
500
1500

输出样例

Tom’s balance is 1000
saving ok!
Tom’s balance is 1500
withdraw ok!
Tom’s balance is 500
John’s balance is 500
saving ok!
John’s balance is 1000
sorry! over limit!
John’s balance is 1000

题解

  • 在类定义中,定义的两个存款和取款函数中的参数都需要余额和需要操作的金钱,还需要定义一个查询余额的函数
  • 在存款和取款函数中,对余额进行相应的操作,然后输出对应的操作成功或失败提示,最后返回操作后的余额
  • 查询余额的函数就是返回余额即可
  • 在主函数中,数据输入完后先调用余额查询函数输出账户的余额,然后用man.balance接受存取款函数返回的值,然后输出这个值即可,因为在函数中已经输出了操作成功与否的提示信息,所以这个余额值的输出肯定在操作提示之后

代码实现

#include <iostream>
using namespace std;struct CAccount
{long long account;char name[10];double balance;double Deposit(double balance, double money); // 存款double Withdraw(double balance, double money); // 取款double check(); // 查询余额
};double CAccount::Deposit(double balance, double money) // 存款
{balance += money;cout << "saving ok!" << endl;return balance;
}double CAccount::Withdraw(double balance, double money) // 取款
{if (balance < money){cout << "sorry! over limit!" << endl;return balance;}balance -= money;cout << "withdraw ok!" << endl;return balance;
}double CAccount::check() // 查询余额
{return balance;
}int main()
{int i;double deposit, withdraw;CAccount man;for (i = 0; i < 2; i++){cin >> man.account >> man.name >> man.balance;cin >> deposit >> withdraw;cout << man.name << "'s balance is " << man.check() << endl;man.balance = man.Deposit(man.balance, deposit);cout << man.name << "'s balance is " << man.balance << endl;man.balance = man.Withdraw(man.balance, withdraw);cout << man.name << "'s balance is " << man.balance << endl;}return 0;
}

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

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

相关文章

AcWing刷题-区间合并

校门外的树 区间合并&#xff1a; from typing import List def merge(intervals: List[List[int]]) -> List[List[int]]:# 按照第一个元素从小到大进行排序intervals.sort(keylambda x: x[0])# 初始化一个新的数组new_list list()for i in intervals:# 把第一个数组元素添…

基于ssm旅游资源网站(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的旅游资源网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 旅游资源网站的主要使用者分为管理…

描述C语言中的进程和线程之间的区别

描述C语言中的进程和线程之间的区别 在C语言中&#xff0c;进程和线程是两个非常重要的概念&#xff0c;它们在操作系统中各自扮演着独特的角色。理解它们之间的区别对于编写高效、可维护的并发程序至关重要。下面将详细阐述进程和线程在C语言中的区别。 首先&#xff0c;我们…

机器学习每周挑战——旅游景点数据分析

数据的截图&#xff0c;数据的说明&#xff1a; # 字段 数据类型 # 城市 string # 名称 string # 星级 string # 评分 float # 价格 float # 销量 int # 省/市/区 string # 坐标 string # 简介 string # 是否免费 bool # 具体地址 string拿到数据…

【42 可视化大屏 | 某瓣电影Top250数据分析可视化大屏】

文章目录 &#x1f3f3;️‍&#x1f308; 1 普版大屏&#x1f3f3;️‍&#x1f308;2 Flask版大屏&#x1f3f3;️‍&#x1f308;3 FlaskMysql版大屏&#x1f3f3;️‍&#x1f308; 4. 可视化项目源码数据 大家好&#xff0c;我是 &#x1f449;【Python当打之年(点击跳转)…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

数据结构·二叉树(2)

目录 1 堆的概念 2 堆的实现 2.1 堆的初始化和销毁 2.2 获取堆顶数据和堆的判空 2.3 堆的向上调整算法 2.4 堆的向下调整算法 2.4 堆的插入 2.5 删除堆顶数据 2.6 建堆 3 建堆的时间复杂度 3.1 向上建堆的时间复杂度 3.2向下建堆的时间复杂度 4 堆的排序 前言&…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(论文更新)

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索更新&#xff08;论文更新&#xff09; ​ 本节主要更新了论文、训练日志的log数据提取&#xff08;Loss、ACC、RK&#xff09;等数据可视化作图的代码 B题交流QQ群&#xff1a; 4583…

《乱弹篇(26)更好的自己》

俄乌、以巴、中东&#xff0c;烽火连天&#xff0c;持久酣战&#xff0c;搅得地球村住民不得安宁。虽说孰是孰非自有公论&#xff0c;但时评文难写也是评论界的普遍认知&#xff0c;所以今天笔者自觉地绕开时政话题&#xff0c;尽本“人民体验官”义务&#xff0c;推广人民日报…

【BY组态】轻量化web组态编辑器插件

演示地址&#xff1a;http://www.byzt.nethttp://www.byzt.net BY组态是一款非常优秀的纯前端的轻量化【web组态插件工具】&#xff0c;大小只有2M&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架的限…

计算机网络-TCP/IP 网络模型

TCP/IP网络模型各层的详细描述&#xff1a; 应用层&#xff1a;应用层为应用程序提供数据传输的服务&#xff0c;负责各种不同应用之间的协议。主要协议包括&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;用于从web服务器传输超文本到本地浏览器的传送协议。FTP&…

通信专业毕业设计(论文)-基于城区网络移动通信无线网络优化的研究

下载请点击↓: 通信专业毕业设计(论文)-基于城区网络移动通信无线网络优化的研究资源-CSDN文库 基于城区网络移动通信无线网络优化的研究 学生姓名 专业班级 学 号 摘要 所谓网络优化。指的是采集和分析运行中的移动网络信息,并对 找出影响…

MySQL正则表达式的详细介绍

MySQL 正则表达式是一种强大的工具&#xff0c;用于在文本中搜索和操作符合特定模式的字符串。它允许你使用各种字符和特殊元字符来定义复杂的模式&#xff0c;以便在数据库中查找、匹配、替换或操作文本数据。下面是 MySQL 正则表达式的详细介绍&#xff1a; 1. 基本语法&am…

音视频开发之旅(80)- AI数字人-腾讯开源AniPortrait-音频驱动的肖像动画

目录 1、前言 2、效果展示 3、原理学习 4、遇到的问题与解决方案 5、资料 一、前言 一个月前阿里Emo发布&#xff0c;通过音频驱动的非常自然的肖像视频&#xff0c;引起很大反响。具体看下面的视频&#xff0c;但是并没有开源其代码。 这两天腾讯开源了其音频驱动的肖像…

【Python笔记-FastAPI】定时任务实现(APScheduler)

目录 一、常见触发器 (一) DateTrigger (二) IntervalTrigger (三) CronTrigger (四) CombinationTrigger 二、代码示例 (一) task_scheduler.py (二) client.py 三、调用说明 (一) 注册任务 (二) 查询任务 (三) 删除任务 实现功能: 定时任务注册、修改、删除、查…

【Python操作基础】——包

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

基于微信小程序的付费自习室系统设计与实现,SpringBoot后端+毕业论文(13000字)

介绍 小程序端用户界面和管理员后台界面。用户端界面主要包括注册与登录页&#xff0c;首页、自习室页、我的页、座位预订页&#xff0c;资讯详情页等。管理员页面主要包括登录页、后台管理主页、用户管理页、资讯管理页、咨询管理页等。系统主要的模块包括自习室模块、自习室…

武汉星起航:亚马逊助力全球卖家拓展海外市场,消费潜力巨大

在全球化浪潮的推动下&#xff0c;跨境电商已成为众多企业开拓国际市场的重要途径。作为全球第一大电商平台的亚马逊&#xff0c;凭借其庞大的用户基数和覆盖全球的站点网络&#xff0c;正成为越来越多卖家开展海外业务的首选平台。亚马逊以其强大的销售潜力和影响力&#xff0…

【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)

目录 前言 C关键字 命名空间 1.命名空间的定义 A.标准命名空间定义 B.命名空间允许嵌套定义 C.同名命名空间的合并 2.命名空间的使用 加命名空间名称及作用限定符 使用using将命名空间中某个成员引入 使用using namespace命名空间名称引入 C的输入和输出 缺省参数…

【C语言】结构体详解(一)

目录 1、什么是结构体? 2、结构体成分 3、结构体变量的定义与初始化 3.1、结构体变量的三种定义方式 3.2、结构体变量的初始化 4、结构体成员的访问&#xff08;两种方式&#xff09; 4.1、直接访问 4.2、间接访问 5、结构的特殊声明 5.1、不完全声明&#xff08;匿…