问题:编程打印下面三组图形:( h1 W" y; N9 Q' T1 r
1:( M# H9 T2 ^2 P! O
1 A2 K c! ~1 X* n
* 1 P3 P) y1 T6 a6 o8 \** d% q- I3 s- V' ~
***- ~7 ]' K, U5 \; [0 T2 f/ P
**** ! B! a0 v, a& d7 L+ V6 Q*****- q9 J9 C' ]# R+ H4 F9 v
******) g) I+ b/ S* C
' j& Q4 U" q) o; c
程序如下:8 R3 I- N" _2 n) @' ~; y% w/ i$ \$ f
# x8 ^1 |# y. i- P1 A8 n: D% w' [
void fun1(int n)' P Y% |" o5 ?1 M$ R3 ^* o
{ * A9 C3 S) Y% u' U) Q5 O8 O$ D for ( int y=0; y<=n; y++ ) ! g$ _, @2 r$ G* |! @* | {6 P; R: m+ P% } d
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关2 ~9 H" u9 i6 z0 P9 ^
{4 r1 v9 G% S, a; g( w/ c# l1 K, Q
cout << '*'; / i* s4 r! f G$ G" I, J) V }6 |) x/ D- s2 n1 M, Z5 e
cout << endl;//换行 4 O; B, f9 u# E0 ? a( `. m" R. h }1 A* p3 y' m$ B0 t- o5 d. @
} & p0 Y0 e! Q( Z ) b/ O, z/ }; O! M% b! C2:6 F3 y, H. Q% L+ _8 t
----*---- : v$ s* ~+ V1 D& p---***---4 q5 S( B" Y2 ^' ^4 e
--*****--# f2 b4 G" L* k. G% z$ B
-*******-, X- Y$ q8 D$ V3 y$ A& S
*********1 R) }, V; F- ?3 }; Y2 Z5 ^$ P9 m
% V- H/ f+ J9 K$ V0 V$ N这组就复杂些了,每一行都分为3部分,应该分别打印。8 A# @, A& c. ?3 s5 i1 z
程序如下:# K. z5 b2 W0 E5 P" n. }
0 a1 |2 @+ j4 jvoid fun2(int n): ]3 C$ I! a) j. C
{ - P ]- I5 `" E) ^' L int s,x,y; 5 p( [5 J! t1 u' q for ( y = 0; y<n; y++ ) O. c8 O. U! c$ ]4 o) @4 M
{5 U9 X2 x4 ~! q0 k
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点 7 D/ y. F8 R! q, ?7 n cout << '-';0 M- N1 f5 w6 n$ U. J( |# m
for ( x = 0; x < 2 * y + 1; x++ ) % B) t) l1 f+ l3 e0 e6 u" \ cout << '*'; . M# b- x! \* d4 V3 u" F for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行 ' V2 p5 P6 g( H8 ^ cout << '-'; 6 m; I# ^, @4 y8 Q/ c1 ] cout << endl;1 b+ f% u. D1 W3 Z
} 0 Y! l9 m$ P( q7 g4 m& m$ e3 g} n) P8 S6 R/ N* |
8 l& C# z5 r. H# j* H6 L# K3: & e; b9 i6 f* n3 [) s# Q# z ' M9 R- c/ I5 E7 U----*---- * J8 J7 f! y8 X* L) X' N3 l3 I( Y---***---, [3 t T. @3 S6 D2 E/ }) L H" J
--*****--, O, f* S O$ I: a' f" k2 A5 A
-*******-4 g% X) b2 z Y7 c" Q: v9 g& P
*********" O+ z' Z% q: y; I
-*******-) m. F, i% w7 m1 D% c. h, I
--*****-- + S' j8 M+ R2 ]# Y& m1 Z2 g4 L---***--- . i* L3 W+ b( U5 _$ K# g+ d& b----*---- ( G0 R f. D4 ]4 a4 A9 Z: j% Q# P) j$ ^' M: E$ T, V. i
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现 ) L5 }3 F& I5 o: y R$ @打印下半部的程序: 6 W" Z; L" T% N9 I9 ^+ |void fun3( int n )7 W5 u) u2 A+ K
{( M! M& ]- {* z' |! f" f* K! B
int s,x,y; W) |4 \; e$ P/ ^: P' t8 R& ?! B
//将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了9 ^4 [) t$ F: J# ~0 G
for ( y = n - 2; y >= 0; y-- ) + ]/ Y* @4 |0 B; e* Q9 f6 z7 p+ \* C
{- ?; i/ j' W p0 |- `% i5 i& c' w
//循环体没有改变* S# Y) Y U [. @5 i3 m8 T
for ( s = 0; s < n - y - 1; s ++ ) & ~; A, r( V' h cout << '-';" ^8 b2 O& A9 }* }$ d, e
for ( x = 0; x < 2 * y + 1; x++ )7 u- }& X; }# i2 b0 X
cout << '*'; + o4 Q% u3 `* k A( f; i2 N) f for ( s = 0; s < n - y - 1; s ++ ) 6 Z4 G# `" Z6 F, i9 z3 p: | cout << '-'; 7 R& \* D4 ?+ X2 ]9 ` cout << endl; ) K; L2 F4 A+ y, i } x$ ?* j6 k( M: d} . w& |5 V4 B/ x# O, r4 c8 N, w * b7 u4 c2 R$ A+ I. C3 Q要打印整个图形: ( l: ~2 p7 Y6 F% t7 P) w. F. ]/ E; V" i) g# {) w
void main() 0 c j: @" M5 _& A{/ \0 h$ |9 d1 g1 y0 D4 z7 q
fun2(5);//绘制上半部分9 j3 ~1 W; j6 c: ]
fun3(5);//绘制下半部分7 s! H: \" B9 {* c$ O' m9 ~2 R
} 4 K9 V# w5 F7 H9 ?2 Q7 Y+ Y3 P * P5 r' S) I2 T: L, A0 x : e$ n+ Y, n* |, A这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.