这道题想了很久,也在网上看了一下别人是怎么编的,说一下我是怎么考虑这道题的:
把图形分成上下两个部分,即下图这种
上半部分 下半部分
中间那一行全部打印字符,没有空格,mid=n/2 + 1
打印空格的时候只用考虑左边的空格,右半部分的空格不用管。
要打印一个n行的图形,先看上半部分,第i行就先打印mid-i个空格,再打印2*i-1个字符。
再看下半部分,就是从mid+1行开始打印,打印到第n行停止,这里第i行就先打印i-mid个空格,再打印n-2*(i-mid)个字符。
然后就能打印出来题目要求的图形了。注意打印空格的时候最好用‘\t’制表符来打印,不然会出现对不齐的情况。
1 #include <stdio.h>
2 void diamond(int x,char c)
3 {
4 int i,j,mid;
5 mid = x/2 + 1;
6 if(x%2!=0){
7 for(i=1;i<=mid;i++){
8 for(j = 1;j <= mid-i;j++)
9 printf("\t");
10 for(j = 1;j <= 2*i-1;j++ )
11 printf("%c\t",c);
12 printf("\n");
13 }
14
15 for(i=mid+1;i<=x;i++){
16 for(j = 1;j <=i-mid;j++)
17 printf("\t");
18 for(j = 1;j <= x- 2*(i-mid);j++)
19 printf("%c\t",c);
20 printf("\n");
21 }
22
23
24 }
25 else printf("error!\n");
26 }
27
28 int main(int argc, char *argv[])
29 {
30 int x;
31 char c;
32 scanf("%d,%c",&x,&c);
33 diamond(x,c);
34 return 0;
打印结果如下: