C语言对于轴对称图形输出的分析

来源:互联网 发布:网络侵犯著作权 编辑:程序博客网 时间:2024/04/29 06:27

开发环境:Turbo C 2.0
   *
  ***
*****
*******
*****
  ***
   *
题目很简单就是输出如图所示的图形,图形用你喜欢的图形输出即可:*,~,-,+等。
当初做这样的题目的时候我们是在学循环,因此是要我们用循环的思想来解决问题,而不是直接把图形输出。
我们先把这个图形用*表示出来
   *
  ***
*****
*******
*****
  ***
   *
我先给每行标上号(请注意下怎么标号的)
   *       -3 //有一个图 
  ***      -2 //有三个图 
*****     -1 //有五个图 
*******    0  //有七个图 
*****     1  //有五个图 
  ***      2  //有三个图 
   *       3 //有一个图 
这里值得注意的就是:中间图最多为七,也就是最大行数的数字(规律一:得到数字7[最大行数])
标的号的绝对值就是每行前面空的格数。由于图形的特殊型,它必须是基数行的,所以标的号始终是 [-(7-1)/2,(7-1)/2]之间
(规律二:循环是从-(最大行数-1)/2到(最大行数-1)/2)
由中间向两边展开始终是少两个,又根据标号的规律性可知由中间向两边的输出图形数为:(最大行数-2*|标号|)标号也就是循环数
总数三大规律我们可知道,如果把输出图形写作一个函数的话,那么它只需传入一个参数,那就是最大行数。
void print(int maxnumber)
{
  int i = 0, j = 0;
  for (i = -((maxnumber-1)/2); i <= ((maxnumber-1)/2); i ++)
  {
    for (j = 0; j < abs(i); j ++)//输出空格
    {
      printf(” “);
    }   
    for ( j = 0; j < (maxnumber-2*abs(i)); j ++)
    {
      printf(”*”);
    }
    printf(”/n”);
  }
}
我的完整程序如下:
#include<stdio.h>

void print(int maxnumber);

int main(void)
{
  printline(9);
  return 0;
}

void print(int maxnumber)
{
  int i = 0, j = 0;
  for (i = -((maxnumber-1)/2); i <= ((maxnumber-1)/2); i ++)
  {
    for (j = 0; j < abs(i); j ++)
    {
      printf(” “);
    }
    for (j = 0; j < (maxnumber-2*abs(i)); j ++)
    {
      printf(”*”);
    }
    printf(”/n”);
  }
}

个人永久博客:Chenliang’s blog

C语言对于轴对称图形输出的分析