標籤:排列 逗號運算子 ble jpg 列表 範圍 完數 設計 語言
一、PTA實驗作業題目1:使用函數輸出一個整數的逆序數1. 本題PTA提交列表
2. 設計思路
reverse函數(int number):1.int n,i,number1,number2=0//n控制第一個迴圈,i控制第二個迴圈,number1存放number資料來,number2來存放逆序數2.number1 = number//把數字賦值給number1求number的位元,避免改變number的值 3.for n=1 to number1!=0 執行4.4.n++;number1=number1/10;5.while number%10=0時執行6.7.6.if number==0 break;//考慮輸入0時進入死迴圈7.number=number/10;n--;//若個位為零先丟掉個位8.for i=1 to i<=n執行9.10.119.int unit;10.unit=number/pow(10,(i-1))//逐步丟掉個位 11.number2=unit%10*pow(10,n-i-1) +number2;//累加算出逆序數 12.return number2;
3.本題調試過程碰到問題及PTA提交列表情況說明。
- 在提交前有遇到計算數字位元不正確的問題 解決辦法:在算位元的迴圈裡輸出了n的值用於找錯,最後發現是結束條件應該為number1!=0;
- 提交後未滿分提示輸入0時錯誤 解決辦法:在丟個位的步驟七迴圈中寫一個條件判斷number==0時break跳出該語句。
題目2:使用函數輸出指定範圍內的完數1. 本題PTA提交列表
2. 設計思路
factorsum函數(int number):1.int i,sum=0;//i控制迴圈 sum來把每個因子累加 2.if (number==1) return 1//先把特殊情況1列出去3.else 執行4.5.4for i=1 to i<=(number/2) i++//逐個求number因子 5. if ((number/i)==(double)number/i) sum=sum+i;6.return sum;PrintPN函數(int m;int n):1.int i,k,y=0;//i控制第一層迴圈(找到區間內的完數),k控制第二層迴圈 y=0來標記是否有完數產生 2.for i=m to i<=n i++{ 3. if (factorsum(i)==i){ 4.y=1;//有完數產生就改變y的值 5.printf("%d =",i); 6.if (i==1) {printf(" %d",i);printf("\n");}//1時的特殊情況 7.else{ 8.for k=1 to k<(i/2) k++){//將該完數分解 9.if (k==1) printf(" %d ",k); 10.else if (i/k==(double)i/k) printf("+ %d ",k);} 11.printf("+ %d",i/2); 12.printf("\n"); } } } }3.if (y==0) printf("No perfect number") ;
3.本題調試過程碰到問題及PTA提交列表情況說明。
- 多種錯誤中首先是沒考慮無完數的情況 解決辦法:用開頭定義一個y=0;中間如果產生一個完數就賦值y=1來實現。
題目3:求組合數1. 本題PTA提交列表
2. 設計思路
- 定義整型變數n,m(n<=n)
- 輸入n,m
- 輸出 result的值,result=fact(m)/(fact(n)*fact(m-n))
- 定義浮點型函數fact(double n)
- 定義浮點型變數i,result,i控制變數,result用來存放累乘的值
- 返回result的值。
3.本題調試過程碰到問題及PTA提交列表情況說明。
- 資料類型不符 解決辦法:同學提醒把函數類型改為double
二、同學代碼結對互評1.同學互評照片。
2.My Code、互評同學代碼
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
- 不同:
劉博涵的函數是直接將m,n帶到一個函數中進行組合數的總運算,而我的函數是只進行累乘的運算再在輸出裡面用公式fact(m)/(fact(n)*fact(m-n)輸出結果
- 優勢:
劉博涵同學代碼在輸出部分就不需要在進行運算了,而我的還需要進行。
My Code比較簡潔,函數內進行的運算比較簡單
- 更喜歡自己的代碼,因為總體看起來簡潔,同時也沒有那麼多迴圈,更易懂。
三、本周題目集的PTA最後排名。
四、本周學習總結1.你學會了什嗎?1.1 C語言哪些資料類型?
整型、字元型、實型
1.2 字元型資料需要注意地方?
int x=1, y=012;
printf(“%d”,y*x++);
錯選24 正確10 原因:不知道y=012是八進位的表達 也不知道單獨的x++的值
第四題運算式8>6>3的值是
錯選1 正確0 原因:不知道(8>6)=1 然後(1>3)=o
2.本周的內容,你還不會什嗎?
- 優先順序還需要再鞏固
- 進位間的轉換需要再學習
- 位元運算符不懂
3.迴圈結構考試總結1.哪題做錯了,怎麼改?
第四題錯了 第五題沒做。
負數部分答案錯誤 應該在之前判斷是否為負數,若為負數輸出0。
2.考試結果滿意麼,怎麼改進?
不滿意,應該多學習滿分同學,提高自己的編程量。此次考試會做的都是一遍就能寫出來(前三題),用時也較少,但就是不會做的後兩題毫無頭緒,導致一直到最後提交時間也沒有能做出來,最後一題甚至連思路都沒有,還是自己不能完成題目的要求。
C語言部落格作業--函數