C语言-打印字符图形
打印字符图形
例1 用for循环编程画出下列图形:
M
MM
MMM
MMMM
MMMMM
MMMMMM
MMMMMMM
MMMMMMMM
MMMMMMMMM
MMMMMMMMMM
分析:该图形一共有10行,每一行增加一个字符,所以,应循环10次,每次输出一行,其循环模式为:
for i 1;i 10;i++ 输出第i行
换行 “输出第i行”是在for循环中的一个小循环。每次执行“输出第i行”,其长度都是不一样的,但长度的变化正好与循环变量i同步,故可以依赖于i。注意到第i行的M字符数与i的关系。
行 i M数
1 1 1
2 2 2
3 3 3
4 4 4
…
10 10 10
所以,可以得到“输出第i行”的循环为:
for j 1;j i;j++ printf “%c”,’M’
完整的程序如下:
#include
main int i,j;
for i 1;i 10;i++ for j 1;j i;j++ printf "%c",'M' ; printf "\n" ; 说明:对付这种字符图形,一般用两重循环,外循环遍历所有行,内循环遍历行中每个字符。
例2 输出下列图形:
MMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMM
MMMMMMMMMMMMM
MMMMMMMMMMM
MMMMMMMMM
MMMMMMM
MMMMM
MMM
M
分析:该图形一共有10行,这次要考虑每行中,先输出若干个空格,所以,其外循环为:
for i 1;i 10;i++ 输出若干个空格
输出若干M
换行 下面列出在第i行,其空格数,M数与i的关系为:
行i 空格数 M数
1 0 19
2 1 17
3 2 15
4 3 13
…
10 9 1
即第i行的空格数为i-1个,M个数为21-2i。即在第i行输出空格和输出M字符的内循环分别为:
for j 1;j i-1;j++
printf “ ” ;
for k 1;k 21-2i;k++
printf “%c”,’M’ ;
合起来,构成一个完整程序如下:
#include
main int i,j,k;
for i 1;i 10;i++ for j 1;j i-1;j++ printf " " ; for k 1;k 21-2*i;k++ printf "%c",'M' ; printf "\n" ; 例3 输出下列图形:
A
ABC
ABCDE
ABCDEFG
ABCDEFGHI
ABCDEFGHIJK
ABCDEFGHIJKLM
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOPQ
ABCDEFGHIJKLMNOPQRS
分析:该图形一共有10行,这次要考虑每行中,先输出若干个空格,所以,其外循环为:
for i 1;i 10;i++ 输出若干个空格
输出若干字符
换行 如果要输出A起头依序的n n 27 个字母,可以为:
for ch 'A';ch 'A'+n;++ch printf "%c",ch ;
下面分析每一行中的空格数与字符数与第i行之间的关系着手:
行i 空格数 字符数
1 9 1
2 8 3
3 7 5
4 6 7
…
10 0 19
即第i行的空格数据为10-i个,字符数为2i-1。因此,输出空格数和字符数的内循环分别为:
for j 1;j 10-i;++j /*输出空格数*/ printf " " ;
for ch 'A';ch 'A'+2*i-1;++ch printf "%c",ch ;
合起来,构成一个完整程序如下:
#include
main int i,j;
char ch;
for i 1;i 10;i++ for j 1;j 10-i;++j /*输出空格数*/ printf " " ; for ch 'A';ch 'A'+2*i-1;++ch /*输出字符*/ printf "%c",ch ; printf "\n" ; 例4 输出下列图形: *
***
*****
*******
*****
*** *
上面的图形可以分成两部分:
(1)
*
***
*****
*******
与例3的分析一样,输出空格数和字符数的内循环分别为:
for j 1;j 4-i;++j /*输出空格数*/ printf " " ;
for k 1;k 2*i-1;++k /*输出“*”号*/ printf "*" ;
(2)
*****
*** *
与例2的分析一样,输出空格数和字符数的内循环分别为:
for j 1;j i;++j /*输出空格数*/ printf " " ;