- 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>
:提供fixed
、setprecision
等格式控制工具,让输出更灵活。double n
:用双精度浮点数存储输入,比float
精度更高,适合日常小数场景。fixed << setprecision(3)
:fixed
表示固定小数计数法,setprecision(3)
配合它,严格保留 3 位小数。
(二)矩阵对角线求和(循环与条件判断)
场景:输入 3×3 矩阵,计算 “左下角 → 右上角” 对角线元素和(比如矩阵 [[1,2,3],[3,4,5],[6,0,1]]
,对角线是 3
、4
、6
,和为 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)
控制帧率。
四、总结与拓展方向
(一)知识回顾
- 基础输入输出:用
cin
读数据、cout
输出,结合iomanip
控制格式(如保留小数)。 - 循环与条件:通过
for
循环遍历、if
判断,实现矩阵对角线求和等逻辑。 - 按键交互:
kbhit
检测按键、getch
读取按键,搭配无限循环实现实时响应。 - 图形扩展:EasyX 图形库实现简单动画(如小球跳起),让程序更生动。
(二)拓展建议
- 图形库深化:学习画直线、矩形、文字,甚至做小游戏(如 “接球游戏” ,小球下落 + 鼠标控制挡板接球)。
- 逻辑优化:给小球跳起加 “反弹” 效果(触顶后改变运动方向),或让重力逻辑更贴近物理公式。
- 用户交互升级:除了空格,监听方向键(如
↑↓←→
)控制小球移动,拓展交互玩法。
通过以上案例,你已接触 C++ 控制台交互、简单算法逻辑,以及图形库基础应用。多修改代码、调整参数(比如小球重力、循环次数),就能更深入理解程序运行逻辑,慢慢写出更有趣的作品啦!
0 条评论
目前还没有评论...