问题:编程打印下面三组图形: 6 t6 J+ H8 L6 q2 Z1: ! M1 r' d) @( X# ^2 M$ i _% |2 Q+ I6 {6 H5 F& a
*+ U N0 Z) L9 V
**5 x Y/ y$ k1 o& u8 T. n" Z
*** ) q: U( E1 \* v****4 p- l3 q9 c7 i0 F# F. J
*****9 l7 a% v% \# b( D& F) p* t! d" B
****** & z1 ~ s" b7 W* g& A9 a& n , F7 [* M8 V- ]! ?5 f3 I# K程序如下: % j0 X' |" N2 t& B- A } ' x- E7 Y3 E2 Bvoid fun1(int n)- c7 j- g) Q3 p4 }* r( d4 }
{1 P+ R2 u9 B: s) F. i: w1 t( p
for ( int y=0; y<=n; y++ ) : X( v* T) k0 R s N7 a8 y {8 X5 X. d& ~/ a* `
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关& L% Z7 L7 F. r4 r
{ , b/ L7 ]: b5 V: q9 z- r cout << '*';" ]1 l7 E3 _6 }4 Z* }
} - G# L3 H, d2 \3 K cout << endl;//换行8 y7 X/ t0 L3 E9 Y5 t
}2 P- ~* R4 A0 Y7 x( x+ p$ q
} 1 e, i/ D6 f8 R1 o$ y* U3 {/ } ) w$ a7 \. c T7 ?4 I1 A2: , T$ t7 }. N1 I/ B& I4 z----*----5 ]! q" B; y! A% m6 G5 q
---***--- % g9 e: C4 T' @* Y, E--*****-- 2 g M" Z8 V8 P, A-*******-8 O B( w" j2 f K; s# ]! a4 g% M
*********! A( T8 o/ M- j0 d/ P$ B7 e" x8 s
& F- L6 D5 r- `& |0 O$ v3 T
这组就复杂些了,每一行都分为3部分,应该分别打印。. \1 _! X, u; W1 J
程序如下:2 p( }5 f. M \7 G% f8 c2 m9 b
4 o1 {' d# x, h1 k
void fun2(int n); T, @' {5 j- s! f6 Y+ [2 o+ r2 N f
{ . ~- `( [1 y' l# _ int s,x,y;- g5 ^/ B3 ~# V* }* r$ @
for ( y = 0; y<n; y++ ) ; h4 M2 U! P6 y- R {+ d+ v2 x* s, ~5 s# f+ n; o
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点5 X) T( s+ ]9 X8 Z
cout << '-';# n- m0 e* P5 c6 }' G* A) ?0 c
for ( x = 0; x < 2 * y + 1; x++ ): F; b( L( W# T
cout << '*'; 8 P" d) g8 U' _! S/ B5 b% \5 P for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行 1 W* I, Q/ G' S% n+ h0 N cout << '-'; 9 y3 A E( C _7 T! y2 ^- G* q; \ cout << endl;0 o8 H! r1 i/ N
}4 ^) q2 y- d S2 c. i6 o. [
}1 y5 M) l% w- _8 M" @
6 U3 M k$ I( f, x1 `+ s1 Y( |
3: & J; L, j- C1 G1 T3 N- J4 P5 d+ I & Y$ ?4 P5 d+ i: e----*---- $ v8 _3 C k! ?$ l" ^$ r---***--- 5 L M6 t& ~1 d8 A; Z--*****-- 5 m7 e; z5 {0 e3 z. b1 ?, M2 W, [-*******-( f$ n; n* C% l) C j+ q
*********1 t: v, @2 J0 E' Y
-*******-$ w: o6 g0 B; s) T7 R" W# }0 h
--*****--* }& x/ w+ ~! }/ [- k
---***---4 \( j1 m! K3 S$ V
----*----$ j! Z$ G8 d% j6 V7 a
+ n, r6 R( z5 x这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现7 n/ S, @% f' I" V K9 z
打印下半部的程序: - R9 y) `& C# c& X8 G& @8 D, Fvoid fun3( int n ). T! x& B w' t( G* F1 g- b
{ + L7 r, e6 M) z H int s,x,y; 0 c3 e: F3 G0 c //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了8 E e6 ^% c$ C* ^( t! K
for ( y = n - 2; y >= 0; y-- ) ) q6 L. P0 n7 U! C& X% j* H, E6 D3 m { * D; h: B* I& p- T# \ //循环体没有改变 : [* |- I% T) u% v0 b4 r7 }6 r' A for ( s = 0; s < n - y - 1; s ++ )1 z9 p1 _- _9 P) r) D
cout << '-'; 2 a5 R# M U. b9 @/ f5 O. D for ( x = 0; x < 2 * y + 1; x++ ) " Y5 P0 l& L. \7 y. R cout << '*';' t' f2 `5 }. X$ a' ?
for ( s = 0; s < n - y - 1; s ++ )/ n+ B- Q1 F2 d0 `
cout << '-';* N3 D3 v- i- b" i; X) ~1 ?6 N
cout << endl;/ J5 S3 | { z0 z! s- b
} % K6 o- C. ?) p; N2 B} . ^$ v3 O7 A- ^( P- B) g: p E' [9 ^& {1 D; B要打印整个图形:. I2 j5 p& J/ C( N
u) ]9 \/ m% z% K9 k; m
void main() 4 Q- H K: p6 ~) B{, g- ?: y* U$ Q) e5 R
fun2(5);//绘制上半部分! a' |( T: V6 j) Q7 C' Q' b
fun3(5);//绘制下半部分/ v/ `! o7 Q$ {+ I
} # }! l- }9 g" O& {! f2 }9 P4 y, e$ t7 i% _
& H- h" S. g+ C3 t8 i6 W; b这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.