標籤:組合 調用 原因 理解 總結 根據 程式 迴圈 考試總結
一、PTA實驗作業題目一:6-6 使用函數輸出水仙花數1. 本題PTA提交列表
2. 設計思路
- 1定義函數narcissistic( int number )
- 2定義局部變數sum=0,n=number,end
- 3當number為三位元時
- 4若number/10!=0進入迴圈5
- 5end=number%10,sum=pow(end,3)+sum,number=number/10
- 6對最高位不滿足迴圈條件的剩餘number值sum=pow(number,3)+sum
- 7當number為四位元時
- 8若number/10!=0進入迴圈9
- 9end=number%10,sum=pow(end,4)+sum,number=number/10
- 10對最高位不滿足迴圈條件的剩餘number值sum=pow(number,4)+sum
- 11如果sum=n,返回1,否則0
- 1定義函數void PrintN( int m, int n )
- 2定義局部變數i
- 3i=m+1;i<n,i++迴圈調用上述函數判斷是否符合水仙花數,是的話輸出
3.本題調試過程碰到問題及PTA提交列表情況說明一開始編輯時忘了number的改變性,導致最後的sum與number沒有可比性,錯誤
改正之後發現輸出的資料中沒有370,調試後發現自己的條件使其沒有進入迴圈
改正後輸出正確,但是放到pta上答案錯誤,自己根據提示調試發現自己的資料輸出有局限性
調整思路後,重新修改編寫後部分正確
後發現自己題意沒有理解好,當number四位元時要四次方,修改增加後正確題目二:6-7 使用函數輸出指定範圍內的完數1. 本題PTA提交列表
2. 設計思路
- 1定義函數factorsum( int number )
- 2定義局部變數j.sum=0
- 3當number=1時返回1
- 4j=1;j<=number/2;j++迴圈5
- 5若number%j==0,則sum=sum+j
- 6返回最終sum的值
- 1定義函數void PrintPN( int m, int n )
- 2定義局部變數k,j
- 3k=m;k<=n;k++,迴圈4,5,6
- 4若k==factorsum(k),輸出“k =”,當k=1時直接再輸出“ 1”
- 5j=1;j<=k/2;j++,迴圈6
- 6若k%j==0,輸出“ j”,當j<k/2時輸出“ +”
- 7每一輪迴圈結束輸出“\n‘‘
- 8若j==1&&m!=1,則輸出No perfect number
3.本題調試過程碰到問題及PTA提交列表情況說明
發現輸出沒有換行,多輸出了No的不滿足部分
調整後輸出感覺相同
pta部分正確,調試修改後發現自己題意理解不夠,繼續修改
pta顯示格式錯誤
調試發現自己多了空格,改正後正確題目三:7-1 求組合數1. 本題PTA提交列表
2. 設計思路
- 1定義整型變數m,n,浮點型變數result
- 2輸入m,n的值
- 3調用函數 result=fact(n)/(fact(m)*fact(n-m))
- 4輸出result的值
- 1定義函數fact(int n)
- 2定義整型變數i浮點型變數product=1
- 3i=1;i<=n;i++迴圈4
- 4 product=product*i;
- 5返回product的值
3.本題調試過程碰到問題及PTA提交列表情況說明
一開始編寫後提交發現部分正確,對於錯誤點考慮m=n/2的情況不太理解,自己改了一些不必要的地方,最後發現是由於自己對product的定義為整型的問題,當階乘書數太大就不正確二、同學代碼結對互評1.同學互評照片
2.My Code、互評同學代碼林岑的代碼
My Code
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題(1)我的思路是利用取餘得個位的方式,先計算位元,再利用已知位元不停把個位的數乘上10的某個次方變成高位逆序,最後考慮末位0的問題(2)林岑的思路也有用到取餘得個位的方式,但是她比較巧妙的利用迴圈, k=k*10+m把原先個位的數跟著迴圈升高位,輸出逆序(3)My Code比較容易想到與入手,容易理解,但是很繁瑣,不適用,林岑的代碼比較簡潔,用法也很巧妙,也避開一些假設討論,在同一個迴圈語句中同時達到自己想要的效果,簡潔明了。(4)我喜歡林岑的代碼風格三、本周題目集的PTA最後排名
四、本周學習總結1.你學會了什嗎?
1.1 C語言哪些資料類型?
整型
- 有符號:int; short[ int ](範圍 [-32768,32767] );long[ int ]
- 無符號(自然數):unsigned[ int ];unsigned short [ int ] (範圍 [0.65535] ) ;unsigned long [ int ]
字元型
- char
- 可以用整數來表示字元 ch=‘A‘等價於ch=65
實型
- float(有效數字7~8位)
- double(有效一般15~16)
- 數值精度和取值範圍是兩個不同的概念
實型常量
浮點標記法(實數的小數形式)
必須有小數點
科學計數法(實數的指數形式)
e前有資料,e後整數
1.2 字元型資料需要注意地方?
- ‘a‘和‘A‘,0和‘0‘不同
- 整型變數和字元型變數的定義和值都可以相互交換
1.3 自增自減運算子?
- ++n的運算順序是:先執行n=n+1,在將n的值做為運算式++n的值
- n++的運算順序是:先將n的值做為運算式n++的值,在執行n=n+1
- 自增自減運算子的運算對象只能是變數,不能是常量或運算式。3++或++(i+j)非法
1.4 運算子優先順序?
- 賦值運算子,條件運算式,與!,單目的算術運算子為右結合
- 雙目的算術運算子與關係運算子,邏輯運算子與逗號運算子為左結合
1.5 C語言哪些運算式?課堂派哪裡做錯,做錯的請在這裡分析原因?
- 算術運算式, 賦值運算式,關聯運算式,邏輯運算式,條件運算式,逗號運算式
自己在算時認為算aa=9,a=a-a=3-9,a=a+a=3-6
實際應為aa=9,a=a-a=3-9,a=a+a=-6-6=-12
自己在答這道題時認為‘1’與1不同,就認為不能確定,但即使是‘1‘,字元常量之間也是有數值差量可以轉化。
1.6 其他內容?
- 十進位的首位元字不能是0,八進位的首位元字必須是0,十六進位首位必須要有首碼0x或0X
- 強制類型轉換
(類型名)運算式;
int(3.8)得到3
- 位元運算 (二進位位元運算)
符號:&,|,^,-,<<,>>
2.本周的內容,你還不會什嗎?
- 對於自增自減運算子的使用與計算不夠熟練,容易出錯
- 字元類型的使用,輸出輸入
- 運算子的優先順序與結合性計算也易出錯
- 進位之間的轉換計算
- 對於一些不常用的運算式的理解不夠
3.迴圈結構考試總結
1.哪題做錯了,怎麼改?
- 第二題字元的使用自己不夠熟練,在定義與字母的轉換增加上不熟練,自己在考試時是利用調試工具瞭解到A的數值65再利用字元與數值的轉換關係得出正確。
現在知道應該定義char ch=‘A‘,利用ch=ch+1得到後面字母
- 第四道題二進位的計算,0的個數自己一開始思緒比較亂,編寫的程式複雜也不正確,隨後自己以除二的方式去考慮它的實際有效位元,再利用總的減去求得
2.考試結果滿意麼,怎麼改進?
- 不滿意
- 自己應該多接觸不同的題型,鍛煉自己的思維能力
- 在編寫程式時要思考好再編寫,減少自我混亂
- 提高自我的查錯能力,盡量自己思考找出運行失誤之處
3.其他總結
- 在打代碼時要注意空格與換行問題,要格式準確
- 對於空格問題也可以利用Dev-C++調試看出
- 自己的預習要更透徹,課本要看仔細些
C語言部落格作業--函數