標籤:不能 運行 actor ret 直接 增加 pow 分享 print
一、PTA實驗作業題目1:6-5 使用函數輸出一個整數的逆序數1.本題PTA實驗結果
2.設計思路
- 1.定義a,result放要求的逆序數
- 2.但number不等於0執行步驟3,4,5
- 3.a=number%10 /求number取餘10的數/
- 4.number=number/10
- 5.result=result*10+a回到步驟2
- 返回result的值 如果number=0 直接返回0
3.本題調試過程碰到問題及解決辦法
問題:剛開始調試函數的題目時,不知道斷點設在哪,以為放在主函數在調用函數時會自動調到下面的函數。
不斷進行嘗試,後來才知道原來要調試函數斷點要放在函數那邊,才能調試你編寫的函數。
題目2:6-7 使用函數輸出指定範圍內的完數1.本題PTA實驗結果
2.設計思路
第一個函數
- 1.定義i,sum=0
- 2.如果輸入的number不等於1時執行迴圈for(i=1;i<=number/2;i++){
if(number%i==0)
sum=sum+i;
}
- 3.如果sum==number,就返回1,否則返回0
- 4.如果輸入的number的值為1,返回1
第二個函數
- 1.定義i,j,flag=0
- 2.在規定範圍列出所有可能並調用函數判斷
for(j=m;j<=n;j++){
if(factorsum(j)==j){ /如果是就開始輸出/
printf("%d = 1",j);
flag=1;
for(i=2;i<=j/2;i++){
if(j%i==0) /說明i是因數並輸出i/
printf(" + %d",i);
}
printf("\n");
}
- 3.如果區間沒有數符合就輸出No Fibonacci number
3.本題調試過程碰到問題及解決辦法
剛開始的代碼第二個函數的迴圈有點問題
for(i=1;i<=j/2;i++){
if(j%i==0)
printf(" + %d",i);
}
i是設從1開始的。這樣總會輸出1.但前面已經輸出一個1了所以會導致部分正確。
經過多次輸出發現了這個問題,經過排查發現並修改。
題目3:7-1 求組合數1.本題PTA實驗結果
2.設計思路
主函數
- 1.定義n,m,a
- 2.輸入m,n的值
- 3.a=fact(n)/(fact(m)*fact(n-m)) /調用函數/
- 4.輸出值
被調用的函數
- 1.定義整形變數i,浮點變數result=1
- 2.執行迴圈 for(i=1;i<=n;i++)
result=result*i
- 3返回result的值到主函數
3.本題調試過程碰到問題及解決辦法
二、同學代碼結對互評1.互評同學名稱歐陽震霆2.同學互評照片
3.My Code、互評同學代碼
int prime( int p ){ int i; for(i=2;i<=sqrt(p);i++){ if(p%i==0) break;} if(i>sqrt(p)&&p!=1) return 1; else return 0; } void Goldbach( int n ) { int i,j; for(i=2;i<=n/2;i++){ if(prime(i)==1&&prime(n-i)==1){ printf("%d=%d+%d",n,i,n-i); break; } }} 歐陽
#include<math.h>int prime( int p ){ int i; if(p==1) return 0; for(i=2;i<=sqrt(p);i++){ if(p%i==0) break; } if(i>sqrt(p)) return 1; return 0;}void Goldbach( int n ){ int u,a,j; for(u=1;u<=n;u++){ int flag=0; for(j=1;j<=n;j++){ if(prime(u)&&prime(j)) a=u+j; if(a==n) { printf("%d=%d+%d",n,u,j); flag=1; break; }} if(flag==1) break;}} 我的
4.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
- 首先可以看出歐陽的代碼相對比較簡潔而我的篇幅顯得比較大。
- 在下面那個函數中我用了嵌套迴圈以及再設一個flag來判斷條件,思路比較直接,歐陽的則是用了調用函數及運用了
函數直接解決,需要一定思考。
- 我更喜歡歐陽的代碼。我的雖然較直接但篇幅太大。歐陽運用函數就可以解決掉問題,看起來較為簡潔。
三、本周題目集的PTA提交列表及最後排名
四、本周學習總結1.你學會了什嗎?1.1 C語言哪些資料類型?
- 短整形
- 長整形
- 字元形
- 單精確度浮點形
- 雙精確度浮點形
1.2 字元型資料需要注意地方?
1.3 自增自減運算子?
- a--/a++是尾碼(自減)自增,變數值(減少)增加,運算式值不變
- --a/++a是首碼(自減)自增,變數值(減少)增加,運算式值增加
1.4 運算子優先順序?
- 算術運算子>關係運算子>邏輯運算子>條件運算式>賦值運算子>逗號運算子
- 邏輯運算子,關係運算子,雙目算術運算子是從左向右運算(左結合)
1.5 C語言哪些運算式?課堂派哪裡做錯,做錯的請在這裡分析原因?
- 賦值運算式,邏輯運算式,條件運算式,關聯運算式
- 錯題:運算式(j=3,j++)的值。當時不知道j++整個運算式的值為j。
2.本周的內容,你還不會什嗎?
- 對於在設一個量判斷條件運用不夠靈活如:flag
-找錯誤的能力還是不夠
3.迴圈結構考試總結1.哪題做錯了,怎麼改?
7-3 二進位的前置的零:我用pow(2,i)的方法來接近輸入的數,運用運算式輸出。但值一大就運行逾時了。後來才知道
值超過了int的範圍,使用double就通過了
7-5 單詞長度:當時沒有去完成該題目。
該代碼最後有一種情況不符合
2.考試結果滿意麼,怎麼改進?
結果不太滿意。因為看到最後一題有點不太理解就放棄了。後面自己去完成可以得到較好分數。以後會多去嘗試。
然後自己的查錯能力也要提高,就是自己多去思考,多做題。
C語言部落格作業--函數