用C语言画出空心三角形比较简单,首先要明白程序是一行一行进行编译的,想象一下空心三角形的画法,自然能明白首先应当让程序输出一定数量的空格,再是*,再是空格,再是*,最后换行符。利用一定的数学逻辑便可知:
n行,每行2n-1个字符(仅包含*中间空格*)
第n行有2*和2n-3个中间空格且第一行不执行中间空格语句
左边n-x个边空格
边空格*中间空格*换行符(除第一层)
换行符是每输出完一行才输出,所以,以层数为外层循环,这样我们只需要计算出需要执行的边空格次数、中间空格循环次数即可。
执行第一行的循环时,输出n-第几行的行数个边空格,再输出一个*,之后输出2×第几行的行数-3个中间空格,再输出*,这一行便结束,输出换行符。
经过分析可以得出:层数为外层循环,边空格和中间空格是两个并列的内层循环,而*只有一次,每行只输出两个(除了第一行只有一个和最后一行全是之外)。所以除去第一行和最后一行,可得出一个输出形式:
循环输出n-x个边空格,输出一个*,循环输出2n-3个中间空格,输出*,输出换行符
加上第一行和最后一行,可以用if语句来进行特定的输出。除了第一行,每行都至少有两个*,所以可以写一个if语句:
if(x1!=1)
printf("*");
然后便是最后一行,可以将最后一行的if设在最前面,让他检测,若不是最后一行,便按正常程序输出,若是最后一行,则直接输出2n-2个*
由此便有以下程序:
#include<stdio.h>
int main()
{
int n,time=0,times=0;
printf("请输入图形的行数:");
scanf("%d",&n);
for(int x1=1;x1<=n;x1++) //层数
{
if(x1==n)
for(int t=0;t<=2*n-2;t++)
printf("*");
else
{
time=n-x1; //边空格循环次数
times=2*x1-3; //中间空格
for(int left=1;left<=time;left++)//左边空格
printf(" ");
printf("*");
for(int among=1;among<=times;among++)//中间空格
printf(" ");
if(x1!=1)
printf("*");
printf("\n");
}
}
return 0;
}
更多推荐
用C语言画空心三角形
发布评论