C语言心型代码解析

news2024/11/8 7:30:57

方法一 心型极坐标方程

爱心代码你真的理解吗

笛卡尔的心型公式:
在这里插入图片描述

for (y = 1.5; y > -1.5; y -= 0.1) 
        for (x = -1.5; x < 1.5; x += 0.05) 

代码里面用了二个for循环,第一个代表y轴,第二个代表x轴
在这里插入图片描述
在这里插入图片描述
二个增加的单位不同,能使得它不是长方形,正方形。
下面x轴增加的少,能使得打印出来的图像不是很方正。

在这里插入图片描述
看左边公示图。相当于x轴左移,拉宽了心形。

效果如下:
在这里插入图片描述
看左边公示图。相当于x轴左移,拉宽了心形。

带入公式: a = x * x + y * y - 1; 表达式 (a * a * a - x * x * y * y * y);
如果这个值大于0,说明在心形的范围内,打印出来。

代码如下:

if ((a * a * a - x * x * y * y * y) <= 0.0) {
            // 判断条件,如果表达式 (a * a * a - x * x * y * y * y) 的结果小于等于 0.0。

                printf("*");
                // 如果满足条件,打印一个星号,表示该坐标点在爱心图案内。

            } else {
                printf(" ");
                // 如果不满足条件,打印一个空格,表示该坐标点不在爱心图案内。
            }

注意:每行输出完我们我们要换行,所以for (y = 1.5; y > -1.5; y -= 0.1) {}每行输出完要加一个换行符号:

  printf("\n");
        // 内层循环结束后,打印一个换行符,开始下一行的输出。

整体代码:

#include <stdio.h>
// 引入标准输入输出头文件,用于使用输入输出函数如 printf。

#include <Windows.h>
// 引入 Windows 系统相关的头文件,这里可能是为了使用 system 函数来设置控制台颜色。

int main() {
    system("color 0c");
    // 调用 system 函数执行命令 "color 0c",设置控制台颜色为背景黑色,前景淡红色。

    float x, y, a;
    // 定义三个浮点型变量 x、y、a,用于存储坐标和中间计算结果。

    for (y = 1.5; y > -1.5; y -= 0.1) {
    // 外层循环,控制 y 的值从 1.5 逐渐减小到 -1.5,每次减少 0.1。这个循环将遍历爱心图案的纵向范围。

        for (x = -1.5; x < 1.5; x += 0.05) {
        // 内层循环,控制 x 的值从 -1.5 逐渐增加到 1.5,每次增加 0.05。这个循环将遍历爱心图案的横向范围。

            a = x * x + y * y - 1;
            // 计算变量 a 的值,a 是根据当前坐标 x 和 y 计算得到的中间结果。

            if ((a * a * a - x * x * y * y * y) <= 0.0) {
            // 判断条件,如果表达式 (a * a * a - x * x * y * y * y) 的结果小于等于 0.0。

                printf("*");
                // 如果满足条件,打印一个星号,表示该坐标点在爱心图案内。

            } else {
                printf(" ");
                // 如果不满足条件,打印一个空格,表示该坐标点不在爱心图案内。

            }
        }
        Sleep(150); //每行输出间隔150毫秒 
        printf("\n");
        // 内层循环结束后,打印一个换行符,开始下一行的输出。

    }
    return 0;
    // 主函数返回 0,表示程序正常结束。
}

简单的for循环嵌套 心型代码(for循环嵌套)(手机编译器也能运行)

1.程序分析

在这里插入图片描述

首先我们看这个心型分为二部分,上面前一二行到第三行是逐渐递增的。
在这里插入图片描述
是不是?😃

那么我们这里就可以分为二部分:

上半部分,星号递增和下半部分,星号递减

2. 首先定义个变量,后面会知道它的含义

int i, j; //后面for 计数用的
    int n = 6; // 可以调整心型的大小

这里定义了两个整型变量i和j,用于在后续的循环中控制迭代次数和作为计数器。

同时,定义了变量n并初始化为 6,这个变量的作用是控制心型图案的大小。可以通过修改n的值来调整心型图案的尺寸,更大的n值会使心型图案更加宽大,而较小的n值则会使心型图案更加紧凑。

3.上半部分星型代码分析

在这里插入图片描述


左边空格打印

在这里插入图片描述

首先假设我们这里初始设置n=6

    // 上半部分 左边空格
    for (i = n / 2; i <= n; i =i+2) {
        // 打印左边的空格
        for (j = 1; j < n - i; j =j+2) {
            printf(" ");
        }

我们看下执行过程:

  1. 初始设置 n = 6,外层循环 for (i = n / 2; i <= n; i = i + 2) 从 i = 6/2 = 3 开始,每次循环 i 增加 2,直到 i <= n(即 i <= 6)。

  2. 内层循环 for (j = 1; j < n - i; j = j + 2) 在每次外层循环执行时都会根据当前的 i 值来确定循环次数。

  3. 第一次外层循环(i = 3)
    此时,外层循环中 i = 3。
    进入内层循环,j 的循环条件是 j < n - i,即 j < 6 - 3 = 3。
    内层循环从 j = 1 开始,每次增加 2。所以,内层循环执行一次,打印一个空格。

  4. 第二次外层循环(i = 5)
    外层循环中 i = 5。
    进入内层循环,j 的循环条件变为 j < 6 - 5 = 1。实际上,内层循环不执行。

  5. 第三次外层循环(i = 6)
    外层循环中 i = 6。
    进入内层循环,j 的循环条件变为 j < 6 - 6 = 0。内层循环不执行

综上所述,这个代码片段的作用是在心型图案的上半部分,根据 i 的不同值,在每一行的开头打印特定数量的空格,随着 i 的增加,打印的空格数量逐渐减少,从而构建出心型上半部分的左边部分形状


以下是对这段代码中出现的 “n/2” 和 “j<n-i” 的解释:
一、为什么外层循环起始值是 n/2:
心型图案的结构特性:心型图案上半部分较为尖锐,从中间开始逐渐变宽。如果从 n 或者一个较大的值开始外层循环,会导致上半部分起始太宽,不符合心型的形状特征。而从 n/2 开始,可以让上半部分的循环从一个相对较窄的地方开始,逐渐向中间扩展,更符合心型的形状特点。

控制循环次数和对称性:选择 n/2 作为起始值,可以更好地控制上半部分的循环次数,使得上半部分的形状与下半部分相呼应,保证心型图案的对称性。如果起始值选择不当,可能会导致上半部分形状不自然或者循环次数过多或过少,影响心型图案的美观和准确性。

二、为什么内层循环条件是 j<n-i
构建心型形状:这个条件是为了控制每一行左边空格的数量。随着外层循环变量 i 的增加,心型上半部分逐渐变宽,需要打印的空格数量逐渐减少。通过 j<n-i 这个条件,当 i 增大时,n-i 的值变小,从而使得内层循环执行的次数减少,打印的空格数量也相应减少。

形成渐变效果:这种设计可以让心型上半部分从两边向中间逐渐变窄,形成一种渐变的效果。如果内层循环条件设置不当,可能会导致空格数量的变化不合理,影响心型图案的形状。例如,如果将条件改为 j<n,那么每行打印的空格数量将与 i 无关,无法形成心型上半部分的渐变效果。


左边星号打印

在这里插入图片描述

   // 打印左边的星号
        for (j = 1; j <= i; j++) {
            printf("*");
        }
  1. 循环条件
    循环初始条件为 j = 1,即从第一个位置开始考虑打印星号。
    循环条件为 j <= i,这意味着循环会持续进行直到 j 等于当前外层循环中的 i 值。当外层循环中的 i 增大时,这个循环会打印更多的星号,从而形成心型上半部分逐渐变宽的效果。

  2. 打印操作
    在循环体内,每次执行都会打印一个星号 printf(“*”);。这样,随着循环的进行,会连续打印出多个星号。
    例如,当外层循环中的 i 为 3 时,内层循环会执行 3 次,打印出三个星号。当 i 为 5 时,会打印出五个星号。通过这种方式,逐步构建出心型上半部分左边的星号部分,与前面打印的空格相结合,共同塑造心型的形状


现在完成上半部左边的了

在这里插入图片描述


中间的空格

在这里插入图片描述

   // 打印中间的空格
        for (j = 1; j <= n - i; j++) {
            printf(" ");
        }
  1. 循环条件
    循环初始条件为 j = 1,从第一个位置开始考虑打印空格。
    循环条件为 j <= n - i,这里随着外层循环中 i 的增大,n - i 的值会逐渐减小。这意味着随着心型图案上半部分的行数增加,中间的空格数量会逐渐减少。
  2. 打印操作
    在循环体内,每次执行都会打印一个空格 printf(" ");。这样,随着循环的进行,会连续打印出多个空格。
    例如,当外层循环中的 i 较小时,n - i 的值较大,会打印较多的空格,使得心型图案上半部分的左右两侧星号之间有较大的间隔。随着 i 的增大,中间的空格数量减少,左右两侧的星号逐渐靠近,形成心型上半部分逐渐变窄的效果。
  3. 总的来说,这段代码的作用是在当前行打印出适当数量的空格,作为心型上半部分左右两侧星号之间的间隔,通过控制空格的数量,与前面打印的左边星号和后面打印的右边星号共同构建出心型图案上半部分的形状。

右边的星号

在这里插入图片描述

前面的左边空格, 左边星号,中间空格我们已经打印出来了
所以直接j<=i 行号,打印星号就行了:

在这里插入图片描述

   // 打印右边的星号
        for (j = 1; j <= i; j++) {
            printf("*");
        }
  1. 循环条件分析
    循环初始条件为 j = 1,从第一个位置开始准备打印星号。
    循环条件为 j <= i,这里的 i 是外层循环中的变量,随着外层循环的进行不断变化。当 i 增大时,这个循环会打印更多的星号,与左边星号的数量保持一致。

  2. 打印操作的意义
    在循环体内,每次执行都会打印一个星号 printf(“*”);。这样,随着循环的进行,会连续打印出多个星号,形成心型图案上半部分右边的星号部分。

  3. 通过打印与左边星号数量相同的右边星号,使得心型图案上半部分在视觉上具有对称性。左右两边的星号和中间的空格共同构成了心型上半部分的形状。
    例如,当外层循环中的 i 为 4 时,内层循环会执行 4 次,打印出四个星号作为右边的星号部分。这与左边的四个星号相对应,中间再加上适当数量的空格,就呈现出心型上半部分的一部分形状。


上半部分完成了:
在这里插入图片描述

注意:我们每次一行结束了要换行,所以上半部分for循环最后加一个printf(“\n”)

上半部分循环代码:

 // 上半部分
    for (i = n / 2; i <= n; i += 2) {
        // 打印左边的空格
        for (j = 1; j < n - i; j += 2) {
            printf(" ");
        }
//
        // 打印左边的星号
        for (j = 1; j <= i; j++) {
            printf("*");
        }

        // 打印中间的空格
        for (j = 1; j <= n - i; j++) {
            printf(" ");
        }

        // 打印右边的星号
        for (j = 1; j <= i; j++) {
            printf("*");
        }

        printf("\n");
    }

4. 下边部分代码分析

在这里插入图片描述

我们是不是从最宽的往下递减了。

 // 下半部分
    for (i = n; i >= 1; i--) {
        // 打印左边的空格
        for (j = i; j < n; j++) {
            printf(" ");
        }

        // 打印星号
        for (j = 1; j <= (i * 2) - 1; j++) {
            printf("*");
        }

        printf("\n");
    }
  1. 下半部分整体循环
    外层循环 for (i = n; i >= 1; i–):
    这个循环控制心型图案的下半部分。它从 i = n 开始,逐步递减到 i = 1,这样可以从心型最宽的部分开始,逐渐向底部变窄,构建出心型的下半部分形状。
    随着 i 的减小,每一行的状态都会发生变化,从而实现心型下半部分的逐渐收缩。

  2. 打印左边的空格
    内层循环 for (j = i; j < n; j++):
    这个循环用于打印每一行左边的空格。随着 i 的减小,j 的循环次数逐渐增加,即左边的空格数量逐渐增多。
    这是因为当 i 较大时,代表当前行靠近心型的中部较宽处,此时左边的空格较少;而当 i 减小时,代表当前行靠近心型底部较窄处,左边的空格就需要增多,以形成心型下半部分的形状。

  3. 打印星号
    内层循环 for (j = 1; j <= (i * 2) - 1; j++):
    这个循环用于打印每一行的星号。随着 i 的减小,星号的数量也在逐渐减少。
    (i * 2) - 1 的计算方式确保了星号的数量与当前行的位置 i 相关联。当 i 较大时,星号数量较多;当 i 减小时,星号数量相应减少,符合心型下半部分逐渐变窄的形状要求。

  4. 换行操作
    printf(“\n”);:在每一行的星号打印完成后,进行换行操作,以便打印下一行的心型图案。

综上所述,这段代码通过两个内层循环和外层循环的配合,精确地控制了每一行左边空格和星号的数量,从而成功地构建出心型图案的下半部分。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2235656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11月7日(内网横向移动(二))

利用系统服务 SCShell SCShell是一款利用系统服务的无文件横向移动工具。与传统的创建远程服务的方法不同&#xff0c;SCShell利用提供的用户凭据&#xff0c;通过ChangeServiceConfigA API修改远程主机上的服务配置&#xff0c;将服务的二进制路径名修改为指定的程序或攻击载…

【YOLOv11[基础]】目标检测OD | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO11.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

力扣—不同路径(路径问题的动态规划)

文章目录 题目解析算法原理代码实现题目练习 题目解析 算法原理 状态表示 对于这种「路径类」的问题&#xff0c;我们的状态表示⼀般有两种形式&#xff1a; i. 从[i, j] 位置出发。 ii. 从起始位置出发&#xff0c;到[i, j] 位置。 这⾥选择第⼆种定义状态表⽰的⽅式&#xf…

传统RAG流程;密集检索器,稀疏检索器:中文的M3E

目录 传统RAG流程 相似性搜索中:神经网络的密集检索器,稀疏检索器 密集检索器 BGE系列模型 text-embedding-ada-002模型 M3E模型 稀疏检索器 示例一:基于TF-IDF的稀疏检索器 示例二:基于BM25的稀疏检索器 稀疏检索器的特点与优势 传统RAG流程 相似性搜索中:神经…

Javascript 获取设备信息 工具

JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏览器信息、生成浏览器指纹、日期、生肖、周几等) Get Device Info Online GitHub - skillnull/DeviceJs: JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏…

【数据仓库】

1、概述 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。 数据仓库是企业中用于集中存储和管理来自多个源的经过处理和组织的数据的系统。它为复杂的查询和分析提供了一个优化的环境&#xff0c;使得用户能够执行高级数据分析&#xff0c;以支持…

成都栩熙酷网络科技有限公司抖音小店探索

在数字经济的浪潮中&#xff0c;电商行业正以前所未有的速度蓬勃发展&#xff0c;而短视频平台的崛起更是为这一领域注入了新的活力。成都栩熙酷网络科技有限公司&#xff08;以下简称“栩熙酷”&#xff09;&#xff0c;作为这股浪潮中的佼佼者&#xff0c;凭借其敏锐的市场洞…

基于ViT的无监督工业异常检测模型汇总

基于ViT的无监督工业异常检测模型汇总 论文1&#xff1a;RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection&#xff08;2024&#xff09;1.1 主要思想1.2 系统框架 论文2&#xff1a;Inpainting Transformer for Anomaly Detecti…

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼&#xff0c;你准备怎么做&#xff0c;你会将活鱼红烧或将死鱼清蒸吗&#xff1f;好的食材只需要最简单的烹饪&#xff0c;不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点&#xff0c;广域网就是那条死鱼&#xff0c;数据中心则是那条活鱼。…

基于Python的旅游景点推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

程序员的生活周刊 #7:耐克总裁被裁记

0. 庙宇 这张图来自 Tianshu Liu&#xff0c; 被树木环绕的宝塔庙宇 1. 耐克总裁 耐克最近的总裁 John Donahoe 干了 5 年&#xff0c;终于被裁掉了。 这位总裁即不了解球鞋文化&#xff0c;也没有零售经验&#xff0c;但不懂事的董事会还是聘用它&#xff0c;寄托把耐克从运…

全面解析:区块链技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 区…

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

每日OJ题_牛客_春游_贪心+数学_C++_Java

目录 牛客_春游_贪心数学 题目解析 C代码 Java代码 牛客_春游_贪心数学 春游 描述&#xff1a; 盼望着&#xff0c;盼望着&#xff0c;东风来了&#xff0c;春天脚步近了。 值此大好春光&#xff0c;老师组织了同学们出去划船&#xff0c;划船项目收费如下&#xff1a;…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

设计者模式之策略模式

前言 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都写在对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…

MetaGeneMark:宏转录组转录本基因预测

GeneMark™ download 下载 gunzip gm_key_64.gz tar -xvzf MetaGeneMark_linux_64.tar.gz #查看安装 (完整路径)/gmhmmp #解压文件里面这个比较重要 MetaGeneMark_linux_64/mgm/MetaGeneMark_v1.mod #复制gm_key文件到主路径 mv gm_key_64 .gm_key cp .gm_key /home/zhongpei…

阿里云-防火墙设置不当导致ssh无法连接

今天学网络编程的时候&#xff0c;看见有陌生ip连接&#xff0c;所以打开了防火墙禁止除本机之外的其他ip连接&#xff1a; 但是当我再次用ssh的时候&#xff0c;连不上了才发现大事不妙。 折腾了半天&#xff0c;发现阿里云上可以在线向服务器发送命令&#xff0c;所以赶紧把2…

【go从零单排】Strings and Runes 字符串和字符

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 概念 在Go语言中&#xff0c;rune 是一个内置的数据类型&#xff0c;用于表示一个Unicode字符。它实际上是一个别名…

JDK1.5 java代码打包jar HmacSha256

文章目录 demo地址背景实现编写代码编译class文件打包 JAR 文件执行生成的 JAR 文件辅助验证方式 常见问题和解决方法常规生成jar方案maven插件idea工具 demo地址 https://github.com/xiangge-zx/HmacSha256 背景 最近接到一个需求,做一个可以用来HmacSha256加密的小工具&am…