我们在学习C语言的时候往往会碰见许多图形类的问题,部分的学习者对这类问题不知道如何思考,从什么方面下手,今天就给大家讲讲对图形类的问题我们应该如何思考。
目录
解题方向
对于这类图形类问题而言,我们可以从几何意义的角度去思考。不同的逻辑可以有不同的解法,关键是不能纸上谈兵,觉得自己光看着像就能想得出来,一定要去画图,在标出对应的长度如何用代码中的参数来表达。
1.打印直角三角形
1.图案
比如说直角三角形,这是还比较简单的。输入n,打印处n行的字符 ‘ * ’ 构成直角三角形。
首先我们画图,用参数标出对应的长度:
我们可以从这张图上看出,i为行数的话,第i行总是有i个*字符,所以不难想到用两个for循环,一个控制i从1到n,一个控制一行中的1到i为*。
2.代码
不要忘记了要换行printf("\n")。
那既然会了正的直角三角形如何打印,反的其实就是轻而易举的事情了。
3.倒三角图案
其实上很简单,就是从1到n改成从n到1即可:
每行当j<=i时,都打印字符*。
4.倒三角代码
2.打印等腰三角形
1.图案
等腰三角形会比直角三角形难一点,行数i的第一个循环是没有变的,从一到n行,但是每行该做什么呢?
我们可以看到,等腰三角形在第二个循环中略微复杂。在一行中,在n-i的部分要先打印空格,再在中间的2i-1的长度内打印字符*。至于为什么是2i-1,就要看你的观察能力了。中间的字符都是奇数,而i是从1到n的自然数,自然就是2i-1。
2.代码
那既然正的等腰三角形会写,那你就可以自己先试试倒等腰三角形了呗。
3.倒等腰三角形图案
同直角三角形,只需要改变1到n成n到1即可。
4.倒等腰三角形代码
3.打印菱形图案
1.图案
这个的难度呢其实根据你的做法而定。其实可以分成上半部分+下半部分,也就是正的等腰三角形和倒的等腰三角形拼在一起再减掉一行就行了。但是我们尝试用另外一种方法,拓展我们的思维:
由于这个菱形是上下对称的,所以我们可以让i从-n变化到n,现在就是每行做什么内容的问题了。这里需要注意,由于上面等腰三角形是行数增加的同时菱形是从顶端到底端的;而这种用绝对值的方法i从n减小到0又增大到n,每个部分i增大菱形都是从底端打印到顶端的,这个时候我们只需要把所有的| i |换成n - | i |就行了。比如行数i是-7,n为8,那就变成8-7=1,数一数正好i=-7那一行的字符*就是7(如上图)。
2.代码
还有就是不要忘记数学函数的头文件哦,因为用到了绝对值函数fabs(i)。
还有下半部分的内容,有问题可以问我!