GESP一级C++知识点汇总
cpp数据类型 变量名;// 声明但不初始化(值随机)数据类型 变量名 = 值;// 声明并初始化int a;// 未初始化,可能为任意值int b = 10;// 初始化为 10。
计算机基础知识
计算机发展历程:从ENIAC到冯·诺依曼体系
1946年,世界上第一台通用电子计算机ENIAC(电子数字积分计算机)在美国诞生,其主要由电子管组成,体积庞大且功耗极高,运算速度仅为每秒5000次加法运算。
1945年,冯·诺依曼提出的"存储程序"概念彻底改变了这一局面,该体系结构明确计算机应包含运算器、控制器、存储器、输入设备和输出设备五大核心部件,并将程序与数据一同存储于存储器中,奠定了现代计算机的理论基础。
此后,计算机经历了四代演进:
| 代际 | 时间范围 | 主要元件 | 核心特点 | |
|---|---|---|---|---|
| 第一代 | 1946-1957 | 电子管 | 体积大、耗电高、可靠性低 | |
| 第二代 | 1958-1964 | 晶体管 | 体积缩小、功耗降低、可靠性提升 | |
| 第三代 | 1965-1970 | 集成电路 | 小型化、成本降低、性能提升 | |
| 第四代 | 1971至今 | 超大规模集成电路 | 微型化、智能化、网络化普及 | 4 |
计算机系统组成:硬件与软件的协同
硬件组成:冯·诺依曼五大部件的现代实现
运算器与控制器共同构成CPU(中央处理单元),其中运算器(ALU)负责算术与逻辑运算,控制器(CU)协调各部件工作,寄存器则用于临时存储运算数据。CPU性能常用时钟频率(单位GHz)衡量,频率越高处理速度通常越快。

存储器分为内存与外存:
内存包括RAM(随机存取存储器,断电后数据丢失,用于临时存储运行中的程序和数据)
ROM(只读存储器,断电数据不丢失,存储固件程序)及缓存(高速缓冲存储器,提升CPU访问数据效率);
外存如硬盘、SSD则用于长期存储数据。早期计算机曾使用磁心存储元件作为内存,功能与现代RAM类似。
输入/输出设备(I/O设备) 是计算机与外界交互的桥梁:输入设备如键盘、鼠标、扫描仪,用于将外部信息传入计算机;输出设备如显示器、打印机、音箱,用于呈现计算结果。随着物联网技术发展,智能传感器(如温度传感器、运动传感器)成为新型输入设备,可实时采集环境数据并传入计算机系统,体现了2025年GESP考纲对物联网设备概念的新增要求。
软件系统:从系统软件到应用软件
软件分为系统软件与应用软件:
系统软件是计算机运行的基础,包括操作系统(常见的操作系统 苹果的IOS、华为的鸿蒙、小米的澎湃)、驱动程序等,其中操作系统负责文件管理、进程调度、内存分配等核心功能;
应用软件则是为特定需求开发的程序,如办公软件(wps、office、还有真题出现的金山永中)、编程工具等。

数据存储:二进制与存储单位换算
计算机内部采用二进制表示信息,位(bit) 是最小单位(0或1),字节(Byte) 为基本存储单位,1 Byte = 8 bits。

存储单位换算关系
1 KB = 1024 B(注意:非1000 B,这是考试常见易错点)
1 MB = 1024 KB
1 GB = 1024 MB

例如,一个4 GB的U盘实际可存储容量约为4 × 1024 × 1024 × 1024 Byte,而非直观的4000 MB。
计算机语言:从机器语言到高级语言
计算机语言按抽象程度分为三代:
机器语言由0和1组成,可直接被CPU执行,但可读性极差;
汇编语言用助记符代替机器指令,需汇编器转换为机器语言;
高级语言(如C++)采用接近自然语言的语法,需通过编译器编译为机器语言后执行。
GESP一级C++认证即针对高级语言编程能力的考核,要求掌握基本语法与编程逻辑。
真题中有 GESP认证是有3种语言 图形化、python 、c++ 、每个等级难度是相同的和语言无关
C++编程基础
开发环境使用
在GESP一级C++考试中,熟练掌握开发环境的使用是完成编程任务的基础。考试流程以“新建-编写-编译-调试”为主线,考生需通过集成开发环境(如Dev C++)完成代码开发的全流程操作。以下将详细介绍核心操作步骤、关键快捷键及常见问题解决方法。
核心操作流程
GESP一级考试中,开发环境的使用遵循标准化流程,具体包括三个关键环节,调试打断短点我会放到算法班讲解:
- 新建文件 启动Dev C++后,通过“文件→新建→源代码”创建空源文件(扩展名为.cpp),该文件将用于编写C++代码。新建的源文件需确保为空白状态,避免残留无关代码影响编译结果。
- 编写代码 在代码编辑窗口中输入题目要求的程序逻辑,Dev C++提供代码高亮和自动补全功能,可辅助减少语法错误。编写时需注意代码缩进规范,确保结构清晰,便于后续调试。
- 编译与运行 完成代码编写后,需通过编译器将源代码转化为可执行文件。编译操作可通过快捷键F9执行,若代码存在语法错误,编译器会在下方信息栏提示具体错误位置。运行F10,编译和运算F11。
关键快捷键汇总
- Ctrl+S:保存当前代码(建议每编写5-10行代码执行一次,防止意外丢失)
- F9:编译源代码(检查语法错误)
- F5:启动调试模式(配合断点使用,逐行排查逻辑问题)
- F10:直接运行程序(适用于快速验证代码输出结果)
- F11:编译运行程序(一般都选择这个快捷键方便哈哈哈)
基本语法结构
C++ 程序的基本语法结构是编写正确代码的基础,涵盖程序框架、标识符命名、常量变量定义及注释规范等核心要素。通过正确与错误代码的对比分析,能更直观地理解语法规则的重要性。
程序框架与命名空间
C++ 程序需遵循固定的框架结构,其中 命名空间 的正确使用是避免编译错误的关键。标准框架如下:
cpp
#include <iostream> // 引入输入输出流库,提供 cout/cin 功能
using namespace std; // 使用标准命名空间,简化 std::cout 为 cout
int main() { // 主函数,程序执行入口
// 核心代码区域
return 0; // 程序正常结束标志
}
错误对比:若省略 using namespace std;,直接使用 cout 会导致“未定义标识符”错误:
cpp
#include <iostream>
// 缺少 using namespace std;
int main() {
cout << "Hello"; // 编译错误:'cout' 未声明
return 0;
}
#include:必须放在程序开头,否则无法使用输入输出功能。int main():唯一的程序入口,函数体用{}包裹,不可嵌套其他main函数。return 0:主函数结束时必须返回整数,0 表示程序正常退出。
这个框架要求一级的考生全部能自己默写出来,默不出来的同学也不要慌,Devc++里自带框架,
但是using namespace std;这个是要求自己能记下来的。

标识符与关键字
标识符也叫变量名
是用于命名变量、函数的符号,需严格遵循命名规则:
只能包含字母(A-Z/a-z)、数字(0-9)和下划线(_),且不能以数字开头,区分大小写,禁止使用关键字。
| 类别 | 合法示例 | 非法示例 | 错误原因 |
|---|---|---|---|
| 变量名 | _count、num1 |
2var、a+b |
以数字开头/包含非法符号 |
| 常量名 | MAX_SIZE |
int |
使用关键字作为标识符 |
| 函数名 | calcSum |
my-var |
包含减号(非法符号) |
关键字是 C++ 预留的特殊词汇,如 int、if、for 等,具有固定语法功能,判断关键字的小技巧输入到Devc++中看看是否会变粗在做真题发现题目会有坑会问你cin cout可以做变量名不 他们不是关键字可以做变量名喔关键字看这里 cin cout printf scanf 不是关键。

C++基本数据类型
一、整数类型
用于存储没有小数部分的数字,是编程中最常用的类型之一。
| 类型 | 存储大小(通常) | 取值范围 |
|---|---|---|
| int | 4 字节 | -2,147,483,648 ~ 2,147,483,647 |
| long long | 8 字节 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
二、浮点数类型
用于存储带有小数部分的数字,适合表示分数、小数等。
| 类型 | 存储大小 | 精度 | 示例 |
|---|---|---|---|
| float | 4 字节 | 约 7 位有效数字 | 3.1415926f(末尾加 f 表示 float 类型) |
| double | 8 字节 | 约 15-16 位有效数字 | 3.141592653589793(默认的浮点类型) |
cout默认显示 6 位有效数字- 可用
printf控制精度:cpp
double b = 4214.21421412; printf("%.6f\n", b); // 输出 6 位小数 printf("%.2f\n", b); // 输出 2 位小数
三、字符与字符串类型
用于存储文本数据。
| 类型 | 存储 | 示例 |
|---|---|---|
| char | 1 字节(ASCII 码) | 'A', 'b', '1'(使用单引号) |
| string | 动态长度(需包含头文件 #include <string>) |
"Hello"(使用双引号) |
四、布尔类型
用于表示逻辑判断结果(真 / 假)。
| 类型 | 取值 | 存储 |
|---|---|---|
| bool | true(1) / false(0) | 1 字节 |
五、变量定义和赋值
cpp
数据类型 变量名; // 声明但不初始化(值随机)
数据类型 变量名 = 值; // 声明并初始化
int a; // 未初始化,可能为任意值
int b = 10; // 初始化为 10
double pi = 3.14;
char ch = 'A';
string name = "Alice";
bool isOK = true;
基本运算
算术与关系算
1、赋值运算符(=)
把右边的内容赋值给左边,很多同学会和(==)搞混
int a=10;//是把10赋值给a
a==10 //(==)是比较运算符 返回 0 / 1
2、算术运算符
加(+)、减(-)、乘(*)、除(/)和取余(%)
取余运算应用:
// 判断奇偶性
if (x % 2 == 1) cout << x << "是奇数";
if (x % 2) cout << x << "是奇数";
if (x % 2 == 0) cout << x << "是偶数";
// 判断整除性
if (x % 3 == 0) cout << x << "能被3整除";
if (x % 7 == 0) cout << x << "能被7整除";
if (x % n == 0) cout << x << "能被n整除";
求多位数的各位数字:
int a = 1234;
// 个位:a % 10 = 4
// 十位:a / 10 % 10 = 3
// 百位:a / 100 % 10 = 2
// 千位:a / 1000 % 10 = 1
// 时间转换示例:3661秒 = ?小时?分钟?秒
int t = 3661;
int s = t % 60; // 1秒
int f = t / 60 % 60; // 1分钟
int h = t / 3600; // 1小时
取余和循环结合反转数字算法:
int n = 123;
while (n != 0) {
cout << n % 10; // 输出个位数
n /= 10; // 移除个位数
}
// 输出:321
3 比较运算符
> < >= <= == !=
返回布尔值(true /false):
5 > 2; // true
5 == 2; // false
4 逻辑运算符
-
&&(与):所有条件都为真时结果为真 -
||(或):至少一个条件为真时结果为真 -
!(非):取反
优先级: ! > && > ||
5 运算符优先级
从高到低:
-
算术运算符 (
+-*/%) -
比较运算符 (
><>=<===!=) -
逻辑运算符 (
!>&&>||)
5 + 1 * 3 > 7 || 3 + 6 > 10 && 7 - 5 == 2
// 等价于:(5 + (1 * 3)) > 7 || ((3 + 6) > 10) && ((7 - 5) == 2)
6 复合运算符
a = a + 1; // 等价于 a += 1;
a = a * 2; // 等价于 a *= 2;
a = a - 3; // 等价于 a -= 3;
a = a / 4; // 等价于 a /= 4;
7 自增自减运算运算符
前缀形式(++a/--a):先增减,后使用
int a = 5; int b = ++a; // a先变为6,然后赋值给b,b=6
后缀形式(a++/a--):先使用,后增减
int a = 5; int b = a++; // a的值5先赋给b,然后a变为6,b=5
8 三目算运算符
条件 ? 表达式1 : 表达式2
如果条件为真,执行表达式1并返回其结果
如果条件为假,执行表达式2并返回其结果
int a = 10, b = 20;
// 找出两个数中的较大值
int max = (a > b) ? a : b;
cout << "较大值是: " << max << endl; // 输出: 较大值是: 20
// 判断奇偶性
int num = 7;
string ans = (num % 2 == 0) ? "偶数" : "奇数";
cout << num << "是" << ans << endl; // 输出: 7是奇数
程序结构
1 顺序结构
代码按照从上到下、从左到右、从内到外的顺序执行
2 分支结构
1. 单分支
if (条件) {
// 条件为true时执行的代码
}
2. 双分支
if (条件) {
// 条件为true时执行的代码
} else {
// 条件为false时执行的代码
}
3. 多分支
if (条件1) {
// 条件1为true时执行的代码
} else if (条件2) {
// 条件2为true时执行的代码
} else if (条件3) {
// 条件3为true时执行的代码
} else {
// 上面条件都不满足时执行的代码
}
4. 多分支变形switch语句
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
// ... 更多case
default:
// 默认代码块
}
没有break会贯穿比如:
int month = 2;
switch (month) {
case 12:
case 1:
case 2:
cout << "冬季" << endl; // 12月、1月、2月都是冬季
break;
case 3:
case 4:
case 5:
cout << "春季" << endl;
break;
case 6:
case 7:
case 8:
cout << "夏季" << endl;
break;
case 9:
case 10:
case 11:
cout << "秋季" << endl;
break;
default:
cout << "无效月份" << endl;
}
3 循环结构
1 while循环(条件循环)
适用场景: 知道循环条件但不确定循环次数
// 输出1-5
int i = 1;
while (i <= 5) {
cout << i;
i++;
}
// 输出2,4,6,8,10
int j = 2;
while (j <= 10) {
cout << j;
j += 2;
}
2 for循环(次数循环)
适用场景: 明确知道循环次数
循环三要素:
-
循环开始的值
-
循环结束的条件
-
循环每次的步长
// 输出1-5(递增)
for (int i = 1; i <= 5; i++) {
cout << i;
}
// 输出5-1(递减)
for (int i = 5; i >= 1; i--) {
cout << i;
}
// 输出2,4,6,8,10(步长为2)
for (int i = 2; i <= 10; i += 2) {
cout << i;
}
3 、do...while循环
// while循环:先判断后执行
int a = 10;
while (a < 5) {
cout << "这不会执行";
}
// do-while循环:先执行后判断
int b = 10;
do {
cout << "这会执行一次"; // 尽管条件不满足,仍会执行一次
} while (b < 5);
4、break 和 continue关键字
break
//找到第一个满足条件的数字后退出
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
cout << "找到第一个能被3整除的数: " << i << endl;
break; // 找到后立即退出循环
}
cout << i << endl;
}
continue
// 示例 只输出奇数
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
cout << i << " "; // 只输出奇数
}
cout << endl; // 输出: 1 3 5 7 9
综合应用示例
判断质数
输入一个整数判断是否为质数
输入 5 输出 是质数
int n;
cin >> n;
bool f = true;
if (n <= 1) {
f = false;
} else {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
f = false;
break; // 发现因数立即退出,提高效率
}
}
}
if (f) {
cout << n << " 是质数" << endl;
} else {
cout << n << " 不是质数" << endl;
}
计算数字位数
输入一个整数(多位数),判断n是几位数。
输入123 输出 3
int n, count = 0;
cin >> n;
if (n == 0) {
count = 1;
} else {
while (n != 0) {
count++;
n /= 10;
}
}
cout << "数字有" << count << "位";
2025 年 6 月真题解析:阶梯电价计算
题目要求:某地区实行阶梯电价,用电量 ≤200 度部分按 0.56 元/度计费,超额部分按 0.63 元/度计费。编写程序根据输入的用电量计算总电费。
逻辑分析:
设用电量为 kWh,总电费为 cost。
- 当
kWh ≤ 200时,cost = kWh * 0.56; - 当
kWh > 200时,cost = 200 * 0.56 + (kWh - 200) * 0.63。
代码实现:
#include <iostream>
using namespace std;
int main() {
int kWh;
cin >> kWh; // 输入用电量
double cost;
if (kWh <= 200) {
cost = kWh * 0.56; // 基础电量计费
} else {
cost = 200 * 0.56 + (kWh - 200) * 0.63; // 超额部分叠加计费
}
cout << cost << endl;
return 0;
}
关键说明:
- 通过
if-else实现双分支逻辑,确保覆盖所有用电量场景; - 浮点型变量
cost存储计算结果,避免整数除法导致精度丢失; - 条件判断
kWh <= 200简洁清晰,符合阶梯电价的分段规则。
C风格输入输出
一、scanf 输入函数
scanf 函数用于从标准输入(通常是键盘)读取数据,其基本语法为:
scanf("格式控制", &变量列表);
int score;
printf("请输入成绩: "); // 提示用户输入
scanf("%d", &score); // 读取整数,注意 &score 不可省略
二、printf 输出函数
printf 函数用于向标准输出(通常是屏幕)打印数据,其基本语法为:
printf("格式控制", 变量列表);
示例:输出变量 x 的值
cpp
int x = 10;
printf("x=: %d\n", x); // 输出:x=: 10
printf("x=: %03d\n", x); //相当于有3个格子10只填了两个格子前面的格子补0 输出:x=: 010
//还要考保留小数点后几位
double a =3.1415;
printf("%.2f",a);//输出3.14 表留小数点后两位
三、格式字符串占位符速查表
格式控制字符串中的占位符需与变量类型严格匹配,以下为 GESP 一级考试常用占位符:
| 占位符 | 数据类型 | 说明示例 |
|---|---|---|
%d |
整数(int) | printf("%d", 100); → 输出 100 |
%lf |
双精度浮点数(double) | printf("%.2lf", 3.1415); → 输出 3.14 |
%c |
字符(char) | printf("%c", 'A'); → 输出 A |
%s |
字符串(char[]) | printf("%s", "GESP"); → 输出 GESP |
编程题解题技巧
所有的真题编程题基本都写了,总结出的点
编程题第一题比较基础是输入输出题目偶尔加个if判断 基本IPO就可以做出来了
编程题第二题就是单层循环的枚举不同看我13课的复习枚举复习
输入输出类题目
输入输出题四步法
解决输入输出类问题需遵循**“读入→处理→计算→输出”四步法**,该框架能帮助初学者规范解题流程,减少逻辑漏洞:
- 读入(Input):明确输入数据的类型(如整数、浮点数)和格式(如单个数据、多变量、多组数据),使用
cin语句正确读取数据。 - 处理(Processing):根据题目要求设计数据存储方案,定义合适的变量类型(如
int存储整数,double存储小数),并对异常情况(如无效输入)进行预判。 - 计算(Calculation):通过算术运算(加减乘除等)或逻辑判断(如条件分支)实现题目核心逻辑。
- 输出(Output):使用
cout语句按指定格式输出结果,注意换行符endl或空格的使用,确保与题目要求一致。
四步法应用示例(以“计算两个整数之和”为例):
- 读入:
cin >> a >> b;(读取两个整数a和b) - 处理:定义
int类型变量a、b存储输入数据 - 计算:
a + b(执行加法运算) - 输出:
cout << a + b << endl;(输出结果并换行)
#include <iostream>
using namespace std;
int main() {
int a, b; // 处理:定义变量存储输入数据
cin >> a >> b; // 读入:读取两个整数
cout << a + b << endl; // 计算与输出:求和并输出结果
return 0;
}
多组输入判断类题型
描述输入n个数据,输出被m整数的数之和
输入5 2
1 2 3 4 5
输出2 4
#include <iostream>
using namespace std;
int main() {
int n,m,x,sum=0;
cin>>n>>m;
while(n--){
cin>>x;
if(x%m==0) cout<<x<<" ";
}
return 0;
}
时间类问题专题解析
总秒数 = 时 × 3600 + 分 × 60 + 秒
以下是具体解题步骤:
- 读入:输入三个整数
h(时)、m(分)、s(秒),格式为空格分隔的三个数字。 - 处理:定义
int h, m, s, total变量,其中total用于存储计算结果。 - 计算:应用公式
total = h * 3600 + m * 60 + s,注意单位换算的正确性(1 小时 = 3600 秒,1 分钟 = 60 秒)。 - 输出:使用
cout输出total的值。
代码实现:
#include <iostream>
using namespace std;
int main() {
int h, m, s;
cin >> h >> m >> s; // 读入时、分、秒
int total = h * 3600 + m * 60 + s; // 计算总秒数
cout << total << endl; // 输出结果
return 0;
}
推荐练习题目:
- 洛谷 OJ [P1001 A+B Problem](基础输入输出,单组数据求和)
- 洛谷 OJ [P5703 苹果采购](简单算术运算,输入苹果单价与数量计算总价)
循环枚举类题
一、累加器清零:结果正确性的关键
这是同学们容易犯错的要记得sum初始化为0
int main() {
int n, m, sum; // 未初始化 sum,其值为随机垃圾值
cin >> n >> m;
for (int i = n; i <= m; i++) {
if (i % 3 == 0) sum += i; // 结果包含随机值,完全错误
}
}
正确实践:始终在使用累加器前显式清零(sum = 0),确保每次计算从基准值开始。
二、最小公倍数枚举法:以真题“值日”问题为例
枚举法在数学问题中应用广泛,例如“值日周期”问题:输入小杨值日周期 m 和小红值日周期 n,求两人再次同一天值日的最少天数(即最小公倍数)。解题思路:从 m 开始枚举至 m*n(最小公倍数的理论上限),判断是否同时为 m 和 n 的倍数,首个符合条件的数即为答案。
代码实现:
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
for (int i = m; i <= m * n; i++) { // 枚举范围:[m, m*n]
if (i % m == 0 && i % n == 0) { // 判断条件:同时为 m 和 n 的倍数
cout << i;
return 0; // 找到结果后立即退出程序
}
}
}
逻辑解析:枚举对象为天数 i,范围设定为 m 至 m*n(因最小公倍数不会超过两数乘积),通过模运算判断倍数关系,体现了“明确范围→循环结构→条件判断→输出结果”的完整解题步骤。
三、高频题型与推荐练习
循环枚举类题目常见于数学问题(累加、因数)、时间计算、日期处理,多练习真题同学们加油!!!
CCF GESP C++ 一级上机题 - 题单 - 洛谷 | 计算机科学教育新生态
2025年6月编程题详解
题目1:假期阅读
题目描述:小A有n页书,每天最多读k页,假期共t天,求最多能读多少页。
解析:
- 核心逻辑:计算假期总阅读能力(k×t)与书总页数n的最小值。
- 代码优化:使用三目运算符简化条件判断
#include <iostream>
using namespace std;
int main() {
int n, k, t;
cin >> n >> k >> t;
cout << min(n, k * t); // 直接取两者较小值
return 0;
}
题目2:值日
题目描述:小杨每m天值日一次,小红每n天值日一次,求下次共同值日天数。
解析:
- 枚举优化:从max(m,n)开始枚举,减少无效循环
#include <iostream>
#include <algorithm> // 需包含算法库
using namespace std;
int main() {
int m, n;
cin >> m >> n;
for (int i = max(m, n); ; i++) { // 从较大值开始枚举
if (i % m == 0 && i % n == 0) {
cout << i;
break;
}
}
return 0;
}
新增考点:物联网设备基础
- 智能传感器:如温度传感器(输入设备)、智能灯泡(输出设备)
- 应用场景:智能家居系统中传感器数据通过计算机处理并控制设备
考试时间分配建议
| 题型 | 题量 | 建议时间 |
|---|---|---|
| 选择题 | 15道 | 30分钟 |
| 判断题 | 10道 | 20分钟 |
| 编程题1 | 1道 | 35分钟 |
| 编程题2 | 1道 | 35分钟 |
还是比较详细的求点赞收藏~
注意:编程题需先编译调试,确保无语法错误再提交
更多推荐



所有评论(0)