C语言| 输出菱形*

C语言| 输出*三角形-CSDN博客

输出菱形。

【分析思路】

学会输出*的三角形之后输出菱形就很简单了。我们分析一下,菱形是由两个对称的三角形组成的,也因为是对称的,所以输出的菱形的行数肯定是一个奇数。

1 我们在编程的时候,要把菱形分成两个三角形,分别输出一个是正着的三角形,一个是倒着的三角形。

2 又因为行数是奇数,所以肯定一个三角形的行数要比另一个三角形的行数多一行。我们把最中间的对称行放在上面的三角形里面。

3 因为是将菱形分成两个三角形,所以下面三角形行数重新从1开始。

等差数列{an}的通项公式为:an=a1+(n-1)d。a1为第一项, d为公差

下面三角形的规律如下:

① 从每行输出的空格个数来看,第i行首先要输出i个空格。

② 从每行输出的星号个数来看,虽然下面的三角形是倒着的,但它也是满足等差数列的,公差为-2。

问题是这个等差数列的首项是多少。首项星号的个数实际是对称行前一行星号的个数。

上面的三角形星号个数满足:

j=a1+(n-1)*d=1+(i-1)*2=2×i-1

(j代表第 j 行的*,n代表总行数,i代表第 i 行)

其对称行前一行i的值为:(此时 i为左边的空格数量)

总行数为n,上三角的行数=(n+1)/2行,所以对称前一行减1就行i=(n+1)/2-1

代入得对称前一行的*为 j=n -2

所以下面三角形等差数列的首项等于n -2。

下面三角形 不包含对称行,行数从1到i。

所以下面三角形第i行星号个数为:an=a1+(n -1) d=(n -2)+(i -1)(-2)=n-2i。

【程序代码】

#include <stdio.h>

int main(void)

{

int n = 0; //存储行数

int i; //行循环变量

int j; //空格和星号循环变量

printf("请输入行数:");

scanf("%d", &n);

//上面的三角形,包含对称行,所以是(n+1)/2行

for(i=1; i<=(n+1)/2; i++)

{

//打印空格

for(j=0; j<(n+1)/2-i; j++)

{

printf(" ");

}

//打印星号

for(j=0; j<2*i-1; j++)

{

printf("*");

}

printf("\n");

}

//下面的三角形,不包含对称行,所以是n/2行

for(i=1; i<=n/2; i++)

{

//打印空格

for(j=0; j<i; j++)

{

printf(" ");

}

//打印星号

for(j=0; j<n-2*i; j++)

{

printf("*");

}

printf("\n");

}

return 0;

}

相关推荐
busideyang27 分钟前
STC8H单片机delay_ms函数闪烁不准?原因是参数溢出!
c语言·单片机·嵌入式硬件·嵌入式
DREW_Smile1 小时前
数据在内存中的存储
c语言·开发语言
是翔仔呐1 小时前
第10章 模拟量采集基础:外置ADC/DAC芯片驱动(PCF8591/ADC0832)
c语言·开发语言·单片机·嵌入式硬件·51单片机
Rabitebla1 小时前
[特殊字符] TopK问题全解析(TomGo复习版|讲人话 + 原理打穿)
c语言·数据结构·算法·链表
weixin_649555671 小时前
C语言程序设计第四版(何钦铭、颜晖)第十一章 指针进阶之随机发牌
c语言·开发语言
淮北也生橘121 小时前
Linux应用开发:C标库中的操作字符串函数简单总结
linux·运维·c语言
爱编码的小八嘎2 小时前
C语言完美演绎5-4
c语言
炸膛坦客2 小时前
单片机/C/C++八股:(二十二)数组名,以及和指针的区别(一/二维数组)
c语言·c++·单片机
计算机安禾2 小时前
【数据结构与算法】第1篇:为什么要学习数据结构与算法?专栏导学
c语言·开发语言·c++·学习·算法·visual studio code·visual studio
EnglishJun2 小时前
ARM嵌入式学习(九)--- C语言应用:点亮led
c语言·arm开发·学习