iT邦幫忙

0

C菱形紋

  • 分享至 

  • xImage

我正在嘗試用 C 打印菱形圖案,但我的軟件沒有提供預期的結果。

#include <stdio.h>

int main() {
   int n, i, j, space;

   printf("Enter the number of rows: ");
   scanf("%d", &n);

   space = n - 1;

   for (i = 1; i <= n; i++) {
      for (j = 1; j <= space; j++) {
         printf(" ");
      }
      space--;

      for (j = 1; j <= 2 * i - 1; j++) {
         printf("*");
      }
      printf("\n");
   }

   space = 1;

   for (i = 1; i <= n - 1; i++) {
      for (j = 1; j <= space; j++) {
         printf(" ");
      }
      space++;

      for (j = 1; j <= 2 * (n - i) - 1; j++) {
         printf("*");
      }
      printf("\n");
   }

   return 0;
}

我正在嘗試使用此應用程序打印帶有星號的菱形圖案。菱形設計的行數由用戶輸入到應用程序中。然後它用兩個嵌套的 for 循環打印菱形圖案的上半部分,用另一對嵌套的 for 循環打印下半部分。
變量 space 指定在星號之前寫了多少個空格。第一個 for 循環打印第一組星號和第二組星號之間的空格,第二個 for 循環打印第三組星號和第四組星號之間的空格。第一個 for 循環的每次迭代都會將要打印的空格數減少一個,而要打印的空格數會增加一個。

然而,儘管我付出了努力,但結果並不是我所希望的。我看到了這篇使用該示例的文章,但我不確定我是否做對了。有人能幫我嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
willy99924
iT邦新手 5 級 ‧ 2023-03-15 11:50:12

看起來應該是能正常運作的吧?

1
alien663
iT邦研究生 3 級 ‧ 2023-03-15 13:58:17

首先,我的建議是把輸入輸出關係定義清楚,輸入行數產生菱形這件事情本身比較奇怪,建議定義為:輸入菱形的大小,最小為1倍,範例可以看下面。

Sample input and output

  • 1
 *
* *
 *
  • 2
  *
 * *
*   *
 * *
  *
  • 3
   *
  * *
 *   *
*     *
 *   *
  * *
   *

How to solve it

第一件事情,先把需要輸出的空白變成其他文字,以方便觀察(此處以O代替空白)。
從輸出結果去思考,分成兩個部分,用兩個for loop去解決(最長的那行可以挑遞增或遞減部分則一輸出):

  1. 遞增(上半)部分
  2. 遞減(下半)部分

而兩個部分中,又各可以拆解成以下:

  1. 輸出第一個星號左邊空白
  2. 輸出第一個星號右邊空白

完成以上幾個區塊後,和在一起就完成了。

  • 1
O*
*O*
O*
  • 2
OO*
O*O*
*OOO*
O*O*
OO*
  • 3
OOO*
OO*O*
O*OOO*
*OOOOO*
O*OOO*
OO*O*
OOO*

Sample Code

#include <stdio.h>
void main() {
   int a = 3;
   for(int i=0;i<=a;i++){
      for(int j=a-i;j>0;j--)
         printf(" ");
      printf("*");
      for(int j=0;j<i*2-1;j++)
         printf(" ");
      if(i!=0)
         printf("*");
      printf("\n");
   }

   for(int i=a-1;i>=0;i--){
      for(int j=a-i;j>0;j--)
         printf(" ");
      printf("*");

      for(int j=0;j<i*2-1;j++)
         printf(" ");
      if(i!=0)
         printf("*");

      printf("\n");
   }

}

我要發表回答

立即登入回答