Skip to content

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 输出它们相加的结果即可。