打印字符图形
例 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
1
2
3
4
M 数
1
2
3
4
行
1
2
3
4
…
10
所以,可以得到“输出第 i 行”的循环为:
for(j=1;j<=i;j++)
10
10
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
MMM
M
MMMMMMMMMMM
MMMMMMMMM
MMMMMMM
MMMMM
分析:该图形一共有 10 行,这次要考虑每行中,先输出若干个空格,所以,其外循环
为:
for( i=1;i<=10;i++){
输出若干个空格
输出若干 M
换行
空格数
}
下面列出在第 i 行,其空格数,M 数与 i 的关系为:
行 i
1
2
3
4
…
10
即第 i 行的空格数为 i-1 个,M 个数为 21-2i。即在第 i 行输出空格和输出 M 字符的内
M 数
19
17
15
13
0
1
2
3
9
1
循环分别为:
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
2
3
4
…
10
即第 i 行的空格数据为 10-i 个,字符数为 2i-1。因此,输出空格数和字符数的内循环
字符数
1
3
5
7
9
8
7
6
0
19
分别为:
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(" ");
for(k=1;k<=7-2*i;++k) /*输出“*”号*/
printf("*");
合起来,构成一个完整程序如下:
#include
main()
{ int i,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;++j)
/*输出空格数*/
printf(" ");
for(k=1;k<=2*i-1;++k) /*输出“*”号*/
printf("*");
printf("\n");
}
for(i=1;i<=3;i++)
{
for(j=1;j<=i;++j)
/*输出空格数*/
printf(" ");
for(k=1;k<=7-2*i;++k) /*输出“*”号*/
printf("*");
printf("\n");
}
}