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

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

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

相关推荐
电商API&Tina3 分钟前
电商数据采集 API 接口 全维度解析(技术 + 商业 + 合规)
java·大数据·开发语言·数据库·人工智能·json
liwulin050613 分钟前
【JSON】使用com.fasterxml.jackson解析json字符串
java·数据库·json
what丶k32 分钟前
深度解析:以Kafka为例,消息队列消费幂等性的实现方案与生产实践
java·数据结构·kafka
北极糊的狐35 分钟前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
星火开发设计36 分钟前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识
XRJ040618xrj38 分钟前
Nginx下构建PC站点
服务器·前端·nginx
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
We་ct1 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
仟濹1 小时前
【Java加强】1 异常 | 打卡day1
java·开发语言·python
有诺千金1 小时前
VUE3入门很简单(4)---组件通信(props)
前端·javascript·vue.js