GESP C++ 1 级 · 知识点

输入输出语句

一级要求熟练使用 cin 读入、cout 输出,并理解连续读写、换行以及输入时空白字符会被跳过的特点。

对应知识域:输入输出语句相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 掌握 cout 的基本用法:用连续的小于号把多个内容串起来输出,语句以分号结束。
  • 掌握 cin 的基本用法:用连续的大于号把多个变量的值一次读入,多个数据之间用空白分隔。
  • 理解 endl 与字符换行符的作用都是换行,endl 还会刷新输出缓冲区。
  • 知道 cin 读入数值或字符串时会跳过前面的空格与换行,读入单个字符时同样会跳过空白。

典型题型

  • 读入两个整数并输出它们的和、差、积。
  • 读入一个字符,输出它的 ASCII 码。
  • 按指定格式输出多行内容,考查换行位置与连续输出。

常见错误

  • 把 cin 和 cout 的方向搞反,写成 cin << x 或 cout >> x,编译无法通过。
  • 想输出 1 加 2 的结果却写成 cout << "1+2",双引号里是原样输出的文字,不会计算。
  • 输出多个内容时漏写小于号,例如写成 cout << a b;或漏写分号。
  • 以为输入能自动按行分配,实际上 cin 只按数据本身读取,多个数据之间用空格或换行分隔都可以。
  • 需要读入带空格的整行文字时仍用 cin >>,结果只读到第一个空白前的内容。

深入理解

cin 是按空白切开的

cin >> a >> b; 会跳过前导空白(空格、制表符、换行),读到一个完整的数据后停下。所以输入 3 5 和输入 3 换行 5,对程序来说完全一样——读数字时不需要关心数据之间隔了几个空格或几行。

但读字符串时这条规则会带来坑:cin >> s 遇到空格就停,输入 hello world 只能读到 hello。一级题目通常读的是单个单词或数字,遇到含空格的整行,需要用 getline。

cout 的输出格式

cout << a << " " << b << endl; 把多个内容依次接到屏幕上,内容之间不加任何分隔符,所以要自己补空格。题目要求输出「两个数用空格隔开」,就必须显式写 " "。很多答案被判错,只是因为少了一个空格或最后多了一个空格。

endl 的作用是换行并刷新缓冲区,'\n' 只换行。做题时两者结果一样,循环里输出大量数据时用 '\n' 更快。注意 '\n' 才是转义换行,写成 "endl"(带引号)会原样打印出这四个字母,两者不能混用。

一个完整的模板

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << a + b << endl;
    return 0;
}

#include <iostream> 提供输入输出设施,using namespace std; 让 cin、cout 不用写前缀,int main() 是入口,最后的 return 0; 表示程序正常结束。缺其中任何一样都可能编译不过,这是初学阶段最高频的编译错误来源。

自编例题

读入半径求圆的周长

读入一个实数半径,输出圆的周长,保留两位小数。

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    double r;
    cin >> r;
    double c = 2 * 3.14159 * r;
    cout << fixed << setprecision(2) << c << endl;
    return 0;
}

半径可能是小数,所以声明为 double,用 cin 读入后直接参与运算。fixed 与 setprecision(2) 一起使用,表示以定点形式输出并保留两位小数,需要包含 iomanip 头文件。若去掉这两项,输出会按默认精度显示,可能得到很长的小数或科学计数法。这类「读入实数、按格式输出」的题目在一级中很常见,关键是类型选对、格式设置写全。

相关真题

这块内容在整条路线里的位置:GESP C++ 1 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

endl 和换行符有什么区别?

两者都能换行。endl 在换行之后还会刷新输出缓冲区,保证内容立即写出;换行符只负责换行。日常练习两者都可以用。

cin 能一次读入多个数据吗?

可以。cin >> a >> b 会依次读入两个数据,多个数据之间用空格或换行分隔都行,cin 会自动跳过这些空白字符。

为什么读入的字符把空格也读进去了?

cin >> 默认会跳过空白字符,包括空格、制表符和换行,所以读到的是第一个非空白字符。若确实需要读入包含空格的整行,需要换用整行读取的方式。

本级别其他知识点

官方依据