C++初学者必练基础编程题【第一期】

前言

Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~)
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!

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 <iostream>
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 分表示为 5300 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

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

输出格式:

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

输入样例:

1120 110

输出样例:

1310

解答

方法:

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

特别注意:

030这种状况
比如输入030 0
不做特殊处理的话
输出结果是30(没有前导0)
所以最后加个判断即可

#include <iostream>
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 <iostream>
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 <iostream>
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 分)

题目

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

输入格式:

本题目没有输入。

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

image.png

解答

#include <iostream>
using namespace std;
int main()
{
    cout<<"------------------------------------"<<endl;
    cout<<"Province      Area(km2)   Pop.(10K)"<<endl;
    cout<<"------------------------------------"<<endl;
    cout<<"Anhui         139600.00   6461.00"<<endl;
    cout<<"Beijing        16410.54   1180.70"<<endl;
    cout<<"Chongqing      82400.00   3144.23"<<endl;
    cout<<"Shanghai        6340.50   1360.26"<<endl;
    cout<<"Zhejiang      101800.00   4894.00"<<endl;
    cout<<"------------------------------------"<<endl;
    return 0;
}
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 <iostream>
#include <iomanip>
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 <iostream>
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 <iostream>
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
那么 abc=121=2^0=2
0异或任何数等于这个数

#include <iostream>
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 <iostream>
#include <iomanip>
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;
}
image.png

结语

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

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

我是 <font color="#0984e3">海轰ଘ(੭ˊᵕˋ)੭</font>

如果您觉得写得可以的话,请点个赞吧

谢谢支持❤️


在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容