(一)改錯題
(1)序列求和:輸入一個正實數eps,計算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精確到最后一項的絕對值小於eps(保留6位小數)。
輸入輸出樣例:
Input eps:1E-4
s = 0.835699
(2)源程序(有錯誤的程序):
- 錯誤信息1:
- 錯誤原因1:
在第17行的while語句后缺少分號。 - 改正方法1:
在第17行的while語句后加上分號即可。 - 錯誤信息2:
- 錯誤原因2:
發現題中n定義為int型,且n參與除法運算,所以導致數型輸出會出現問題。 - 改正方法2:
在12行的1后面加上點一即可。 - 錯誤信息3:
- 錯誤原因3:
答案不正確,輸入和輸出都用了%f。 - 改正方法3:
在輸入和輸出的時候把“%f”改成“%lf”和“%.6f”。 - 錯誤信息4:
- 錯誤原因4:
while語句里面是循環結束語句,而題中給出的是循環跳出的語句。 - 改正方法4:
把小於號改為大於等於號即可。 - 全部改正后帶入幾組數據進行運行計算如圖:
運行結果都與預期結果相符。 - 正確的代源碼如圖:
(二)學習總結
1.語句while(1)和for(;;)是什么意思?,如何保證這種循環能正常執行?
- 區別:
(1)因為“1”表示真,所以語句while(1)在沒有break語句結束循環時表示它內部的語句無限循環。
(2)因為for(;;)沒有判斷條件,視為空語句,所以for(;;)也是無限循環. - 判斷:
這兩種循環的意思是等價的,要想保證無限循環能夠符合自己所期望的方式運行和得出結果,需要在合適的時機退出循環,要想實現這個目的我們可以使用break語句來退出循環,保證其判斷條件為“1”,也就是真。
2.一般情況下,設計循環結構時,使用for、while、do while三種語句都可以,並且三種語句可以相互轉換,但是,在某些特定情況下,我們應該優先選擇某種語句來快速實現循環設計。如果有如下情況:
(1)循環次數已知
(2)循環次數未知,但循環條件在進入循環時明確
(3)循環次數未知,且循環條件在進入循環時未知,需要在循環體中明確
針對上面三種情況,分別采用什么循環語句實現比較好?對每種情況,用我們完成的兩次循環結構作業中的題目加以說明。
(1)循環次數已知:
使用for循環一般使語句塊重復執行指定的次數。我們使用for循環的計數器來指定循環的次數。比如我們學的循環結構(1)7-5題,因為循環次數已知,所以用for循環,源程序如:
(2)循環次數未知,但循環條件在進入循環時明確:
雖循環次數未知,但循環條件在進入循環時明確,使用while語句,比如我們學的循環結構(2)7-3題,源程序如下:
(3)循環次數未知,且循環條件在進入循環時未知,需要在循環體中明確:
循環次數未知,且循環條件在進入循環時未知,所以需要在循環體中明確,使用do...while語句,比如我們學的循環結構(2)7-1題,源程序如下:
3.有如下問題:輸入一批學生成績,以-1作為結束,計算學生的平均成績。
要求分別用for語句、while語句、do while語句三種循環語句實現,並說明你認為哪種形式更合適? - 用while語句的源代碼如下:
- 用for語句的源代碼如下:
用do...while語句的源代碼如下:
使用do-while語句與使用for和while語句時不一樣,因為需要排除用戶直接在第一個數時輸入-1的情況,所以會更加的復雜。
綜合比較下來,在這道題上使用while語句比較合適。因為這個程序是循環次數未知,但循環條件在進入循環時明確,如果用for語句或者是do...while語句來寫的話會比while麻煩一點需要加判斷語句。
4.運行下面程序,輸入1到10,結果分別是什么?為什么? - 程序1:
- 程序2:
- 輸出結果1:
- 輸出結果2:
- 兩個程序的分析及原因:
這兩個程序的唯一區別就是第一個語句用的break循環控制語句,而第二個語句用的是continue循環控制語句,這兩個循環控制語句的區別就是break是結束循環並且跳出這個循環語句,然后執行循環之外的語句,這個語句當輸入2是就跳出循環了,而continue則是結束本次循環,跳出循環體中尚未執行的語句,繼續下一次的循環,直到這個正常結束為止,我們也可以修改源程序一來實現預期的目的,但都不如continue語句簡潔。
(三)實驗總結
7-1 求給定精度的簡單交錯序列部分和
(1)題目:
本題要求編寫程序,計算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一項的絕對值不大於給定精度eps
(2)流程圖:
(3)源代碼:
(4)實驗分析:
- 問題:
輸出的結果為1.00000. - 原因:
- 解決方法:
在1后面加上點零即可。
(5)本題PTA提交列表:
7-2 猜數字游戲
(1)題目:
猜數字游戲是令游戲機隨機產生一個100以內的正整數,用戶輸入一個數對其進行猜測,需要你編寫程序自動對其與隨機產生的被猜數進行比較,並提示大了(“Too big”),還是小了(“Too small”),相等表示猜到了。如果猜到,則結束程序。程序還要求統計猜的次數,如果1次猜出該數,提示“Bingo!”;如果3次以內猜到該數,則提示“Lucky You!”;如果超過3次但是在N(>3)次以內(包括第N次)猜到該數,則提示“Good Guess!”;如果超過N次都沒有猜到,則提示“Game Over”,並結束程序。如果在到達N次之前,用戶輸入了一個負數,也輸出“Game Over”,並結束程序。
(2)流程圖:
(3)源代碼:
4)實驗分析: - 問題:
提交的時候總部分錯誤。 - 原因:
我用的是do...while語句,把while后的跳出語句搞混了。 - 解決方法:
提交之后仔細看一遍提交數據和題目要求。
(5)本題PTA提交列表:
7-3 求奇數和
(1)題目:
本題要求計算給定的一系列正整數中奇數的和。
(2)流程圖:
(3)源代碼:
(4)實驗分析:
本題沒太大難點,就是在無限循環中判斷數據並在某一條件后跳出循環並輸出數據,結果的輸出一定要在循環結束后再匯總數據。
(5)本題PTA提交列表:
(四)博客互評
http://www.cnblogs.com/liukaixuan/p/7855946.html
http://www.cnblogs.com/shaosiming/p/7854102.html
http://www.cnblogs.com/jjjj1234/p/7857951.html