C语言编程基础入门经典100题(1-10)-简书_c语言简单代码

C语言编程基础入门经典100题(1-10)-简书_c语言简单代码今天我们先来讲解一道C语言的经典例题,也是从零开始系列中的一道课后练习题。请用控制台程序绘制如下图案。循环经典例题分析情况这个题目是要求打印30行"*",每行打印的个数不同


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

C语言编程基础入门经典100题(1-10)-简书_c语言简单代码

 

循环经典例题

分析情况

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

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

例题1

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

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

例题2

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

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

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

例题3

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

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

执行结果如下:

C语言编程基础入门经典100题(1-10)-简书_c语言简单代码

 

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("\n");    }    return 0; }

执行结果如下:

C语言编程基础入门经典100题(1-10)-简书_c语言简单代码

 

例题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("\n");    }     return 0; }

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

课后练习

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

C语言编程基础入门经典100题(1-10)-简书_c语言简单代码

 

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167860.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • portraiture 3 for mac(PS人像磨皮滤镜插件)激活成功教程教程

    portraiture 3 for mac(PS人像磨皮滤镜插件)激活成功教程教程Portraiture3forMac是PS中优秀的人像磨皮滤镜插件,portraiture3mac激活成功教程版可以对皮肤、头发、眉毛、睫毛等部位进行磨皮润色处理,还能自由调整锐度、柔软度、亮度、对比度等,这里为大家带来portraiture滤镜的激活成功教程教程,赶紧来看看吧!portraiture激活成功教程步骤下载好Portraiture安装包后,点击打开Portraiture.dmg,双击【…

    2022年7月22日
  • UML 包图

    UML 包图什么是包包可直接理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次。•在面向对象软件开发的视角中,类显然是构建整个系统的基本构造块。但是对于庞大的应用系统而言,其包

    2022年8月1日
  • Linux 常用的zip压缩和解压命令详解

    Linux 常用的zip压缩和解压命令详解前言  嗨,大家好,又与大家见面了,感谢大家在2021年的陪伴,让我们在2022年继续一路前行。相信很多小伙伴在使用Linux系统中经常对文件进行或者文件夹进行操作,不像在Windows中可以使用可视化的工具对文件和文件夹进行压缩和解压操作,那么本次与大家一起学习Linux下zip和unzip的压缩和解压命令,并熟悉常用的参数介绍。常用命令  相信很多对于有一定Linux基础的小伙伴,常用的压缩有:zip、unzip、tar、gzip、bzip2等常用的命令,下面开始zip和unzip使用方法和参数详

    2022年6月7日
  • winrar下载_标致408后尾晃完美解决方案

    winrar下载_标致408后尾晃完美解决方案本文参考撸Linux的文章https://www.lulinux.com/archives/13192018年wineQQ最完美解决方案(多Linux发行版通过测试并稳定运行)腾讯官方早就在10年代初就停止运营Linux版QQ,然而民间折腾Linux版QQ的脚步从来没停过。时至今日,它总算有了完美无暇的方案——deepinwine系列。要感谢deepin公司的最大努力。也…

    2022年9月5日
  • 输入代码自动生成名称_变量命名工具codelf

    输入代码自动生成名称_变量命名工具codelfCodeifCodeIfhttps://unbug.github.io/codelf/包含流行语言,java,c,javaScript,python等等

    2022年9月21日
  • Android listview中使用checkbox「建议收藏」

    Android listview中使用checkbox「建议收藏」最近比较忙碌,我也不知道忙的什么东西,打算写的博客写了一半,还没写完,今天先扯一扯项目中遇到的一个问题,一方面防止以后遇到这个问题忘记如何解决,另一方面希望可以提供给遇到同样问题的朋友一个思路.下面开始正题,在listview的item中使用checkbox,当你按照普通的listview的用法使用时,你会遇到下面这样的问题:1.checkbox可以点击,但是listview的item无法

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号