GESP C++ 全等级学习系统

从一级到八级,生动有趣的互动学习体验。每周3小时,轻松冲刺每个等级认证。

4
当前等级
0
已完成课时
0%
总完成度
9月12日
下次考试
1
课时学习
按顺序学习每个知识点,包含讲解、演示和练习
2
互动练习
通过代码演示、例题和挑战巩固所学知识
3
阶段测试
完成模拟测试,检验真实水平,查漏补缺
4
进度追踪
查看学习记录、完成度和成长轨迹
当前等级进度0%

正在加载...

学习里程碑学习里程碑

课程体系

共8个等级,从入门到高级算法
当前学习:四级

互动学习

不只是枯燥的知识点 — 看演示、玩动画、动手练
四级专题
← 左右滑动切换标签页 →
函数定义与调用 — 在线演示 点击运行 可编辑
// 示例:函数的定义与调用
#include <iostream>
using namespace std;

// 定义一个求最大公约数的函数
int gcd(int a, int b) {
  while (b != 0) {
    int temp = a % b;
    a = b;
    b = temp;
  }
  return a;
}

int main() {
  cout << "GCD(12, 18) = " << gcd(12, 18) << endl;
  cout << "GCD(35, 49) = " << gcd(35, 49) << endl;
  return 0;
}
$ 点击运行按钮查看输出结果
指针入门 — 在线演示 点击运行 可编辑
// 示例:指针的基本使用
#include <iostream>
using namespace std;

int main() {
  int num = 42;
  int* ptr = #  // ptr 指向 num

  cout << "num 的值: " << num << endl;
  cout << "num 的地址: " << &num << endl;
  cout << "ptr 存储的地址: " << ptr << endl;
  cout << "通过 ptr 访问的值: " << *ptr << endl;

  *ptr = 100;  // 通过指针修改 num
  cout << "修改后 num 的值: " << num << endl;
  return 0;
}
$ 点击运行按钮查看输出结果
结构体 — 在线演示 点击运行 可编辑
// 示例:结构体的定义与使用
#include <iostream>
#include <string>
using namespace std;

// 定义学生结构体
struct Student {
  string name;
  int age;
  double score;
};

int main() {
  Student s1 = {"小明", 14, 92.5};
  cout << "姓名: " << s1.name << endl;
  cout << "年龄: " << s1.age << endl;
  cout << "成绩: " << s1.score << endl;
  return 0;
}
$ 点击运行按钮查看输出结果
文件读写 — 在线演示 新增 可编辑
// 示例:文件读写操作
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  // 写入文件
  ofstream fout("data.txt");
  fout << "10 20 30 40 50";
  fout.close();

  // 读取文件
  ifstream fin("data.txt");
  int x, sum = 0;
  while (fin >> x) {
    sum += x;
  }
  fin.close();

  cout << "文件中的数字之和: " << sum << endl;
  return 0;
}
$ 点击运行按钮查看输出结果
二分查找 — 在线演示 新增 可编辑
// 示例:二分查找算法
#include <iostream>
using namespace std;

// 二分查找:在有序数组中查找目标值
int binarySearch(int arr[], int n, int target) {
  int left = 0, right = n - 1;
  while (left <= right) {
    int mid = left + (right - left) / 2;
    if (arr[mid] == target) return mid;
    else if (arr[mid] < target) left = mid + 1;
    else right = mid - 1;
  }
  return -1;  // 未找到
}

int main() {
  int arr[] = {2, 5, 8, 12, 16, 23, 38, 45, 56, 72};
  int n = sizeof(arr) / sizeof(arr[0]);
  int target = 23;
  int idx = binarySearch(arr, n, target);
  cout << "数组: [2, 5, 8, 12, 16, 23, 38, 45, 56, 72]" << endl;
  cout << "查找 " << target << " 的位置: " << idx << endl;
  int target2 = 50;
  int idx2 = binarySearch(arr, n, target2);
  cout << "查找 " << target2 << " 的位置: " << idx2 << " (未找到返回-1)" << endl;
  return 0;
}
$ 点击运行按钮查看输出结果
冒泡排序动画演示 四级核心算法

点击下方按钮,观察冒泡排序如何一步步将数组排好序。紫色 = 正在比较,绿色 = 已排好

速度:
就绪
选择排序动画演示 四级核心算法

选择排序:每次从未排序部分选出最小值,放到已排序末尾。

速度:
就绪
冒泡 vs 选择 — 对比演示 新增

同时观察两种排序算法,直观对比它们的执行过程差异。

冒泡排序
选择排序
速度:
就绪
递归演示:汉诺塔 递归思想

汉诺塔是理解递归的经典例题。点击演示,观察3个盘子的移动过程。

🗼 🗼 🗼
共3个盘子,需要 2³-1 = 7 步
速度:
步骤 0/7
例题 1:用函数求数组最大值
题目描述
编写一个函数 int findMax(int arr[], int n),接收一个整型数组和数组长度,返回数组中的最大值。
步骤 1/4
例题 2:冒泡排序过程详解
题目描述
对数组 [5, 3, 8, 4, 2] 使用冒泡排序,写出每一趟排序后的结果。
步骤 1/6
例题 3:递归求阶乘 新增
题目描述
用递归函数实现阶乘计算 n! = n * (n-1) * ... * 1,理解递归的分解与回归过程。
步骤 1/4
例题 4:二分查找详解 新增
题目描述
在有序数组 [1, 3, 5, 7, 9, 11, 13, 15] 中查找目标值 7,使用二分查找算法。
步骤 1/5
✏️
四级知识点检测 · 共15题
快速挑战模式 NEW

每道题限时10秒,考验你的快速反应能力!答对得分,答错或超时不扣分。

⏱️ 准备好就开始吧!

学习规划

每周3小时,拆分为2次,每次1.5-2小时
目标:2026年9月四级
2
次/周
1.5-2h
每次时长
0
总学习周数
0
当前进度

进度追踪

全方位记录学习轨迹
各等级完成度
学习统计
学习记录

阶段测试

以考促学,检验真实水平
等级模拟测试
    课后练习

    管理后台

    管理所有学习账号
    0
    总账号数
    0
    覆盖等级数
    0
    总学习课时
    账号 起始等级 当前等级 总完成度 已学课时 创建时间 操作
    快速挑战
    10