C語言博客作業03--函數


0.展示PTA總分

函數

1.本章學習總結

1.1 學習內容總結

1.函數可以分為庫函數和自定義函數,scanf()printf()等為庫函數,可以直接調用,而自定義函數需要自己定義

2.函數命名用駝峰法時首字母應大寫。

3.函數定義的一般形式:

4.函數首部由函數類型函數名形式參數表組成,位於函數定義第一行 函數首部不能加分號。其中形參表的格式是:

5.函數體中,用return語句返回運算的結果。

6.在任何C程序執行時,首先從主函數main()開始調用。

7.函數調用的一般形式:

8.函數調用一般出現在兩種情況下:①賦值語句 ②輸出函數的實參

9.參數傳遞時,形參和實參必須一一對應,二者數量相同,類型盡量一致,且只允許實參把值復制給形參

10.形參必須是變量;而實參可以是常量,變量或表達式。二者可以同名,也可不同名。

11.函數結果返回的形式:

12.return語句的作用:


1. 結束函數的運行。
2. 帶着運算結果返回主調函數。
3. ps:return語句只能返回一個值。


13.函數聲明的一般格式:


ps:與函數首部相同,但是是以分號結束的。

14.不返回結果的函數定義:


ps:在不返回結果的函數定義中,void不能省略,否則,函數類型被默認定義為int型。

15.



1.局部變量的作用范圍局限於所在的函數內部,只在定義變量的函數中起作用函數調用時候有效,函數調用結束也消亡。全局變量的作用范圍是從定義開始到程序所在文件的結束,作用於所有函數。靜態局部變量從被調用開始一直作用到程序結束,其作用范圍只能用於所定義函數,不能
用於其他函數。
2.局部變量一般定義函數或復合語句的開始處,不能定義中間位置。全局變量一般定義在程序的最前面,即第一個函數的前面,若一個變量需要傳遞到多個函數時用全局變量。靜態局部變量在有靜態保存的要求下使用,一般用於累加累乘之類的運算,一般不使用靜態局部變量。


16.自動變量定義形式:

17.為了便於計算機存儲管理,C語言把保存所有變量的數據區分成動態存儲區靜態存儲區。它們的管理方式不同,動態存儲區是使用堆棧來管理的,適合函數動態分配與回收存儲單元。而靜態存儲區相對固定,管理較簡單,它用於存放全局變量和靜態變量

18.靜態變量定義格式:


ps:如果靜態變量定義時沒有賦初值,系統將自動賦0。

1.2 本章學習體會及代碼量學習體會

1.2.1 學習體會

  • 在這一章函數的學習中,我認識到了自己定義函數使用函數的好處,可以使結構更加清晰,看起來也更加整齊有序,感覺能解決以前不方便的問題。
  • 在函數這一章中,我認識到了函數的定義,知道了函數調用的形式,但是在運用過程中,我對於函數的運用還不熟練,一些類型還是不熟練,自定義函數的格式比較多,在形參和實參對應的參數傳遞時如果用還是容易弄混。
  • 在局部變量和全局變量的運用選擇,還有靜態變量也比較混亂,以及作用范圍和生存周期的區別。
  • 而且變量儲存的內存分布好復雜,不是很明白。

1.2.2 代碼累計

我的代碼量(不包括重復)

代碼量(行)
4 241
5 506
6 771
7 842
8 793
9 724
累計 3877

本次綜合作業代碼量:1680行(原來理解錯題意寫了有300多行,后來又重新寫)

2.綜合作業

1.題目:小學生口算表達式自動生成系統

功能要求:

  1. 完成1-3年口算題自動出題系統
  2. 注意每個年級運算數要求,運算數和運算符要隨機生成
  3. 用戶每選擇一個難度級別后必須輸入題目數量,能統計用戶的正確率。用戶每算一題,若錯誤,給出正確答案。 用戶中途退出,不繼續做題,需要有個提示操作可中途退出。

注意:

  • 軟件界面必須友好,多加文字提示,能讓用戶自己當前做什么,接下來怎么做,每步操作可以退到主菜單界面。注意異常數據處理,如除0錯誤、不合法數據、臨界數據,系統保證運行時候不崩潰。
  • 注意函數封裝,不管是幾位數的加減乘除運算,相同功能的代碼應該都封裝都一函數,通過參數傳遞實現代碼覆蓋。也可以考慮數據輸入、輸出等函數封裝,盡量不要把代碼都放main中。各種異常情況也可以單獨封裝函數處理,讓程序的擴展性更強。

擴展功能:

  • 可以設置答題時間,用戶超過答題時間,提示不能繼續做題,重新選抽題。請查閱C的時間函數。
  • 擴展難度級別,比如出現2步加減乘除,然后乘除優先計算。比如2+3*4運算。

2.本次作業的函數關系圖

3.函數功能及全局變量介紹

3.1.全局變量


    int grade;//年級名稱
	int number;//題目數量
	int order;//題目編號
	int count;//題目數量的逐漸增加
	int i, j, k;//口算題目中=前面的數字
	int result;//答題者輸入的口算題目的結果
	int error;//統計同一道題的錯誤數
	int wrong;//統計錯誤題數
	int right;//統計正確題數
	char ch1,ch2;//運算符
	int op1,op2;
	int response;//記錄真正的答案,原本沒有定義這個的,后來發現這個比較方便
	int trueRemainder;//從二年級的題目中有余數的存在,定義真正的余數
	int yoursRemainder;//答題者輸入的余數
	double accuracyRate;//正確率


3.2.ListMenu()函數

  • 我的ListMenu()函數是主要是用來輸出該程序的規則

3.3 函數2&3

  • 我的correctMessage()函數incorrectMessage()函數是用來輸出答案正確或錯誤時的提示

4.運行結果截圖,測試用例。


10以內三個數連加連減混合,100以內的填括號,10以內的填括號,10以內的加減法

10以內的加減法,湊10練習

10以內相同整數連加,尾數是0三位數加減法,9以內的除法,含有小括號的混合運算

兩位數的加減法,整百數乘整十數,兩位數乘兩位數,三位數的加減法,百以內兩位數連減兩位數的減法

一位數乘一位數,一位數除兩位數,一位數除三位數,尾數是0的三位數乘法

5.調試碰到的問題及解決辦法


1. 在運行過程中,最新發現的一個問題是計算正確率的時候,有時候就正確,有時候答案就不正確,暫時還沒有找到解決辦法
2. order = rand() % 10;這個語句應該放在for語句中,才可以做不同的口算,否則一直是同一個類型,通過調試找出
3. 剛開始答案一直不對,后來發現ijk產生隨機數應該放在符號產生之前,通過測試找出
4. 一開始運算符號不知道應該怎么弄出隨機的,后來通過07學姐的啟發,自己找到了一種看起來比較復雜,但比較好理解的方法
5. 設置答題時間暫時未找到方法
6. 用戶中途退出暫時未找到方法
7. 隨機數剛開始只是見過,但不熟悉,而且還有規定的范圍,感覺不明白不會使用,后來通過看以前課堂派上的相關代碼以及上網查詢資料,知道了:要產生從X到Y的數,只需要這樣寫:k = rand() % (Y - X + 1) + X;,在這次綜合作業中不斷使用,現在已經逐漸掌握
8. 用response記錄真正的答案,原本沒有定義這個的,后來發現使用這個比較方便,更容易進行比較
9. 調試時發現隨機數一直都是同一組,后來發現定義srand(time(NULL));可以產生不同的隨機數


6.大作業總結


1. 在這次綜合作業中使用隨機數,逐漸掌握,但還是在一些比較特殊方面比如說運算符號比較復雜時不知道應該怎么辦,剛開始的時候,感覺很害怕去寫這個,但是在寫了第一類之后,感覺就沒有那么恐怖了,所以要敢於去做
2. 在寫這么長的代碼時,格式非常重要,但是在復制前面的代碼時不知道為什么格式就會變得不如我原來的整齊,在復制之后重新改動時由於不認真可能會漏掉一些東西,希望自己以后能更加嚴謹一些
3. 在寫這個時真的很讓人糾結,我第一次寫時由於理解錯題意,認為是選擇年級之后再選擇想要做的題型,后來明白了這個難度級別的意思應該就是年級級別,然后就重寫了,所以以后要多想一些
4. 我的程序中函數使用比較少,主要都是在主函數中,這個口算系統不太會使用函數,單獨封裝函數處理不熟練,希望以后在寫代碼時多用函數
5. 輸出后界面比較長,不知道怎么才可以重新清屏,即:每步操作可以退到主菜單界面
6. 在中途退出方面感覺是需要用到條件語句,但是應該用什么來做這個標志不清楚
7. 老師建議擴展功能設置答題時間,即:用戶超過答題時間,提示不能繼續做題,重新選抽題,雖然知道要查詢時間函數,但還是不太能理解到底應該怎么規定每道題的時間,時間超過了又應該怎么辦
8. 在每個后面一定要多加注釋,不然很容易忘記自己寫的是什么,也不能夠讓別人看明白,並且在調試過程中,發現的問題要及時記錄下來,解決辦法也要寫明白



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM