GESP C++ 一级真题详细分析讲解

四季读书网 2 0
GESP C++ 一级真题详细分析讲解

GESP C++ 一级真题详细分析讲解

GESP C++ 一级主要考察 C++ 最基础的输入输出、变量、运算、分支结构和简单循环结构它的定位是:刚学完 C++ 基础语法,能够独立写简单程序的入门级考试

一级不考复杂算法,不考数组、字符串、函数、递归、排序、动态规划等内容。


一、GESP C++ 一级考什么?

核心知识点

GESP C++ 一级主要包括两大类:

类型
主要内容
基础语法
变量、数据类型、输入输出、算术运算、取模、整除
控制结构
if / else
 分支判断、for / while 简单循环

二、一级真题常见题型总览

一级真题通常可以分成以下几类:

题型
典型考法
难度
顺序结构计算
读入数据,套公式计算并输出
简单
分支判断
判断大小、奇偶、是否满足条件
简单
多分支判断
根据不同区间输出不同结果
中等
简单循环求和
求 1+2+...+n 或满足条件的数之和
中等
循环计数
统计符合条件的数字个数
中等
简单模拟
按题意一步步计算
中等偏上

三、知识点详细讲解


1. 输入输出

一级考试中,输入输出是最基础的部分。

常用写法

#include<iostream>usingnamespace std;intmain(){int a, b;    cin >> a >> b;    cout << a + b << endl;return0;}

常见考点

  • • 会读入一个数、两个数、多个数
  • • 会输出计算结果
  • • 会按照题目要求输出文字或数字
  • • 注意空格和换行

例如:

cout << x << endl;

表示输出 x 后换行。

cout << a << " " << b << endl;

表示输出 a 和 b,中间有一个空格。


2. 变量与数据类型

一级常见数据类型:

类型
含义
示例
int
整数
int x = 10;
long long
较大的整数
long long n;
double
小数
double a;
char
单个字符
char c;
bool
布尔值,真或假
bool flag;

一级大多数题目用 int 就够,但遇到较大的乘法结果时,要考虑 long long

例如:

longlong a, b;cin >> a >> b;cout << a * b << endl;

3. 算术运算

常用运算符:

运算符
含义
+
-
*
/
%
取余

整数除法

cout << 5 / 2;

输出:

2

因为两个整数相除,结果仍是整数,小数部分会被舍去。


取余运算

cout << 5 % 2;

输出:

1

取余常用于:

  • • 判断奇偶
  • • 取个位数
  • • 判断能否整除

例如判断奇偶:

if (n % 2 == 0) {    cout << "even";else {    cout << "odd";}

四、真题核心题型分析


题型一:顺序结构计算

题型特点

这类题没有判断,也没有循环,只需要:

  1. 1. 读入数据
  2. 2. 根据公式计算
  3. 3. 输出结果

典型例题

"

输入两个整数 a 和 b,输出它们的和。

分析

直接使用加法即可。

代码

#include<iostream>usingnamespace std;intmain(){int a, b;    cin >> a >> b;    cout << a + b << endl;return0;}

常见变化

◆ 1. 求长方形面积

int a, b;cin >> a >> b;cout << a * b << endl;

◆ 2. 求平均数

如果要求小数平均数:

int a, b;cin >> a >> b;cout << (a + b) / 2.0 << endl;

注意:

(a + b) / 2

是整数除法。

(a + b) / 2.0

才会得到小数。


题型二:简单分支判断

题型特点

根据条件输出不同结果。

常见判断:

  • • 是否为偶数
  • • 是否及格
  • • 两数大小比较
  • • 是否满足某个条件

典型例题:判断奇偶

"

输入一个整数 n,如果是偶数输出 even,否则输出 odd

分析

判断 n % 2 是否等于 0

代码

#include<iostream>usingnamespace std;intmain(){int n;    cin >> n;if (n % 2 == 0) {        cout << "even" << endl;    } else {        cout << "odd" << endl;    }return0;}

重点

判断相等必须用:

==

不能写成:

=

错误示例:

if (n % 2 = 0)

正确示例:

if (n % 2 == 0)

题型三:多分支判断

题型特点

根据不同区间输出不同结果。

常见题目:

  • • 成绩等级判断
  • • 年龄分类
  • • 分段收费
  • • 分段函数

典型例题:成绩等级

"

输入一个成绩 score,如果大于等于 90 输出 A,大于等于 80 输出 B,大于等于 60 输出 C,否则输出 D

分析

要按照从高到低的顺序判断。

代码

#include<iostream>usingnamespace std;intmain(){int score;    cin >> score;if (score >= 90) {        cout << "A" << endl;    } elseif (score >= 80) {        cout << "B" << endl;    } elseif (score >= 60) {        cout << "C" << endl;    } else {        cout << "D" << endl;    }return0;}

为什么要从高到低判断?

如果写成:

if (score >= 60) {    cout << "C";elseif (score >= 80) {    cout << "B";}

当 score = 95 时,程序会先满足 score >= 60,直接输出 C,不会继续判断后面的条件。

所以区间判断要注意顺序。


题型四:简单循环求和

题型特点

使用 for 或 while 循环,重复执行某个操作。

常见题目:

  • • 求 1+2+...+n
  • • 求 1 到 n 中偶数和
  • • 求 1 到 n 中奇数和
  • • 求满足条件的数的和

典型例题:求 1 到 n 的和

"

输入正整数 n,输出 1+2+...+n

分析

用变量 sum 累加。

代码

#include<iostream>usingnamespace std;intmain(){int n;    cin >> n;int sum = 0;for (int i = 1; i <= n; i++) {        sum += i;    }    cout << sum << endl;return0;}

变量解释

int sum = 0;

表示一开始总和是 0

sum += i;

等价于:

sum = sum + i;

容易出错的地方

◆ 错误 1:sum 没有初始化

int sum;

这样 sum 里面可能是随机值。

正确:

int sum = 0;

◆ 错误 2:循环边界写错

如果要求 1 到 n,应写:

for (int i = 1; i <= n; i++)

不要写成:

for (int i = 1; i < n; i++)

否则漏掉 n


题型五:循环计数

题型特点

统计符合条件的数有多少个。

常见题目:

  • • 统计 1 到 n 中偶数个数
  • • 统计能被 3 整除的数的个数
  • • 统计满足某种条件的数字个数

典型例题:统计偶数个数

"

输入正整数 n,统计 1 到 n 中有多少个偶数。

分析

从 1 循环到 n,如果 i % 2 == 0,计数器加一。

代码

#include<iostream>usingnamespace std;intmain(){int n;    cin >> n;int cnt = 0;for (int i = 1; i <= n; i++) {if (i % 2 == 0) {            cnt++;        }    }    cout << cnt << endl;return0;}

cnt++ 的含义

cnt++;

等价于:

cnt = cnt + 1;

题型六:求最大值或最小值

题型特点

这类题通常会输入若干个数,让你找最大值或最小值。

一级范围内,一般不会要求使用数组,而是可以边输入边处理。


典型例题:输入 n 个数,求最大值

"

输入正整数 n,接着输入 n 个整数,输出其中最大值。

分析

因为一级不要求数组,所以我们可以:

  1. 1. 先读入第一个数,作为当前最大值
  2. 2. 后面每读入一个数,就和当前最大值比较
  3. 3. 如果更大,就更新最大值

代码

#include<iostream>usingnamespace std;intmain(){int n;    cin >> n;int x;    cin >> x;int maxn = x;for (int i = 2; i <= n; i++) {        cin >> x;if (x > maxn) {            maxn = x;        }    }    cout << maxn << endl;return0;}

为什么不需要数组?

因为题目只要求最大值,不需要保存所有数字。

每次读一个、处理一个即可。


题型七:简单模拟

题型特点

按照题目描述一步步执行。

常见形式:

  • • 每天增长或减少
  • • 重复若干次操作
  • • 按规则计算费用
  • • 按规则判断结果

典型例题:每天存钱

"

小明第一天存 a 元,以后每天比前一天多存 b 元,问 n 天一共存多少钱。

分析

第 1 天:a第 2 天:a+b第 3 天:a+2b……

可以用循环模拟每天存的钱。

代码

#include<iostream>usingnamespace std;intmain(){int a, b, n;    cin >> a >> b >> n;int money = a;int sum = 0;for (int i = 1; i <= n; i++) {        sum += money;        money += b;    }    cout << sum << endl;return0;}

五、一级真题中的高频易错点


1. 忘记初始化变量

错误:

int sum;for (int i = 1; i <= n; i++) {    sum += i;}

正确:

int sum = 0;

计数器也要初始化:

int cnt = 0;

2. = 和 == 混淆

错误:

if (x = 10)

正确:

if (x == 10)

含义不同:

写法
含义
=
赋值
==
判断是否相等

3. 循环边界错误

如果题目要求从 1 到 n,通常写:

for (int i = 1; i <= n; i++)

不要漏掉最后一个数。


4. 整数除法问题

int a = 5, b = 2;cout << a / b;

输出:

2

如果想输出小数,需要:

cout << 1.0 * a / b;

或者:

cout << a / 2.0;

5. 输出格式错误

很多考试题不是算法错,而是输出格式错。

例如题目要求:

YES

你输出:

Yes

可能就是错误。

要严格按照题面输出。


六、一级考试不考什么?

GESP C++ 一级不应该出现以下内容:

内容
是否属于一级
数组
不属于
字符串
不属于
函数定义
不属于
递归
不属于
排序
不属于
动态规划
不属于
图论
不属于
二分
不属于
最大公约数 GCD
不属于
质因数分解
不属于

一级的重点就是:

"

输入输出 + 变量运算 + if 判断 + 简单循环


七、一级真题解题通用步骤

做一级题时,可以按照这个流程:

第一步:看输入

题目给了几个数?

例如:

输入三个整数 a, b, c

代码就是:

int a, b, c;cin >> a >> b >> c;

第二步:看输出

题目让输出什么?

  • • 一个计算结果?
  • • 判断结果?
  • • 统计数量?
  • • 最大值/最小值?

第三步:判断题型

题目特征
可能做法
直接算结果
顺序结构
有“如果”“否则”
分支结构
有“重复”“从 1 到 n”
循环结构
有“统计多少个”
循环 + 计数
有“总和”
循环 + 累加
有“最大/最小”
循环 + 比较

第四步:写代码并检查边界

重点检查:

  • • 是否初始化变量
  • • 循环是否包含最后一个数
  • • 判断条件是否正确
  • • 输出格式是否一致

八、一级备考建议

1. 必须熟练掌握的代码模板

输入两个数求和

int a, b;cin >> a >> b;cout << a + b << endl;

判断奇偶

if (n % 2 == 0) {    cout << "even";else {    cout << "odd";}

从 1 循环到 n

for (int i = 1; i <= n; i++) {// 循环体}

求和

int sum = 0;for (int i = 1; i <= n; i++) {    sum += i;}

计数

int cnt = 0;for (int i = 1; i <= n; i++) {if (条件) {        cnt++;    }}

求最大值

int n, x;cin >> n;cin >> x;int maxn = x;for (int i = 2; i <= n; i++) {    cin >> x;if (x > maxn) {        maxn = x;    }}cout << maxn << endl;

九、一级真题训练重点

建议按照下面顺序练习:

第一阶段:基础语法

目标:会输入、会输出、会计算。

练习内容:

  • • 两数求和
  • • 长方形面积
  • • 平均数
  • • 单位换算
  • • 简单公式计算

第二阶段:分支结构

目标:会用 if / else 判断。

练习内容:

  • • 判断奇偶
  • • 判断正负
  • • 判断是否及格
  • • 比较两个数大小
  • • 简单分段函数

第三阶段:循环结构

目标:会使用 for 和 while

练习内容:

  • • 求 1 到 n 的和
  • • 求偶数和
  • • 求奇数和
  • • 统计符合条件的数
  • • 找最大值、最小值

第四阶段:综合模拟

目标:能把分支和循环结合起来。

练习内容:

  • • 循环中判断
  • • 分段计费
  • • 多天累计
  • • 简单比赛计分
  • • 简单生活场景模拟

十、一级真题得分策略

想拿 60 分

必须会:

  • • 输入输出
  • • 加减乘除
  • • 简单 if
  • • 简单 for

想拿 80 分

需要会:

  • • 多分支判断
  • • 循环累加
  • • 循环计数
  • • 判断奇偶、整除

想拿 90-100 分

需要做到:

  • • 循环边界非常稳
  • • 输出格式不出错
  • • 能读懂简单题意
  • • 会处理最大值、最小值
  • • 分支和循环能结合使用

十一、总结

GESP C++ 一级的本质是:

"

检查你是否真正掌握 C++ 最基础的程序控制能力。

重点不是算法,而是基础语法是否熟练。

一级必须掌握:

  1. 1. cin / cout 输入输出
  2. 2. int / long long / double 等基本变量
  3. 3. + - * / % 运算
  4. 4. if / else 分支判断
  5. 5. for / while 简单循环
  6. 6. 累加、计数、求最大最小值等基础程序思想

如果这些内容能熟练掌握,GESP C++ 一级通常可以稳定通过,甚至拿到 90 分以上。

重要事情说三遍:
点击查看原文可以刷GESP历年真题!
点击查看原文可以刷GESP历年真题!
点击查看原文可以刷GESP历年真题!

抱歉,评论功能暂时关闭!