• C++
  • C++ 学习笔记教程:从基础到图形交互

  • @ 2025-7-13 20:09:10

C++ 学习笔记教程:从基础到图形交互

一、前言

本教程围绕 C++ 基础语法、输入输出、控制逻辑,以及 EasyX 图形库简单应用展开,结合实际代码案例(含注释),帮助你通俗易懂地学习 C++ ,从控制台程序过渡到简单图形交互。

二、基础输入输出与格式控制

(一)保留小数位数输出(控制台基础)

场景:读入浮点数,按指定小数位数输出,比如保留 3 位小数。
代码示例

#include<iostream>
// 用于格式控制(如保留小数)的头文件
#include<iomanip> 
using namespace std;

int main() {
    double n; // 双精度浮点数,存储输入的小数
    cin >> n; // 从控制台读取用户输入的浮点数
    // fixed + setprecision(3) 组合,让输出保留 3 位小数
    cout << fixed << setprecision(3) << n; 
    return 0;
}

代码注释

  • #include<iomanip>:提供 fixedsetprecision 等格式控制工具,让输出更灵活。
  • double n:用双精度浮点数存储输入,比 float 精度更高,适合日常小数场景。
  • fixed << setprecision(3)fixed 表示固定小数计数法,setprecision(3) 配合它,严格保留 3 位小数。

(二)矩阵对角线求和(循环与条件判断)

场景:输入 3×3 矩阵,计算 “左下角 → 右上角” 对角线元素和(比如矩阵 [[1,2,3],[3,4,5],[6,0,1]],对角线是 346 ,和为 13 )。
代码示例

#include<iostream>
using namespace std;

int main() {
    int a; // 存储矩阵每个元素
    int cnt = 0; // 累加和,初始为 0
    // 两层循环遍历 3×3 矩阵(行 i 、列 j 从 1 开始计数)
    for (int i = 1; i <= 3; i++) { 
        for (int j = 1; j <= 3; j++) { 
            cin >> a; // 读取矩阵的一个元素
            // 左下角到右上角对角线,坐标满足 i + j == 4(比如 (1,3)、(2,2)、(3,1) )
            if (i + j == 4) { 
                cnt += a; // 符合条件就累加到总和
            }
        }
    }
    cout << cnt; // 输出对角线元素和
    return 0;
}

代码注释

  • 两层 for 循环:外层控制行 i,内层控制列 j,遍历 3×3 矩阵所有元素。
  • i + j == 4:3×3 矩阵中,左下角到右上角对角线的坐标规律(行号 + 列号 = 4 ),用它筛选目标元素。

三、控制台按键交互(kbhit、getch 应用)

(一)基础按键检测:按空格输出提示

场景:程序运行时,检测用户按键,按空格就输出 “按下了空格!” ,按其他键无特殊响应(可扩展逻辑)。
代码示例

#include<iostream>
// 用于 printf 等 C 风格输出
#include<cstdio> 
// 提供 getch 函数,实现无回显按键读取
#include<conio.h> 
using namespace std;

int main() {
    // 无限循环,持续检测按键
    while (1) { 
        // kbhit():有按键按下返回 1,否则返回 0 ,实现“实时”检测
        if (kbhit()) { 
            // getch():读取按键(不显示到控制台,无回显),存到 input
            char input = getch(); 
            // 判断是否是空格按键(' ' 代表空格)
            if (input == ' ') { 
                printf("按下了空格!\n"); // 按空格时输出提示
            }
        }
    }
    return 0;
}

代码注释

  • #include<conio.h>:非标准库,但在 Windows + MinGW / Dev - C++ 等环境常用,提供 kbhit(检测按键)、getch(读取按键)功能。
  • while(1):无限循环,让程序持续运行、持续检测按键。
  • kbhit() + getch():前者 “监听” 按键,后者 “捕获” 按键,搭配实现实时交互。

(二)逻辑扩展:按空格触发小球跳起(结合图形库)

场景:用 EasyX 图形库画一个小球,程序运行后,按空格让小球模拟 “跳起” 效果(重力递减,更贴近真实物理感)。
代码示例

// 图形库头文件,用于画图
#include <graphics.h> 
// 数学库,本示例暂未用到复杂数学函数,可用于扩展
#include <math.h> 
#include <iostream>
#include <cstdio>
#include <conio.h>
using namespace std;

const int height = 1000; // 图形窗口高度,常量定义更清晰

int main() {
    // 初始化图形窗口:宽 600 像素,高 height(1000)像素
    initgraph(600, height); 
    // 设置填充颜色为白色(画实心球用)
    setfillcolor(WHITE); 
    // 画实心圆:圆心 (300,800) ,半径 30
    fillcircle(300, 800, 30); 

    while (1) { // 持续运行,等待按键
        if (kbhit()) { // 检测到按键
            char input = getch(); // 读取按键
            if (input == ' ') { // 按下空格
                printf("按下了空格!\n"); 

                float gravity = 15; // 初始重力加速度,控制下落速度
                float y = 800; // 小球初始 y 坐标(垂直方向位置)
                // 让小球“下落” 30 次,模拟运动过程
                for (int i = 1; i <= 30; i++) { 
                    cleardevice(); // 清屏,准备画下一帧
                    y = y - gravity; // 小球 y 坐标变化(向上减小,模拟跳起)
                    // 重新画小球,位置更新
                    fillcircle(300, y, 30); 
                    Sleep(10); // 暂停 10 毫秒,让动画更平滑
                    gravity = gravity - 0.5; // 重力递减,模拟“下落越来越慢”(可调整逻辑)
                }
            }
        }
    }

    closegraph(); // 关闭图形窗口(实际因无限循环,可能难执行到,可按需调整)
    return 0;
}

代码注释

  • #include <graphics.h>:EasyX 图形库头文件,需确保编译器环境支持(如 Dev - C++ 可安装 EasyX 插件),用于创建窗口、画图。
  • initgraph(600, height):创建宽 600、高 1000 的图形窗口。
  • setfillcolor + fillcircle:设置填充颜色,画实心圆(小球初始位置)。
  • 小球跳起逻辑:按空格后,通过 for 循环让小球位置变化(y 递减),gravity 递减模拟 “重力变化”,cleardevice 清屏实现动画刷新,Sleep(10) 控制帧率。

四、总结与拓展方向

(一)知识回顾

  1. 基础输入输出:用 cin 读数据、cout 输出,结合 iomanip 控制格式(如保留小数)。
  2. 循环与条件:通过 for 循环遍历、if 判断,实现矩阵对角线求和等逻辑。
  3. 按键交互kbhit 检测按键、getch 读取按键,搭配无限循环实现实时响应。
  4. 图形扩展:EasyX 图形库实现简单动画(如小球跳起),让程序更生动。

(二)拓展建议

  1. 图形库深化:学习画直线、矩形、文字,甚至做小游戏(如 “接球游戏” ,小球下落 + 鼠标控制挡板接球)。
  2. 逻辑优化:给小球跳起加 “反弹” 效果(触顶后改变运动方向),或让重力逻辑更贴近物理公式。
  3. 用户交互升级:除了空格,监听方向键(如 ↑↓←→ )控制小球移动,拓展交互玩法。

通过以上案例,你已接触 C++ 控制台交互、简单算法逻辑,以及图形库基础应用。多修改代码、调整参数(比如小球重力、循环次数),就能更深入理解程序运行逻辑,慢慢写出更有趣的作品啦!

0 条评论

目前还没有评论...