啊哈c语言——逻辑挑战5:奔跑的字母

之前我们已经学习了如何通过while循环,并结合暂停命令Sleep和 清屏幕命令system("cls")来实现"倒计时",本节我们将通过这些命令编写一个"奔跑的字母"的程序。 首先我们想一下,如果希望一个字母(假设这个字母是H)从屏幕的左边往右边跑,即第一秒时字母H在屏幕的第一行的最左边(也就是第一行第一列),第二秒时字母H在屏幕第一行的第二列,第三秒时字母H在屏幕第一行的第三列,以此类推,该怎么实现呢? 我们知道,如果直接使用printf("H");字母H就会出现在屏幕的 第一行第一列,即最靠近左上角的位置。那如何让字母H在屏幕的第一行第二列呢?我们可以用"空格"来占位。也就是说,在输出时先输出一个空格,再输出字母H,即printf(" H");(在H左边加一个空格来填充第一列,这样H就会出现在第二列)。同样,如果希望字母H在第一行第三列的话,只需在输出时,在H左边多加两个空格就可以了,即 printf(" H");好了,我们来尝试一下。

怎么样?字母H是不是从左边向右边移动了3步。用这种方法,我们也可以让字母移动50步,但是如果像上面这样写,是不是太麻烦了, 我们需要复制粘贴50次,然后每一次都要修改printf语句中字母H前面空格的个数,真是太麻烦了。

我们仔细分析一下上面这段代码,有3个部分基本上相同,只有 printf语句中字母H前面的"空格"的个数不同,在第1部分字母H前面有0 个空格,在第2部分字母H前面有1个空格,在第3部分字母H前面有2个空格。我们便想到了用while循环解决这个问题。

首先,仔细观察之前的代码你就会发现,其中有3段代码是差不多的。我们可以用while循环3次来解决重复的问题,代码如下:

运行一下你会发现,字母H并没有向右移动。这是为什么呢?因为 在上面的while循环中,虽然循环了3遍,但是每次循环输出的都是 printf("H");,字母H的左边并没有空格,所以字母H并没有向右边跑。把printf("H");改为printf(" H");也不行,那样每次输出的都 是字母H在第一行第二列的位置,字母H会一直停留在第一行第二列, 不会往右边跑。需要解决的是,在循环第1次时H在第一列,即H前面有 0个空格;循环第2次时H在第二列,即H前面有1个空格;循环第3次时H 在第三列,即H前面有2个空格。

我们发现每次循环空格的变换规律是0、1、2,这恰好和变量a的变 化规律是一样的。第1次循环时变量a的值为0,第2次循环时变量a的值 为1,第3次循环时变量a的值为2。也就是说每次循环时,在打印字母"H"前,打印a个空格就可以了。可是如何使每次循环输出a个空格呢?这里我们需要用到while循环的嵌套。代码如下:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
    int a, b;
    a=0;
    while(a<=2)
    {
        system("cls");
        b=1;
        while(b<=a)
        {
            printf(" ");
            b=b+1;
        }
        printf("H");
        Sleep(1000);
        a=a+1;
    }
    system("pause");
    return 0;
}

在上面这段代码中,我们利用while a循环来控制字母H一共需要走多少步,利用while b循环来控制字母H每走一步需要在字母H前面打印多少个空格。

下面我们来仔细分析一下上面这段代码。

计算机自顶向下一步步执行:

相关推荐
程序员黑豆9 小时前
鸿蒙应用开发:Flex 组件从入门到实战
前端·华为·harmonyos
大爱编程♡9 小时前
Vue3+TypeScript+element-plus的文章管理项目(配后端接口)-退出及文章管理页面
前端·javascript·typescript
先吃饱再说9 小时前
React 组件设计:从 Props 传递到组件封装
前端·react.js
独立开阀者_FwtCoder9 小时前
最近做了一个健身小程序:智形健身助手,健身的佬们来提点意见
前端·javascript·github
舒灿9 小时前
喵ing Tab 1.0.0 正式发布
前端·ai编程
葡萄城技术团队9 小时前
当表格数据来自外部系统:SpreadJS 如何让异步公式一键刷新
前端
小徐_23339 小时前
Open Wot 1.0.5 发布:让 AI 接入 wot-ui,只需要两条命令
前端·uni-app·ai编程
Android研究员9 小时前
Android进阶之事件分发机制深度剖析
android·前端·面试
Csvn9 小时前
🛡️ 前端水印方案全解析——从「能被 F12 删掉」到「删不掉」的反破解实战
前端
weixin_727535629 小时前
MinIO大文件上传深度拆解:从原理到生产落地的完整指南
java·中间件