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;
}