题目描述与分析
题目描述:
你的任务是计算a+b。
输入描述:
输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。
输出描述:
对于输入的每对a和b,你需要依次输出a、b的和。
如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。
输入示例:
3 4
11 40
输出示例:
7
51
一、C++函数基础
每一个C++程序都包含了一个或者多个函数,但其中有一个函数必须命名为main,这是因为程序的启动,都是从main函数开始的。
所以我们首先要先写一个main函数:
int main() {
return 0;
}
这个函数主要包含四部分:
返回类型
函数名
形参列表
函数体
下面这张图对应着函数的四个部分:
1.函数的返回类型
返回类型 指定函数执行后返回给调用者的数据类型。如果函数不返回任何值,则使用 void 类型。定义一个函数时,我们首先要在函数名之前放置一个关键字表示函数的返回类型,这个关键字代表的含义是函数执行完毕会返回什么类型的值,我们这里使用了int关键字,表示函数将返回一个整数类型的值(不带小数部分),比如我们在数学中使用的0、1、2就是整数。
一般函数的返回类型可以是 int,float,void等等,这些都是C++的内置数据类型,但是请记住,main函数的返回类型一定是int。
2.函数名
在后面,我们会定义很多个函数,为了区分这些函数,我们要给不同的函数起不同的函数名称,而且函数命名是有规范的,而这里由于是主函数,所以函数的名称为main,且不可更改。
3.函数的形参列表
函数名之后的括号内填充的就是形参列表,它定义了函数在被调用时可以接受的参数类型,参数之间用逗号分隔,在上面的代表中,形参列表是空的,表示没有传递形参。
4.函数体
从左花括号{开始, 到右括号}结束,这一部分就是函数体,函数体中可以有很多行代码,而上面的程序中只有一行return 0;, 这行代码表示程序已经执行完毕,并返回了一个状态码0,这个状态码可以反馈程序的执行状态,在大多数情况下,返回0表示程序正常退出,没有出现错误。
经过了上面的解释之后,你或许对函数有了一些理解,也或许没有,但没关系,我们可以把函数想象成一个盒子,这个盒子可以变换成洗衣机、榨汁机等等,函数的返回类型就代表盒子的种类,int就代表这是一个洗衣机,返回的结果是衣服,float代表这是一个榨汁机,返回的结果是果汁,函数名是你给这个盒子起的昵称,它可以按照规则去定义,只不过如果是main函数,它的名称就不可更改了,函数的形参列表就是我们往盒子扔进去的东西,我们可以把衣服或者水果放进去,而函数体是我们放进去的东西要经历的处理过程,经过函数的处理之后,返回的内容就是我们想要的结果。
让我们再重新认识一下刚才写的代码吧:
// int表示返回类型
// main表示函数名称,这里是主函数,名称不可更改
// ()内的是形参列表,这里的形参列表为空
int main() {
// 这里是函数体的内容,return 0表示返回结果为0,函数正常执行
return 0;
}
二、输入输出流
一个C++程序必须要有一个主函数(有且只有一个),所以我们要解决这道题目,首先也要写一个main函数,如下:
int main() {
return 0;
}
题目要求我们计算a+b, 用正常的数学思维这很简单,就是将a的值和b的值相加就可以了,但是用计算机来解决这个问题,我们首先要解决的问题是:如何输入a和b两个数字呢?
C++语言为我们准备了一组内置库,包含了很多常用的功能, 并且这些内置库可以直接使用,而其中的内置库:iostream,就提供了输入和输出的功能,允许开发者从键盘读取输入并在屏幕上输出结果。
iostream库包含了两个基础类型,分别是istream(输入流) 和 ostream(输出流)
在 C++ 中,输入和输出操作通常是通过使用流进行的。流是一种从源(如键盘、文件、网络等)读取数据或向目的地(如屏幕、文件、网络等)写入数据的抽象。C++ 标准库提供了一系列用于输入输出的类,这些类封装了对各种输入和输出设备的操作。 比较形象的表达,就是我们要把键盘上的字符通过程序输入到电脑里,这个过程就是一个字符接着一个字符流入电脑的过程,所以叫输入输出流。
在 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; // 定义一个变量,名称为a, 用于接收一个整数
int b; // 定义一个变量,名称为b, 用于接收一个整数
但是为了简略,我们可以将代码写在一行,然后将类型略去,变量中间用逗号分隔。
int a, b;
四、写入数据
如何从键盘输入,给这两个变量赋值呢?
此时我们需要用到之前的输入流cin,代码如下:
std::cin >> a >> b;
这行代码就表示使用cin获取输入值,并将输入的值存储在变量a和变量b中
std::cin: 是C++标准库中的标准输入流对象,用于从键盘读取输入。
a: 是之前定义的变量,它将接收从输入流中读取的值,并且要求这个值是一个整数。
b: 是另一个变量,它也将接收从输入流中读取的值,并且要求这个值是一个整数。
1.std是什么?
std 是一个命名空间,:: 符号是作用域操作符。
当使用C++标准库的功能时,需要使用命名空间限定符来指明你要使用的内容位于哪个命名空间中。通常,会使用 std:: 的前缀,表示正在使用C++标准库中的内容。
也就是说,为了避免我们使用的变量和标准库定义的变量名称相同而引起冲突,以及避免不同标准库之间的变量名冲突,标准库定义的所有名字都在命名空间std中,如果我们要使用cin的话,就要先找到命名空间,然后再使用cin,即:std::cin
2.输入运算符(>>)
输入运算符用于将数据从输入流(如键盘、文件等)读取到变量中。
int number;
std::cin >> number; // 从输入流读取一个整数并存储在变量 number 中
在连续读取多个值时,可以使用链式输入操作,多个值之间用空格隔开。
int a, b;
std::cin >> a >> b; // 从输入流读取两个整数并存储在变量 a 和 b 中
五、输出数据
此时我们已经获取到了从键盘上输入的两个数字,就要做运算了。本题是求两个数字相加,那么 代码逻辑就是 a + b;
这里我们可以再定义一个变量 result; 用来存放我们的计算结果。
代码就是
int result = a + b;
最后要把这个结果输出在屏幕上,就要使用到输出流 std::cout,它也是标准库里的一个对象,此外还需要使用到输出运算符(<<),将数据输出到屏幕中, 它的用法和输入运算符类似。
输出结果:
std::cout << result << std::endl;
我们输出结果时,每个结果都要占一行,也就是说每个输出结果后要有一个回车,那么std: :end就是这个作用,表示结束当前行。
六、尝试第一次提交
根据目前掌握的内容可以写出如下代码:
int main() {
int a, b; // 定义两个整型变量 a和b
std::cin >> a >> b; // cin表示输入,输入a和b的值
int result = a + b; // 定义整型变量 result, 接收 a和b 相加的值
std::cout << result << std::endl; // cout表示输出,输出result的值,endl表示回车
return 0;
}
但是这份代码并不能运行,因为我们使用了C++的内置库iostream库,因为这个库里有cin和cout
所以我们需要引用这个库,才能使用cin和cout,引用这个库需要在代码最上方加上 include<iostream>
此时C++代码如下:
#include<iostream> // 引入iostream库
int main() {
int a, b;
std::cin >> a >> b;
int result = a + b;
std::cout << result << std::endl;
return 0;
}
七、循环输入输出
题目中是连续输入a,b并计算两数之和,这里可以使用while循环,while语句表示只要给定的条件是真的,就反复执行这一段代码,直到条件变假为止。
while(条件) {
// 循环代码块
}
在每次循环中,会判断条件的真假。如果条件为真,循环体内的代码块会被执行。然后,循环会再次检查条件,并根据条件的真假决定是否继续执行循环体。
while循环可以这样理解,假设条件为“我还没有学会C++”, 只要这个条件还是真的(判断条件的真假),我就会每天坚持努力学习(循环体),如果我已经学会了C++, 我才会停止学习(退出这个循环)。
所以下面的代码就表示持续输入a 和 b,直到遇到人为终止程序(不输入时)才会结束。
// 持续输入 a和b
while(std::cin >> a >> b) {
}
本题完整代码如下:
// 引入输入输出流库,它允许我们使用输入输出功能。
#include<iostream>
// 程序的入口
int main() {
// 声明两个整数变量 a 和 b,这些变量将用于存储从输入流读取的整数值。
int a, b;
// 循环输入,在输入有效整数时一直执行
// cin >> a >> b 表示从键盘依次读取两个整数并将它们存储在变量 a 和 b 中。
while(std::cin >> a >> b) {
// 计算变量 a 和 b 的和,并将结果存储在变量 result 中。
int result = a + b;
// 使用输出流将计算结果输出到屏幕上,然后换行。
std::cout << result << std::endl;
}
// 程序正常结束
return 0;
}
八、延伸
上面我们提到了命名空间 std。cin、cout都属于 std命名空间里的对象。
那每次使用 cin 和 cout的时候 ,都要加上 std:: ,这显得十分繁琐,为了简化这个操作,我们也可以在函数开头,统一申明使用命名空间 std,这样就不用每次使用 cin,cout 都要加上 std::。
代码是这样的:
#include<iostream>
// 这行代码使得我们可以直接使用 cout 和 cin,而无需每次都写 std::
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种常见的即可。