【NOI】C++程序设计入门二


前言

在这段学习旅程中,我们将以浅显易懂的方式揭开变量的神秘面纱,它们如同数学中的未知数,却又在计算机世界里扮演着存储信息的关键角色。随后,深入探索数据类型这一基石,理解它们是如何让计算机精准无误地识别并处理各种类型的数据。通过一系列精心编排的例题,诸如“糖果的困惑”、“火柴棒的奥秘”、“文具店的算计”,你将亲身体验将抽象概念转化为具体代码的过程,见证数学逻辑与C++语法的完美融合。

学习路线:C++从入门到NOI学习路线

学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲


一、变量

1.导入

在初等数学中,变量是用来表示数字的字母字符,具有任意性未知性

在这里插入图片描述

上图中,我们使用N表示了购买苹果的数量。当我们需要算总价的时候,直用N*2就能得到。

N可以表示任意数量的苹果, N就是变量

假如老鼠发现了一堆糖果,糖果有N颗。它一次可以背走a颗糖果。你能完成下方的表格吗?
在这里插入图片描述

运走糖果的次数1次2次8次X次
剩余的糖果数N-a???

如果你能完成上述问题,我们就可以学习C++中的变量了。

2.变量

在计算机应用中,往往会处理很多复杂的问题。

在这里插入图片描述

比如,我们去超市买东西。
在这里插入图片描述

结账的时候,收银员需要知道购买的物品和价格,这些信息可以用计算机来存储。

而计算机又是怎么办到的呢?

简单来说,我们可以用一个变量来存储购买的物品名称,另一个变量来存储价格,这样就可以使用变量来方便地进行计算和管理。

在这里插入图片描述

如果没有变量,超市收银员就需要记住所有的物品和价格,我觉得超市收银员还没上岗就疯了。
在这里插入图片描述

2.1 变量的作用

C++ 中,变量是程序中用于存储数据值的一种占位符,可以理解为用来存储东西的箱子
在这里插入图片描述
我们在使用变量的时候,使用的不是这个箱子,而是箱子里面的东西。

当然有了变量以后,为了防止它丢,计算机还会记下它的地址,当我们想用它的时候能马上找到它。
在这里插入图片描述

2.2 变量的定义方式

那我们如何拥有一个属于我们自己的变量呢?其实这件事就和养宠物是一样的。

养宠物之前我们是不是得先想一下养个什么种类的宠物,是养猫呢?还是养小狗呢?

在这里插入图片描述

选好养什么宠物后,是不是还得给宠物取个名字,旺财、来福、咪咪等等。

好吧,我不擅长取名字QAQ。取好名字以后,就可以把宠物买回家了。
在这里插入图片描述

2.3 变量的“规矩”

在创建变量的时候有几个点需要注意:

1. 变量没有定义之前不能使用。

感觉说了一句废话,宠物都没有买回家怎么摸?但实际上是初学者容易出现的错误。比如没有区分大小写或者中途改了变量的名字又忘记改其他地方就有可能出现找不到变量的情况。

在这里插入图片描述

2. 变量名具有唯一性。

这个也很简单,一个宠物对应一个名字要区分开,总不能养了5只猫全叫“咪咪”吧。

在这里插入图片描述

3. 多个变量名之间用逗号“,”隔开,结尾用分号“;”结束。

你可以试试不隔开,然后你就会隔开了。

在这里插入图片描述

4. 变量名应该见名知意,不要随意乱取。

比如不要给你家咪咪,取个旺财或者来福这种一听就是小狗的名字。也不要jahsfadshsdajdsis 这样去叫你家的宠物,别人来你家做客想和你的宠物互动都跟唐僧过81难一样。

在这里插入图片描述

5. 变量名不要用数字开头,可以用数字结尾。

会报错,别试了。

6. 呃,先到这吧,多了你们也记不住。

在这里插入图片描述

在 C++中变量定义后如果不赋值,那么他的值是随机的,因此变量定义后,在使用之前一定要赋值(多定义几个变量,不赋值试试看)。

二、数据类型

1.概念

数据类型,简单来说,就像是给电脑里的信息贴上的不同标签,告诉电脑这些信息具体是什么样的东西,这样电脑就知道该怎么处理它们了。

想象一下,你在图书馆整理书籍,你会根据书的种类(比如小说、历史、科学等)把它们放在不同的书架上。这样,当你想找某一类书的时候,就可以直接去对应的书架找,非常方便。在计算机的世界里,数据类型就像是这些书架上的分类标签。

  • 整型(int):就像一堆数数的石子,用来数苹果、人数这样的整数。

在这里插入图片描述

  • 浮点型(float或double):这个就像是你的尺子,可以测量长度,但是能精确到小数点后几位。适合记录身高、体重这样可能有小数的数字。

在这里插入图片描述

  • 字符型(char):它就像你的名字中的一个字母,只能存储一个单一的字符,比如字母‘A’或者符号‘@’。

在这里插入图片描述

  • 布尔型(bool):就像开关,只有两种状态,开或关,对应于计算机中的真(true)或假(false)。

在这里插入图片描述

有了这些不同的数据类型,计算机就能明白你给它的是哪种类型的信息,从而正确地进行计算、比较或存储。就像你告诉朋友你要的是苹果而不是香蕉,朋友就不会拿错水果给你一样。

2.int整型

在C++中,int(integer的缩写)是一种基本的数据类型,用于存储整数值。

它通常占用4个字节(32位),可以表示从-2147483648到2147483647之间的整数。

示例:

声明一个int类型的变量a,并将其初始化为123:

int a = 123;

三、C++的常见运算

C++中的算术运算符用于执行基本的数学运算。

常见的算术运算符如下:

在这里插入图片描述

注意 = 不是等于的意思,而是把右边的值赋给左边的变量;计算机中 == 用于比较是否相等。

  1. 加法运算符 (+): 用于将两个数值相加。
int result = a + b; // 将a和b相加,结果存储在result中
  1. 减法运算符 (-): 用于从一个数值中减去另一个数值。
int result = a - b; // 从a中减去b,结果存储在result 中
  1. 乘法运算符 (*): 用于将两个数值相乘。
int result = a * b; // 将a和b相乘,结果存储在result 中
  1. 除法运算符 (/): 用于将一个数值除以另一个数值。如果两个操作数都是整数,结果也是整数(向下取整)。
int result = a/b;// 将a除以b,结果存储在result中
  1. 取模运算符 (%): 用于获取两个整数相除后的余数。
int result = a % b; // 获取a除以b的余数,存储在result 中

四、例题讲解

问题:1311. 分跳绳

类型:基本运算、整数运算


题目描述:
学校新买来 m 根跳绳,每个班分 n 根,最多可以分给几个班的同学,还剩多少根?(m≥n)。

输入:

两个整数,用空格隔开,分别代表总共采购的跳绳数量以及每个班级分到的跳绳数量。

输出:

两个整数,用空格隔开,第一个整数代表可以分到的班级的数量,第二个整数代表剩余的跳绳数量。

样例:

输入:

100 30

输出:

3 10

在这里插入图片描述


1.分析问题

  1. 已知:总共采购的跳绳数量m以及每个班级分到的跳绳数量n。
  2. 未知:可以分到的班级的数量q、剩余的跳绳数量s。
  3. 关系:q=m/n,s=m%n。

2.定义变量

    // 二、数据定义 
    int m, n, q, s; // 定义变量m表示总跳绳数量,n表示每个班级分到的跳绳数量,q表示可以分配到的班级数量,s表示剩余跳绳数量

3.输入数据

    // 三、数据输入 
    cin>>m>>n; // 输入总共采购的跳绳数量m和每个班级分到的跳绳数量n

4.数据计算

    // 四、数据计算 
    q = m / n; // 计算可以分配到的班级数量
    s = m % n; // 计算剩余的跳绳数量

5.输出结果

    // 五、输出结果 
    cout<<q<<" "<<s; // 输出可以分配到的班级数量和剩余的跳绳数量
    return 0; // 程序正常结束,返回值为0

完整代码如下:

#include<bits/stdc++.h> 
using namespace std;

// 主函数入口
int main(){
    // 一、分析问题
    // 1. 已知条件:总共采购的跳绳数量(m),每个班级分到的跳绳数量(n)。
    // 2. 未知量:可以分配到的班级数量(q),剩余未分配的跳绳数量(s)。
    // 3. 关系式:可以分配到的班级数量 q = 总跳绳数量 m 除以 每个班级分到的跳绳数量 n 的商;
    //           剩余的跳绳数量 s = 总跳绳数量 m 除以 每个班级分到的跳绳数量 n 的余数。

    // 二、数据定义 
    int m, n, q, s; // 定义变量m表示总跳绳数量,n表示每个班级分到的跳绳数量,q表示可以分配到的班级数量,s表示剩余跳绳数量

    // 三、数据输入 
    cin>>m>>n; // 输入总共采购的跳绳数量m和每个班级分到的跳绳数量n

    // 四、数据计算 
    q = m / n; // 计算可以分配到的班级数量
    s = m % n; // 计算剩余的跳绳数量

    // 五、输出结果 
    cout<<q<<" "<<s; // 输出可以分配到的班级数量和剩余的跳绳数量
    return 0; // 程序正常结束,返回值为0
}

问题:1416. 求长方形的周长和面积

类型: 基本运算、整数运算


题目描述:

从键盘读入2个整数,分别代表一个长方形的长和宽,请计算长方形的周长和面积;

输入:

从键盘读入2个整数,用空格隔开

输出:

输出有2行,第1行代表周长,第2行代表面积

样例:

输入:

2 3

输出:

10
6

在这里插入图片描述


1.分析问题

  1. 已知:长方形的长l和宽w。
  2. 未知:长方形的周长p和面积a。
  3. 关系:p=2l+2w,a=l*w。

2.定义变量

 // 二、数据定义 
    int l, w, p, a; // 定义变量l表示长方形的长,w表示宽,p表示周长,a表示面积

3.输入数据

    // 三、数据输入 
    cin>>l>>w; // 输入长方形的长和宽

4.数据计算

    // 四、数据计算 
    p = 2 * l + 2 * w; // 根据周长公式计算周长
    a = l * w; // 根据面积公式计算面积

5.输出结果

    // 五、输出结果 
    cout<<p<<endl<<a; // 输出长方形的周长和面积
    return 0; // 程序正常结束,返回值为0

完整代码如下:

#include<bits/stdc++.h> 
using namespace std;

// 主函数入口
int main(){
    // 一、分析问题
    // 已知:长方形的长(l)和宽(w)。
    // 未知:长方形的周长(p)和面积(a)。
    // 关系:周长公式 p = 2 * 长 + 2 * 宽;面积公式 a = 长 * 宽。

    // 二、数据定义 
    int l, w, p, a; // 定义变量l表示长方形的长,w表示宽,p表示周长,a表示面积

    // 三、数据输入 
    cin>>l>>w; // 输入长方形的长和宽

    // 四、数据计算 
    p = 2 * l + 2 * w; // 根据周长公式计算周长
    a = l * w; // 根据面积公式计算面积

    // 五、输出结果 
    cout<<p<<endl<<a; // 输出长方形的周长和面积
    return 0; // 程序正常结束,返回值为0
}

问题:1600. 请假时间计算

类型:基本运算、整数运算


题目描述:

假设小明的妈妈向公司请了 n 天的假,那么请问小明的妈妈总共请了多少小时的假,多少分钟的假?(提示: 1 天有 24 小时,1 小时有 60 分钟)

输入:

一个整数 n,代表小明妈妈请假的天数。

输出:

两个整数,每行 1 个。
第 1 行的整数代表小明妈妈请假的小时数。
第 2 行的整数代表小明妈妈请假的分钟数。

样例:

输入:

1

输出:

24
1440

在这里插入图片描述


1.分析问题

  1. 已知:小明妈妈请假的天数n。
  2. 未知:小明的妈妈总共请了多少小时h的假,多少分钟m的假?
  3. 关系:h=n * 24,m=h * 60。

2.定义变量

 // 二、数据定义 
    int n, h, m; // 定义变量n存储请假天数,h存储请假小时数,m存储请假分钟数

3.输入数据


    // 三、数据输入 
    cin>>n; // 输入小明妈妈请假的天数

4.数据计算

    // 四、数据计算 
    h = n * 24; // 计算总共请假的小时数
    m = h * 60; // 根据总小时数计算总共请假的分钟数

5.输出结果

    // 五、输出结果 
    cout<<h<<endl<<m; // 分别输出请假的小时数和分钟数
    return 0; // 程序正常结束,返回值为0

完整代码如下:

#include<bits/stdc++.h> 
using namespace std;

// 主函数入口
int main(){
    // 一、分析问题
    // 已知:小明妈妈请假的天数(n)。
    // 未知:小明妈妈总共请了多少小时(h)的假,多少分钟(m)的假?
    // 关系:1天等于24小时,所以h = n * 24;1小时等于60分钟,所以m = h * 60。

    // 二、数据定义 
    int n, h, m; // 定义变量n存储请假天数,h存储请假小时数,m存储请假分钟数

    // 三、数据输入 
    cin>>n; // 输入小明妈妈请假的天数

    // 四、数据计算 
    h = n * 24; // 计算总共请假的小时数
    m = h * 60; // 根据总小时数计算总共请假的分钟数

    // 五、输出结果 
    cout<<h<<endl<<m; // 分别输出请假的小时数和分钟数
    return 0; // 程序正常结束,返回值为0
}

问题:1599. 米老鼠偷糖果

类型:基本运算、整数运算


题目描述:

米老鼠发现了厨房放了 n 颗糖果,它一次可以背走 a 颗,请问米老鼠背了 x 次之后还剩多少颗?(假设 x 次之后一定有糖果剩下)。

输入:

三个整数n、a、x 分别代表总共有 n 颗糖果,米老鼠一次背走 a 颗糖果,总共背了 x 次。

输出:

一个整数,代表剩余的糖果数量。

样例:

输入:

12 2 3

输出:

6

在这里插入图片描述


1.分析问题

  1. 已知:共有 n 颗糖果,米老鼠一次背走 a 颗糖果,总共背了 x 次。
  2. 未知:米老鼠背了 x 次之后还剩多少颗s?
  3. 关系:s=n-a*x。

2.定义变量

    // 二、数据定义 
    int n, a, x, s; // 定义变量n表示糖果总数,a表示米老鼠每次背走的糖果数,x表示背走次数,s表示剩余糖果数

3.输入数据

    // 三、数据输入 
    cin>>n>>a>>x; // 输入糖果总数、每次背走糖果数和背走次数

4.数据计算

    // 四、数据计算 
    s = n - a * x; // 计算出米老鼠背走x次后剩余的糖果数量

5.输出结果

    // 五、输出结果 
    cout<<s; // 输出剩余糖果的数量
    return 0; // 程序正常结束,返回值为0

完整代码如下:

#include<bits/stdc++.h> 
using namespace std;

// 主函数入口
int main(){
    // 一、分析问题
    // 已知:共有糖果总数为 n,米老鼠每次背走糖果数为 a,共背走了 x 次。
    // 未知:米老鼠背了 x 次之后还剩多少糖果(s)。
    // 关系:剩余糖果数 s = 初始糖果数 n - 每次背走糖果数 a 乘以 背走次数 x,即 s = n - a * x。

    // 二、数据定义 
    int n, a, x, s; // 定义变量n表示糖果总数,a表示米老鼠每次背走的糖果数,x表示背走次数,s表示剩余糖果数

    // 三、数据输入 
    cin>>n>>a>>x; // 输入糖果总数、每次背走糖果数和背走次数

    // 四、数据计算 
    s = n - a * x; // 计算出米老鼠背走x次后剩余的糖果数量

    // 五、输出结果 
    cout<<s; // 输出剩余糖果的数量
    return 0; // 程序正常结束,返回值为0
}

五、总结

经过这一系列的学习,你现在应该已经掌握了C++程序设计的入门知识,包括变量的定义与使用、多种数据类型的识别与应用、以及如何进行基本的算术运算。通过解构实例问题,比如“分跳绳”、“求长方形周长和面积”、“火柴棒三角形”和“买文具”,你不仅熟悉了问题解决的逻辑步骤,还学会了如何将这些逻辑转化为C++代码。

记住,编程不仅仅是技术的堆砌,更是思维的艺术。每一道练习题都是对逻辑思维的一次锻炼,每一个算法设计都是对问题本质的深刻理解。随着学习的深入,你将逐渐能够应对更复杂的问题。保持好奇心,勇于实践,不断探索,相信你能在编程的海洋中航行得更远。加油,未来的编程之星!

六、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

在这里插入图片描述

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月别枝惊鹊丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值