初赛考前笔记

编程基础知识点

1. 变量的定义规则

  1. 不能使用关键字,如:int do max
  2. 不能数字开头,如:1a,2c
  3. 不能使用特殊符号_ 除外。如 _a 是可以的
  4. 区分大小写。如 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. 关键字与标准库名

  • 关键字doforwhile等才是语言关键字。
  • 标准库标识符cincoutendlabs只是库标识符,不是关键字。

3. 整数运算中的截断与优先级

  • /%同级、左结合。
  • 所有操作在int范围内先截断再继续运算。

4. printf/scanf宽度与格式符

  • 区别%2d%02d不同。
    • %2d:宽度为2,右对齐。
    • %02d:宽度为2,左填充0。
  • 错误示例:读浮点数却用%d会把3.6读成3

5. 单/双引号、字符串常量

  • 规则:双引号不能随意替换为单引号。
  • 错误示例:不能使用“三个双引号”表示字符串。

6. continuebreak的语义

  • **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链或多重循环里声明的变量,其可见性、生命周期经常被忽视。
  • 后果:可能引发编译错误或意外结果。

希望以上内容对你有帮助!