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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 集合及运算_集合的概念及运算

    集合及运算_集合的概念及运算[TOC]数据结构与算法_Python_C完整教程目录:https://www.cnblogs.com/nickchen121/p/11407287.html更新、更全的《数据结构与算法》的更新网

    2022年8月6日
    2
  • CSS中如何解决子元素继承父元素的opacity属性?

    CSS中如何解决子元素继承父元素的opacity属性?解决方案这里有两个方案,使用rgba()间接的设定opacity的值,这个属性不会向下继承,或者既然opacity会被子级元素继承,那就把opacity属性放到同级元素实现,下面通过示例具体说说这两种方式:1.使用rgba()间接的设定opacityrgba()有四个参数,最后一个参数就是opacity的值,和opacity单独设定效果一样,但是这个是有background属性来控制的,background不会向下继承,所以就解决这个问题啦,示例如下:<!DOCTYPEhtml>&l

    2022年5月25日
    64
  • java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)…

    java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)…描述java中数组的三种定义方式java中,数组是一种很常用的工具,今天我们来说说数组怎么定义[java]viewplaincopy/***数组的三种定义方法*1.数组类型[]数组名=new数组类型[数组长度];*2.数组类型[]数组名={数组0,数组1,数组2,数组3,。。。。};*3.数组类型[]数组名=new数组类型[]{数组0,数组1,数组2,。。。};**/p…

    2022年7月8日
    17
  • Bootstrap3-导航条[通俗易懂]

    1.定义导航条<!–导航条navbar–><divclass=”navbarnav-bar-default”><ulclass=”navnav-pills”> <liclass=”active”><ahref=”#”>首页</a></li> <li><…

    2022年4月13日
    38
  • 【c#】把Dataset类型转为List<T>

    【c#】把Dataset类型转为List<T>【c#】把Dataset类型转为List<T>

    2022年4月25日
    357
  • 汉化日记_sorceress alive汉化

    汉化日记_sorceress alive汉化使用方法:下载后解压,替换你安装OpenLiveWriter位置:C:\Users\Administrator\AppData\Local\OpenLiveWriter的app目录下的OpenLiveWriter.Localization.dll即可变成中文链接:https://pan.baidu.com/s/1Ja0-DcRihiEHtvsU1u5j2w?pwd=u7f8提取码:u7f8…

    2022年10月20日
    0

发表回复

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

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