大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
今天我们先来讲解一道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; }
执行结果如下:
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; }
执行结果如下:
例题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; }
运行一下这段代码,你会看到打印结果就是最前面的那张图。
课后练习
自己编写代码,打印出下面这张图。
菱形 更多的题型请点击这里
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167860.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...