初中C班--大复习
2026-03-06 16:46:25
发布于:广东
C++大复习笔记
一、顺序结构
1. 输入输出
输入
cin >> a; // 标准输入,a为变量
cin >> a >> b; // 连续输入多个变量
输出
- cout方式(需包含iostream头文件):
cout << "hello"; // 输出字符串
cout << a; // 输出变量a的值
cout << a << " " << b; // 连续输出,可拼接
cout << endl; // 输出换行,等价于'\n'
- printf方式(使用占位符):
// 常用占位符
int -> %d
long long -> %lld
double -> %f 或 %lf(printf中%f和%lf通用,scanf需区分)
char -> %c
字符串 -> %s
int a = 10;
printf("%d", a);
// 保留小数且四舍五入
double a = 1.234567;
printf("%.2f", a); // 输出:1.23(保留两位小数,第三位四舍五入)
printf("%6.2f", a); // 输出:□1.23(总宽度6位,右对齐,空格补齐)
2. 数据类型
| 类型 | 关键字 | 数据范围 | 占用字节 |
|---|---|---|---|
| 整型 | int | -2,147,483,648 ~ 2,147,483,647 (-2×10⁹ ~ 2×10⁹) | 4字节 |
| 长整型 | long long | -9.22×10¹⁸ ~ 9.22×10¹⁸ | 8字节 |
| 字符型 | char | -128 ~ 127 或 0 ~ 255(ASCII码) | 1字节 |
| 单精度浮点 | float | ±3.4×10⁻³⁸ ~ ±3.4×10³⁸,有效位6-7位 | 4字节 |
| 双精度浮点 | double | ±1.7×10⁻³⁰⁸ ~ ±1.7×10³⁰⁸,有效位15-16位 | 8字节 |
| 布尔型 | bool | true(1) 或 false(0) | 1字节 |
注意事项:
- float精度较低,涉及小数运算建议使用double
- 判断浮点数相等时,应使用精度范围:
fabs(a - b) < 1e-6
布尔类型
bool a = true; // 真
bool b = false; // 假
// 在C++中,0为false,非0为true
int x = 5;
if (x) { // 条件成立,因为x非0
cout << "x为真";
}
// 逻辑运算结果
bool c = (5 > 3); // c = true
bool d = (5 == 3); // d = false
字符类型
char ch = 'A'; // 字符需用单引号
char num = '5'; // 字符数字,非整数5
3. 运算符
算术运算符:+ - * / %
/:整数相除得整数,如5/2=2%:取模(取余数),仅用于整数
赋值运算符:= += -= *= /= %=
a += 5; // 等价于 a = a + 5
关系运算符:> < >= <= == !=
- 结果为布尔值(true/false)
逻辑运算符:&& || !
&&:与(且),两边都真才真||:或,一边为真即为真!:非(取反)
自增自减:++ --
i++; // 先使用i,再自增
++i; // 先自增,再使用i
二、分支结构
1. 单分支 if
if (表达式) {
// 表达式结果为真(非0)时执行
}
2. 双分支 if...else
if (表达式) {
// 表达式为真时执行
} else {
// 表达式为假时执行
}
3. 多分支 if...else if...else
if (表达式1) {
// 表达式1为真时执行
} else if (表达式2) {
// 表达式1为假,表达式2为真时执行
} else if (表达式3) {
// 表达式1、2为假,表达式3为真时执行
} else {
// 以上条件均为假时执行(可选)
}
三、循环结构
1. while循环
适用场景:知道循环结束条件,但不确定循环次数
while (表达式) {
// 表达式为真时进入循环,为假时结束
}
// 示例:计算数字位数
int n = 12345, count = 0;
while (n > 0) {
n /= 10;
count++;
}
cout << "位数为:" << count;
2. for循环
适用场景:明确循环次数,需要计数变量
循环三要素:循环初值;循环条件;循环改变量
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
}
// 示例:输出1~20之间的奇数
for (int i = 1; i <= 20; i += 2) {
cout << i << " "; // 输出:1 3 5 7 9 11 13 15 17 19
}
// 示例:倒序输出
for (int i = 10; i >= 1; i--) {
cout << i << " "; // 10 9 8 ... 1
}
3. do...while循环
特点:先执行一次循环体,再判断条件,至少执行一次
do {
// 循环体
} while (表达式); // 注意分号
// 示例:至少输入一次,直到输入正确值
int password;
do {
cout << "请输入密码:";
cin >> password;
} while (password != 123456);
4. 循环控制语句
- break:跳出当前循环(整个循环结束)
- continue:跳过本次循环剩余部分,进入下一次循环
// break示例:找到第一个能被7整除的数
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
cout << i;
break; // 找到后立即结束循环
}
}
// continue示例:输出1~10中不是3的倍数的数
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue; // 跳过本次输出
}
cout << i << " "; // 输出:1 2 4 5 7 8 10
}
5. 无限循环
while (1) { } // 恒真,无限循环
for (;;) { } // 没有条件,无限循环
四、数组
1. 一维数组
定义数组
数据类型 数组名[常量表达式]; // 长度必须是常量,不能是变量
// 正确写法
int a[100]; // 静态分配
const int N = 110;
int b[N]; // 使用const常量
// 错误写法(某些编译器不支持)
// int n; cin >> n; int a[n]; // 这是C99的变长数组,C++不一定支持
// 处理100个数据,建议多预留空间
int arr[110]; // 多留5-10个位置,防止越界
初始化数组
int a[10] = {1, 3, 5, 7}; // 前4个元素赋值,其余为0
int b[] = {2, 4, 6, 8}; // 根据初始化列表自动确定长度为4
int c[5] = {0}; // 所有元素初始化为0
int d[5] = {}; // 所有元素初始化为0
访问数组
数组名[下标]; // 下标从0开始,最大为长度-1
a[0] = 10; // 给第一个元素赋值
int x = a[3]; // 访问第四个元素
遍历数组
int a[1010];
int n;
cin >> n;
// 从下标1开始存储(便于理解和题目对应)
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
// 输出
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
// 从下标0开始存储(C++标准习惯)
for (int i = 0; i < n; i++) {
cin >> a[i];
}
常见数组操作
// 求最大值
int maxVal = a[1];
for (int i = 2; i <= n; i++) {
if (a[i] > maxVal) {
maxVal = a[i];
}
}
// 求和
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += a[i];
}
// 查找元素
int target = 5, pos = -1;
for (int i = 1; i <= n; i++) {
if (a[i] == target) {
pos = i;
break;
}
}
2. 二维数组
定义二维数组
数据类型 数组名[行数][列数];
int a[110][110]; // 110行110列
int matrix[3][4]; // 3行4列
初始化二维数组
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int b[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // 按行连续存储
int c[3][4] = {{1}, {2, 3}}; // 部分初始化:c[0][0]=1, c[1][0]=2, c[1][1]=3,其余为0
访问二维数组
a[i][j]; // 第i行第j列元素(行和列通常从0或1开始)
遍历二维数组
// n行m列的二维数组遍历(下标从1开始)
int a[110][110];
int n, m;
cin >> n >> m;
// 输入
for (int i = 1; i <= n; i++) { // 遍历行
for (int j = 1; j <= m; j++) { // 遍历列
cin >> a[i][j];
}
}
// 输出
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << a[i][j] << " ";
}
cout << endl; // 每行结束后换行
}
3. 循环嵌套
for (int i = 1; i <= n; i++) { // 外层循环控制行
for (int j = 1; j <= m; j++) { // 内层循环控制列
// 执行n×m次
}
}
// 外行内列
示例1:输出n行m列的*号
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << "*";
}
cout << endl; // 每行结束换行
}
示例2:输出直角三角形
// 输出:
// *
// **
// ***
// ****
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= i; j++) {
cout << "*";
}
cout << endl;
}
五、常见问题与技巧
1. 数组越界
- 定义数组时预留足够空间(+5或+10)
- 访问时确保下标在有效范围内
2. 变量初始化
- 局部变量不会自动初始化,使用前务必赋值
- 全局变量会自动初始化为0
3. 数据类型选择
- 数据范围超过2×10⁹时用long long
- 需要精确小数用double
- 存储字符用char
- 存储逻辑状态用bool
全部评论 1
可以加我的团队吗
我和“百大游戏讨论组(团赛得奖免费拿皮肤)”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!https://www.acgo.cn/application/19530160911278243841周前 来自 广东
0





















有帮助,赞一个