第三次作業-----函數
1.本章學習總結
1.1 思維導圖

1.2 本章學習體會及代碼量學習體會
1.2.1 學習體會
本周函數的學習,說難也難,要知道**局部變量**,**全局變量**,**靜態變量**的適用范圍,有的時候,一不小心就會搞錯。說簡單也算簡單,就是函數聲明,定義和調用,運用函數就是使主函數中的代碼看起來更清晰明了,而且,同樣的函數類型可以多次調用,相比普通編程會更省事一些。
學習下來,覺得最大的收獲就是知道函數里面可以多次調用函數,不用再次定義,很方便;而且,判斷一個數m是不是完全平方數,時為了減少循環的時間,可以采用m=(int)sqrt(j)*(int)sqrt(j)這樣的方式,既減少了代碼量又大大縮短了運行時間。函數這一章,相比之前編程題還是有很多地方需要學習的,暑假自學的內容差不多要啃老啃完了,后面我得花更多時間在編程上,去學習新的知識了。
做大作業的時候,把程序寫完是很容易,可是當你調試的時候會發現還有一大堆錯誤,運算符沒有定義成隨機生成,自己一直以為用getchar就可以,后來問同學才知道要定義一個函數表示,兩步運算時每次產生的運算符都一樣,應該用ch1,ch2來表示。在調用函數的時候,在形參前加了函數類型,一直編譯錯誤。。。這次作業,本來打算完全靠自己做完的,后來各種錯誤簡直讓我崩潰,還是請教了大佬,加以指點,才順利完成大作業。自己在做的時候,看過幾個同學的代碼,發現他們主函數里面全是函數調用,那樣看起來很簡明,于是自己也學著改成那樣,發現這樣代碼要修改會方便很多。
總之,學無止境,多和他人交流,學習別人代碼的長處,來不斷優化自己的代碼!
1.2.2 代碼累計

2.PTA總分
2.1截圖PTA中函數題目集的排名得分

2.2 我的總分:
函數題:145
3.PTA實驗作業
3.1 PTA題目1
本題要求實現一個計算Fibonacci數的簡單函數,并利用其實現另一個函數,輸出兩正整數m和n(0<m≤n≤10000)之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和(最開始兩項均定義為1)的數列。
3.1.1 算法分析
定義fib函數返回第n項的斐波那契數
定義變量x1,x2,x分別表示相鄰的三個斐波那契數
對相鄰三個斐波那契數都賦初值為1,輸出的項數小于3時,返回x的值也是正確的
for i=3 to n
x=x1+x2; //第三項是前兩項的和
x1=x2; //將x2的值賦給x1,更新x1的值
x2=x; //將x的值賦給x2,更新x2的值
end for
return x; //將x的值返回到主函數中
定義PrintFN函數返回給定區間內的斐波那契數
定義count表示有沒有斐波那契數,賦初值為0
定義i表示第i個斐波那契數,賦初值為1,J表示給定區間內的數
定義flag用來控制空格的輸出情況
while(1) //找給定區間的斐波那契數,直到j>n時break跳出循環為止
j=fib(i) //從第一個斐波那契數開始找,看在不在給定區間
if(j>=m&&j<=n) //j在給定區間
if(flag==1)
printf(" ") //保證第一個斐波那契數前沒有空格
count加1
printf("%d",j) //將符合的數輸出
flag=1 //此時第一個斐波那契數已經輸出,flag要賦值為1保證兩個數之間有空格
end if
if(j>n) 如果條件成立,此時j已不在給定區間,需要退出循環,用break
i加1 將下一個斐波那契數的值賦給j
end while
if(count==0) 這個時候沒有斐波那契數
輸出 No Fibonacci number
3.1.2 代碼截圖


3.1.3 測試數據

3.1.4 PTA提交列表及說明

Q1:返回第n項的值時,當返回項數小于3的時候結果錯誤
A1:將x的初值也賦為1
Q2:無法返回斐波那契數
A2:再次調用第一個返回值的函數,并對其大小進行判斷
4.大作業
題目:實現小學四則運算。
要求:
題目有3個難度級別,分別為:
第一級是1位數的一步加減乘除計算
第二級是2位數的2步加減運算
第三級是3位數的2步加減運算
4.1.函數關系圖

4.2.函數功能介紹
1.函數ch,產生隨機運算符
用a表示隨機數對4取余后得到的數字,分別對應4種情況,并將隨機運算符分別賦予相應的ch,然后把ch結果返回
。
2.函數main
開始先出現界面告訴答題者有三個等級可以選擇,然后正確輸出所要進入的等級后進入相應的函數調用,輸入非法字符則提醒使用者并讓其重新輸入

3.定義等級函數
輸入想要做的題目后進行循環做題,隨機生成式子讓用戶輸入結果,然后判斷正誤以及計算正確個數。同時,在開始做題的時候進行計時,結束的時候停止,計算出時間差,作為本次答題的時間

4.3 運行結果截圖
按照程序功能,分別截圖展示運行結果,對于臨界、不合法數據,可單獨截圖運行結果圖。
4.4 調試碰到問題及解決辦法
Q1:每次得到的隨機運算符都一樣
A1:要用不同的ch,比如設為ch1,ch2來接收調用函數后得到的運算符,這樣兩步的時候就有+-號的不同
Q2:選擇等級時輸入非法字符,會連著輸出兩句提示錯誤的語句
A2:輸入的空格也會被當成是輸入的一個字符,屬于非法運算符,所以會被輸出兩次,解決這個問題需要用getchar()將空格吸收掉,這樣就可以正常輸出了
4.5 大作業總結
此次作業,構思不難,可是細節處問題多多,同時,也讓我知道自己還有許多不足,主要在以下幾個方面我深有體會
- 1.當運算關系比較復雜的時候,主函數里面全部函數調用,函數定義放在主函數外面,那樣看起來更直觀。
- 2.先將主體思路構思好,再對局部代碼進行優化。修改代碼時,不要一出錯就盲目地改正,那樣只會越改越亂,最后自己都理不清思路
- 3.碰到新知識先自己去百度看看,不要一味問同學,經過自己看懂的知識點,才能印象更深刻。
- 4.體會到了程序員的不容易,設計四則運算只是一個很初級的游戲,都能有那么多的錯誤,那設計一個軟件的程序所需要的代碼量及會出現的錯誤是想都不用想的,肯定需要花大量時間去調試。同時,這也告訴我,做事要有耐心,有毅力。
浙公網安備 33010602011771號