← 练习册目录

第 1 章 先让程序跑起来

red wenzi · 2026-09-15 · 编程语言 · C++ · 练习册 · 16 题
📝 本章练习:16 题(A 识别 / B 理解 / C 改错 / D 写程序)。先自己做完再看答案——A、B 档不翻书做,C、D 档必须真的编译运行。

1.1 第一个程序

A1识别判断题:#include <iostream> 使用尖括号,表示去“系统头文件目录”寻找头文件。

答:______________

✅ 查看答案与解析

答案 对

解析:尖括号表示去系统目录找;写成 #include "my.h"(双引号)才表示先找当前目录。

A2识别判断题:main 函数的返回类型可以省略不写。

答:______________

✅ 查看答案与解析

答案 错

解析:返回类型必须是 int。C++ 允许省略末尾的 return 0(等价于返回 0),但 int 这个类型不能省。

B1理解选择题:下面哪个写法能正确输出 Hello 并换行?

cout << "Hello" << endl;

std::cout << "Hello" << std::endl;

std::cout >> "Hello";

std::cout << Hello;

答:______________

✅ 查看答案与解析

答案 B

解析:A 缺 std:: 前缀;C 的 >> 方向反了(<< 才是插入运算符);D 的 Hello 没有加引号,会被当成变量。

C1应用改错题:下面程序有两处错误,找出来并改正。
#include <iostream>
int main() {
    std::cout >> "Hello, C++" << std::endl
    return 0;
}
✅ 查看答案与解析

答案 两处:① >> 应为 <<;② 第一行语句末尾缺分号。

解析:正确写法:

std::cout << "Hello, C++" << std::endl;
return 0;
D1创造写程序:第一行输出你的名字,第二行输出“开始学 C++ 啦”,两行都要换行。写完后用 g++ 编译运行。

提示:用 #include <iostream>;每行用 std::cout 输出,结尾用 '\n' 或 std::endl 换行。

✅ 查看答案与解析

答案 参考答案:

解析:'\n' 是换行字符;注意字符串里用双引号包住中文内容。

#include <iostream>
int main() {
    std::cout << "你的名字" << '\n';
    std::cout << "开始学 C++ 啦\n";
    return 0;
}

1.2 输入输出

A1识别判断题:std::cin >> n 会自动跳过空格、换行、制表符等空白字符。

答:______________

✅ 查看答案与解析

答案 对

解析:>> 的默认行为就是跳过所有空白,所以 cin >> a >> b 可以连着读多个数。

A2识别判断题:要读入一整行文字(包括空格),应该用 std::getline。

答:______________

✅ 查看答案与解析

答案 对

解析:cin >> s 遇到空白就停;getline 一直读到换行符为止,能保留空格。

B1理解选择题:输入是 hello world(中间一个空格),执行 std::cin >> s;(s 是 std::string),s 的值是?

"hello world"

"hello"

"world"

空串

答:______________

✅ 查看答案与解析

答案 B

解析:>> 遇到空白就停,所以只读到 hello。要读整行必须用 getline。

B2理解选择题:先执行 std::cin >> n;(n 是 int),紧接着执行 std::getline(std::cin, line);,line 会读到什么?

下一行完整内容

空串

上一行剩下的内容

编译错误

答:______________

✅ 查看答案与解析

答案 B

解析:>> 读完数字后把换行符留在缓冲区里,getline 第一眼看到换行符就直接结束,所以读到空串。解决:先 std::cin.ignore(); 吃掉遗留的换行。

C1应用改错题:程序想先读一个整数 n,再读一行文字 line,但 line 永远是空的。
int n;
std::cin >> n;
std::string line;
std::getline(std::cin, line);
std::cout << line << '\n';
✅ 查看答案与解析

答案 在 getline 之前加一行:std::cin.ignore();,把 >> 遗留的换行符吃掉。

解析:>> 不会消耗换行符,ignore() 专门用来丢弃它。这是 cin 和 getline 混用时的经典坑。

D1创造写程序:读入两个整数 a 和 b,输出它们的和。

提示:std::cin >> a >> b; 然后 std::cout << a + b;

✅ 查看答案与解析

答案 参考答案:

解析:输出别忘了换行符。

#include <iostream>
int main() {
    int a, b;
    std::cin >> a >> b;
    std::cout << a + b << '\n';
    return 0;
}

1.3 编译命令与报错

A1识别判断题:编译时加上 -Wall -Wextra 能打开大部分警告,C++ 里很多错误只以警告形式出现。

答:______________

✅ 查看答案与解析

答案 对

解析:手册反复强调:-Wall -Wextra 一定要一直开着,很多隐患(如未使用变量、符号比较)编译器早就看出来了。

A2识别判断题:编译期看声明,链接期看定义。“某个函数到底有没有被实现”是在链接阶段检查的。

答:______________

✅ 查看答案与解析

答案 对

解析:编译每个 .cpp 只看得见它自己的声明;把所有目标文件拼起来时(链接),才检查函数定义是否存在。

B1理解选择题:程序报了一长串错误,正确的读法是?

先看最后一条,通常最重要

先看第一条,后面的错误经常是第一条引发的连锁反应

随便挑一条看

直接重写程序

答:______________

✅ 查看答案与解析

答案 B

解析:先看第一条,先看文件名和行号,再看描述。编译器提示的位置有时会偏移一行(如“缺分号”指的是上一行末尾)。

C1应用改错题:main.cpp 调用了别的文件里的函数,但只编译 main.cpp 时报错 undefined reference to 'foo()'。
g++ -std=c++17 main.cpp   # 报 undefined reference
✅ 查看答案与解析

答案 把定义 foo 的源文件一起编译:g++ -std=c++17 main.cpp util.cpp -o app

解析:undefined reference 是链接错误:声明存在但定义没被链接进来。把所有 .cpp 一起交给 g++ 即可。

D1创造写程序:输出 “Hello, C++”,然后用带 -Wall -Wextra 的命令编译,确认零警告零错误。

提示:命令:g++ -std=c++17 -Wall -Wextra -o hello hello.cpp

✅ 查看答案与解析

答案 参考答案:

解析:编译命令里 -std=c++17 指定标准,-Wall -Wextra 打开警告。

#include <iostream>
int main() {
    std::cout << "Hello, C++" << '\n';
    return 0;
}
📚 相关概念:编译与链接 · STL · map / set · 迭代器