對菱形輸出的c語言實現

2021-09-29 04:28:13 字數 1719 閱讀 3378

題目:要求輸入乙個字元,將a到這個字元菱形輸出。

思路,將a到字元ch的個數先考慮清楚,通過做差法實現。

int k=ch-

'a'+

1;

之所以加1,並不難理解,比如我要確定1到3之間有多少個數,我用3-1+1=3.得知為3個。

接下來考慮上三角

上三角要求a到ch按1,3,5…形式輸出,通式為2*n-1,這裡的指此行的行數。

同時考慮到ch所在行為輸出個數最大行。且將a作為第一行,那麼ch所在行便是第k行(k上文已定義)。

ch所在行便共有2k-1個元素。

對於上面幾行的輸出,我們需要運用到第乙個迴圈

for

(int i=

1;i<=k;i++

)

這就代表了分別輸出第一行到第k行。

我們已第一行的a為例,a所在位置為k行對應的中間位置,周圍兩側都是空格。

問題是a的個數我們已經知道是1個,那麼空格的個數呢。不難發現兩側加起來總的空格個數為最大元素行第k行的個數減去a的個數即2k-1-1個。而兩側又是對稱的只需要總數除以2,便得得到了單側的空格數。

對於其他行呢?我們可以用通式即[2k-1-(2i-1)]/2的方式來表現,不過看起來略微複雜,我們用定義num=2i-1來簡寫。

num=

2*i-1;

for(

int p=

1;p<=(2

*k-1

-num)/2

;p++

)printf

(" ");

for(

int q=

1;q<=num;q++

)printf

("%c",(

char)(

'a'+i-1)

);//'a'+i-1是指此時應該輸出的字元,但是別忘了將他強制轉換,否則輸出可能是數字//

printf

("\n");

//別忘了換行//

這樣組合起來上三角就完成了,上**。

#include

intmain()

}

其實上三角明白了,下三角也就是順理成章地事情了。

思考下三角

猜想,下三角只要將上三角的格式反過來不久歐克了嗎,於是**來了。。。

for

(int i=k;i>=

1;i--

)

將上三角與下三角連線起來,emmmmmm,什麼?我的**出現bug了。

發現ch所在的行重複輸入了。。。發現問題了嗎,如果倒過來是從原來的迴圈條件末尾k開始,那可不是就多了嗎。

所以將第二次迴圈開始條件改為k-1即可。

for

(int i=k-

1;i>=

1;i--

)

話不多說了,上最終**。

#include

intmain()

for(

int i=k-

1;i>=

1;i--

)return0;

//我愛返回值,返回值愛我//

}

用C語言實現列印菱形

用c語言實現列印乙個空心的菱形,菱形的高度由使用者輸入。函式的功能是列印乙個空心的菱形,菱形的總高度由使用者輸入 根據菱形的特性,高度應該是乙個奇數,如果輸入偶數,根據程式的 演算法,是將該偶數加1作為新的高度來列印菱形 include includeint main void printf 列印完...

C語言輸出菱形

用c語言程式實現列印出乙個菱形,觀察菱形,它的每一行前面會有空格,要列印菱形,首先要算出空格多少的規律,以及每行的數目,把菱形分為上下兩部分列印。演算法分析 上半部分 菱形的最長一行 的數目為它的行數乘2再減上1,菱形的空格數為它上半部分行數減去它的行數。下半部分 每行的 數為2 line 1 i ...

輸出魔方矩陣(C語言實現)

題目 輸出魔方陣,所謂魔方陣是指這樣的方陣,它的每一行,每一列和對角線的和均相等,要輸出1 n 2個自然數構成的魔方陣,例如 8 1 6 3 5 7 4 9 2 解決方案 當n 2時不存在魔方矩陣 if n 3 當n為奇數時,可用 羅泊法 即 將1放在第一行中間一列 從2開始直到n n止各數依次按下...