![这是刘萌萌 这是刘萌萌]()
1 #include <stdio.h>
2 #include <cstdlib>
3 int main()
4 {
5 do
6 {
7 int h=0;
8 printf("请输入行数(输入0结束):");
9 scanf("%d",&h);
10 if(h==0)
11 break;
12 else if(h<0)
13 {
14 printf("%d输入有误,请输入正整数\n",h);
15 }
16 else
17 {
18 if(h%2==0)
19 {
20 //偶数行
21 int c_h=h/2;//转折行
22 int i=1;//当前行
23 int j=0;//行内循环计数
24 for(i;i<=h;i++)//总行数循环
25 {
26 if(i<=c_h)//上半部分
27 {
28 // 空格数+*数=c_h+i-1
29 // 空格数=c_h-i
30 // *数=2*i-1
31 j=1;
32 for(j;j<=c_h+i-1;j++)//空格加*
33 {
34 if(j<=c_h-i)//画空格
35 printf(" ");
36 else
37 printf("+");
38 }
39 printf("\n");
40 }else
41 {
42 //下半部分 i行跟c_h-(i-c_h)+1行情况一样的 2c_h-i+1
43 int hh=2*c_h-i+1;//临时行
44 j=1;
45 for(j;j<=c_h+hh-1;j++)
46 {
47 if(j<=c_h-hh)
48 printf(" ");
49 else
50 printf("+");
51 }
52 printf("\n");
53 }
54 }
55 }else
56 {
57 //奇数行
58 int c_h=(h+1)/2;
59 int i=1;//当前行
60 int j=0;//行内循环计数
61 for(i;i<=h;i++)
62 {
63 if(i<=c_h)//上半部分
64 {
65 // 空格数+*数=c_h+i-1
66 // 空格数=c_h-i
67 // *数=2*i-1
68 j=1;
69 for(j;j<=c_h+i-1;j++)
70 {
71 if(j<=c_h-i)
72 printf(" ");
73 else
74 printf("+");
75 }
76 printf("\n");
77 }else
78 {
79 //下半部分 i行跟c_h-(i-c_h)行情况一样的 2c_h-i
80 int hh=2*c_h-i;//临时行
81 j=1;
82 for(j;j<=c_h+hh-1;j++)
83 {
84 if(j<=c_h-hh)
85 printf(" ");
86 else
87 printf("+");
88 }
89 printf("\n");
90 }
91 }//行循环结束
92 }//奇数结束
93 printf("------------------\n");
94 }//正整数结束
95
96 }while(true);
97 system("pause");
98 return 0;
99 }