关于本书 & 购买纸质书

关于本书

纸质版已发布:京东购书链接

小伙伴们,你们好!我是李超(B 站:bigbigli_大李)。

得益于我早年录制的“C++信息学奥赛”系列课程在 B 站的传播,我收到了不少想要获得文档的小伙伴的私信,也将电子文档共享给了大家。但该课程并不足以供大家参加 CSP-J,于是我萌生了写一本全面的教程的想法。

基于多年深耕教育领域的产品经理实战经验,我会不自觉地思考这些问题:写这本书的必要性是什么?能给用户带来什么价值?解决用户什么痛点?

2017 年,国内少儿编程刚刚兴起,同时信息学奥赛(简称“信奥”)也在这股浪潮中逐步为大家所熟知,并得以发展。但由于师资力量无法在短时间内复制,各个机构的教学水平参差不齐,部分学生没有接受到良好的信奥教育。

那时我就在想,能不能为这个行业做些什么,来直接或间接推动行业的发展。于是我做了NOIP 相关的网站、论坛以及公众号。为了能够在公众号内插入网址,我还注册了一个营业执照。

时隔 8 年之久,到了 2025 年,我还是想为编程教育行业做点什么,这本书便是连接我和这个行业的一条纽带。

由于信息学奥赛涉及复杂的算法和数据结构的知识,初学者很难直接从繁杂的知识点中找到学习的路径。

而本书内容由易到难逐步推进,尽量以小学生能理解的语言描述问题,可以帮助学生从基础开始逐步了解信息学奥赛的知识体系,掌握编程语言、数据结构等基础知识,引导学生顺利入门。

授人以鱼不如授人以渔,本书注重培养学生的逻辑思维和解决问题的能力,通过合理的例题和练习引导学生学会分析问题,让学生在解决实际问题的过程中不断提升做题的思维能力,在遇到相关问题时能够举一反三。

面向群体

本书主要面向三个群体。

一是 8 到 14 岁想要参加信息学奥赛的学生。

二是在机构学习的学生,本书共 48 节,每周一节,刚好适配机构一年的教学任务。

三是想要了解 C++语言/算法/数据结构的编程爱好者。

内容概述

本书共 10 章 48 节,从 C++基础语法知识,到一些算法知识,再到赛事中涉及的数学和数据结构的知识,全方面为你的信奥学习保驾护航。

如何使用

本书共 48 节,每周花 2 到 4 小时的时间学习一节,除去假日给自己放个小长假,刚好能在一年内学完。本书能让学生在不耽误校内主干课的前提下,多学一门提升自己综合能力的学科。

在学习过程中一定要多实操,看懂了不代表完全学会了,在实操过程中你能发现更多的问题,比如中英文符号混用、单词等不小心打错了,又或者是漏掉了某些头文件。

在实操过程中难免会出现 bug,但千万不要害怕犯错,仔细观察书中代码,一步步跟着演示、对照,发现错误、改正错误,然后总结反思,这样更有助于编程学习能力的提升。

购买本书

第1章 顺序结构

顺序结构是一种简单的控制结构,它表示程序按照从上到下的顺序依次执行每一个步骤。在生活中,顺序结构十分常见,比如刷牙就是一个典型的顺序结构过程,我们可以将刷牙分成如下步骤。

1) 刷牙前 :准备好牙刷、牙膏、水杯等工具。

2) 开始刷牙:将牙刷放入口中,充分刷到每一颗牙齿。

3) 刷完牙:用清水漱口,冲洗牙刷并甩干水分,然后放回原处。

除了刷牙的例子外,你还能想到生活中哪些顺序结构的场景呢?

第 1 课:程序入门

在正式写程序之前,我们先了解下什么是程序。程序是指一组按照特定顺序和逻辑编写的计算机指令,用来完成某些特定任务或解决某个问题。

举个简单的例子,比如蛙蛙想买包子吃,他首先来到早餐店,然后告诉老板给他来两个香菇青菜馅的包子,这里的“两个”“香菇青菜馅包子”就可以看作给老板下达的“指令”。老板接收到“指令”,递给了蛙蛙两个香菇青菜馅包子,就解决了蛙蛙买包子这个问题。

而我们现在处于计算机的世界当中,程序需要通过编程语言来编写,然后由计算机去执行。编程语言有很多,比如 Python、Java、C++等,由于信息学奥赛的官方比赛语言目前仅支持 C++,所以本书的语法、算法及数据结构均通过 C++来实现。

什么是 C++呢?又有哪些产品是通过 C++开发的呢?让我们一起来了解一下。

1.1.1 C++简介

C++于 1983 年由比雅尼·斯特劳斯特卢普(Bjarne Stroustrup)在 C 语言的基础上开发出来,由于性能优越、灵活性强,被广泛应用于各个领域。在操作系统方面,大家常用的 Windows 操作系统,其内核、文件系统等部分大量使用了 C++。信息学奥赛考试用的 Linux 系统,其内核和驱动也使用了 C++。

在游戏开发方面,国产西游主题大型游戏《黑神话:悟空》所使用的游戏引擎——UnrealEngine,它的主要开发语言就是 C++。

有些同学可能接触过 Photoshop 这款图片处理软件,也有些同学可能接触过 3D 建模软件Blender,这些软件的核心部分均由 C++编写。甚至我们常用的谷歌浏览器,也有 C++语言的参与。

从这里我们便能看出,C++不仅仅是信息学奥赛官方比赛语言,它还能支撑各行各业的应用。它也许会从你现在这个阶段陪伴你到未来很长一段时间,或许能伴随你的一生。

听到这里,蛙蛙已经迫不及待想学习 C++这门语言了,让我们跟随蛙蛙进入 C++的世界吧!

1.1.2 软件使用

工欲善其事,必先利其器,想要学 C++,必须要先有一个编写 C++ 的开发环境。开发环境DEV-CPP 的安装教程已经放到我的博客 bigbigli.com/rjxz.html 了,若你还未安装环境,请移步到bigbigli.com/rjxz.html,安装好后再继续往下进行。

1. 新建源程序

步骤一:从主菜单中依次选择“文件”→“新建”→“源代码”菜单。新建完成之后,屏幕右下侧出现一片白色区域,称为“源程序编辑区域”,可以在此输入程序,如图 1-1 所示。

图1-1 新建源程序

步骤二:创建C++程序基本框架。把下面这几行代码写进“源程序编辑区域”,写完之后再解释这几行代码的意思:

#include <iostream>
using namespace std;
int main()
{
    return 0;
}

需要注意,这里所有的符号,比如<>、;、()、{}均为英文状态下的符号。写完之后,再来了解下每一行究竟表示什么?

假设将整个程序比作买菜做饭的场景,现在蛙蛙饿了,他告诉妈妈想吃西红柿炒鸡蛋,但是家里没有食材,于是妈妈先去了一趟菜市场,然后回家给蛙蛙做饭……

#include <iostream>

include是包括、包含的意思,这里包含了一个头文件iostream。我们可以把头文件比作菜市场,蛙蛙想吃A婆婆卖的西红柿,所以妈妈必须要去A婆婆所在的菜市场才能买到这个菜,而这里的iostream就是那个有这个菜的菜市场。

iostream中的i表示的是input,是输入的意思;o表示的是output,是输出的意思;stream是流,流出的意思。一个程序,基本都会有输入和输出,这个头文件的功能就是用于处理标准输入、标准输出和标准错误等。

using namespace std;

注:有了这么一句话,后续在程序中就可以直接使用cout(输出)、cin(输入)、vector(动态数组)、string(字符串)等标准库中的类型和函数等内容,而无须在每次使用时都加上std::前缀(如果没有这一行,则需要加上std::前缀)。

int main(){}

int main()是主函数的声明,也就是通知计算机该干活了。

就像妈妈买完菜回来后,去厨房给蛙蛙做西红柿炒鸡蛋一样。后面紧跟着的一对大括号,我们可以暂且把它比作厨房,那么无论是做饭还是刷锅洗碗,都是在这个厨房里面进行的。

return 0;

表示这个程序已经执行完毕,正常终止了。就像妈妈做完饭后,大家也都吃完饭了,正常收拾下厨房,这顿饭就圆满结束了一样。

如果不收拾厨房,会影响大家吃这顿饭吗?自然是不影响整个吃饭流程的,也就是说如果没有return 0,通常不会影响程序主体的执行。但这会使代码看起来不够完整和规范,所以大家最好还是加上return 0,这样能确保程序完全符合C++标准对于主函数返回值的定义。

2. 保存源程序

写完基本框架后,程序还未保存。若想保存程序,只需从主菜单中选择“文件”→“保存”就可以将文件保存到指定的硬盘目录下,如图1-2所示。

图1-2 保存源程序

3. 编译

计算机的语言能力有限,它只认识机器语言(即由0和1组成的二进制指令),所以它需要有个翻译官(编译器)帮它将C++语言翻译成机器语言,这样计算机就能理解程序啦。

怎么将我们所写的程序进行编译呢?从主菜单中选择“运行”→“编译”或者点击快捷键“F9”。等待编译日志中出现编译结果,则编译完成,如图1-3所示。

图1-3 编译完成

4. 运行

编译完成之后,可以看到程序没有错误(如果出现错误,则需要对照着上面的程序再修改一遍,看看是不是把英文字符写成中文字符了),然后还需要运行程序,才能达到解决实际问题的目的。

从主菜单中选择“运行”→“运行”或直接点击快捷键“F10”。

此时会跳出如图1-4所示的黑色框,表示运行成功。黑色框是控制台,以后程序运行结果均在此控制台上显示。

图1-4 控制台

  • 提示:编译和运行这两个步骤在编程环境中可合二为一,即直接点击“运行”→“编译运行”或快捷键“F11”,计算机会依次进行编译和运行操作。

1.1.3 标准输出语句

今天是蛙蛙学习C++编程的第一天,为了庆祝这一天,他希望在控制台上打印“Hello C++”。

氪町博士了解了蛙蛙想做什么之后,告诉他要想在控制台上打印文字,需要掌握下面的编程指令。

  • 标准输出指令:cout
  • 标准使用格式:cout <<

指令功能:在控制台(也就是图1-4)输出结果,如果想要原样输出我们想让它显示的内容,就需要将原样输出的内容用双引号引起来。

于是,蛙蛙迫不及待地在编程软件中写上如下所示的程序:

cout << "Hello C++"

然后点击“编译运行”菜单,结果发现报错了,这是为什么呢?

氪町博士告诉他有两方面的原因,一是没有写在基本框架里面,就相当于你现在准备去做饭,但是没有进厨房,那自然是不妥的;二是结尾没有加分号——“;”,分号在编程中就相当于作文中的句号,一句话写完后一定要加上,所以完整的程序如下:

#include <iostream>
using namespace std;
int main()
{
	cout << "Hello C++"; 
	return 0;
}

写完之后,别忘了点击“编译运行”,观察是否出现如图1-5所示的结果。

图1-5 运行结果

蛙蛙编译运行后,发现他运行后出现如图1-6所示的情况,你知道这是为什么吗?

图1-6 编译结果

蛙蛙检查了下,终于发现了错误,原来在第5行不小心把英文的“;”打成了中文的“;”,改完后再运行就没有问题了。

聪明的你,运行后有没有像蛙蛙一样出现错误呢?如果有些许错误的话请耐心检查哦。

1.1.4 实例讲解

为了巩固蛙蛙今天所学的新知识,氪町博士准备了一些测试题目,帮助蛙蛙检测他学的如何,你也跟着一起做一下吧。

例1:蛙蛙的心情

蛙蛙掌握了输出语句之后,他成功利用自己所学的知识在控制台上打印出了今天的心情,你能像蛙蛙一样,在控制台中打印出你此时此刻的心情吗?

【输出样例】蛙蛙今天学了新知识,很开心!

解析

输出语句是cout,要写在基本框架里面,还记得基本框架是什么吗?如果忘记的话,记得再回顾下,希望本章学完后,大家都能把基本框架默写下来。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << "蛙蛙今天学了新知识,很开心!";
    return 0;
}

例2:超市购物

蛙蛙随妈妈来到超市购买商品,妈妈买了一些水果,一共是24元,又买了3盒牛奶,每盒牛奶的价格是5元,请问妈妈此次一共花了多少钱呢?请使用编程软件计算,并将结果打印在控制台上。

【输出样例】39

  • 注意:输出样例仅用于对比你在控制台中输出的结果,并非样例输出的实际内容。

解析

蛙蛙觉得这题太简单了,认为这个题目与上面那个题目一样。于是他写下了如下的程序,你觉得他写的对不对呢?

#include <iostream>
using namespace std;
int main()
{
	cout << "24 + 3 * 5"; 
	return 0;
}

蛙蛙非常自信地点击“编译运行”,结果出现了如图1-7所示的情况。图1-7所展现的结果跟样例输出的内容不一致,所以这个问题并没有被正确的解决。

图1-7 运行结果

那你知道该如何修改吗?

氪町博士提醒蛙蛙一句话,带双引号输出的内容是原样输出,双引号里面的内容是什么就输出什么,因此并不会计算这个式子的值。

所以只需要把双引号去掉就可以了。蛙蛙拍了拍脑袋,觉得这准没错,于是把双引号去掉了,写出了如下的程序:

#include <iostream>
using namespace std;
int main()
{
    cout << 24 + 3 * 5;
    return 0;
}

运行后,果然发现结果是39,这样写计算机才会自动计算这个算术表达式。

通过刚才的试错,蛙蛙认为学编程是需要多去尝试的,没准多尝试几下就得到了正确的结果,印象也更加深刻了。你觉得蛙蛙的想法对吗?

  • 总结:双引号里面写的内容会原封不动地显示在控制台上,这种输出叫作原样输出,如果我们想要输出一个算式的结果,直接去掉双引号即可。

例3:香蕉和苹果各多少钱

上次去超市买的水果很快就被蛙蛙吃完了,妈妈准备再去水果店购买一些。来到水果店后,妈妈发现这里只有香蕉和苹果比较新鲜,于是只买了这两种水果,其中香蕉买了5斤,苹果买了3斤,香蕉的价格是每斤4元,苹果的价格是每斤7元。

请分别在控制台打印出香蕉的总价格和苹果的总价格。

【输出描述】分别输出香蕉的总价格和苹果的总价格,中间用空格隔开。

【输出样例】20 21

解析

蛙蛙看完题目后有些疑惑,他不知道该如何输出两个结果,氪町博士告诉他,可以直接使用“<<”进行连接,比如要输出22和33,那么只需要这样写即可:

cout << 22 << 33;

这样就可以输出两个结果,对于这题来说,便需要分别计算香蕉和苹果的总价格。

听罢,蛙蛙便在基本框架里面写下了:

cout << 5*4 << 3*7;

然后点击“编译运行”,发现结果是2021。仔细观察这个结果,发现香蕉的总价和苹果的总价虽然都打印在控制台上了,但是两个结果连在一起了,这是为什么呢?

原来是没有将两个结果用空格隔开,但是蛙蛙现在并没有学习如何将两个结果分开,于是又去请教了氪町博士。

氪町博士告诉了他常见的分隔方方,这样以后遇到相似的问题,全都能解决了。

常用的分隔方法一般有两种,分别是利用空格隔开以及使用换行隔开。

  • 如果题目要求利用空格分开,那么只需在两个结果中间加上双引号,然后在双引号里面加上空格即可。因为双引号里面的内容是原样输出的,所以加上空格后,空格会原样打印出来,比如要打印22和33,中间用空格隔开,具体的写法为:
cout << 22 << " " << 33;
  • 第二种常见的分隔方法是利用换行分开,比如现在依然打印22和33,两个数字中间用换行隔开,具体的写法为:
cout << 22 << endl << 33;

运行后,我们会发现这个22和33是换行打印在控制台上的。这里的endl是end of line的缩写,意为行结束。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << 5*4 << " " << 3*7; // 分别计算香蕉和苹果的总价,并用空格隔开
    return 0;
}

例4:购物详细清单

妈妈在超市卖完东西之后,想清楚地知道每种物品花费了多少钱,比如她买了6盒原味牛奶,每盒原味牛奶的价格是12元,她想清楚地知道牛奶一共花了XX元。

蛙蛙思索了一会,还是决定使用编程为妈妈解决这个问题,他希望在控制台上清楚地打印出:牛奶的总价为:XX(注:这里的冒号是中文状态下的冒号,XX为商品的价格)。

【输出样例】牛奶的总价为:72

解析

在价格前面,要求原样输出“牛奶的总价为:”,所以这些内容应该写在双引号里面。

即:cout << "牛奶的总价为:",这里的双引号是英文状态下的双引号,冒号要按照要求写出中文状态下的冒号。

再通过连接符连接牛奶的总价即可,即:cout << "牛奶的总价为:" << 6*12;。

参考代码

#include <iostream>
using namespace std;
int main()
{
    cout << "牛奶的总价为:" << 6*12;
    return 0;
}

第 2 课:初识变量

蛙蛙通过前一天的学习,已经掌握了C++基本框架和cout语句的使用,通过cout语句他已经能够打印自己的心情,还能计算商品的总价格。

氪町博士昨天就告诉蛙蛙,今天我们要学习一个非常重要的知识点,这个知识点同样会贯穿整个编程阶段的学习,他已经期待一个晚上了,终于等到了今天的氪町博士小课堂。

1.2.1 什么是变量

氪町博士告诉蛙蛙,今天我们要学的知识点叫作变量,简而言之就是可变化的量,比如我们在上一节中计算了香蕉的价格,但如果单价改变了或者买的数量改变了,则需要重新计算一遍,但如果将单价和购买数量用变量代替,这个程序只需要写一次即可。

蛙蛙还是有点懵,氪町博士看出了蛙蛙的疑惑,于是问蛙蛙,你有没有玩过电脑游戏?

蛙蛙自信地点了点头,氪町博士继续说道,我们可以把游戏中人物的血量看作变量。假设某个游戏人物有10格血,每受一次伤,血量就会减1格,当吃下血包的时候,血量就会加1格(当然不能完全超过10,这个知识点需要通过下一章–的内容“选择结构”来学习,我们暂时先假设没有这个限制)。

蛙蛙觉得变量就好像一个能存放东西的小盒子一样,假设用这个小盒子代替血量,一开始这个小盒子里面就存放了10格血,这10格血可能会被拿走(-1),也可能会放进来一些血量(+1)。

  • 我们可以把变量看作一个小盒子,小盒子可以存放一些同种类型的东西(比如血量),里面的东西可能会增加也可能会减少。

1.2.2 变量的定义

定义格式:变量类型 变量名;

什么变量类型,什么又是变量名呢?

这里还是以血量为例,血量一共有10格,相当于初始化为10。当游戏人物受到伤害时,血量就会减1;游戏人物吃到血包时,血量就会加1。我们会发现血量无论增加还是减少,它总是一个整数(不是小数或其他类型)。

所以存放血量的小盒子(变量)要能够存放整数,所以我们需要向计算机申请了一个能够存放整数的盒子。这里用关键字int去申请,也就是变量类型为int。(int是integer的缩写,意为整数、整型。)

我们申请的这个能够存放整数的小盒子,还需给它起一个名字。如果用它来保存血量,那就起个跟血量相关的名字,比如blood。

但是这个名字也不是随便起的,它是有一定的命名规则的。

  • 组成部分:变量名可以由字母(a-z、A-Z),数字(0-9)和下划线(_)组成。
  • 开头要求:变量名必须以字母或下划线开头,不能以数字开头。例如“blood”“_blood”都是合法的,但是“10blood”就是非法的。
  • 区分大小写:变量名是区分大小写的,比如“blood”和“Blood”是两个不同的变量名。
  • 不能以关键字命名:比如不能以int、double、if、else等(我们以后还会接触到更多关键字)命名。
  • 见名思义:虽然这个规则并不影响语法,但最好还是要使用有意义的变量名,这样有助于代码的阅读和理解。比如看到“blood”就能够想到这个变量可能会代表血量。在学习编程初期,一定要养成良好的代码编写习惯。

完整的写法就是:

int blood;

即申请一个能够存放整数的变量,命名为blood,变量申请完之后,结尾的分号千万不能忘记。

但有时候可能会需要多个变量,如果想一次性定义多个变量的话,只需要将多个变量名用逗号隔开即可,比如

int a,b,c;

这里的a、b、c表示三个不同的变量。

1.2.3 变量的赋值

现在我们把变量比作一个小房间,这个小房间只能够存放小板凳。开始的时候,小房间里面没有一个小板凳,我们可以称变量初始化为0,记作:

int s = 0;

这里的s表示小板凳的数量,如果我们将3个小板凳搬进这个小房间里面,此时小房间里板凳的数量为3,可以表示为:

s = 3;

为什么这里不需要int了呢?蛙蛙有些疑惑。

那是因为小房间这片空间已经在前面申请了,不需要再申请一次,直接拿过来用即可。

但是需要注意,这里的“=”是计算机中的赋值运算符,并不等同于数学中的等于号。

标准的赋值格式为:

变量 = 表达式;

表示把“=”右边的表达式赋值给左边的变量,s = 3的意思是把3这个数值赋值给变量s。还以上面的情景为例,就相当于往小房间里面放进去了三个小板凳一样,此时小房间里板凳的数量才等于3。

1.2.4 变量的输出

变量的输出,其实就是输出变量里存放的数字,就和之前我们输出一个数字是一样的。假设已经声明了a、b、c三个变量,此时要将这三个变量输出出来,应该如何表示呢?

我们有学过输出实际的数字,比如输出数字22,直接使用cout语句进行输出,即使用cout << 22;即可在控制台打印出22这个数字。

同样,如果想要输出一个变量,也是直接使用cout加连接符连接变量名即可,比如输出变量a,表示为:

cout << a;  // 表示输出变量a的值

如果我们想要输出多个变量,也是同输出多个数字一样,使用连接符连接即可,表示为:

cout << a << b << c;  // 表示输出变量a、b、c三个变量的值

但是如果按照上面这样写,输出的三个值会紧紧地贴在一起,没有分隔开,你还记得怎么分开的吗?如果忘记的话,记得回顾下1.1.4节的例3解析哦。

1.2.5 标准输入

常见的程序,不仅会有输出,还会有输入,比如你想搜索某个名词,会在搜索框里面输入这个名词,搜索框读入你输入的内容后,再输出给你一些相关信息,这个程序中就涉及输入和输出。

在C++中输入的格式如下:

cin >> ... ;

我们输入的内容肯定要存放到某个地方(空间)。大家可以思考下,空间是不是我们刚讲过的内容?

没错,就是变量。假设我们申请了一个整型变量s,往s中输入一些内容,那么s这块空间里面存放的内容便是我们输入的值,具体如下:

cin >> s;

在基本框架里面写入这行代码后,点击“编译运行”,则可以在控制台看到一个一闪一闪的光标,可以在里面输入一个值,比如输入22,就相当于s这个变量的值为22。

注意:目前所编写的代码均在基本框架内,输入变量前需要先对变量进行定义,输入完之后按Enter(换行)键表示输入结束。

如果想输入多个变量,格式与输出类似,用“>>”连接即可,这个连接符与输出的连接符“<<”是相反的。假设我们现在想输入三个变量a、b、c,并且这三个变量已经声明,格式如下:

cin >> a >> b >> c;

1.2.6 实例讲解

现在我们已经学会了如何定义、使用变量,接下来跟随蛙蛙一起完成下面几个例题吧。

例1:蛙蛙的书架

蛙蛙最近为了好好学习编程,买了很多编程相关的书,但是这些书没地方摆放,于是爸爸决定给蛙蛙买一个新书架来放置这些书。

拿到书架后,蛙蛙赶紧把书放了进去,一边放一边数了下书的数量,一共有8本,全部放了进去,请你用变量的形式在控制台中打印蛙蛙新书架中书的数量。

【输出描述】用变量的形式输出新书架中书的数量。

【输出样例】8

解析

题目要求我们要用变量进行输入,所以需要我们先声明一个变量。声明变量需要有变量类型和变量名,在给变量命名的时候要注意变量命名规则。然后给变量赋一个值,这个值在题目中已经给定了,最后直接使用cout输出这个变量即可。

参考代码

#include <iostream>
using namespace std;
int main()
{
    int books = 8;
    cout << books;
    return 0;
}

例2:书架的总书数

蛙蛙把8本编程书放进书架后,发现书架还是空荡荡的,于是他把以前买的其他种类的书也放上去了,又放进去了13本书,请问现在书架中一共有多少本书呢?

【输出描述】用变量的形式分别表示编程书总数及其他种类的书总数,再输出两者之和。

【输出样例】21

解析

我们可以用变量books1表示编程书的总数,用books2表示其他种类书的总数(当然如果你想用其他变量也是可以的,比如用a表示编程书的总数,b表示其他种类书的总数)。

然后输出books1和books2之和即可。

参考代码

#include <iostream>
using namespace std;
int main()
{
    int books1 = 8, books2 = 13;
    cout << books1 + books2;
    return 0;
}

例3:科普书籍的数量

学校图书馆每周都会迎来大量借书、还书的学生。管理员在整理书架时,发现某类科普书籍还剩下n本,为了清楚地了解库存情况,方便后续管理,他希望能通过程序记录该类书籍的剩余数量

【输入样例】22

【输出样例】22

解析

在控制台输入一个变量的值,使用我们刚刚学习过的cin >> ...语句,记得,cin后面跟的连接符的朝向与cout相反。

假设已经声明了一个变量为n,如果想在控制台内输入这个变量的值,则需:

cin >> n;

结尾的分号也不要忘记,运行后,则可以看到控制台内有个光标在闪,是在提醒你输入一个变量,输入完之后点击回车(Enter键)即可将输入的值保存到变量n中。

参考代码

#include <iostream>
using namespace std;
int main()
{
    int n; // 声明变量n
    cin >> n; // 输入变量n,比如输入22,n的值此时便为22
    cout << n; // 输出n的值
    return 0;
}

例4:借出去的书

蛙蛙有很多同学,前几天就有几名同学来找蛙蛙玩,突然看到了蛙蛙书架上的编程书,十分感兴趣,也有些同学对其他书感兴趣。

所以想问蛙蛙能不能把书借给他们拿回家看几天,蛙蛙自然是同意的。

假设一共有m名同学来向蛙蛙借书,每名同学都借了n本书,蛙蛙想统计下他那次借出去多少本书。

【输入描述】一行,两个整数m和n,分别表示多少名同学和每名同学借出去的数量。

【输出描述】输出蛙蛙一共借出去了多少本书。

【输入样例】3 2

【输出样例】6

解析

由于同学的数量和每人借蛙蛙书的数量都是变化的,所以需要声明两个变量,分别用来表示有多少名同学来借书,以及每名同学借多少本。

想要输入多个变量,格式与输出一致,连接符相反,这里先假设有m名同学,每名同学借n本书,则有:

cin >> m >> n;

用两个 >> 连接符连接两个变量,m和n需要提前声明,其中多个变量之间需要用逗号隔开。

参考代码

#include <iostream>
using namespace std;
int main()
{
    int m,n;
    cin >> m >> n;
    cout << m*n;
    return 0;
}
Copyright © 2024 - 2026 bigbigli网站 保留所有权利