【GESP】C++一级考试大纲知识点梳理, (3) 变量、数据类型与输入输出
编程的核心在于处理数据。本篇涵盖了 GESP 一级考试中最核心的计算部分:如何定义数据、输入输出数据以及对数据进行算术运算。涉及大纲考点 3、5、6、9。
(3)掌握基础的 cin 语句、scanf 语句、cout 语句、printf 语句,赋值语句等。
(5)掌握常量与变量的命名、定义、作用、初始化与赋值以及变量的自加与自减运算。
(6)掌握基础算术表达式:加、减、乘、除、整除、求余。
(9)掌握基础的数据类型的定义和使用(整型、实数型、字符型、布尔型)。
一、基础数据类型
对应考点:(9)掌握基础的数据类型的定义和使用。
C++ 是强类型语言,每个变量都必须先声明类型才能使用。一级考试重点掌握以下四种数据类型:
| 类型名称 | 关键字 | 说明 | 示例 | 占用空间 (常用) | 数据范围 (近似) |
|---|---|---|---|---|---|
| 整型 | int | 存储整数 | 10, -5 | 4 字节 | $-2^{31} \sim 2^{31}-1$ (约 $\pm 2 \times 10^9$) |
| 实数型 | float / double | 存储小数 | 3.14, -0.5 | 4/8 字节 | float: $\pm 3.4 \times 10^{38}$ (6~7位有效)double: $\pm 1.7 \times 10^{308}$ (15~16位有效) |
| 字符型 | char | 存储单个字符 | 'A', '1' | 1 字节 | $-128 \sim 127$ |
| 布尔型 | bool | 存储真假 | true | 1 字节 | 0 或 1 |
💡 建议:在处理小数时,首选
double。
- 范围 vs 精度:
10^308是指它能存多大(比如 $1 \times 10^{300}$ 这么大的数);而“15-16位有效”是指它能存多准。- 举例:你能存下 $1.234567890123456 \times 10^{100}$ 这么大的数,但只能保证前面 16 个数字是对的,后面 84 个 0 其实只是占位符,并不精确。这就是“大”和“准”的区别。
二、变量的操作
对应考点:(5)掌握常量与变量的命名、定义、作用、初始化与赋值以及变量的自加与自减运算。
变量就像我们用来装数据的“盒子”。
2.1 定义、初始化与赋值
1
2
3
4
int a; // 1. 定义:申请一个名为 a 的整型盒子
a = 10; // 2. 赋值:把 10 放入盒子 a 中
int b = 20; // 3. 定义并初始化:申请盒子 b 的同时放入 20
2.2 自加与自减
这是 C++ 中的“懒人神器”,用于让变量自己增加或减少 1。
a++或++a:等价于a = a + 1;a--或--a:等价于a = a - 1;
2.3 前缀与后缀的区别(进阶)
虽然 a++ 和 ++a 单独写一行时效果一样,但在赋值表达式中意义完全不同:
b = ++a(先加后用):先把a加 1,再把新值赋给b。b = a++(先用后加):先把a的旧值赋给b,用完后a再偷偷加 1。
1
2
3
4
5
6
7
int a = 10, b;
b = ++a; // a变成11, b也是11
cout << a << " " << b << endl; // 输出: 11 11
a = 10;
b = a++; // b得到10(旧值),然后a变成11
cout << a << " " << b << endl; // 输出: 11 10
三、输入与输出 (I/O)
对应考点:(3)掌握基础的 cin 语句、scanf 语句、cout 语句、printf 语句,赋值语句等。
C++ 提供了两套输入输出方式,都需要掌握。
3.1 C++ 风格 (cin / cout)
使用 <iostream> 头文件。特点是简单、智能,会自动识别类型。
- 输入
cin:使用>>(流提取运算符)。1 2 3
int x; cin >> x; // 读入一个整数 cin >> a >> b; // 连续读入两个变量
- 输出
cout:使用<<(流插入运算符)。1
cout << "x 的值是:" << x << endl; // endl 表示换行
3.2 C 风格 (scanf / printf)
使用 <cstdio> 头文件。特点是快、格式控制精确。必须牢记格式占位符。
- 常用占位符:
%d:int(整数)%lld:long long(长整数)%f:float(单精度浮点数)%lf:double(双精度浮点数) —— 输入时必须用%lf,输出用%f或%lf%c:char(字符)
- 输入
scanf:注意变量名前要加&(取地址符)。1 2
int x; scanf("%d", &x);
- 输出
printf:1 2 3 4
printf("x 的值是:%d\n", x); // \n 表示换行 // 技巧:保留 2 位小数 double pi = 3.14159; printf("%.2f", pi); // 输出 3.14
四、基础算术运算
对应考点:(6)掌握基础算术表达式:加、减、乘、除、整除、求余。
计算机就是用来计算的。C++ 支持常见的数学运算。
| 运算符 | 含义 | 示例 | 结果 | 注意事项 |
|---|---|---|---|---|
+ | 加法 | 3 + 2 | 5 | |
- | 减法 | 3 - 2 | 1 | |
* | 乘法 | 3 * 2 | 6 | |
/ | 除法 | 5 / 2 | 2 | 整数除以整数,结果还是整数(向下取整) |
5.0 / 2 | 2.5 | 如果有一方是小数,结果就是小数 | ||
% | 求余 (模运算) | 5 % 2 | 1 | 只能用于整数。5 除以 2 商 2 余 1 |
案例分析:整数除法陷阱
1
2
3
int a = 5, b = 2;
double c = a / b;
cout << c << endl; // 输出 2,而不是 2.5!
原因:a 和 b 都是整数,a / b 执行的是整数除法,得到 2。然后再把 2 赋值给 double 类型的 c,变成 2.0。 修正:double c = 1.0 * a / b; 或者 double c = (double)a / b;
五、综合练习代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
// 任务:输入圆的半径 r (整数),输出圆的周长 (保留2位小数)
// 提示:周长 = 2 * pi * r,pi 取 3.14159
int r;
const double PI = 3.14159;
// 输入
cin >> r;
// 计算
double c = 2 * PI * r;
// 输出
printf("圆的半径是:%d,周长是:%.2f\n", r, c);
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
