【小结】
1.思维漏洞:第一版本想法是用两个指针x,y分别从从前往后和从后往前打印“ * ”,但是这样是行不通的,因为计算机的printf的输出是从左往右输出的。且一开始没有注意到要输出空格,认为只要输出了*就会打印出菱形,但是不是这样的。
2.学习到的知识:借鉴双向冒泡排序中设置“哨兵”的做法来控制打印的界限。(T268)
【代码】
#include <stdio.h>
#include <stdlib.h>
#define maxSize 100
void Diamond(int m, int n)
{
char s[maxSize][maxSize];
int i, j;
for (i = 0; i < m; ++i)
for (j = 0; j < n; ++j)
s[i][j] = '*';
int low, high;
low = high = n / 2;
for (i = 0; i < m; ++i)
{
//打印左边空格
for (j = 0; j < low; ++j)
{
printf(" ");
}
//打印菱形
for (j = low; j <= high; ++j)
{
printf("*");//易错点:第一版本想法是用两个指针x,y分别从从前往后和从后往前打印,但是这样是行不通的,因为计算机的printf的输出是从左往右输出的
}
printf("\n");
//更新界限
if (i + 1 <= m / 2)
{
low--, high++;
}
else
{
low++, high--;
}
}
}
int main()
{
Diamond(11, 11);//行列号必须为奇数
return 0;
}