Appearance
L1-05 输入输出
在上一节课中我们学会了变量的定义和变量的初始化赋值。那有的同学可能会问:老师,程序只能这样编写么?针对现实中不同的情况,是不是都需要手动改变程序中变量的初始化值呢?例如:计算 a+b 的值,难道每次都要在程序中改变 a 与 b 的初始化值,或者需要写很多不同的程序应对不同的情况吗?这样是不是并不能体现编程的优越性呢?
并不是这样的,聪明的前辈们在发明编程语言的时候自然想到了这个问题。其实大家可以思考一下,在日常生活中使用的手机 APP 是什么样的运行流程?
日常生活中大家遇见的 APP ,每一步都是根据用户的点击(一种输入信息),才产生下一步的行为反馈。其实在基础的编程中也是一模一样的,大部分程序都需要根据输入(键盘输入、数据流输入、电平变动等等)来决定产生什么样的输出。
输出语句
单选题
以下哪一种设备属于输出设备()
A. 扫描仪
B. 键盘
C. 鼠标
D. 打印机
题解
D
扫描仪,键盘,鼠标都是输入设备,打印机是输出设备
我们在之前的程序中已经接触过输出语句: cout 。
输出语句用 cout 开头,变量之间用 << (两个小于号)隔开。对于大于小于号的方向,可以记为数据是从变量中取出再输出在屏幕上,所以尖的一头指向 cout 。
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
cout << "Hello, World!"; //输出Hello World
return 0;
}
以上这段程序会输出:
text
Hello, World!
除了输出固定的内容, cout 还可以用来输出变量的值:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n = 5;
cout << n; //输出n的值
return 0;
}
以上这段程序会输出:
text
5
cout 还可以同时输出多个内容:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n = 5, m = 6;
cout << n << " Hello " << m + 1;
return 0;
}
以上这段程序会输出:
text
5 Hello 7
其中 5 是 n 的值,"Hello" 是第二段输出的内容,注意,其中的空格要写在双引号内才有效,最后的 7 是 m+1 的计算结果。
有了输出语句,我们可以将计算机计算的结果输出到屏幕上,方便我们查看。
如果我们希望根据变量的赋值,输出如下格式的内容,应该如何编写程序呢?
text
m=6 n=5
程序如下,注意其中空格的使用:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n = 5, m = 6;
cout << "m=" << m << " n=" << n;
return 0;
}
输入语句
单选题
下列计算机设备中,既是输入设备,又是输出设备的是( )。
A. 键盘
B. 触摸屏
C. 扫描仪
D. 投影仪
E. 数字化仪
题解
B
基础知识题,既是输入设备,又是输出设备的是触摸屏。
输入语句用 cin 开头,变量之间用 >> (两个大于号)隔开,就是输入语句。对于大于小于号的方向,可以记为数据是从键盘读入再存入变量里,所以尖的一头指向变量。
与 cin>> 相对应的是 cout<< 。 输入语句用法如下:
c++
int a;
cin >> a; //读入1个数字并赋值给a
还可以同时处理多个输入
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int a, b, c;
cin >> a >> b >> c;
}
结合之前的输出,我们来更多的程序
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n = 5, m;
cin >> m;
cout << n + m;
return 0;
}
假如我们通过键盘输入 6 ,则最终输出的结果为:
text
11
因为 m=6,n=5 ,所以会输出 6+5 的计算结果 11 。
单选题
下面一段程序将会读取输入的 2 个数字 a,b。括号部分应该填写的代码是()?
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
(______)
cout << a + b;
return 0;
}
A. cin >> a, b;
B. cin << a, b;
C. cin >> a >> b;
D. cin << a << b;
题解
C
输入的正确书写:cin >> a >> b;
cout与endl
当我们需要输出换行时,可以使用 endl 。例如我们需要输出如下格式内容时:
text
m=6
n=5
程序需要这样编写:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n = 5, m = 6;
cout << "m=" << m << endl;
cout << "n=" << n;
return 0;
}
其中的换行,就是依靠 endl 实现的。
除了 cin 与 cout ,还有其他处理输入与输出的语句,例如 scanf 和 printf ,这里不展开介绍,留给大家在未来的程序中自己体会。
单选题
在 C++ 语言中,关于程序中的输出语句使用正确的是( )。
A. cout << "wo ai bian cheng";
B. count << "wo ai bian cheng";
C. cout << ‘wo ai bian cheng’;
D. cut << “wo ai bian cheng”;
题解
A
输出语句使用正确的是:cout << "wo ai bian cheng";
cin常见问题
在使用 cin 同时处理多个变量的时候,正确的写法如下:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n, m;
cin >> n >> m;
return 0;
}
而下面写法是错误的:
c++
#include<bits/stdc++.h> // 调用输入输出函数库
using namespace std; // 使用标准库
int main() // 定义主函数
{
int n, m;
cin >> n, m;
return 0;
}
有时题目要求输入一个 0 或 1 组成内容,且 01 之间没有空格,此时输入的内容不可以用 int 来保存,而是要用 char 类型逐个读取。因为 cin 读入数据时,遇到空格回车制表符之类的字符,才会当作下一个数据来读取。
头脑风暴
修井问题
我们手里拿到一张长 24 厘米宽 16 厘米的长方形白纸,游戏就在这张白纸上进行,我们作为游戏的先手,需要把纸撕掉一部分。撕的时候可以垂直撕,也可以水平撕,就是不可以斜着撕,同时撕的时候要按照整数刻度撕。比如我可以把 24×16 的纸撕成 24×10 的,也可以撕成 15×16 的。我们撕完,这张纸会交给对手继续这样类似的操作。由于我们只能按照整数刻度去撕纸,因此当纸张变为 1×1 的时候,就无法撕纸了,这个时候拿着这张 1×1 的纸一筹莫展的一方判输,另一方判赢。
我们作为游戏的先手,如何通过有效的策略获得这场比赛的胜利呢?
我们作为先手的优势就是能主导这场比赛,使得比赛按照我们的节奏进行。为了使得“我们总有得撕”,我们可以很聪明地每次把纸撕成一个正方形。为什么这样操作呢,因为撕成正方形之后,对手拿到它会有两种可能,一种是这张纸就是 1×1 的,那么此时我们已经获胜了;另一种情况是那的这张纸不是 1×1 的而是 n×n 的,这个时候他无论怎么撕,都一定会把这张纸撕成一个“长方形”!这样以来,我们手里拿到的是一个长方形,就又可以继续我们的伎俩,将它撕成正方形……这样一直下去可以保证我们“总有得撕”,随着纸张不断变小,自然也就可以“坐等”获胜了!这道题目以博弈思想为主体,但是和传统的博弈题目又有区别,我们始终坚持着一种策略去把对手“逼输”,该思想需要我们有较广的思维宽度,和灵活的处理技巧。
习题
课堂练习:启蒙练习-量身高
输入一个数字n,表示身高,程序会输出一句英文,"My height is ncm.”,其中n代指输入的数字。
例如:输入180,输出是 "My height is 180cm."
输入格式
输入一个数 n
输出格式
输出"My height is ncm."
输入样例
175
输出样例
My height is 175cm.
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
cout << "My height is " << n << "cm." << endl;
return 0;
}
理解以下的代码,并将代码在网站上提交。
需要特别注意各段输出中的空格,以及最后需要输出一个 '.'。
以上代码做了什么?用自己的话描述一下:
课堂练习:A+B V2
已知两个非负整数 A,B,请你求出 A+B 的值并输出这个加法算式。
输入格式
输入两个整数A,B;
输出格式
输出一个加法算式,形如 “A+B=计算结果”。字符间不包含空格。
输入样例
text
5 6
输出样例
text
5+6=11
数据范围
对于100%的数据,0≤A,B≤10^9;
text
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a << '+' << b << '=' << a + b << endl;
return 0;
}
利用 cin 读入 2 个变量,并用 cout 输出它们相加的结果即可。