火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

GESP 一级编程能力认证讲义

作者: 作者的头像   huolong , 时间:2026-08-07 21:28:44 , 所有人可见, 阅读  2

GESP 一级编程能力认证深度讲义

第一模块:计算机基础与变量类型

1. 知识点拆解

  • 硬件常识:存储单位换算($1KB = 1024B$, $1MB = 1024KB$)。
  • 变量本质:变量是内存中一块存储数据的空间。
  • 数据类型细节:
    • int: 整数(常用范围约 $\pm 2 \times 10^9$)。
    • double: 双精度浮点数,处理小数。
    • char: 字符,底层对应 ASCII 码(如 'A' 是 65,'a' 是 97)。

2. 具体例子

例子 1.1:字符的本质。

char c = 'A';
cout << c + 1; // 输出结果是 66,因为字符参与运算时会自动转为 ASCII 码

3. 练习巩固

  1. 【简单】对错题:在 C++ 中,变量名 Default 和 default 是完全一样的。( )
  2. 【中等】单选题:一个 1GB 的 U 盘,理论上大约可以存储多少个字节(Byte)的数据? A. $1000$ B. $1024 \times 1024$ C. $1024 \times 1024 \times 1024$ D. $8 \times 1024$
  3. 【困难】阅读程序写结果: cpp int a = 10; double b = 3.0; char c = 'B'; // 已知 'A' 的 ASCII 是 65 cout << a / 4 + c - 'A'; // 提示:注意整数除法的截断与字符运算 输出:____

第二模块:基本运算与输入输出

1. 知识点拆解

  • 算术运算:% 运算的对象必须是整数。5 / 2 结果是 2(丢弃小数)。
  • 逻辑运算短路效应:
    • A && B:如果 A 为假,则不再计算 B。
    • A || B:如果 A 为真,则不再计算 B。
  • 格式化输出:理解 endl 和 \n 的换行作用。

2. 具体例子

例子 2.1:分离一个三位数的个、十、百位。

int n = 358;
int g = n % 10;       // 8
int s = n / 10 % 10;  // 5
int b = n / 100;      // 3

3. 练习巩固

  1. 【简单】单选题:表达式 15 % 4 的结果是? A. 3 B. 3.75 C. 1 D. 2
  2. 【中等】填空题:若 int a = 5, b = 10;,表达式 (a > 6) && (b = b + 1 > 10) 执行后,变量 b 的值是 ____。(提示:注意逻辑与的短路特性)
  3. 【困难】编程逻辑填空:输入一个总秒数 S,将其转换为“分:秒”的形式。 cpp int S; cin >> S; cout << ________ << ":" << ________; // 样例输入 130,输出 2:10

第三模块:分支结构(选择)

1. 知识点拆解

  • if-else 嵌套:注意 else 总是与最近的未配对的 if 结合。
  • 边界条件:判断“及格”是 >= 60,不要漏掉等号。
  • 逻辑组合:判断闰年((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))。

2. 具体例子

例子 3.1:判断三条边 $a, b, c$ 是否能构成三角形(两边之和大于第三边)。

if (a + b > c && a + c > b && b + c > a)
    cout << "Yes";
else
    cout << "No";

3. 练习巩固

  1. 【简单】对错题:代码 if(x > 0); x = 1; 无论 x 是否大于 0,x = 1 都会执行。( )
  2. 【中等】单选题:以下代码输出结果是? cpp int x = 5; if (x > 10) if (x < 20) cout << "A"; else cout << "B"; A. A B. B C. 无输出 D. 编译错误
  3. 【困难】阅读程序填空:输入一个年份 y,判断是否为闰年,是输出 1,否则输出 0。 cpp int y, res; cin >> y; if (y % 400 == 0) res = 1; else if (y % 100 == 0) __________; else if (y % 4 == 0) res = 1; else __________; cout << res;

第四模块:循环结构

1. 知识点拆解

  • for 循环三要素:初始状态、终止条件、更新动作。
  • 无限循环(死循环):条件永远为真的循环(如 while(1))。
  • 计数器与累加器:在循环外初始化为 0。

2. 具体例子

例子 4.1:输出 1 到 10 之间的所有偶数。

for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) cout << i << " ";
}

3. 练习巩固

  1. 【简单】填空题:执行 for(int i = 0; i < 10; i += 2),循环体一共会被执行 ______ 次。
  2. 【中等】阅读程序写结果: cpp int s = 0; for (int i = 1; i <= 5; i++) { if (i == 3) continue; s += i; } cout << s; 输出:____
  3. 【困难】阅读程序写结果(多层逻辑陷阱): cpp int x = 1, y = 0; while (x <= 10) { if (x % 3 == 0) { y += x; } else { y -= 1; } x += 2; } cout << y; 输出:____

教练参考答案与解析

第一模块

  1. 错。C++ 区分大小写,default 是关键字,Default 是普通标识符。
  2. C。$1GB = 1024MB$, $1MB = 1024KB$, $1KB = 1024B$。
  3. 3。a/4 为 10/4=2;c-'A' 为 'B'-'A'=1;$2+1=3$。

第二模块

  1. A。$15 \div 4 = 3 \dots 3$。
  2. 10。短路效应,a > 6 为假,后面的 b = b + 1 根本没有运行。
  3. S / 60 和 S % 60。

第三模块

  1. 对。if 后面直接写了分号,表示空语句。后面的 x=1 不再受 if 控制。
  2. C。else 会和 if(x < 20) 配对。因为 x > 10 为假,整个大分支不进去。
  3. res = 0 ; res = 0。

第四模块

  1. 5。i 的取值为 0, 2, 4, 6, 8。
  2. 12。跳过了 i=3,累加了 1, 2, 4, 5。
  3. 1。
    • x=1: y = 0-1 = -1
    • x=3: y = -1+3 = 2
    • x=5: y = 2-1 = 1
    • x=7: y = 1-1 = 0
    • x=9: y = 0+9 = 9
    • x=11: 退出循环。
    • (注:此处若按代码逻辑严谨推导,需细心追踪每一步变量变化)。

教练寄语: 同学,做题时一定要养成手动模拟(Trace)的习惯。在纸上画一个小表格,记录变量每一轮的变化,这是进入省队甚至更高级别竞赛的最基本功!加油!

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

关于火龙

  • 关于我们
  • 预约试听
  • ACM课程
  • CSP课程
  • 学习指南

帮助中心

  • 用户协议
  • 打字练习
  • 在线画图
  • DevC++下载
  • CSP报名
  • GESP官网

推荐课程

  • C++零基础入门(可试看)
  • C++进阶提升
  • GESP考级辅导
  • GESP打卡
  • CSP-J/S打卡

公众号

火龙信奥公众号二维码

抖音号

火龙信奥抖音号二维码

地址:义乌市北门街188号新天地商厦二楼2F 邮箱:wdlok305@126.com

© 2017-2026 义乌市睿码科技有限公司版权所有 浙ICP备2021013995号

火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码