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”;
- 直接結束
- case ‘1’:
- end switch;
- 再輸入ch;
- switch(ch) do //對於輸入為1,0,和其他字符這三種情況做判斷
- 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
- if j=1且j=2*num-1 then
- end for
換行
- fornspace=1 to |middle-i do
- 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來緩沖兔子休息的時間。雖然找規律花費了不少時間,但我覺得我的代碼比較直觀。