C语言打印图案的原理,麻烦详细解释,最好有配图和文字解说,本人大一,正在困惑中

Python015

C语言打印图案的原理,麻烦详细解释,最好有配图和文字解说,本人大一,正在困惑中,第1张

打印图案有多种。

一、有规律的图形,比如正方形,菱形,圆 ......等等。这些都可以找图形规律(比如菱形上半部分依次下层比上层多2个字符),再通过简单的参数循环,用单一字符打印出来(printf就可以了)。这种比较简单,网上也有很多现成的代码可以参考,比如:【引用】c语言打印规则图形

二、复杂的图像,比如一张照片,可以写代码把图片转换成2值图(2值图就是把图片中每个像素用0或1数字矩阵来表示)然后再打印转换后的01矩阵,这个比较复杂,网上也有很多现成的转2值图代码。【引用】图片二值化程序

当然你也可以直接用网上工具把图片转换成字符图(就是贴吧里经常用的那种字符组成的图案),然后保存到文件中,c语言写读取文件打印。(或者直接把字符全部赋值到printf中打印,但这样就没啥意思了)。【引用】在线图片转字符画

看到图就进来了?

进来了你就来对了!

本篇文章花了大量文笔来教你怎么一步步的写不出来这个图形,对的,这个图形本文教不了,但是本文将揭示循环打印的内幕,让你对几种常见情况了熟于心。

一般地,打印图形一般使用for循环: for (initializetestupdate)

2个循环嵌套,一个控制行一个控制列:

外层循环用于控制行(内嵌for循环控制列和换行符),一般的打印图形,行数是固定不变的(即外层循环的所有参数不变)。改变的是内层循环(一行打印几列),通常是两种情况:改变 初始值 循环条件

由此我们可以得出一些结论:

对于 int x

有上三角:

有下三角:

由表可知:

由此我们可以轻松的输出九九乘法表:

上一节我们了解了,想要改变循环打印图形的情况,只需改变内层循环的 初始值 循环条件 即可。那么,这两种情况真的是一模一样吗?来几个例题一探究竟!

注意观察同样是上三角,输出的内容的不同。

在这里我们只考虑内层循环的值的变化,其中的算法暂不考虑。

规律总结:

前两节仅讨论了单值类型以及只包含一个嵌套循环的程序设计,这节讨论更复杂的程序结构和算法。(为了讨论方便,每次编码都 只改变初始值

注意上面两个图形中,空格和星号的算法是相反的。至此,上下左右四种三角*已经全部列出。

采用自顶向下的方法来分析本程序的算法:

首先删除空格输出的循环控制

然后我们就得到了星号的输出格式:每行2n+1个。

采用改变初始值的方式,即: for(j = ROW - (2 * i +1)j <ROWj++) putchar('*')

接着,在输出星号之前加入空格输出,为递减输出,即: for(j = ij <ROWj++) putchar(' ')

再难一点:

还能不能再难一点?——可以,来一个平行四边形!

待补充。

最后再来一个装比一点的:

C语言代码如下:

可以用VC6实现。关键代码如下:

1、获得五个外顶点的坐标:

intm_xw[5]//5个X外顶点坐标

intm_yw[5]//5个Y外顶点坐标

voidCMyTestView::getCoord()

{

intc=360/5//角度

intr=150

for(inti=0i{

m_xw[i]=(int)(cos(i*c*PI/30-PI/2)*(r)+r)

m_yw[i]=(int)(sin(i*c*PI/30-PI/2)*(r)+r)

}

}

2、画线段:

在构造函数中调用求顶点坐标的函数求顶点坐标:

this->getCoord()

然后直接在绘图函数中添加如下代码:

voidCMyTestView::OnDraw(CDC*pDC)

{

CMyTestDoc*pDoc=GetDocument()

ASSERT_VALID(pDoc)

//TODO:adddrawcodefornativedatahere

pDC->MoveTo(m_xw[4],m_yw[4])

pDC->LineTo(m_xw[1],m_yw[1])

pDC->LineTo(m_xw[3],m_yw[3])

pDC->LineTo(m_xw[0],m_yw[0])

pDC->LineTo(m_xw[2],m_yw[2])

pDC->LineTo(m_xw[4],m_yw[4])

}

//运行结果

五角星是指一种有五只尖角、并以五条直线画成的星星图形。英文“五角星”(pentagram)一词出于希腊语,原意大概是“五条直线的”或“五条线”。中文“五角星”的意义则显而易见,指有五只角的星形。然而,中文“五角星”不一定指“标准”五角星。中文“五角星”一词有时亦泛指所有有五只角的星形物。

机器语言是以二进制代码表示的指令集合,是计算机唯一能直接识别和执行的语言。机器语言的优点是占用内存少、执行速度快,缺点是难编写、难阅读、难修改、难移植。