首先,先看一道简单的例题
题目描述
本题要求编写程序,输出指定的三角图案。
输入
输入一个整数
输出
1.按照下列格式输出由“*”组成的三角图案。(1)初学者的代码,可以简单的运用输出、输入完成。
#includeint main() { printf("****n***n**n*"); return 0; }
(2)但是,显然,一旦打印的行列多了,这个方法就不适用了,而循环语句可以很好的解决这个问题。
分析图形结构:输入n,第一行n个*,一次随着列的增加减少一个。
#includeint main() { int n; int i,j; scanf("%d",&n) ; //输入n行 for(i=1;i 2.变形一下,当打印的不是数字,变成了字母 即我们要引入一个字符型
#include3.再变形一下,变成字母变成了按顺序打印,注意,字母之间有空格int main() { int n; int i,j; char ch; scanf("%d",&n) ; for(i=1;i<=n;i++) { for(j=1;j<=n-i+1;j++) { printf("%c",'A'); } printf("n"); } return 0; } A B C D
E F G
H I
J#includeB.输出“金字塔”型的数字图形 (1)实心三角形的打印int main() { int n; char op = 'A'; scanf("%d",&n); int i, j; for(i=1;i<=n;i++) { for(j=1;j<=n-i+1;j++) { putchar(op++); //输出递加字母。 printf(" "); } printf("n"); } return 0; } 1
222
33333
444444
555555555分析,实验A一样,我们要使用循环语句,但是我们不难发现有以下规律
i行 数字前面“ ”的个数 ‘数字的个数 每一行打印的数字是 1 4 1 1 2 3 3 2 3 2 5 3 ... ... ... ... i 5-i 2i-1 i 有代码如下
#includeint main() { int i,j,k,n; scanf("%d",&n); for(i=1;i<=n;i++) { for(k=1;k<=n-i;k++) //输出空格个数的情况 { printf(" "); } for(j=1;j<=2*i-1;j++) //输出数字个数的情况 { printf("%d",i); //输出数字的情况 } printf("n"); //回车 } return 0; } 上面代码需要特别注意的是,这个代码包含了一个循环的嵌套,一共调用了三个for语句,但是后面两个语句是并列的的关系。
(2)空心三角形的打印输出:
1
2 2
3 3
4 4
555555555分析:和(1)一样大致框架不变,但是实心变空心,我们则需要多考虑,再空心的输出怎么完成。
i行
数字前面“ ”的个数 数字的个数 数字中间的“ ”个数 打印的数字 1 4 1 0 1 2 3 2 1 2 3 2 2 3 3 4 1 2 5 4 5 0 9 0 5 i n-i 特殊 特殊 i 通过表格,我们看的出第五行是特殊的
可以看出每行的第n-i个和第2n-1个一定是数字,1~4行中其余的为空格,第5行其余的也为数字
在(1)的框架中,我们可以嵌套if条件语句去满足这些要求
#include总结int main() { int i,j,k,n; scanf("%d",&n); for(i=1;i<=n;i++) { for(k=1;k<=n-i;k++) { printf(" "); } for(j=1;j<=2*i-1;j++) { if(j==1||j==2*i-1||i==n) //使1~4行的第一个和最后一个,第5行全部,输出数字 printf("%c",'0'+i); //printf("%d",i)也是成立的 else printf(" "); //除输出数字外的其他输出空格 } printf("n"); } return 0; } 在简单图形输出时,循环语句的嵌套是基础的,其次我们要学会分析各行的特征与行数的数字关系,想办法用代码替代出来。这是有解题思路的必备!!!!
输出为字母或者数字型的时候可以用字符型引出,方便变量。
简单图形打印非常容易发现自己的失误,因为错了以后可以根据输出的样式倒推哪条语句有错,缺少了什么,例如换行是否换对了,是可以通过输出的代码进行分析的。
以上,如有错误,请指正;如有疑问,欢迎一起讨论。 作者的碎碎念第一次写博客,着手第一篇一直在想主题,最后确定这个,希望大家可以通过这些变形,掌握循环语句的使用和基础图形的打印!!大家晚安,感谢阅读。



