-->
当前位置:首页 > 题库 > 正文内容

程序填空题:再现打印三角形

Luz4年前 (2021-11-13)题库1011
小伙伴们,咱们第一个课上练习中有一道输出三角形的题目:
### 输出格式:

****
***
**
*

没有输入只有输出的题目都可以用printf函数简单粗暴的按格式内容直接打印。

#include <stdio.h>
int main()
{
printf("****\n***\n **\n *\n ");
return 0;
}



如果我们把行数变成是输入的数据,怎么办呢?
### 输入格式:
输入为一个正整数n。
### 输出格式:
输出n行$$*$$组成的三角形图案,第一行由n个$$*$$,第二行有n-1个$$*$$,…,最后一行有一个$$*$$。
### 输入样例:

5

### 输出样例:


****
***
**
*

萌新们,你们已经可以用一重循环熟练的解决问题了,那么咱们就可以采用“自上而下、逐步细化”的程序设计思路解决这个新的问题。

首先我们知道,题目是让我们打印n行$$*$$组成的图案,那么我们就可以用一个循环来完成n行打印。也就是:

for(int i=0;i<n;i++)
{
打印本行图案;
}


或者:

for(int i=n;i>0;i--)
{
打印本行图案;
}

当然,循环控制的写法还有很多很多,只要保证能执行n次就可以。那么,我们选用哪一个更好呢?我们可以先细化循环体“打印本行图案”如何完成,再进行选择。

根据样例直观来看,当n=5时,第一行打印5个$$*$$,第二行打印4个$$*$$,…。

如果我们选择上面第二中循环控制条件,正好每次循环i的当前值就是本行打印的$$*$$的个数,也就是说第i行打印i个$$*$$,这同样可以用一个循环完成。

最后不要忘了细节问题,同一行的$$*$$之间不换行,一行打印完要换行。

分析到这里,我们可以写出完整的算法步骤了。


第1步:读入行数n;
第2步:打印n行图案,详细算法步骤:
for (int i = n; i > 0; i--)//控制行数
{
for (int j = 0; j < i; j++)//第i行打印i个*
{
打印一个*;
}
换行;
}

下面咱们来写出完整的程序实现:

#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = n; i > 0; i--)
{
for (int j = 0;@@[ j < i](2); j++)
{
@@[printf("*")](2);
}
@@[printf("\n")](2);
}
return 0;
}









答案:
第1空: j < i

第2空:printf("*")

第3空:printf("\n")

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。