#0.展現PTA總分 編程
#本章學習總結 ##1.1學習內容總結 ###1.1.1while語句函數
while(表達式1) { 循環體語句; }
do { 循環體語句; }while(表達式一);
do while語句和while主要的區別在於do while對於循環體中的語句先執行一次再判斷條件,而while則是先判斷條件再看是否執行循環體中的語句;而while語句和for同爲循環語句,對於何時用while語句何時用for語句有一些區別,當不清楚循環次數時用while顯然要簡單一些,當清楚循環次數則用for; ###1.1.2判斷素數的一些技巧方法 咱們來看下面這個例子學習
for(i=2;i<=m/2;i++) { 循環語句; }
or測試
for(i=2;i<=m;i++) { 循環語句; }
這雖然在通常的題中沒有什麼問題,但我以爲從時間角度來講,上面的句子節省了一半的循環時間,提升了程序的運行效率;因此我以爲在之後的編程中,多思考思考,也許能找到更好的方法來解決這些問題; ###1.1.3 break和continue語句 舉個例子:大數據
for(i=1;i<=3;i++) { printf("*"); continue; }
and調試
for(i=1;i<=3;i++) { printf("*"); break; }
第一種輸出的結果爲‘’**‘’,而第二種輸出的結果爲‘’‘’,雖然都是跳出循環,但continue只是跳出此次循環,執行下次循環;而break則是跳出循環語句,再也不執行它;固然break也能夠用於switch語句; ###1.1.4 嵌套循環 嵌套循環無非就是for中for,for中while,while中for;我以爲語法只要單獨的掌握了for和while循環,嵌套循環就不是問題,我以爲重要的仍是實際例子中的運用;好比初始化變量應該放在for中的哪一個地方,以及什麼時候恰當的運用break和continue,使語句恰當的執行; ###1.1.5 經過超星學習通學習的知識 須要清空多餘字符時用fflush(stdin); 清屏system(「cls」); 鞏固了隨機數rand(),它存在於#include<stdlib.h>; 隨機種子srand(time(NULL));隨機種子存在於#include<time.h>;code
##本章學習體會 ###1 在本章學習中,我以爲已經掌握了基本語法,差的只是實際中的運用,多作點題目,我以爲能夠掌握,惟一讓人就是這星期太多做業了,不是在預習的路上就是在預習,但也讓人很充實,沒有一點的偷懶; ###2 上週總共代碼量爲300行 這周的代碼量爲400行,距離預約的差太多了,這周得再接再礪了;blog
#2.PTA實驗做業 ##2.1 題目名1 水仙花數是指一個N位正整數(N≥3),它的每一個位上的數字的N次冪之和等於它自己。 ###2.1.1僞代碼 數據處理:循環變量 int i,j;計算總和的int sum;取餘後最後一位數:int num;去掉最後一位數的變量:int item;it
定義變量 初始化變量sum; 輸入變量N; for(i=最小的N位數;i<=最大的N位數;i++) { 初始化item=i,sum=0; for(j=1;j<=N位數;j++) { 取出最後一位數爲num; 去掉最後一位數爲item; 計算N位數的各個數字的立方和; } if(判斷是否爲水鮮花數) { 輸出 } }
###2.1.2代碼截圖 for循環
###2.1.3造測試數據 輸入數據|輸出數據|說明 ----------:|------|----: 3|153\n370\n371\n407|最小數據,題目數據 7| 1741725\n9800817\n9926315 |最大數據 ###2 .4PTA提交列表
###2.1.5說明 1.編譯錯誤:未定義變量item 2.答案錯誤:sum沒有在內部初始化,致使下一次循環有原來的值;經過調試,在內部初始化了sum=0; 3.答案錯誤:沒有使item=i,致使每一次item都爲原來的值,循環出不來;在一個for內使item=i; 4.部分正確:在改正了前兩個後,還有一個在屢次調用pow函數形成的運行超時問題;我直接造了一個po函數,讓主函數直接調用它,雖然在vs上看不出有多少差異,但在pta上卻經過了,事實證實本身寫的函數應該比調用系統函數庫裏的要快一點;
##2.2 題目名2 已知函數ex能夠展開爲冪級數1+x+x2/2!+x3/3!+⋯+xk /k!+⋯。現給定一個實數x,要求利用此冪級數部分和求ex的近似值,求和一直繼續到最後一項的絕對值小於0.00001。 ###2.1.1僞代碼 數據處理:輸入實數double x和double sum;循環變量int i;階乘double temp;
定義變量; 輸入x; for判斷條件 { 階乘temp; 求和sum; } 輸出sum;
###2.1.2代碼截圖
###2.1.3造數據測試 輸入數據|輸出數據|說明 ----------:|------|----: 1.2|3.3201|題目數據 0|1.0000|最小數據 5|148.1432|最大數據 ###2.1.4PTA提交列表
###2.1.5說明 1.運行超時:起先運行錯誤,我用vs結果顯示5的時候,答案是負數,我就加了一個fabs,結果超時,就覺得是調用的問題,解決:沒法找出緣由,就換了一個方法寫; 2.答案錯誤:換了方法後顯示答案錯誤,這種題用vs查錯我也不會,設斷點也不行,用printf輸出也不行;解決:叫同窗幫忙看後,才知道階乘的定義錯了,將int改成double就行了,之前知道但不覺得然,此次讓我浪費了這麼多時間才讓我長了教訓
##2.3題目名 烏龜與兔子進行賽跑,跑場是一個矩型跑道,跑道邊能夠隨地進行休息。烏龜每分鐘能夠前進3米,兔子每分鐘前進9米;兔子嫌烏龜跑得慢,以爲確定能跑贏烏龜,因而,每跑10分鐘回頭看一下烏龜,若發現本身超過烏龜,就在路邊休息,每次休息30分鐘,不然繼續跑10分鐘;而烏龜很是努力,一直跑,不休息。假定烏龜與兔子在同一塊兒點同一時刻開始起跑,請問T分鐘後烏龜和兔子誰跑得快? ###2.3.1僞代碼 數據處理:定義了循環變量int i;烏龜兔子的路程int rabbit;int tortoise;總時間int time;
定義變量;’ 初始化路程; 輸入時間; for循環條件 { 烏龜兔子的路程; if判斷是否到了十分鐘 if判斷誰跑的遠 if判斷是否加了三十分鐘超過了總時間time; 輸出結果; }
###2.3.2代碼截圖
###2.3.3造數據測試 輸入數據|輸出數據|說明 ----------:|------|----: 242|@@ 726|最後未滿30分鐘的 9|^^ 81|未滿10分鐘的 40|@_@ 120|恰好滿30分的 ###2.3.4PTA提交列表
###2.3.5說明 1.答案錯誤:未將兔子在跑中獲勝的算進去。解決:放個if語句進去,判斷滿30和沒滿30的狀況,分別輸出 2.部分正確:輸出平局是未將路程寫進去,解決:將兔子或烏龜的路程放進去便可
#代碼互評 ##第一題
or
1.代碼的複雜度不一樣,一個打印空心菱形用的的一段直接打印,一個用的兩段打印上下 2.定義的變量一個多一個少,一個有用到字符變量 ##第二題
or
1.一個輸入菜單時用了函數,一個直接打印 2.一個將==0的狀況放在了switch語句裏,一個單獨用了一種狀況