初赛考前笔记
编程基础知识点
1. 变量的定义规则
- 不能使用关键字,如:
int do max
- 不能数字开头,如:
1a,2c
- 不能使用特殊符号,
_
除外。如_a
是可以的 - 区分大小写。如
a,A
是可以的
2. 数据类型
数据类型 | 描述 |
---|---|
int | 整数 |
long long | 长整数 |
float | 浮点数 |
double | 双精度浮点数 |
bool | 布尔类型 |
char | 字符类型 |
string | 字符串 |
3. 一维数组
int a[5] = {1, 2, 3, 5, 4}; // a[0] = 1
int b[5] = {1}; // 没写的默认为 0
int c[] = {1, 2, 3};
int d[6];
4. 二维数组
int a[3][4];
int b[3][4] = {0, 1}; // a[0][0] = 0, a[0][1] = 1
int c[2][3] = {0, 1, 2, 3, 4, 5};
int d[2][3] = {{1, 2, 4}, {5, 5, 6}};
int e[][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
5. 例题
1)判断偶数
if (n % 2 == 0)
cout << "yes";
else
cout << "no";
2)判断闰年
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
cout << "闰年";
else
cout << "平年";
3)与7相关(7的倍数或者个位包含7)
if (n % 7 == 0 || n % 10 == 7)
cout << "yes";
else
cout << "no";
4)输出n的因数(从小到大)
for (int i = 1; i <= n; i++) {
if (n % i == 0)
cout << i << " ";
}
5)输出n的因数(从大到小)
for (int i = n; i >= 1; i--) {
if (n % i == 0)
cout << i << " ";
}
6)判断n是否是质数
bool su(int n) {
if (n == 1)
return 0; // 不是质数
for (int i = 2; i * i <= n; i++) { // 条件:i <= sqrt(n)
if (n % i == 0)
return 0; // 不是质数
}
return 1;
}
7)逆序输出
(1)
int n = 1230;
while (n > 0) {
cout << n % 10;
n = n / 10;
}
(2)
int n = 1230, s = 0;
while (n > 0) {
s = s * 10 + n % 10;
n = n / 10;
}
cout << s;
6. 字符串和字符串函数
string a, b; // 字符串
cin >> a; // 不带空格的输入
getline(cin, a); // 带空格的输入。输入一行
// 下标 0 ~ a.size() - 1
for (int i = 0; i < a.size(); i++) {
if (a[i] >= 'A' && a[i] <= 'Z')
a[i] += 32;
else if (a[i] >= 'a' && a[i] <= 'z')
a[i] -= 32;
else if (a[i] >= '0' && a[i] <= '9')
cout << "sz";
else
cout << "fh"; // 符号
}
字符串操作函数
操作 | 代码 |
---|---|
查找下标 | int k = a.find(b, pos); // 从 a[pos] 开始找 b |
插入 | a.insert(pos, b); // 在 a[pos] 位置前面插入 b |
删除 | a.erase(pos, len); // 从 pos 位置开始删除长度为 len 的字符串 |
替换 | a.replace(pos, len, b); // 从 a[pos] 开始,把长度为 len 的字符串替换成 b |
提取 | string b = a.substr(pos, len) // 把 a 字符串中 pos 开始,长度为 len 的字符串提取出来给 b |
以下是将你提供的内容转换为Markdown格式的内容:
常见10大易错点
1. 标识符合法性
- 规则:标识符只能由字母、数字、下划线组成,且不能以数字开头;连字符
-
、特殊符号均非法。
2. 关键字与标准库名
- 关键字:
do
、for
、while
等才是语言关键字。 - 标准库标识符:
cin
、cout
、endl
、abs
只是库标识符,不是关键字。
3. 整数运算中的截断与优先级
/
与%
同级、左结合。- 所有操作在
int
范围内先截断再继续运算。
4. printf
/scanf
宽度与格式符
- 区别:
%2d
与%02d
不同。%2d
:宽度为2,右对齐。%02d
:宽度为2,左填充0。
- 错误示例:读浮点数却用
%d
会把3.6
读成3
。
5. 单/双引号、字符串常量
- 规则:双引号不能随意替换为单引号。
- 错误示例:不能使用“三个双引号”表示字符串。
6. continue
与break
的语义
- **
continue
**:仅跳过本次循环余下语句,不结束整个循环。 - **
break
**:结束整个循环。 - 区别:两者概念不同。
7. 逗号运算符导致的输出顺序误判
- 示例:
但(a = 3, b = 5) // 结果为5
cout << a << b;
仍按变量顺序输出3 5
。
8. 自增/自减 & 循环终值
- 作用点不同:
i++
:先使用i
的值,再自增。++i
:先自增,再使用i
的值。
- 循环边界问题:容易出现off-by-one错误,导致结果多/少一次。
9. 逻辑表达式短路与取反
- 取反示例:
!(i % 2)
判断偶数。!(i % 7)
判断能被7整除。
- 组合条件:需防止短路误解。
10. 变量作用域与首次出现位置
- 问题:在
if/else
链或多重循环里声明的变量,其可见性、生命周期经常被忽视。 - 后果:可能引发编译错误或意外结果。
希望以上内容对你有帮助!