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

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

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

相关推荐
装不满的克莱因瓶35 分钟前
【踩坑】IDEA提交Git .gitignore忽略文件不起作用
java·git·.gitignore·踩坑
专注于大数据技术栈42 分钟前
java学习--Collection的迭代器
java·python·学习
wx_lidysun5 小时前
Nextjs学习笔记
前端·react·next
无羡仙7 小时前
从零构建 Vue 弹窗组件
前端·vue.js
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜8 小时前
Python入门篇【文件处理】
android·java·python
源心锁8 小时前
👋 手搓 gzip 实现的文件分块压缩上传
前端·javascript
Java 码农8 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
哈库纳玛塔塔8 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
你怎么知道我是队长9 小时前
C语言---typedef
c语言·c++·算法