最早的版本:
#include <stdio.h>
int main()
{
int k1 = 5 , k2 = 1;
int i,j;
do
{
for (i=1 ; i <= k1-1 ; i++) printf (" ");
for (j=1 ; j <= k2 ; j++) printf("*");
printf("\n");
k1=k1-1; //每行*号前的空格相差1个
k2+=2; // 每行的*号个数相差2个
}
while (k1 >1 ); //注释:下
/* 原先之所以输出
*
*****
***
*
这样,是因为将判断条件错误的写为k1<=0,于是第一次循环执行了k1=k1-1后,K值为2不满足k1<=0
于是结束了循环
*/
int k3=1, k4 =5;
int i2 , j2;
do
{
for (i2=1; i2 <= k3+1 ; i2++ ) printf (" ");
for (j2=1 ; j2 <= k4 ; j2++ ) printf ("*");
printf ("\n");
k3++;
k4-=2;
}
while (k3 <=3);
getchar();
return 0;
}
改进后的:
#include<stdio.h>
int main()
{
int i,j,n;
printf("请输入需要打印菱形的行数(奇数)\n");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
for (j=1;j<=n/2+i;j++) //n/2+i 表示第i行要打印的内容个数,包括空格
{
if (j<=(n+1)/2-i||j<=i-(n+1)/2) printf(" ");
if (j>(n+1)/2-i&&i<=(n+1)/2) printf("*");
if (j>i-(n+1)/2&&i>(n+1)/2&&j<=n-(i-(n+1)/2)) printf("*");
}
printf("\n");
}
getchar();
getchar();
return 0;
}
输出数字菱形:
#include <stdio.h>
int main()
{
int i,ch,n;
for (i=1;i<=5;i++)
{
n=0;
for (ch=1;ch<=i+2;ch++)
{
if (ch<=3-i||ch<=i-3)
printf(" ");
if (ch>3-i&&ch<=3&&i<=3)
printf("%d",++n);
if (ch>3&&ch<=5-(3-i)&&i<=3)
printf("%d",--n);
if (i>3&&ch>i-3&&ch<=3&&ch<=5-(i-3))
printf("%d",++n);
if (i>3&&ch>i-3&&ch>3&&ch<=5-(i-3))
printf("%d",--n);
}
printf("\n");
}
getchar();
return 0;
}
评论