
字符图形
e开头的英文单词-剪跨比
2023年3月19日发(作者:公益活动的意义)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
222
33333
4444444
图2
2、注意字符变化可能带来的影响
例:打印如下图形
分析:图中的字符有一位数也有两位数,如果还是用前面的方法,那么就
会出现有部分数字挤在一起。如果我们碰到了这种情况,即数字符号位数
不同时,要将控制打印位置的语句与打印字符语句放在一起。对每个打印
符号都要定位后再打印。
1
234
56789
16
1718192
三、有规律的字符图形
符号图形不光可以由有规律的数字组成,还可以由有规律变化的字符组成。
例:打印如下图形(图1)
分析:这一类图形可以我们仿效有规律的数字图形一样去
编程,如果把图1中的字母转换成ASCⅡ码图形,则会变
成图2的样子,如果再把图2中每个ASCⅡ码都减去64
就会得到图3的图形,那么这个图形我们已经会了。问题
也就解决了。
A
AB
ABC
ABCD
ABCDE
图1
65
6566
656667
65666768
6566676869
图2
1
12
123
1234
12345
图3
四、特殊文本图形
有些数字阵列我们称为特殊文本图形。如拉丁方阵、螺旋方阵、杨辉三角形等。
1、螺旋方阵
例:打印N×N螺旋方阵(图1,N=5)。
分析:螺旋方阵是从数字1开始,人雠阵
的左上角按顺时间方向排列的一组自然
数。有序数字的排列方向有时按行,有时
12345
161718196
152425207
142322218
131211109
图1
12345
161718196
152425207
142322218
131211109
图2
12345
161718196
152425207
142322218
131211109
图3
按列,而显示方式只能按行,因此我们分析一下数字与所在行和行上位置(列)的关系。用一
个二维数组来储存这个图形:A(1,1)=1,A(1,2)=2,A(1,3)=3,A(1,4)=4,A(1,5)=5,A(2,5)=6,
A(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
11
121
1331
14641
15101051
练习:
1、编程输出下列图形:
(1)图中N=5
1361015
25914
4813
712
11
(2)
*********
*******
*****
***
(3)
*******
**
**
*******
**
**
*******
(4)N=5(N<=5)
1
232
34543
4567654
567898765
2、数字螺旋问题:对任给的自然数N,从1开始由中间向下,再按逆时针方向向外
转出,直至旋到N为止(如右图,图中N=11)。打印时要求数字按列左边对齐。
765
814
923
1011
3、打印数字三角形。根据键盘输入的N值(N<20),在屏幕上输出相应的数字三
角形(如右图,图中N=5)。
1
122
11133
1015144
98765