正三角
假设行数m=4.
星号的数量与行下标的关系:
第一行i=0, *=1个, 前空格=3
第二行i=1, *=3个, 前空格=2
第三行i=2, *=5个, 前空格=1
第四行i=3, *=7个, 前空格=0
*
***
*****
*******
所以*个数=2*i+1
而 前空格个数=(m-i)-1
倒三角
假设行数n=5
********* 9
******* 7
***** 5
*** 3
* 1
星号的数量与行下标的关系:
第一行i=0, *=9个, 前空格=0
第二行i=1, *=7个, 前空格=1
第三行i=2, *=5个, 前空格=2
第四行i=3, *=1个, 前空格=3
所以*个数=2*(n-i)-1
而 前空格个数=i
将正三角与倒三角合在一起
(一下注意正三角往右挪了一个空位 与 倒三角对其)
/*
输出行数为num的菱形
*/
#include<stdio.h>
int main()
{
int n,i,j,m,num;
scanf("%d",&num);
m=num/2;
n=num-m;
//输出正三角
for(i=0;i<m;i++)
{
for(j=0;j<(m-i);j++)//for(j=0;j<(m-i)-1;j++)正三角
printf(" ");
for(j=0;j<2*i+1;j++)
printf("*");
printf("\n");
}
//输出倒三角
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
printf(" ");
for(j=0;j<2*(n-i)-1;j++)
printf("*");
printf("\n");
}
return 0;
}
空心菱形
/*
输出行数为num的菱形
*/
#include<stdio.h>
int main()
{
int n,i,j,m,num;
scanf("%d",&num);
m=num/2;
n=num-m;
//输出正三角
for(i=0;i<m;i++)
{
for(j=0;j<(m-i);j++)//for(j=0;j<(m-i)-1;j++)正三角
printf(" ");
for(j=0;j<2*i+1;j++)
{
if(j==0||j==2*i)
printf("*");
else
printf(" ");
}
printf("\n");
}
//输出倒三角
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
printf(" ");
for(j=0;j<2*(n-i)-1;j++)
{
if(j==0||j==2*(n-i)-1-1)//星号的第一和最末输出星号
printf("*");
else
printf(" ");//中间为空
}
printf("\n");
}
return 0;
}
15
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*