百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

C++初学者必练基础编程题「第一期」

liebian365 2025-01-26 23:10 20 浏览 0 评论

菜鸟学习记:第五十二天

前言

?

Hello!小伙伴!

非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~

自我介绍 「?(?ˊ?ˋ)?」

昵称:海轰

标签:程序猿|C++选手|学生

简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖...已保研。目前正在学习C++/Linux/Python

学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!

?

7-1 厘米换算英尺英寸 (15 分)

题目

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:

?

输入在一行中给出1个正整数,单位是厘米。

?

输出格式:

?

在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

?

输入样例:

?

170

?

输出样例:

?

5 6

?

解答

难点不在编程上,在于题目的理解!

(foot+inch/12)×0.3048 这个公式的意思是: 因为 一英尺=12英寸 inch/12 的意思是 转化为英尺 比如6英寸 需要先转换为英寸 6/12=0.5英尺 然后 通过乘以0.3048得到单位米

简单的理解: 英尺与米的关系是: foot*0.3088=m 如果有inch存在 先转换为foot就好了 (如果之间给出这个公式就不会混淆了)

举例说明: 如果现在一个东西的长度是5英尺+6英寸 首先转化为英尺 6inch=6/12foot=0.5foot 一共是:5+0.5 foot = 5.5foot 转换为米:5.5*0.3048约等于1.67 转换为cm:差不多就是170(根据题目就是这样 没办法)

#include 
using namespace std;
int main()
{
 // 输入数 单位cm
 double cm;
 // foot:英尺 inch:英寸
 int foot, inch;
 cin >> cm;
 // 转行为m
 cm /= 100.0;
 // 计算总英寸数
 inch = cm / 0.3048 * 12;
 // 求英尺数
 foot = inch / 12;
 // 求英寸数
 inch = inch - foot * 12;
 cout << foot << " " << inch << endl;
 return 0;
}

image.png

7-2 然后是几点 (15 分)

题目

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 「5 点 30 分表示为 530」「0 点 30 分表示为 030」。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

?

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

?

输出格式:

?

输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

?

输入样例:

?

1120 110

?

输出样例:

?

1310

?

解答

方法:

  • 提取小时、分钟数,通过除法、余数就可以
  • 转换为分钟后与流逝时间进行运算
  • 再转换为4位数 小时*100+分钟数即可

特别注意:

?

030这种状况

比如输入030 0

不做特殊处理的话

输出结果是30(没有前导0)

所以最后加个判断即可

?

#include 
using namespace std;
int main()
{   
 // 起始时间
 int start;
 // 流逝时间
 int expend;
 cin >> start >> expend;
 // 起始时间的小时数 
 int hour;
 // 起始时间的分钟数
 int minute;
 // 转换 小时取前两位 分钟取后两位
 hour = start / 100;
 minute = start % 100;
 // 转换为分钟数
 int minutes = hour * 60 + minute;
 // 与流逝时间运算
 minutes += expend;
 int ans = 0;
 // 计算之后的时间 小时*100+分钟
 ans = minutes / 60 * 100 + minutes % 60;
 // 特殊判断
 // 030这种 0时还是需要输出0的!
 if (ans / 100)
 {
  cout << ans << endl;
 }
 else
 {
  cout << "0" << ans << endl;
 }

 return 0;
}

image.png

7-3 逆序的三位数 (10 分)

题目

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

?

每个测试是一个3位的正整数。

?

输出格式:

?

输出按位逆序的数。

?

输入样例:

?

123

?

输出样例:

?

321

?

解答

#include 
using namespace std;
int main()
{
 int num;
 int ans = 0;
 cin >> num;
 while (num)
 {
  ans = ans * 10 + num % 10;
  num /= 10;
 }
 cout << ans << endl;
 return 0;
}

image.png

7-4 BCD解密 (10 分)

题目

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

?

输入在一行中给出「一个[0, 153]范围内的正整数」,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

?

输出格式:

?

输出对应的十进制数。

?

输入样例:

?

18

?

输出样例:

?

12

?

解答

简单的理解就是将一个十六进制转换为10进制

注意题目:「一个[0, 153]范围内的正整数 对应十进制其实就只有2位数」

#include 
using namespace std;
int main()
{
 int num;
 cin >> num;
 int ans;
 ans = num / 16 * 10 + num % 16;
 cout << ans << endl;
 return 0;
}

image.png

7-5 表格输出 (5 分)

题目

本题要求编写程序,按照规定格式输出表格。

输入格式:

?

本题目没有输入。

?

输出格式: 要求严格按照给出的格式输出下列表格:

解答

#include 
using namespace std;
int main()
{
    cout<<"------------------------------------"<

image.png

7-6 混合类型数据格式化输入 (5 分)

题目

本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

输入格式:

?

输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

?

输出格式:

?

在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

?

输入样例:

?

2.12 88 c 4.7

?

输出样例:

?

c 88 2.12 4.70

?

解答

#include 
#include 
using namespace std;
int main()
{
 double num1;
 int num2;
 char num3;
 double num4;
 cin >> num1 >> num2 >> num3 >> num4;
 cout << num3 << " " << num2 << " ";
 cout << fixed << setprecision(2) << num1 << " ";
 cout << fixed << setprecision(2) << num4 << endl;
 return 0;
}

image.png

7-7 12-24小时制 (15 分)

题目

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入格式:

?

输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。 提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。

?

输出格式:

?

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

?

输入样例:

?

21:11

?

输出样例:

?

9:11 PM

?

解答

#include 
using namespace std;
int main()
{
 int hour;
 int minute;
 char c;
 cin >> hour >> c >> minute;
 string s = " AM";
 if (hour > 11)
 {
  s = " PM";
 }
 if (hour > 12)
 {
  hour %= 12;
 }
 cout << hour << ":" << minute << s;
 return 0;
}

image.png

7-8 超速判断 (10 分)

题目

模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。

输入格式:

?

输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。

?

输出格式:

?

在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK。

?

输入样例1:

?

40

?

输出样例1:

?

Speed: 40 - OK

?

输入样例2:

?

75

?

输出样例2:

?

Speed: 75 - Speeding

?

解答

#include 
using namespace std;
int main()
{
 int speed;
 cin >> speed;
 if (speed > 60)
 {
  cout << "Speed: " << speed << " - Speeding" << endl;
 }
 else
 {
  cout << "Speed: " << speed << " - OK" << endl;
 }
 return 0;
}

image.png

7-9 用天平找小球 (10 分)

题目

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

输入格式:

?

输入在一行中给出3个正整数,顺序对应球A、B、C的重量。

?

输出格式:

?

在一行中输出唯一的那个不一样的球。

?

输入样例:

?

1 1 2

?

输出样例:

?

C

?

解答

核心:异或运算

异或记住相同两个数亦或为0

因为只有三个数a b c 加上其中两个相同 比如a=1 b=2 c=1 那么 a^b^c=1^2^1=2^0=2 0异或任何数等于这个数

#include 
using namespace std;
int main()
{
 int a, b, c;
 cin >> a >> b >> c;
 int ans = a ^ b ^ c;
 if (ans == a)
 {
  cout << "A" << endl;
 }
 else if (ans == b)
 {
  cout << "B" << endl;
 }
 else
 {
  cout << "C" << endl;
 }
 return 0;
}

image.png

7-10 计算工资 (15 分)

题目

某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

输入格式:

?

输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。

?

输出格式:

?

在一行输出该员工的周薪,精确到小数点后2位。

?

输入样例1:

?

5 40

?

输出样例1:

?

2000.00

?

输入样例2:

?

3 50

?

输出样例2:

?

1650.00

?

解答

#include 
#include 
using namespace std;
int main()
{
 int years;
 int hours;
 cin >> years >> hours;
 int wage;
 if (years >= 5)
 {
  wage = 50;
 }
 else
 {
  wage = 30;
 }
 double wages;
 if (hours <= 40)
 {
  wages = hours * wage;
 }
 else
 {
  wages = 40 * wage + (hours - 40) * wage * 1.5;
 }
 cout << fixed << setprecision(2) << wages << endl;
 return 0;
}

结语

「文章仅作为学习笔记,记录从0到1的一个过程」

希望对您有所帮助,如有错误欢迎小伙伴指正~

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: