程序填空题:再现打印三角形
小伙伴们,咱们第一个课上练习中有一道输出三角形的题目:
### 输出格式:
****
***
**
*
没有输入只有输出的题目都可以用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")
### 输出格式:
****
***
**
*
没有输入只有输出的题目都可以用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")