第 3 课:第一个 C++ 程序与输出
本课学习目标: 1. 读懂最简单的 C++ 程序结构,认识
main函数是程序执行的入口。 2. 掌握cout语句的用法,会输出文字、数字、变量和表达式。 3. 掌握printf语句的用法,会使用%d、%%以及%2d / %02d格式控制。 4. 彻底分清双引号以内(原样输出)与双引号以外(计算/找变量值)的巨大区别。 5. 掌握空格、换行(endl/\n)的控制方式。
一、 一个最完整的最小 C++ 程序
先看一段经典的 C++ 基础代码:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, GESP!";
return 0;
}
运行后输出:
Hello, GESP!
逐行拆解:
#include <iostream>:引入输入输出流头文件。以后只要用了cout或cin,就必须写这一行。using namespace std;:使用标准命名空间。有了它,我们才能直接写cout,否则需要写成繁琐的std::cout。int main() { ... }:主函数。它是整个程序执行的唯一入口,计算机运行程序时会从main里面第一行开始执行。return 0;:表示程序正常结束。
二、 顺序结构:从上到下执行
C++ 程序中的语句默认是按照从上到下的顺序依次执行的。
int main() {
cout << "A";
cout << "B";
cout << "C";
return 0;
}
- 输出结果:
ABC(三者连在一起,因为中间没有写空格或换行)。
三、 使用 cout 进行输出
cout 是 C++ 最常用的输出工具,使用 << 符号连接输出内容。
1. 输出文字(加双引号)
- 双引号包裹的内容叫字符串常量。双引号里的内容会原样输出,双引号本身不打印。
- 代码:
cout << "Hello";➡️ 输出:Hello - 陷阱题:
cout << "a+b";➡️ 输出:a+b(里面是文字,不会去计算加法)。
2. 输出数字(不加双引号)
- 代码:
cout << 123;➡️ 输出:123(数字直接写,代表数值本身)。
3. 连续输出多个内容
- 用多个
<<连起来: - 代码:
cout << "3+4=" << 3 + 4; - 输出:
3+4=7 - 解析:
"3+4="在双引号内,原样输出;后面的3 + 4在双引号外,计算出结果7。
四、 🚨 核心考点:双引号内外的区别(丢分重灾区)
考试中最喜欢考学生能不能分清双引号里面和外面:
| 代码写法 | 输出结果 | 核心原因 |
|---|---|---|
int a = 3, b = 4;cout << "a+b=" << a + b; |
a+b=7 |
"a+b="在双引号内原样输出;a+b在双引号外,计算变量和结果为 7。 |
int a = 3, b = 4;cout << "a+b=a+b"; |
a+b=a+b |
所有内容都在双引号内,程序只当成普通文字,完全不计算。 |
int N = 10;cout << "N*N"; |
N*N |
双引号内原样输出,不会输出 100。 |
int N = 10;cout << N * N; |
100 |
没有双引号,计算变量表达式的值。 |
💡 避坑口诀:“双引号内原样抄,双引号外求数值”。
五、 空格与换行的控制
- 空格:
- 写在双引号里的空格会直接输出(如
cout << "Hello GESP";)。 - 也可以单独输出空格:
cout << "Hello" << " " << "GESP"; - 换行:
- 方法 1:使用
endl➡️cout << "Hello" << endl; cout << "GESP"; - 方法 2:在字符串中使用
\n➡️cout << "Hello\nGESP"; - 两者效果相同,都会让光标跳到下一行。
- 注意:输出语句之间不会自动加空格,也不会自动换行!
六、 进阶:使用 printf 输出(C 风格输出)
GESP 一级真题非常喜欢考 C 风格的 printf,尤其是格式化占位符。使用时需包含头文件 #include <cstdio>。
1. 基本占位符 %d(输出整数)
int a = 10;
printf("%d", a); // 输出 10
- 多变量对应:
cpp int a = 3, b = 4; printf("%d+%d=%d", a, b, a + b); // 输出 3+4=7前面的三个%d严格按顺序对应后面的变量a、b、a + b。
2. 输出百分号 %%
在 printf 的双引号中,% 有特殊用途(用来引导 %d)。如果你想在屏幕上打印一个真正的 % 符号,必须写成两个百分号 %%。
* 代码:printf("5%%2=%d", 5 % 2);
* 输出:5%2=1
3. 宽度控制与补零(高频难点)
%2d:代表输出的整数至少占 2 个字符宽度。如果数字本身只有 1 位,前面会补一个空格。printf("%2d", 3);➡️ 输出:3(前面有 1 个空格)%02d:代表输出的整数至少占 2 个字符宽度,如果不足 2 位,前面补数字 0。printf("%02d", 3);➡️ 输出:03printf("%02d%02d", 3, 22);➡️ 输出:0322
七、 GESP 一级真题与例题精讲
练一练 1:printf 里的百分号转义
【题目】 下面程序的输出是()。
#include <cstdio>
int main() {
printf("5%%2={%d}\n", 5 % 2);
return 0;
}
A. 1={1}
B. 5%2={5%2}
C. 5%2={1}
D. 5 ={1}
正确答案:C 名师解析:
%%在printf中会折叠输出一个普通的%,所以5%%2=会变成5%2=;后面的%d对应5 % 2的计算结果1;大括号{}是普通字符原样输出。合起来就是5%2={1}。
练一练 2:%02d 宽度补零
【题目】 下面程序的输出是()。
#include <cstdio>
int main() {
printf("%02d%02d", 3, 22);
return 0;
}
A. 322
B. 0322
C. 3022
D. 003022
正确答案:B 名师解析: 第一个格式控制符是
%02d,数字3不足两所以在前面补0,变成03;第二个是%02d,数字22刚好两位,输出22。合起来就是0322。
练一练 3:cout 陷阱辨析
【题目】 下面程序的输出是()。
#include <iostream>
using namespace std;
int main() {
int N = 10;
cout << "N*N=" << N * N;
return 0;
}
A. N*N=100
B. 100=100
C. N*N=N*N
D. 10*10=100
正确答案:A 名师解析:
"N*N="在双引号内,所以原样输出N*N=;而后面的N * N在双引号外,计算变量乘积得到100。连起来即为N*N=100。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com