2025年莆田市专项选拔赛3月份C++线上考试第一轮考察范围、知识总结、常用函数总结、高频易错点和注意事项

二、各知识点详细总结
(一)顺序结构

顺序结构是程序执行的基本结构,代码按照编写的顺序依次执行。这部分主要涉及变量的定义、数据的输入输出以及基本的算术运算。

  • 变量定义:明确不同数据类型(如 intfloatdoublechar 等)的变量定义方式,例如 int a = 10;
  • 数据输入输出:使用 cin 和 cout 进行标准输入输出操作,如 cin >> a; 和 cout << a << endl;
  • 算术运算:掌握加(+)、减(-)、乘(*)、除(/)、取模(%)等基本运算符的使用。
(二)选择结构

选择结构用于根据条件判断来决定程序的执行路径,主要包括 if - else 语句和 switch - case 语句。

  • if - else 语句:根据条件的真假执行不同的代码块,例如:

cpp

if (a > 10) {
    cout << "a 大于 10" << endl;
} else {
    cout << "a 小于等于 10" << endl;
}
  • switch - case 语句:用于多分支选择,根据表达式的值选择相应的 case 分支执行,例如:

cpp

switch (day) {
    case 1:
        cout << "星期一" << endl;
        break;
    case 2:
        cout << "星期二" << endl;
        break;
    default:
        cout << "其他" << endl;
}
(三)循环结构

循环结构用于重复执行一段代码,常见的有 for 循环、while 循环和 do - while 循环。

  • for 循环:适用于已知循环次数的情况,例如:

cpp

for (int i = 0; i < 10; i++) {
    cout << i << endl;
}

  • while 循环:在条件为真时持续循环,例如:

cpp

int i = 0;
while (i < 10) {
    cout << i << endl;
    i++;
}
  • do - while 循环:至少执行一次循环体,然后再判断条件,例如:

cpp

int i = 0;
do {
    cout << i << endl;
    i++;
} while (i < 10);
(四)数组

数组是一组相同数据类型元素的集合,可用于存储多个数据。

  • 一维数组:定义和使用一维数组,如 int arr[10]; ,并能对数组元素进行访问和操作。
  • 二维数组:理解二维数组的概念和使用,如 int arr[3][4]; ,可用于处理矩阵等数据。
三、常见函数总结
(一)输入输出相关函数
  • cin:用于从标准输入读取数据,如 cin >> num; 。
  • cout:用于向标准输出打印数据,如 cout << "Hello, World!" << endl; 。
  • endl:用于换行并刷新输出缓冲区。
(二)数学相关函数
  • abs():求 整数 的绝对值,需要包含 <cstdlib> 头文件,如 int abs_num = abs(-10); 。
  • fabs():计算 浮点数 的绝对值,函数原型为 double fabs(double x);
  • sqrt():求平方根,需要包含 <cmath> 头文件,如 double sqrt_num = sqrt(16); 。
  • pow(x,y):计算 (x的y次方) ,函数原型为 double pow(double x, double y);。例如计算 (2^3) :
  • ceil():向取整,返回不小于 x 的最小整数。函数原型为 double ceil(double x);。例如 ceil(3.2) 返回 4.0。
  • floor():向取整,返回不大于 x 的最大整数。函数原型为 double floor(double x);。例如 floor(3.8) 返回 3.0。
  • max(a, b) 返回 a 和 b 中的最大值
  • min(a, b) 返回 a 和 b 中的最小值。
(三)数组相关函数
  • sort():对数组元素进行排序,需要包含 <algorithm> 头文件,如 sort(arr, arr + n); (n 为数组元素个数)。

字符数组:

  • strlen(s):计算字符串的长度(不包含 '\0')。
  • strcpy(s1,s2):将一个字符串复制到另一个字符数组中。
  • strcmp(s1,s2):比较两个字符串的大小,若相等返回 0;若第一个字符串小于第二个字符串,返回负数;若第一个字符串大于第二个字符串,返回正数。
  • strcat(s1,s2):将一个字符串追加到另一个字符数组的末尾。
<string> 头文件中的函数(用于 std::string
  • length() 或 size():返回字符串的长度。
  • append():将一个字符串追加到另一个字符串的末尾。
  • substr():返回字符串的子串。
  • find():查找子串在字符串中第一次出现的位置,若未找到返回 std::string::npos
  • 字符处理函数
    • isdigit():判断一个字符是否为数字,需要包含 <cctype> 头文件,如 char ch = '5'; if (isdigit(ch)) { cout << "是数字" << endl; } 。
    • isalpha():判断一个字符是否为字母,需要包含 <cctype> 头文件。
    • isupper():判断一个字符是否为大写字母。
      islower():判断一个字符是否为小写字母。
      isspace():判断一个字符是否为空白字符(如空格、制表符等)。

    • toupper():将小写字母转换为大写字母。
    • tolower():将大写字母转换为小写字母。

例子:

#include <iostream>
#include <cstring>
#include <string>

int main() {
    // 使用 <cstring> 头文件中的函数(C 风格字符串)

    // strlen() 示例
    const char cstr[] = "Hello";
    size_t len = strlen(cstr);
    std::cout << "C 风格字符串 \"Hello\" 的长度是: " << len << std::endl;

    // strcpy() 示例
    char dest[10];
    strcpy(dest, cstr);
    std::cout << "复制后的 C 风格字符串: " << dest << std::endl;

    // strcmp() 示例
    const char cstr1[] = "Apple";
    const char cstr2[] = "Banana";
    int cmpResult = strcmp(cstr1, cstr2);
    if (cmpResult == 0) {
        std::cout << "C 风格字符串 \"" << cstr1 << "\" 和 \"" << cstr2 << "\" 相等。" << std::endl;
    } else if (cmpResult < 0) {
        std::cout << "C 风格字符串 \"" << cstr1 << "\" 小于 \"" << cstr2 << "\"。" << std::endl;
    } else {
        std::cout << "C 风格字符串 \"" << cstr1 << "\" 大于 \"" << cstr2 << "\"。" << std::endl;
    }

    // strcat() 示例
    char str3[20] = "Hello";
    const char str4[] = " World";
    strcat(str3, str4);
    std::cout << "追加后的 C 风格字符串: " << str3 << std::endl;


    // 使用 <string> 头文件中的函数(std::string)

    std::string s1 = "Hello";
    std::string s2 = " World";

    // length() 或 size() 示例
    std::cout << "std::string 类型字符串 \"Hello\" 的长度是: " << s1.length() << std::endl;
    std::cout << "std::string 类型字符串 \"Hello\" 的长度(使用 size())是: " << s1.size() << std::endl;

    // append() 示例
    std::string s3 = s1;
    s3.append(s2);
    std::cout << "追加后的 std::string 类型字符串: " << s3 << std::endl;

    // substr() 示例
    std::string sub = s3.substr(6, 5);
    std::cout << "从位置 6 开始长度为 5 的子串是: " << sub << std::endl;

    // find() 示例
    size_t pos = s3.find("World");
    if (pos != std::string::npos) {
        std::cout << "子串 \"World\" 在字符串中第一次出现的位置是: " << pos << std::endl;
    } else {
        std::cout << "未找到子串 \"World\"。" << std::endl;
    }

    return 0;
}    

  • 四、高频易错点与注意事项
  • 1. 单位与精度

  • 时间转换:秒→时:分:秒需用 / 和 %

  • 浮点运算:避免直接比较浮点数,改用误差范围(如abs(a - b) < 1e-6)。

  • 2. 边界条件

  • 循环边界:如n=0时的天数处理。

  • 数组索引:从0还是1开始。

五、重点考察内容
  • 逻辑思维能力:能够运用选择结构和循环结构解决实际问题,如判断闰年、计算阶乘等。
  • 数组的应用:掌握一维数组和二维数组的定义、初始化、访问和操作,如数组元素的查找、排序等。
  • 代码的规范性和可读性:注意变量命名规范、代码注释和缩进,使代码易于理解和维护。

    需要C++信奥赛学习资料和视频评论区沟通,会及时回复!

    往年真题总结:

    2024年莆田市第四期第一轮线上遴选题型总结


    1. 光阴似箭(时间计算)
    • 类型:模拟、数学计算

    • 知识点:时间循环处理、取模运算

    • 关键点

      • 将总分钟数 b + s 转换为小时和分钟,注意取模运算处理循环(24小时制)。

      • 大数处理:当 s 达到 1e9 时,需避免逐次累加,应直接计算总分钟数后取模。

    • 解法

      total = (a * 60 + b + s) % (24 * 60)
      hours = total / 60
      minutes = total % 60

    2. 日月如梭(班长选举)
    • 类型:数学、逻辑判断

    • 知识点:极值问题、条件推导

    • 关键点

      • 每位候选人需满足:新票数 > 其他两位的当前票数。

      • 公式推导:假设候选人当前票数为 x,其他两人票数为 y 和 z,则需 x + delta > max(y, z)

    • 解法
      对每个候选人计算 max(0, max(其他两人票数) - 当前票数 + 1)


    3. 倒水(模拟操作)
    • 类型:模拟、状态转移

    • 知识点:条件判断、循环优化

    • 关键点

      • 按规则模拟每次操作,注意大次数 k 的优化(循环周期检测)。

      • 可能进入循环状态,需找到规律避免逐次计算。

    • 解法
      直接模拟每次操作,但需记录状态(当前水量)以检测循环,减少计算次数。


    4. 硬币(组合计数)
    • 类型:双指针、排序、二分查找

    • 知识点:组合数学、前缀和

    • 关键点

      • 对两堆硬币分别排序,固定一堆元素,在另一堆中找满足条件的最大值。

      • 使用二分或双指针优化时间复杂度至 O(n log n + m log m)

    • 解法
      排序后,对第一堆的每个元素 b_i,在第二堆中找到最大的 c_j 使得 b_i + c_j <= k,累加合法数量。


    2023年莆田市第三期第一轮线上遴选真题题型总结


    1. 面积(数学计算)
    • 类型:数学、几何

    • 知识点:长方形周长与面积公式

    • 关键点

      • 周长 c = 2*(a + b),另一边为 c/2 - a,面积 a * (c/2 - a)

    • 解法:直接代入公式计算。


    2. 数位积(循环计算)
    • 类型:模拟、数位分解

    • 知识点:循环分解数位、连乘

    • 关键点

      • 每次将数位相乘,直到结果为个位数。注意处理中间结果含 0 的情况(直接终止)。

    • 解法:循环分解数位并计算乘积,记录次数。


    3. 排队(数据结构)
    • 类型:队列、链表

    • 知识点:动态调整队列、高效删除与插入

    • 关键点

      • 使用双向链表或哈希表记录元素位置,避免每次遍历队列。

      • 时间复杂度需优化至 O(m + n)

    • 解法:用双向链表维护队列,哈希表记录节点指针,直接移动节点到末尾。


    4. 快递费(模拟、条件计算)
    • 类型:模拟、条件判断

    • 知识点:体积重量计算、分段计费

    • 关键点

      • 根据包装箱尺寸计算体积重量,与实际重量比较取最大值。

      • 首重10元,续重每0.5kg加2元(向上取整)。

    • 解法

      1. 选择能容纳快递的最小包装箱型号。

      2. 计算计费重量 CW = max(AW + 箱重, VW + 箱重)

      3. 按计费规则分段计算费用。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值