1. A + B 问题I
前言
本篇作为课程第一篇,相对较长主要是对C++基础语法进行扫盲,本节课会学习到下面知识:
- C++函数基础
- 变量
- 数据类型
- 输入输出的方式
- 标准库
- 命名空间
- while控制多次输入
C++函数基础
每一个C++程序都包含了一个或者多个函数,但其中有一个函数必须命名为main,这是因为程序的启动,都是从main函数开始的。
所以我们首先要先写一个main函数:
int main() {
return 0;
}
这个函数主要包含四部分:
初学者对这四个部分可能会有点疑惑,这四个部分分别对应哪些代码?又有什么作用呢?
来看下面这张图 :
- 函数的返回类型
定义一个函数时,我们首先要在函数名之前放置一个关键字表示函数的返回类型,这个关键字代表的含义是函数执行完毕会返回什么类型的值,我们这里使用了int关键字,表示函数将返回一个整数类型的值(不带小数部分),比如我们在数学中使用的0、1、2就是整数。
一般函数的返回类型可以是 int,float,void等等,这些都是C++的内置数据类型,但是请记住,main函数的返回类型一定是int。
💡 你可能对这些数据类型也太理解,但是请不要慌张,我们会在本节课的延伸部分中对数据类型进行详细的解释,现在你只需要知道这里使用的int是一种整数类型即可。
- 函数名
在后面,我们会定义很多个函数,为了区分这些函数,我们要给不同的函数起不同的函数名称,而且函数命名是有规范的,而这里由于是主函数,所以函数的名称为main,且不可更改。
- 函数的形参列表
函数名之后的括号内填充的就是形参列表,它定义了函数在被调用时可以接受的参数类型,参数之间用逗号分隔,在上面的代表中,形参列表是空的,表示没有传递形参。
- 函数体
从左花括号{
开始, 到右括号}
结束,这一部分就是函数体,函数体中可以有很多行代码,而上面的程序中只有一行return 0;
, 这行代码表示程序已经执行完毕,并返回了一个状态码0,这个状态码可以反馈程序的执行状态,在大多数情况下,返回0表示程序正常退出,没有出现错误。
💡 经过了上面的解释之后,你或许对函数有了一些理解,也或许没有,但没关系,我们可以把函数想象成一个盒子,这个盒子可以变换成洗衣机、榨汁机等等,函数的返回类型就代表盒子的种类,int就代表这是一个洗衣机,返回的结果是衣服,float代表这是一个榨汁机,返回的结果是果汁,函数名是你给这个盒子起的昵称,它可以按照规则去定义,只不过如果是main函数,它的名称就不可更改了,函数的形参列表就是我们往盒子扔进去的东西,我们可以把衣服或者水果放进去,而函数体是我们放进去的东西要经历的处理过程,经过函数的处理之后,返回的内容就是我们想要的结果。
让我们再重新认识一下刚才写的代码吧:
int main() {
return 0;
}
输入输出流
经过上面的学习,我们知道,一个C++程序必须要有一个主函数(有且只有一个),所以我们要解决这道题目,首先也要写一个main函数,如下:
int main() {
return 0;
}
题目要求我们计算a+b
, 用正常的数学思维这很简单,就是将a的值和b的值相加就可以了,但是用计算机来解决这个问题,我们首先要解决的问题是:如何输入a和b两个数字呢?
C++语言为我们准备了一组内置库,包含了很多常用的功能, 并且这些内置库可以直接使用,而其中的内置库:iostream,就提供了输入和输出的功能,允许开发者从键盘读取输入并在屏幕上输出结果。
iostream库包含了两个基础类型,分别是istream(输入流) 和 ostream(输出流)
输入和输出很好理解,可是流是什么意思呢? 比较形象的表达,就是我们要把键盘上的字符通过程序输入到电脑里,这个过程就是一个字符接着一个字符流入电脑的过程,所以叫输入输出流。
在 iostream 库 中,我们有两个对象可以使用,分别是 cin
和cout
。 cin
是一个标准输入流对象,用于从键盘读取输入。cout
是一个标准输出流对象,用于向屏幕输出结果。
变量
虽然我们还没有写输入输出的代码,但是我们已经知道了可以使用iostream中的cin
和cout
来解决输入输出,可是我们还有一个问题需要解决,那就是:系统怎么认识和标识我们输入的数字呢?比如说,我们想要输入两个数字100、100,系统如果使用100来标识100,那另外一个100应该怎么标识呢?
所以我们就需要在系统内部使用某样东西来指代和标识输入的内容,比如x = 100; y = 100
, 这里的x, y
在数学中被称为变量,在编程中也被称为变量,用来指代内容。
不过在数学中有整数、小数之分,那计算机在存储的时候也应该知道我们输入的x是一个什么类型的数字,这里我们输入的是整数,也就是前面使用的int
类型。
所以我们首先需要定义两个变量a,b
用来接收输入的内容,代码这么写:
int a;
int b;
但是为了简略,我们可以将代码写在一行,然后将类型略去,变量中间用逗号分隔。
int a, b;
写入数据
已经解决了输入的数字在计算机中存储的问题,那我们就可以回到之前遗留的问题:如何从我们的键盘输入,给这两个变量赋值呢?
此时我们就需要使用到之前的输入流cin
, 代码如下:
std::cin >> a >> b;
这行代码就表示使用cin
获取输入值,并将输入的值存储在变量a
和变量b
中
std::cin
: 是C++标准库中的标准输入流对象,用于从键盘读取输入。
a
: 是之前定义的变量,它将接收从输入流中读取的值,并且要求这个值是一个整数。
b
: 是另一个变量,它也将接收从输入流中读取的值,并且要求这个值是一个整数。
不过在这行代码中,我们有两个概念没有接触过,那就是std
和>>
- std 是什么?
std 是一个命名空间,::
符号是作用域操作符。
当使用C++标准库的功能时,需要使用命名空间限定符来指明你要使用的内容位于哪个命名空间中。通常,会使用 std::
的前缀,表示正在使用C++标准库中的内容。
也就是说,为了避免我们使用的变量和标准库定义的变量名称相同而引起冲突,以及避免不同标准库之间的变量名冲突,标准库定义的所有名字都在命名空间std中,如果我们要使用cin的话,就要先找到命名空间,然后再使用cin,即:std::cin
- 输入运算符(>>)
输入运算符用于将数据从输入流(如键盘、文件等)读取到变量中。
int number;
std::cin >> number;
在连续读取多个值时,可以使用链式输入操作,多个值之间用空格隔开。
int a, b;
std::cin >> a >> b;
输出数据
此时我们已经获取到了从键盘上输入的两个数字,就要做运算了。本题是求两个数字相加,那么 代码逻辑就是 a + b
;
这里我们可以再定义一个变量 result;
用来存放我们的计算结果。
代码就是
int result = a + b;
最后要把这个结果输出在屏幕上,就要使用到输出流 std::cout
,它也是标准库里的一个对象,此外还需要使用到输出运算符(<<),将数据输出到屏幕中, 它的用法和输入运算符类似。
输出结果:
std::cout << result << std::endl;
但这里的 std::endl
又是什么意思呢?
我们在输出结果的时候,每一个结果都要单独占一行,也就是说 每个输出结果后面要有一个回车。
那么 std::endl
就是这个作用,它表示结束当前行。
尝试第一次提交
那么卡友请根据目前已经掌握的内容写出本题代码。
int main() {
int a, b;
std::cin >> a >> b;
int result = a + b;
std::cout << result << std::endl;
return 0;
}
如果卡友有提交,发现这份代码并不能运行, 还记不记得 在上文中讲过,我们使用了 C++的内置库iostream 库,因为这个库里有 cin
和 cout
。
所以我们需要引用这个库,才能使用 cin
和 cout
, 引用这个库需要在代码最上方加上 include<iostream>
那么现在先自己尝试写出代码。
💡 一定要自己手敲,不要复制粘贴,只有实践才能加深印象
此时C++代码如下:
#include<iostream>
int main() {
int a, b;
std::cin >> a >> b;
int result = a + b;
std::cout << result << std::endl;
return 0;
}
循环输入输出
题目中是连续输入 a,b 并计算两数之和。 而我们以上写的内容,只能输入一次 a,b。
那么如何持续输入 a和b 呢?
这里可以使用while循环,while语句表示只要给定的条件是真的,就反复执行这一段代码,直到条件变假为止。
下节课中,我们会对while进行详细的解释,这里只需要明白代码的基本意思即可。
while(条件) {
}
在每次循环中,会判断条件的真假。如果条件为真,循环体内的代码块会被执行。然后,循环会再次检查条件,并根据条件的真假决定是否继续执行循环体。
while循环可以这样理解,假设条件为“我还没有学会C++”, 只要这个条件还是真的(判断条件的真假),我就会每天坚持努力学习(循环体),如果我已经学会了C++, 我才会停止学习(退出这个循环)。
所以下面的代码就表示持续输入a 和 b,直到遇到人为终止程序(不输入时)才会结束。
while(std::cin >> a >> b) {
}
那么本题完整代码如下:
#include<iostream>
int main() {
int a, b;
while(std::cin >> a >> b) {
int result = a + b;
std::cout << result << std::endl;
}
return 0;
}
延伸
上面我们提到了命名空间 std。cin、cout
都属于 std命名空间里的对象。
那每次使用 cin 和 cout的时候 ,都要加上 std::
,这显得十分繁琐,为了简化这个操作,我们也可以在函数开头,统一申明使用命名空间 std,这样就不用每次使用 cin,cout 都要加上 std::
。
代码是这样的:
#include<iostream>
using namespace std;
int main() {
int a, b;
while(cin >> a >> b) {
int result = a + b;
cout << result << endl;
}
return 0;
}
C++中内置了许多不同的数据类型,而常用的有以下几个:
- 整型
int
: 整数类型,比如0、1、-1等
char
:字符类型,用于表示单个字符,比如a、b、c、!等
bool
: 布尔类型:表示真或假,真为true
, 假为false
, 常用于条件判断
- 浮点型
float
:单精度浮点数类型,通常用于表示小数。
double
:双精度浮点数类型,它和float
类型的区别是double
具有更高的精度, 能表示的小数位更多。
后面我们还会学习更多的数据类型,比如字符串、指针、自定义类型等,但在这里,大家只需要先了解有这5种常见的即可。
总结
作为一个C++初学者,本节课我们使用C++程序解决了A+B
问题,在这个过程中我们了解了一个基本的C++程序应该包含哪些内容,知道了变量、函数、数据类型等基本概念,并能使用while
循环控制多组数据的输入和输出,这是一个良好的开始,下节课,我们会对循环做一个重新解释,相信你对循环的疑问在下节内容中会得到解答。