• C语言代码训练(一)


    今天我们先来讲解一道C语言的经典例题,也是从零开始系列中的一道课后练习题。

    请用控制台程序绘制如下图案。

    循环经典例题

    分析情况

    这个题目是要求打印30行"*",每行打印的个数不同。通过这个信息,我们应该立刻反映出运用循环来完成。那么我们想想,在循环部分我们都学到了什么。

    关于循环,我首先会想到一些例题:

    例题1

    打印30个"*",每个"*"占一行。

    int i;for (i = 0; i < 30; i++)
    {    printf("*
    ");
    }

    例题2

    打印一行"*",个数为30

    int i;for (i = 0; i < 30; i++)
    {    printf("*");
    }

    这两个题目的代码只差一个 ,结果却完全不同。掌握了这两个例题,我们自然能够完成下面这个例题了。

    例题3

    打印一个由"*"组成的30行30列的矩阵。

    int main(){    int i, j;    for (i = 0; i < 30; i++)
        {        for (j = 0; j < 30; j++)
            {            printf("*");
            }        printf("*
    ");
        }    return 0;
    }

    执行结果如下:

    30*30矩阵

    我们再把例3的要求改一改,要求如下

    例题4

    打印30行“*”。第一行打印1个“*”,第二行打印3个“*”,第三行打印5个“*”,... ,第三十行打印59个“*”。

    在前面的程序中,我们用变量i控制行的循环,变量j控制列的循环。i的范围0~29,j的范围0~29。那么在例题4中,i和j有什么样的关系呢?

    • 第一行:i = 0; j循环1次

    • 第二行:i = 1; j循环3次

    • 第三行:i = 2; j循环5次

    • ...

    • 第三十行:i = 29; j循环59次

    于是得到这样一个关系:

    第n行:i = n - 1; j循环2i + 1次

    那么如何实现循环2i + 1次呢,就是让j从0到2i + 1。

    按照这个思路,可以得到下面的代码:

    #include <stdio.h>#define LINE 30int main(){    int i, j;    for (i = 0; i < LINE; i++)
        {        for (j = 0; j < 2 * i + 1; j++)
            {            printf("*");
            }        printf("
    ");
        }    return 0;
    }

    执行结果如下:

    例题4

    这里要说一个问题,其实for循环有两种常见形式:

    for (i = 0; i < n; i++)

    for (i = 1; i <= n; i++)

    这种写法执行的次数相同,可以相互代替。大部分C语言程序员喜欢第一种方式,因为数组的下标访问是从0开始的,这样写更方便。目前大家可以选择自己喜欢的方法。

    好了,回到例题中来。现在我们的代码距离目标输出已经很接近了,缺少的是在每行“*”之前需要输入不同数量的空格。我们分析i和空格数量,可以得到如下关系:

    每行输出LINE - i个空格

    于是,我们得到了最终的实现程序。

    答案

    #include <stdio.h>#define LINE 30int main(){    int i, j;    for (i = 0; i < LINE; i++)
        {        for (j = 0; j < (LINE - i); j++)
            {            printf(" ");
            }        for (j = 0; j < 2 * i + 1; j++)
            {            printf("*");
            }        printf("
    ");
        }     return 0;
    }

    运行一下这段代码,你会看到打印结果就是最前面的那张图。

    课后练习

    自己编写代码,打印出下面这张图。

    菱形   更多的题型请点击这里

  • 相关阅读:
    SpringMvc的执行机制和环境搭建
    Flexbox,更优雅的布局
    Laravel框架 mysql 数据库 —— 基本使用
    在 Windows 上安装 Laravel 5.x
    javascript 中的借鸡生蛋
    由斐波那契数列所引发的性能优化
    成为一名优秀的Web前端开发者
    H5之contenteditable
    ionic 集锦
    vm10虚拟机安装Mac OS X10.10教程[转]
  • 原文地址:https://www.cnblogs.com/gzgb/p/7220443.html
Copyright © 2020-2023  润新知