再請教大家一個關於C語言印三角形的問題

題目如下:

當輸入 5 時,印出

*****
*****
*****
*****
*****

紅色的部分是印空格.

原始碼如下:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n; /* 正方形的邊長 */
int i, j, k, m; // 四個計時器
printf("輸入正方形的邊長 -> ");
scanf("%d", &n);

/* 你的程式從這裡開始 */
m = n;
for(k=1; k<=m; k++)
{
for(j=n; j<m; j++)//印出空白
printf(" ");
for(i=1; i<=n; i++)//印出星星
printf("*");
printf("\n");
n--;
}

system("pause");
return 0;
}

我看了很久還是不懂他的迴圈到底是怎麼判斷跟作用的? 他是怎麼同時間處理空白跟星號?

可以請有經驗的朋友指點我一下嗎?
沒有同時處理

他是先印出所需的空白

再印出所需的星號

多看幾次就懂了

不然就先整理一下

m = n;
for(k=1; k<=m; k++)
{
 for(j=n; j<m; j++)//印出空白
  printf(" ");

 for(i=1; i<=n; i++)//印出星星
  printf("*");

 printf("\n");
 n--;
}

這樣會比較好懂


m = n;
for(k=1; k<=m; k++) // 正方行的高 即5, 即有幾行
{
for(j=n; j<m; j++) //印出空白, 原理是每一行會遞增一個, 從0開始
printf(" ");
for(i=1; i<=n; i++) //印出星星, 原理是每一行會遞減一個, 從正方邊長 即5 開始
printf("*");
printf("\n");
n--;
}

假設: n=5
m=5

// 跑第一次
for(k=1; 1<=5; k++)
{
for(j=5; j<5, j++) ; 不成立, 不會印任何空白

for(i=1; i <=5, i++) ; 成立 5次(1~5), 印5 個*

printf("\n"); //換行
n=5-1; //下一行還有幾個*要印, 下一行只剩 4個
}

// 跑第2次
for(k=1; 2<=5; k++)
{
for(j=4; j<5, j++) ; 成立1個, 印1個空白

for(i=1; i <=4, i++) ; 成立 4次(1~4), 印4 個*

printf("\n"); //換行
n=4-1; //下一行還有幾個*要印, 下一行只剩 3個
}

剩下的自己跑囉....累~~~~





幫你加個輔助的括號...這樣應該就很容易懂了



#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n;
int i, j, k, m;
printf("輸入正方形的邊長 -> ");
scanf("%d", &n);


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

system("pause");
return 0;
}
shadoM wrote:
m = n;for(...(恕刪)


感謝您的解釋,非常的清楚,謝謝
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!