心形程序,花了两个通宵写的,分享一下了,虚心接受大家的指正,刚刚学C,很喜欢C啦
#include<stdio.h>void main()
{
int a,b,c;
int a1,a2,a3,a4,a5,a6;
int i,j,k;
int t;
int x;
int sum;
a: printf("\n输入一个1——5之间的整数,按回车键。\n此程序可以输出不同大小的心形图案。\n请输入:");
scanf("%d",&a);
printf("\n\n");
a1=a;
a2=a;
a3=a;
a4=a;
a5=a;
a6=a;
/*在第一次循环中a的值已经自减发生了变化,所以需要保存a*/
sum=1+2*4+2*3*a+2*2*a+2*1*a;
c=5;
printf("\n");
if(!(a>=1 && a<=9)) {printf("\n\n您输入的数据有误!请重新输入!\n\n\n\n\n\n\n"); goto a;}
for(;a>=0;a--)
{
t=(a+1)*a/2;
/*t变量必须放在循环内,它要随着a的值变化才可以*/
for(i=0;i<c+t;i++)
{
printf(" ");
}
for(j=0;j<(sum-4*t-1)/2;j++)
{
printf("*");
}
for(k=0;k<2*t+1;k++)
{
printf(" ");
}
for(j=0;j<(sum-4*t-1)/2;j++)
{
printf("*");
}
printf("\n");
}
/*以上循环完成心形的上半部分*/
for(b=1;b<a1;b++)
{
for(i=0;i<c;i++)
{
printf(" ");
}
for(j=0;j<sum;j++)
{
printf("*");
}
printf("\n");
}
/*以上循环完成中间最宽的部分*/
/*不为何下面的循环输出的图形越大就在最后输出的回车符越多。。。。*/
for(b=1;b<=a1;b++)
{
x=(b+1)*b/2;
for(;a2!=0;a2--)
{
for(i=0;i<c+x;i++)
{
printf(" ");
}
for(j=0;j<sum-2*x;j++)
{
printf("*");
}
printf("\n");
x++;
}
for(;a3!=1;a3--)
{
x++;
for(i=0;i<c+x;i++)
{
printf(" ");
}
for(j=0;j<sum-2*x;j++)
{
printf("*");
}
printf("\n");
x++;
}
for(;a4!=0;a4--)
{
x++;
for(i=0;i<c+x;i++)
{
printf(" ");
}
for(j=0;j<sum-2*x;j++)
{
printf("*");
}
printf("\n");
x+=2;
}
for(;a5!=0;a5--)
{
x++;
for(i=0;i<c+x;i++)
{
printf(" ");
}
for(j=0;j<sum-2*x;j++)
{
printf("*");
}
printf("\n");
x+=3;
}
/*如果去掉下面这个循环,则当a=1时候便缺少最后一行而且最后一个星号*/
for(;a6!=0;a6--)
{
x++;
for(i=0;i<c+x;i++)
{
printf(" ");
}
for(j=0;j<sum-2*x;j++)
{
printf("*");
}
printf("\n");
x++;
}
}
goto a;
/*最后输出心形的下半部分*/
}