啊哈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前面打印多少个空格。

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

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

相关推荐
蜗牛^^O^29 分钟前
Docker和K8S
java·docker·kubernetes
从心归零1 小时前
sshj使用代理连接服务器
java·服务器·sshj
咩咩大主教1 小时前
C++基于select和epoll的TCP服务器
linux·服务器·c语言·开发语言·c++·tcp/ip·io多路复用
时光飞逝的日子1 小时前
多重指针变量(n重指针变量)实例分析
c语言·指针·多重指针·双重指针·n重指针·指针变量
IT毕设梦工厂2 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Jiaberrr2 小时前
前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)
前端·javascript·vue.js·微信小程序·uni-app
everyStudy2 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
城南云小白2 小时前
web基础+http协议+httpd详细配置
前端·网络协议·http
前端小趴菜、2 小时前
Web Worker 简单使用
前端
web_learning_3212 小时前
信息收集常用指令
前端·搜索引擎