C语言题目2-hello world打印进阶版

声明:因本人为非科班转码,个人水平有限,博客中难免有不准确之处,如有读者发现,本人恳请大家积极指出,本人也想知道自己的错误在哪里。欢迎大家一起指正,共同进步。

  • 联系方式:3146367553@qq.com

想直接看结论的小可爱可以直接跳转至4.总结。


目录

1.题目描述

2.题目分析

3.源代码

4.总结


1.题目描述

描述:演示hello world代码从两端移动,向中间汇聚,最终打印结果为 Hello World!

要求:必须是一个动态的过程


2.题目分析

①首先,我们需要理解题目意思。题目说从两端移动,向中间汇聚。大致意思就是先打印两端各自边上第一个字符,再打印两个,直到打印出Hello World!为止。

即:H**********!

       He*******d!

       ...

      Hello World!

②其次,我们需要动态打印。这些打印的字符串从哪里来?又该存放在哪里?因此,我们必须先定义一个字符串数组如arr1[]="***********",因为这是最先开始打印的版本,同时用来存放每次打印的值。同时,每次动态打印的值又该从哪里来?它总不可能是自动生成的,同时每次是变化的。这时,我们可以想到一个思路,结合每次打印结果不同,可以想象成有一个标准(即最终打印结果),每次给arr1两个值打印。因此,需要定义arr2[]="Hello World!".

③我们知道,它是每次打印两个边上的直到打印出““Hello World!””为止,是不是很符合循环?

④循环条件为打印出整个字符串为止,每次调整为左右边各打印一个字符。所以需要定义left=0,right=length-1(因为这是字符串有隐藏字符'\0')。同时,每次left+1,right-1,一直打印直到打印完整为止,即left<=right,因为当left>right时已经打印超出了。


3.源代码

#include <stdio.h>
#include <string.h>
#include <windows.h>//Sleep,system函数

int main()
{
    char arr1[] = "************";
    char arr2[] = "Hello World!";
    int left = 0;
    int right = strlen(arr2) - 1;
    for (; left <= right; left++, right--)
    {
        printf("%s\n", arr1);
        arr1[left] = arr2[left];
        arr1[right] = arr2[right];
        Sleep(500);//Sleep为睡眠函数,且S要大写
        //Sleep函数作用是让程序暂停当前线程的执行,即等待xxx毫秒
        system("cls");//清屏
    }
    printf("%s", arr1);

    return 0;
}

分析:前面分析已经给出了基本代码,就是for循环打印整个字符串(把arr2通过left和right慢慢赋值给arr1)。

此外,打印出来需要动态,即需要动态显示。那么我们可以把各个静态画面暂停组合而成的就是动态代码了。同时,可以采用system("cls")清屏函数,注意这里最后得在循环后面再添加一句打印arr1。Sleep函数里面输入的是毫秒数。


4.总结

首先我们需要明确题目意思,然后发现两端向中间汇聚找出其规律,发现它符合循环,即为打印整个字符串(lef<=right控制条件出现),同时分析打印数据存放位置和从哪里取值(打印的东西从哪里来)不难想出定义两个数组,一个为最开始,一个为结尾。同时,每次打印是有规律的,即为left++,right--。

创作不易,小可爱们,动动你们的小手点个赞再走呗。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值