嗯,如果要做比26更大的话,最好的解决办法是用一个字符串表:
#include <stdio.h>
#define IABS(x) ( (x) >= 0 ? (x) : -(x) ) //定义一个计算绝对值的宏
char* strmap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //就是这个表
void print(int size) // size是这个菱形的半径,直径会是size * 2 + 1
{
int x, y;
for (y = -size; y <= size; y++)
{
for (x = -size; x <= size; x++)
{
if ( IABS(x) + IABS(y) <= size ) //x和y各自的绝对值的和,即 |x| + |y| <= size
putchar( strmap[size - IABS(x) - IABS(y)] ); //留意这里的计算方法
else
putchar(' ');
}
putchar('\n');
}
}
int main()
{
print(26); //这里如为26 即26个字母输出菱形来。怎么最中心多了一个小东西‘[’呢?
getchar();
return 0;
}
这样的话print(61)也不成问题,如果更大,那就适当增加那个strmap字符串的长度就可以了