C语言图形
一、单一符号图形
1、基本的几何图形
    一些复杂的图形通常会由几种最基本的图形组合而成,掌握简单的几何图形的编程方法,就给复杂的图形的编程打下良好的基础。
    典型的使用两重循环完成基本的几何图形的程序为:
    这里面有三个打印语句,这一个确认每行第一个字符的打印位置;第二个确定打印的字符;第三个的作用是换行。
    在下面的各个图形中,上面程序的 n 的值都是4,打印的内容 c 都是“*”,分析它们各个的打印位置 a 和每行列数 b 各有什么不同。
* * * * *
* * * * *
* * * * *
* * * * *
  * * * * *
    * * * * *
      * * * * *
        * * * * *
        * * * * *
      * * * * *
    * * * * *
  * * * *
    *
    * *
    * * *
    * * * *
          *
        * *
      * * *
    * * * *
(1)
(2)
(3)
(4)
(5)
    * * * *
    * * *
    * *
    *
    * * * *
      * * *
        * *
          *
        *
      * * *
    * * * * *
  * * * * * * *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *
  * * * * * * *
    * * * * *
      * * *
        *
(6)
(7)
(8)
(9)
(10)
2、对称图形
    打印较复杂的对称图形,一般有下面几种方法:
(1)、组合拼接法
    即将一个较复杂的图形,看成由两个或几个简单的几何图形拼接而成,这时只需要分别打印各简单图形的程序连接在一起就可以了。
例:给出边长 N ,打印出菱形
    分析:由右图可以看出,边长为 N 的实心菱形的上半部分是个 N 行的正立的等腰三角形,下半部分是个 N-1 行的倒置等腰三角形。关键问题上下两部分每行的第一个字符的位置要准。
源程序:略。
        *
      * * *
    * * * * *
  * * * * * * *
    * * * * *
      * * *
        *
(2)、中间变量
    利用与循环变量的值的关系的另外的变量,结合条件语句,来解决分别打印对称图形的上、下两部分或一行字符中的左、右两部分的对称问题,是中间变量法要解决的主要问题。
例:给出边长 N ,打印出菱形
    分析:由右图可以看出,菱形可以看成以横轴对称的两个相等的三角形,我们可以利用它的对称性,整体打印这个菱形。用循环变量 I 控制行数从 1 2*N-1 通过条件语句判断当前行是在上半部还是在下半部再分别处理。
源程序:略。
        *
      * * *
    * * * * *
  * * * * * * *
    * * * * *
      * * *
        *
(3)、循环变量对称法
    这种方法让循环变量由初值 -K 到终值 K (初值与终值的绝对值相同),循环变量的绝对值以 0 为原点对称分布,这种安排对应的图形的对称或每行打印内容对称。
例:给出边长 N ,打印出菱形
    分析:从右图可以看出,菱形可以看成以横轴对称的两个相等的三角形,我们可以利用对称行与对称轴的距离相同的性质,将水平方向的对称轴定为 0 行,上边的为正行数,下边为负行数,行数的绝对值即可以看成各行与对称轴的距离,对称轴上下行数与每边字符个数的关系为 N-1
源程序:略。
        *
      * * *
    * * * * *
  * * * * * * *
    * * * * *
      * * *
        *
(4)、子字符串截取法
    这种方法利用取子字符串函数来截取源字符串的方式来做文本图形。这种方法可以省掉内循环,尤其适用于打印不易到数学规律的字符或数字内容,更有它的优越性。
    以上四种方法,并不都是彼此独立的,可以根据图形的具体特点相互结合灵活使用。
3、空心图形
    以上我们所打印的都是实心的文本图形,如果空心的图形如何处理呢?这里介绍两种方法。
(1)、利用打印格式函数TAB(x)
    把图形空缺的两边的字符分成左右两部分,利用打印格式函数TAB(x)分别定出每一部分字符的位置。
(2)、利用打印空格函数SPC(x)
    使用空格函数来解决打印具有空缺图形的优点是:可以不考虑右半部图形的第一个字符的具体位置,把空格也当作图形的一部分连续打印。
4、连续图形
(1)、二方连续文本图形
    将一个基本几何图形沿左右方向重复连续地显示出来,叫做二方连续的图形。我们知道,文本图形输出时,每一行只能从左往右打印,并逐行由上而下输出。为了解决这个问题,所以控制并列打印几个重复图形的循环语句应加在控制每个图形行数的外循环与控制每个图形每行字符个数的内循环之间。
    控制每个图形每行第一个字符打印位置的方法有两种:
方法一:用TAB函数控制第一个图形每行第一个字符的位置,用SPC函数控制每个图形每行之间的空格数。
方法二:用TAB函数控制各个图形之的每一行的第一个字符的位置。
(2)、四方连续文本图形
将一个基本几何图形按上下左右连续重复组成的一个图形叫四方连续文本图形。这个图形的打印比较简单,只需要在前面所说的二方连续文本图形的基础上,在最外面加上一层控制图形层数的循环就可以了。
 
二、有规律的数字图形
在字符图形中有些图形不是由单一的字符组成,而是由一些有规律变化的字符组成的,打印这些图形除了要出形状的变化规律外,还要到字符的变化规律与图形形状变化之间的联系,有时还要注意字符变化可能给图形变化带来的影响。
1、注意数字与字符的区别
例:打印如下图形(见图 1 )
分析:一般都会认为程序的设计与单一字符图形时是一样的,只需要把“*”号换成循环变量 I 就可以了,但结果打印出来的样式就变成了图 2 的形状了。原因就是在BASIC语言里数值变量的前后都会有一个空格输出。为此,必须加上一个格式控制语句:USING"#",以使数字可以连续输出。
    1
  222
  33333
 4444444
  1
    1
  2  2  2
  3  3  3  3  3
 4  4  4  4  4  4  4
        2
2、注意字符变化可能带来的影响
例:打印如下图形
分析:图中的字符有一位数也有两位数,如果还是用前面的方法,那么就会出现有部分数字挤在一起。如果我们碰到了这种情况,即数字符号位数不同时,要将控制打印位置的语句与打印字符语句放在一起。对每个打印符号都要定位后再打印。
              1
          2  3  4
        5  6  7  8  9
    10 11 12 13 14 15 16
 17 18 19 20 21 22 23 24 25
三、有规律的字符图形
    符号图形不光可以由有规律的数字组成,还可以由有规律变化的字符组成。
例:打印如下图形( 1)
分析:这一类图形可以我们仿效有规律的数字图形一样去编程,如果把图 1 中的字母转换成ASC码图形,则会变成图 2 的样子,如果再把图 2 中每个ASC码都减去64就会得到图 3 的图形,那么这个图形我们已经会了。问题也就解决了。
  A
  AB
  ABC
  ABCD
  ABCDE
    字符串截取函数c语言图 1
  65
  6566
  656667
  65666768
  6566676869
    2
  1
  12
  123
  1234
  12345
    3
四、特殊文本图形
    有些数字阵列我们称为特殊文本图形。如拉丁方阵、螺旋方阵、杨辉三角形等。
1、螺旋方阵
例:打印N×N螺旋方阵( 1N=5)
分析:螺旋方阵是从数字1开始,人雠阵的左上角按顺时间方向排列的一组自然数。有序数字的排列方向有时按行,有时
  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9
      1
  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9
      2
  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9
      3
按列,而显示方式只能按行,因此我们分析一下数字与所在行和行上位置()的关系。用一个二维数组来储存这个图形:A(1,1)=1A(1,2)=2A(1,3)=3A(1,4)=4A(1,5)=5A(2,5)=6A(3,5)=7……,可以发现数组下标先是行下标不变,再是列下标不变,然后又是行下标不变……,对于最外边一圈数字,我们可以按同行不同列或同列不同行将它们分成四块,如图 2 ,每块长度为K=N-1。第一圈赋值完了以后,按刚才的方法把第二圈也分成四块,如图 3 ,这时块的长度应该减 2 ,相应的行列位置应有加有减。然后再做第三圈……一直到K<=0,此时如果K<0,则剩下中心一个数字,那么就可以直接赋值;如果K=0,则刚好完成所有数字的赋值。这时只需要把这个二维数组输出即可。
2、杨辉三角形
例:打印N杨辉三角形(N=5)
分析:杨辉三角形的每一行是(a+b)n展开式的各项系数。观察一下右图,你会发现任一元素都等于它上一行相邻两元素之和,利用这一规律我们可以用二维数组A(N,N)按行存放产生的所有元素,这个三角形的行数和列数的变化是每行列数等于所在的行数,打印时使隔行元素在同一列上即可。
            1
          1  1
        1  2  1
      1  3  3  1
    1  4  6  4  1
  1  5  10  10  5  1
 

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