C語言博客作業02--循環結構


C語言博客作業02--循環結構

1.本章學習總結

1.1 思維導圖

關於循環結構的思維導圖如下圖所示:

1.2 本章學習體會及代碼量學習體會

1.2.1 學習體會

說實話,這一周的學習難度和上一次比起來提高了很多,我自己寫PTA的時候明顯感覺到。比起還有我發現,在對一道題真的沒有思路的時候,別人的思路可以參考,但前提應該是在你完全理解和熟悉題目的基礎上進行,並且應該以理解思路為主,其他的詳細步驟還要靠自己打代碼。若是一直想按別人的思路來,一字不變的全部寫下來,那可能到頭來得不償失,該沒思路還是沒思路。
還有要對自己這一周進行反思,太拖沓。遇到難題,想了半個小時想不動就會犯困,PTA都是斷斷續續的寫,並且,是在老師下達最后時限后才瘋狂趕上去。就是之前一直給自己找借口說題目太難,所以做不動,但在面臨交作業的前幾天,什么借口都沒了。寫完之后才發現,是自己平時太散漫了。真的得改改了,要不然遲早涼涼。

1.2.2 代碼累計

2.PTA總分

2.1截圖PTA中循環結構2次題目集的排名得分

循環結構(單層)

循環結構(嵌套)

2.2 我的總分:

循環結構(單層):175
循環結構(嵌套):115
總得分:290

3.PTA實驗作業

3.1 PTA題目1

烏龜每分鍾可以前進3米,兔子每分鍾前進9米;兔子每跑10分鍾回頭看一下烏龜,若發現自己超過烏龜,就在路邊休息,每次休息30分鍾,否則繼續跑10分鍾;而烏龜一直跑,不休息。假定烏龜與兔子在同一起點同一時刻開始起跑,請問T分鍾后烏龜和兔子誰跑得快?

3.1.1 算法分析

  • 定義變量烏龜走的路程tortoise,兔子的路程rabbit,總時間T;
  • 輸入總的比賽時間T;
  • 計算烏龜跑的路程tortoise=3*T;
  • 定義變量t=T%90; //t表示最后一個循環中剩的時間
  • 定義變量multiple=T/90; //用multiple表示有多少個完整的循環
  • if t<=10 then
    • rabbit=multiple270+t9; //10min里兔子跑的路程
  • end if
  • if 10<t<=40 then
    • rabbit=multiple*270+90; //10<t<=40里兔子跑的路程
  • end if
  • if 40<t<=50 then
    • rabbit=multiple270+90+(t-40)9; //40<t<=50里兔子跑的路程
  • end if
  • if 50<t<=80 then
    • rabbit=multiple*270+180; // 50<t<=80里兔子跑的路程
  • end if
  • if 80<t<=90 then
    • rabbit=multiple270+180+(t-80)9; //t<=90里兔子跑的路程
  • end if
  • if rabbit>tortoise tnen
    • 輸出"_ 兔子跑的路程";
  • end if
  • if rabbit<tortoise tnen
    • 輸出""@_@ 烏龜跑的路程";
  • end if
  • if rabbit=tortoise tnen
    • 輸出"-_- ",兔子跑的路程“;
  • end if

3.1.2 代碼截圖

3.1.3 測試數據

輸入點 輸出點
T
242 @@ 726
20 _ 90
90 -
- 270

3.1.4 PTA提交列表及說明


(我又是在Dev C++上得出了答案再復制粘貼的)

  • Q1:從提交列表可以看出來,我第一次寫的時候完全沒思路!不懂要怎么處理兔子跑的路程。然后就就把它晾在一邊了。
  • A1:其實寫的時候隱隱知道這題應該有規律,然后某一天就每十分鍾每三十分鍾的交換去算,發現每90分鍾兔子和烏龜又會在同一個起點,也就是每90分鍾一個循環。然后用級聯的方法寫出正確答案。
  • Q2:雖然寫出來了,但是我知道用if-else語句寫這題肯定不是最好方法(畢竟老師不會在循環專題里放條件結構的題目吧!),想了解用循環的做法。
  • A2:上課看了老師的做法,都跟的上。然而,我自己回來寫。。。。。絕望!我寫不出來!!!所以決定就看同學的博客了。

3.2 PTA題目2

輸入一組二進制字符,輸出其對應的十進制數。當輸入回車鍵時,輸入結束。若輸入非二進制字符,輸出error input!

3.2.1 算法分析

  • 定義輸入的字符ch,存儲轉為十進制后的值num;
  • 輸入字符ch;
  • while ch!='\n do
    • switch(ch) do //對於輸入為1,0,和其他字符這三種情況做判斷
      • case ‘1’:
        • num=num*2+1;
        • break;
      • case '2':
        • num=num*2+0;
        • break;
      • default:
        • 輸出“Error Input”;
        • 直接結束
    • end switch
    • 再輸入ch;
  • end while;
  • 輸出num.

3.2.2 代碼截圖

3.2.3 測試數據

3.2.4 PTA提交列表及說明

  • Q1:說起來有點尷尬,剛開始的時候我沒有意識到每提高一個位次只要*2就可以了,所以不知道該怎么累加計算一個多個數字的值。
  • A1:后來上課聽到老師講,就盯着那個*2想了一會,差點沒把自己拍死。(丟人)
  • Q2:對若輸入1123這種相互混合的數該怎么處理,因為它要只輸出”error input!“,不能輸出前面11算出來的值。
  • A2:機智的賴慧穎同學教會了我return的巧用,可以結束全部語句。(return 0真的超級好用!!!)

3.3 PTA題目3

本題目要求讀入菱形起始字母和菱形的高度,然后輸出空心字符菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字符串構成,每行的字符串中心對齊;上半部分相鄰兩行字符串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。

3.3.1 算法分析

  • 定義起始字母ch,菱形的行數n;
  • 輸入ch,n
  • 定義中間一行的行數=n/2-1;
  • 定義變量i為行數,第一個字母到最后一個字母里面的所有字符num,i,j為控制循環的循環變量,第一個字母前的全部空格space
  • for i=1 to n do:
    • fornspace=1 to |middle-i do
      • 輸出空格。
    • end for;
    • if i<=middle then //上半部分
      • num=i;
    • end if;
    • if i>middle then //下半部分
      • num=n-i+1;
    • end if;
    • for j=1 to 2*num-1 do:
      • if j=1且j=2*num-1 then
        • 輸出字母ch+num-1
      • end if
      • else tnen
        • 輸出空格
      • end else
    • end for
      換行
  • end for
  • 結束

3.3.2 代碼截圖

3.3.3 測試數據

3.3.4 PTA提交列表及說明

  • Q1:沒有弄清楚字母前空格數,同一行字母之間的空格與行數之間的關系,不懂得將圖形分為兩半去計算輸出。
  • A1:上課聽老師的講評,以B 5為例,算出來字母前的空格=|中間一行的行數-所求行|;同一行從第一個字母到最后一個字母=2*行數-1;
    所以可以用for循環來控制同一行從第一個字母到最后一個字母之間的空格。
  • Q2:最開始,我把space的初始值定義為0,圖形輸出來就是不對。
  • A2:從B 5的例子可以看出第一行的A前有一個空格,所以space的初始定義值應該為1.

4.代碼互評

4.1 代碼截圖

關於龜兔賽跑一題

下面是范華同學的代碼:

下面是我自己的代碼:

4.2 二者的不同

  • 1.我是用if-else的條件通過不同段時間判斷兔子的路程,而范華同學使用for循環記錄兔子的路程。
  • 2.范華同學的代碼巧用sign來緩沖兔子休息的時間。雖然找規律花費了不少時間,但我覺得我的代碼比較直觀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM