C语言题目:打印图形,菱形
打印此图图形,需要根据输入的数字大小,改变菱形的尺码
不能是单纯的printf
这里能做的方法有很多,一维数组,二维数组...等等
这里举例最简单的,不用数组
观察图像,可以分为上半部分和下班部分,然后上半部分是一行中有最多*的到只有一颗*的,反之就是下半部分,因此可以通过行数控制图形的大小,行数越多,说明图形越大,因此设定一个sz变量
假设sz=7;
先来写上半部分,竟然sz=7,那么上半部分打印7行
通过循环就可以实现
然后再考虑上半部分的打印内容
可以分为打印 空格 和打印 *
观察图形,上半部分,打印*之前都会打印 空格 ,所以先观察 空格 ,空格 每次打印会变得越来越少,起初打印sz个,然后就是sz-1个,再是sz-2,所以可以利用for循环通过行数,来控制每行 空格 打印的数量
sz-1-i:i第一次-0,第二次-1,第三次-2
所以可以再通过i来改变 空格 的数量
有了空格就可以打印 * 了
观察可以得到每次 打印的* 都是奇数
1,3,5,7,...
2*i+1:这样得到的就是奇数
2*0+1=1
2*1+1=3
...
如此,又可以利用for循环通过每次打印2*i+1个来控制 * 的数量
最后再printf("\n")换行就行
这样就可以得到上半部分了
接下来是下半部分,下半部分是6行,所以是sz-1行
也可以利用for循环打印每行
然后就是和上面相反,也分为 * 和 空格
通过观察图形可知,每次 空格 的数量都是i+1个 空格 ,所以 空格 也可以利用for循环打印
其次就是下半部分的*号打印
每次打印*的个数是
11 9 7 5 3 1
有多到少
因为也是打印奇数个,所以可以通过2*n+1来打印
因为有多到少,所以应该变成2*n-1
所以2*n-1
n的变话应该是
6 5 4 ...
2*6-1 =11
2*5-1 = 9
...
n=sz-1-i
所以利用for循环
最后再printf("\n")换行
这样就可以打印出来了
如果有错,希望纠错!