云课五分钟-02第一个代码复现-终端甜甜圈C++

前篇


云课五分钟-01课程在哪里-无需安装网页直达-


代码复现通过云课,会非常快捷。


视频

云课五分钟-02第一个代码复现-终端甜甜圈C++


文本

如何使用g++

使用g++编译和链接C++程序的基本步骤如下:

  1. 编写源代码 :首先,你需要编写C++源代码,并保存为.cpp文件。例如,你可以创建一个名为hello.cpp的文件,其中包含一个简单的Hello World程序。

  2. 打开终端:打开你的终端或命令行界面。

  3. 导航到源代码目录 :使用cd命令导航到包含源代码文件的目录。例如,如果你的源代码文件在名为my_project的目录中,你可以使用cd my_project进入该目录。

  4. 使用g++编译代码:使用g++编译你的源代码。基本的语法是:

|---|--------------------------|
| | g++ [options] filename |

例如,要编译hello.cpp文件,你可以输入以下命令:

|---|--------------------------|
| | g++ -o hello hello.cpp |

在上面的命令中,-o hello指定输出文件的名称,即生成的可执行文件将命名为hello

  1. 运行可执行文件 :如果编译成功,g++将生成一个可执行文件。在上面的示例中,它将生成一个名为hello的可执行文件。你可以通过在终端中输入以下命令来运行它:

|---|-----------|
| | ./hello |

如果一切顺利,它将运行你的程序并显示输出。

请注意,这只是使用g++的基本方法。g++有很多编译选项和参数可以使用,包括优化级别、警告级别、调试信息等。你可以通过查阅g++的文档或使用man g++命令在终端中查看更多详细信息。

此外,对于大型项目,通常使用构建系统(如Make或CMake)来自动化编译和构建过程,以确保代码的正确组织和高效编译。

蓝桥ROS机器人之C++系列奇妙甜甜圈_c++ 甜甜圈


cpp 复制代码
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <unistd.h>
 
int main() {
    float A = 0, B = 0;
    float i, j;
    int k;
    float z[1760];
    char b[1760];
    printf("\x1b[2J");
    for (;;) {
        memset(b, 32, 1760);
        memset(z, 0, 7040);
        for (j = 0; j < 6.28; j += 0.07) {
            for (i = 0; i < 6.28; i += 0.02) {
                float c = sin(i);
                float d = cos(j);
                float e = sin(A);
                float f = sin(j);
                float g = cos(A);
                float h = d + 2;
                float D = 1 / (c * h * e + f * g + 5);
                float l = cos(i);
                float m = cos(B);
                float n = sin(B);
                float t = c * h * g - f * e;
                int x = 40 + 30 * D * (l * h * m - t * n);
                int y = 12 + 15 * D * (l * h * n + t * m);
                int o = x + 80 * y;
                int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);
                if (22 > y && y > 0 && x > 0 && 80 > x && D > z[o]) {
                    z[o] = D;
                    b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
                }
            }
        }
        printf("\x1b[H");
        for (k = 0; k < 1761; k++) {
            putchar(k % 80 ? b[k] : 10);
            A += 0.00004;
            B += 0.00002;
        }
        usleep(30000);
    }
    return 0;
}

这段代码是一个基于终端的动画程序,它在终端中生成一个动态变化的图形。该程序使用了一系列数学函数(如正弦、余弦)来计算出图形上每个点的位置,然后将这些点绘制到终端上。下面是对代码的详细分析:

  1. 包含头文件:程序包含了必要的头文件,包括标准输入输出库stdio.h,数学库math.h,字符串处理库cstring和Unix标准库unistd.h
  2. 变量声明:在main()函数中,声明了一些变量,包括浮点数A、B、i、j和整数k。还声明了两个大小为1760的浮点数组z和字符数组b。
  3. 清屏操作:使用printf("\x1b[2J");清空终端屏幕。
  4. 无限循环:程序进入一个无限循环,循环体中的代码用于生成动画效果。
  5. 初始化操作:在每次循环开始时,使用memset()函数对字符数组b和浮点数组z进行初始化。
  6. 双重循环:使用两层嵌套循环,循环变量为i和j,它们的初始值都为0,分别每次增加0.02和0.07,直到达到6.28。
  7. 计算:在循环中,进行一系列的数学计算,包括正弦、余弦等函数的计算,以及一些浮点数的加减乘除运算。
  8. 判断和赋值:根据计算结果,判断某些条件是否满足,如判断y的范围和x的范围,以及D是否大于z[o]等。如果条件满足,则更新数组z和b中对应元素的值。
  9. 打印图形:使用printf("\x1b[H");将光标移动到终端的左上角位置,然后通过循环遍历数组b,将字符逐个输出到终端上。同时,A和B的值也在每次循环中微调,以实现动画效果。
  10. 延时:使用usleep(30000);函数使程序暂停30毫秒,以控制动画的速度。

总结起来,这段代码通过数学计算生成图形,并在终端上动态显示该图形。通过调整A和B的值,以及使用延时函数,实现了动画效果。整个程序运行在一个无限循环中,除非手动终止程序,否则它将一直运行下去。


相关推荐
矛取矛求2 分钟前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生2 分钟前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it16 分钟前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
是娜个二叉树!33 分钟前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
Schwertlilien36 分钟前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习
liuyunshengsir39 分钟前
Squid代理服务器的安装使用
开发语言·php
只做开心事1 小时前
C++之红黑树模拟实现
开发语言·c++
很楠不爱1 小时前
项目实战——高并发内存池
开发语言·项目实战
程序员buddha2 小时前
C语言从入门到放弃教程
c语言·开发语言
程序员老冯头2 小时前
第十五章 C++ 数组
开发语言·c++·算法