打印字符图形
例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,Mprintf能输出空格吗’)
完整的程序如下:
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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");
  }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。