*
***
*****
*******
*********
***********
*********
*******
*****
***
*
菱形图形如左图所示,如何在屏幕上打印出这个图形呢?我想到了一种比较容易理解的方法,就是先生成三个同样大小的数组,一个数组用来存最长的那个星号图形,另两个数组用来存同等大小的空字符,然后用一个空字符对星号字符进行覆盖,直到完成菱形的上半部分,而菱形的下半部分也是一样的方法。
完整代码:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]="*************";
char arr2[]=" ";
char arr3[]=" ";
int i = 0;
int j = 0;
for(i=6,j=6; i>=0,j<=12; i--,j++)
{
arr2[i]=arr1[i];
arr2[j]=arr1[j];
printf("%s\n",arr2);
}//上部分
for(i=0,j=12; i<=6,j>=6; i++,j--)
{
arr2[i]=arr3[i];
arr2[j]=arr3[j];
printf("%s\n",arr2);
}//下部分
return 0;
}
在查阅了网上的资料之后,我发现了另一种方法。它不是对数组进行覆盖,而是利用循环对每一行进行输出,达到实现菱形图案的输出。
完整代码:
#include<stdio.h>
int main()
{
int line = 0;
int i = 0;
int j = 0;
printf("请输入行数:\n");
scanf("%d",&line);
for(i=0; i<line; i++)
{
for(j=0; j<line-1-i; j++)
{
printf(" ");
}
for(j=0; j<2*i+1; j++)
{
printf("*");
}
printf("\n");
}
for(i=0;i<line-1;i++)
{
for(j=0; j<=i;j++)
{
printf(" ");
}
for(j=0; j<(line-1-i)*2-1; j++)
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}