A.输出直角三角形
首先,先看一道简单的例题
题目描述
本题要求编写程序,输出指定的三角图案。
输入
输入一个整数
输出
1.按照下列格式输出由“*”组成的三角图案。

(1)初学者的代码,可以简单的运用输出、输入完成。
#include<stdio.h>
int main()
{
	printf("****\n***\n**\n*");
	return 0;
 } 
(2)但是,显然,一旦打印的行列多了,这个方法就不适用了,而循环语句可以很好的解决这个问题。
分析图形结构:输入n,第一行n个*,一次随着列的增加减少一个。
#include <stdio.h>
int main()
{ 
int n;
int i,j;
    scanf("%d",&n) ;     //输入n行
    for(i=1;i<n+1;i++)    //for(i=1;i<=n;i++)也可以,都是保证取到n行后结束循环
    {
        for(j=1;j<=n-i+1;j++)  //j即那一行*的个数
        {
		   printf("*");
		} 
        
        printf("\n");  //每一行执行完“回车”下一行
    }
    
    return 0;
} 
 
2.变形一下,当打印的不是数字,变成了字母

即我们要引入一个字符型
#include <stdio.h>
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;
} 
 
 
3.再变形一下,变成字母变成了按顺序打印,注意,字母之间有空格
A B C D 
 E F G 
 H I 
 J 
#include<stdio.h>
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;
} 
B.输出“金字塔”型的数字图形
(1)实心三角形的打印
    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 | 
有代码如下
#include <stdio.h>
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++)  //输出数字个数的情况
		{
			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<stdio.h>
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;
} 
总结
在简单图形输出时,循环语句的嵌套是基础的,其次我们要学会分析各行的特征与行数的数字关系,想办法用代码替代出来。这是有解题思路的必备!!!!
输出为字母或者数字型的时候可以用字符型引出,方便变量。
简单图形打印非常容易发现自己的失误,因为错了以后可以根据输出的样式倒推哪条语句有错,缺少了什么,例如换行是否换对了,是可以通过输出的代码进行分析的。
以上,如有错误,请指正;如有疑问,欢迎一起讨论。
作者的碎碎念
第一次写博客,着手第一篇一直在想主题,最后确定这个,希望大家可以通过这些变形,掌握循环语句的使用和基础图形的打印!!大家晚安,感谢阅读。










