1在屏幕上输出以下图案:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
#include<stdio.h>
#include<stdlib.h>
void print1(char arr1[], char arr2[], int sz)//输出菱形上半部分(包括中间最长的一行)
{
int j = 0;
int i = 0;
int x = sz/2;//找到最中间的下标(x要向左移动)
int y = sz/2;//找到最中间的下标(y要向右移动)
for(i = 0; i<(sz/2)+1; i++)
{
int tmp1=0;//第三变量
int tmp2=0;
tmp1 = arr2[x];
arr2[x] = arr1[x];
arr1[x] = tmp1;
if(x == y) /*因为第一遍循环的时候x与y的值相等,
为了避免 * 与空格再被换回来,使用goto语句跳过去*/
{
goto leap;
}
tmp2 = arr2[y];
arr2[y] = arr1[y];
arr1[y] = tmp2;
leap:
for(j = 0; j < sz; j++)
{
printf("%c",arr2[j]);
}
printf("\n");
x = x-1;
y = y+1;
}
}
void print2(char arr1[],char arr2[],int sz)//输出菱形下半部分(不包括中间最长的一行)
{ //注意:经过菱形上半部分的输出,已经将原来arr1[]与arr2[]数组的内容交换了
int j = 0;
int i = 0;
int left = 0;
int right = sz-1;
for(i = 0; i<sz/2; i++)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
for(j = 0; j<sz-1; j++)
{
printf("%c",arr2[j]);
}
printf("\n");
left++;
right--;
}
}
int main()
{
char arr1[100] = {0};//这个数组保存 *
char arr2[100] = {0};//这个数组保存空格
int i = 0;
int sz;//sz表示最长一行 * 的个数
printf("请输入一个小于100的奇数:\n");
scanf("%d",&sz);
for(i = 0; i<sz; i++)//arr1[]="*************";arr2[]=" ";
{
arr1[i] = '*';
arr2[i] = ' ';
}
print1(arr1,arr2,sz);//输出菱形上半部分(包括中间最长的一行)
print2(arr1,arr2,sz);//输出菱形下半部分(不包括中间最长的一行)
system("pause");
return 0;
}