1. 程式人生 > >第五章 循環結構課後反思

第五章 循環結構課後反思

font focus plain 是個 麻煩 ccf width 無法 color

第五章 循環結構課後反思

------------周萌

本次循環結構練習選取了最後一個圖案進行打印,因為感覺是這些圖形中最難的。

目標圖案:

技術分享圖片

分析:

技術分享圖片

如圖所示:該圖形可以分為6個部分,其中要使用3個for循環大的框架(藍色區域);然後使用for語句在大的框架裏面嵌套(藍色區域的紅色分界線)。

 分析完畢,開始踏上不歸路

一步步來,先打印出最上面那個三角形來再說:

 1 #include<stdio.h>
 2 int
main() 3 { 4 int i,j,k,m; 5 for(i=1;i<=5;i++) 6 { 7 for(j=i;j<=5;j++) 8 printf(" "); 9 for(k=1;k<=(2*i-1);k++) 10 printf(" *"); 11 printf("\n"); 12 }

都不帶喘氣的打完了上面的代碼,瞬間感覺自己好牛逼啊哈哈哈

當我按下技術分享圖片技術分享圖片

出現了這個:

技術分享圖片

技術分享圖片

哎?怎麽這個圖形離左邊界這麽遠啊?感覺好像有點不對勁,,,emmmmm不管了,反正圖案的形狀是對的。

(依舊挺起了高傲的胸膛)

繼續進行下一步,打印中間兩條星號組成的圖案

這怎麽能難倒我這個小天才呢?仍然是飛快的打完了代碼:

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int i,j,k,m;
 5  for(i=1;i<=5;i++)
 6  {
 7     for(j=i;j<=5;j++)
 8         printf("   ");
 9     for(k=1;k<=(2*i-1);k++)
10         printf("  *");
11         printf("
\n"); 12 } 13 for(i=1;i<=2;i++) 14 { 15 for(j=1;j<=9;j++) 16 { 17 printf(" *"); 18 printf("\n"); 19 } 20 } 21 }

然而當我按下了技術分享圖片技術分享圖片

出現了這個結果:

技術分享圖片

技術分享圖片

啊仔細一看,原來是換行那裏出現了問題啊,嚇死我了,改一下就行了,把第二個printf("\n");移動至大括號外面即可。

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int i,j,k,m;
 5  for(i=1;i<=5;i++)
 6  {
 7     for(j=i;j<=5;j++)
 8         printf("   ");
 9     for(k=1;k<=(2*i-1);k++)
10         printf("  *");
11         printf("\n");
12  }
13  for(i=1;i<=2;i++)
14     {
15         for(j=1;j<=9;j++)
16         {   
17             printf("  *");
18             
19          }
20          printf("\n");
21      }
22 }

機智如我,一下子就發現了問題所在

再次霸氣的按下技術分享圖片技術分享圖片

技術分享圖片

出現了:

技術分享圖片

咦?怎麽歪了?不應該啊,設置的數字也沒錯啊,上下幾個for語句的循環次數都是和星號的個數一樣啊。 (好氣啊)

經過一番縝密的推論??,我發現了一個錯誤:

技術分享圖片

技術分享圖片

可以看出,這個for循環是批量輸出“ ”(三個空格)的循環,聯系外層的for循環,

當i=5的循環:因為j<=5,所以還要執行一次循環,即在第五層再輸出一個“ ”,實際上第五層已經不需要再輸出“ ”了,所以出現了上文中提出的 與左邊界距離有點遠的問題。

將j<=5改為j<5;按下技術分享圖片技術分享圖片

技術分享圖片

技術分享圖片

輸出正確,繼續

接下來,貌似是進入了最難的部分啊

再看一下分區:

技術分享圖片

技術分享圖片

分析:三個區域,中間的空格部分正好是三角形,左邊是一個倒三角,和之前的很相似技術分享圖片

只是“ ”和“ *”的位置完全反了過來而已

在代碼中按照這個把“ ”和“ *”的位置反過來:

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int i,j,k,m;
 5  for(i=1;i<=5;i++)
 6  {
 7     for(j=i;j<5;j++)
 8         printf("   ");
 9     for(k=1;k<=(2*i-1);k++)
10         printf("  *");
11         printf("\n");
12  }
13   for(i=1;i<=2;i++)
14  {
15     for(j=1;j<=9;j++)
16         printf("  *");
17         printf("\n");  
18  }
19   for(i=1;i<=4;i++)
20   {
21    
22     for(j=i;j<5;j++)
23      printf("  *");
24     for(k=1;k<=2*i-1;k++)
25      printf("   ");
26      printf("\n");
27   }
28 }

運行一下試試:

技術分享圖片

技術分享圖片

可以,得出了答案

但是剩下的一半倒三角怎麽辦呢?

這時又兩種選擇:

  1. 再創建一個for語句,打印出倒三角,試試看能不能拼到上圖從而形成完整圖形;

  2. 在上一個for語句框架中再嵌套一個for循環,一共嵌套三個for循環;

第一種

代碼:

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int i,j,k,m;
 5  for(i=1;i<=5;i++)
 6  {
 7     for(j=i;j<5;j++)
 8         printf("   ");
 9     for(k=1;k<=(2*i-1);k++)
10         printf("  *");
11         printf("\n");
12  }
13   for(i=1;i<=2;i++)
14  {
15     for(j=1;j<=9;j++)
16         printf("  *");
17         printf("\n");  
18  }
19   for(i=1;i<=4;i++)
20   {
21    
22     for(j=i;j<5;j++)
23      printf("  *");
24     for(k=1;k<=2*i-1;k++)
25      printf("   ");
26      printf("\n");
27   }
28   for(i=1;i<=4;i++)
29   {
30     for(j=1;j<i;j++)
31         printf("   ");
32     for(k=i;k<=4;k++)
33         printf("  *");
34     printf("\n");
35   }
36 }

可以看到上面使用了4個for框架

運行結果:

技術分享圖片

技術分享圖片

可以看出明顯錯誤,無法拼接到上面去

 此方法淘汰 


第二種

在第三個for框架中嵌套3個for循環

代碼如下:

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int i,j,k,m;
 5  for(i=1;i<=5;i++)
 6  {
 7     for(j=i;j<5;j++)
 8         printf("   ");
 9     for(k=1;k<=(2*i-1);k++)
10         printf("  *");
11         printf("\n");
12  }
13   for(i=1;i<=2;i++)
14  {
15     for(j=1;j<=9;j++)
16         printf("  *");
17         printf("\n");  
18  }
19   for(i=1;i<=4;i++)
20   {
21    
22     for(j=1;j<=5-i;j++)
23      printf("  *");
24     for(k=1;k<=2*i-1;k++)
25      printf("   ");
26     for(m=1;m<=5-i;m++)
27      printf("  *");
28     printf("\n");
29   }
30 ?
31 }

輸出結果如下:

技術分享圖片

技術分享圖片

  此方法可行

啊啊啊啊啊啊!終於輸出正確了! (我可真是個小機靈鬼)


代碼分析:技術分享圖片

在第一個和第三個for語句的嵌套中,使用了j<=5-i和m<=5-i這樣的判定條件,即每換行一次,輸出的星號減少一,正好符合目標圖的結果。

反思

對於循環結構的嵌套不是很清楚,經常打錯代碼,出現一些奇奇怪怪的圖形,練習時間少。

重難點我覺得都是對於for語句的嵌套結構,經常搞混,尤其是畫圖部分。

不是很麻煩,但也出現了幾次錯誤,尤其需要鍛煉在短時間內找出來並正確改正問題的能力,這對C語言和其他學科的學習同樣至關重要。

技術分享圖片

第五章 循環結構課後反思