C# · 12月 20, 2021

C语言,奔跑吧,H!

前面我们已经学会了,如何通过while循环,并结合暂停命令sleep,清屏命令system(“cls”)来实现60秒倒计时。接下来我们将通过这些命令,来实现奔跑的字母H这个小程序。

**算法分析:****如何希望字母H从屏幕的左边跑到屏幕的右边呢?**也就是说第一秒的时候字母H在屏幕的第一行第一列,第二秒的时候字母H在屏幕的第二行第二列,第三秒时在屏幕的第三行第三列,以此类推。该如何实现呢?深入分析,我们知道,如果直接使用printf(“H”); ,字母H就会出现在屏幕的第一行第一列。那如何让字母出现在屏幕的第二行第二列,第三秒出现在屏幕的第三行第三列呢?我们可以用“空格”占位来实现。也就是说,在输出时先输出一个空格,再输出字母H,即printf(” H”); ,在H左边加一个空格来填充第一列,这样H就会出现在第二列。同样,如果希望字母H出现在第一行第三列,只要在输出的时候,在H的左边输出两个“空格”就好了。即printf(” H”); 。好,我们来尝试一下。

#include

#include//调用system函数

#include//调用Sleep函数。S是大写的。

main()

{ system(“color f4”);

system(“cls”);

printf(“H”);

Sleep(1000);

system(“cls”);

printf(” H”);

Sleep(1000);

system(“cls”);

printf(” H”);

}

怎么样?字母H从左边向右边移动了三步。用这种方法,我们也可以让字母移动50步,但是如果向上面这样写,我们需要复制粘贴50次,然后每一次都要修改printf语句里H前面的空格数,好麻烦。我们仔细分析一下上面的代码,有三个部分基本相同,只有printf语句里H前面的空格数不同,在第一部分字母H前面有0个空格,在第二个部分字母H前面有一个空格,在第三个部分字母H前面有两个空格。好了,只需要解决重复的做按空格这件事—第一部分字母H前面有0个空格,在第二个部分字母H前面有一个空格,在第三个部分字母H前面有两个空格,重复的操作交给计算机,我们来喝奶茶。可以用while循环来解决这个问题。

强调一下,我们需要解决的是:循环一次H在第一行第一列,即H前面有0个空格,循环两次H在第一行第二列,即H前面有一个空格,循环三次H在第一行第三列,即H前面有两个空格。我们发现空格的变化规律是:0,1,2.这与变量a的变化规律是一样的,第一次循环a的值为0,第二次循环a的值为1,第三次循环a的值2。也就是说,每次打印H的时候,同时在H的前面打印a个空格。**如何实现每次循环的时候,打印a个空格呢?**可以用循环嵌套来实现。

完整代码如下:

#include

#include//调用system函数

#include//调用Sleep函数。S是大写的。

main()

{ system(“color f4”);

int a,b;

a=0;

while(a<=2)

{ system(“cls”);

b=1;

while(b<=a)

{ printf(” “);//重复要做的事情是按空格。

b++;

}

printf(“H”);//重复要做的事情是输出H。

Sleep(1000);

a++;

}

}

在上述代码中,我们用外层循环来控制字母H的运动规律,用内层循环来实现字母H每运动一步需要打印多少个空格的规律。