C語言--函數嵌套


一、實驗作業

注意:
1.可以先初始化2個結構體數組數據以便測試。
2.要求用模塊化方式組織程序結構,合理設計各自定義函數。同時,程序能夠進行異常處理,檢查用戶輸入數據的有效性,用戶輸入數據有錯誤,如類型錯誤或無效不會中斷程序執行,具有一定的健壯性。

1.1 PTA題目 十進制轉換二進制

設計思路

主函數:
   定義變量n存放十進制數
   輸入n
   調用函數dectobin
被調函數:
	如果n<2輸出n
	否則
		dectobin(n/2);
	輸出n取2的余數

代碼截圖

調試問題

一開始使用的判斷條件是n!=0,但是0這個測試點沒有輸出,添加0的輸出后非0數值轉換結果又錯了,后來改用n<2為判斷條件答案正確

1.2 學生成績管理系統

代碼總行數:340

1.2.1 畫函數模塊圖,簡要介紹函數功能。

1.2.2 截圖展示你的工程文件

1.2.3 函數代碼部分截圖

頭文件

插入學生信息及學生成績信息代碼

【只實現了基礎功能,合法性沒有判斷】

刪除學生成績信息代碼

【題目是刪除成績,覺得這樣操作和修改成績的代碼其實沒有區別了】

總分排序代碼

(通過輸出實現代碼注釋方便使用操作)

1.2.4 調試結果展示

錄入數據

命令1:新增學生信息

新增學生是否已存在

命令3:刪除學生信息

命令2:修改學生信息

命令4:輸出所有信息

命令5:按總分,平均分排序輸出

命令6:查詢學生信息

找不到該學生

命令7:退出系統

1.2.5 調試碰到問題及解決辦法。

(1)開始建的是c++項目,一加函數就提示結構體重定義,重建項目還是不行,后來重寫了結構體,建立新項目,這個問題解決了,但是又出現全局變量函數中提示未定義,改用c項目后解決。

(2)

插入新學生時,循環中數組下標使用了i,而i初值設為0,導致第一組數值被覆蓋,換用count后解決

(3)忘記定義的是字符數組,排序時用整型比較的方式尋找輸入學號,導致排序一直錯誤,后改正

二、截圖本周題目集的PTA最后排名

三、閱讀代碼

找一篇優秀代碼貼圖展示,先描述題目,再貼代碼,可自己在里面加注釋。
說明該代碼功能是什么,優點是什么?
代碼本次要求找遞歸相關代碼。代碼長度至少10行以上。
內容不能太泛,一定是有針對性講出代碼優勢,自己可以從里面怎么學習。

功能:主函數控制輸出格式,被調函數利用遞歸計算數列元素的值
優點:(1)主函數里動態申請變量空間,不浪費內存空間
          (2)斐波拉契數列是比較典型的使用遞歸的例子,如果使用循環,另外判斷n=1和n=2時的情況是可以的,但是從第三項起,要計算第n-2項和第n-1項之和就有點不好操作了,是不是還得用數組存放數值?代價就有點大了。而遞歸將這種重復性的一樣的操作直接丟給計算機去做,代碼思路看上去也清晰很多

四、本周學習總結

1.介紹本周學習內容

1.1while(1)可以實現永久循環,通過循環體中的break語句結束循環

1.2#define宏定義將固定不變的系數定義成符號常量,保證符號常量不變性,也增加程序可讀性

1.3宏定義格式:#define 宏名 宏定義字符串 【行尾無需加分號,常用大寫字母串做宏名,中間可有空格,回車符結束】

1.4在程序編譯時,所有出現宏名的地方,都會用宏定義字符串來替換,即宏替換,只替換不做運算

1.5宏要在一行內完成,可實現簡單的函數功能,如 #define MAX(a,b) a>b?a:b

     另外如果#define最后跟的“\”表示改行未結束,與下一行合起來成為完整一行

1.6宏嵌套定義:#define PI 301415926
#define S PIrr

1.7文件包含的指定的文件名如果使用尖括號<>將使用C語言的標准頭文件,編譯系統在系統設置好的文件夾中把指定文件包含進來。使用“”則從當前工作文件夾中尋找被包含文件,找不到再到系統中尋找。

1.8條件編譯

1.9
01.外部變量格式:extern 變量名表

1)只起說明作用,不分配儲存單元,對應的儲存單元在定義時分配
2)全局變量只能在某個模塊中定義一次,如果其他模塊要使用該全局變量,需要外部變量的聲明

02.函數的外部聲明

1)格式:extern 函數類型 函數名
2)實現在一個模塊中調用另一個模塊中的函數

2.1一維數組

(1)一般格式:類型名 *數組名【數組長度】
(2)指針數組是由指針變量構成的數組,在操作中既可以對數組元素進行賦值和引用,也可以間接訪問數組元素所指向的的單元內容,改變或引用該單元的內容

2.2二維數組

(1)二維數組相當於二級指針,即指向指針
(2)指向指針一般定義:類型名 * *變量名
(3)二級指針指向一級指針,代表同一個單元,值是相等的

2.3二維數組a中三個層次的指針等價關系

(1)a是行元素數組的首地址,又稱為行地址,二級指針;a是首行第一個元素的地址,又稱列地址,一級指針
(2)a[i][j]等價於
(a+i)+j)或(a[i]+j)

2.4定義二維字符數組必須指定列長度大於最長字符串的有效長度,由於各個字符串的長度一般不相同,會造成內存單元的浪費。而指針數組並不存放字符串,僅僅用數組元素指向各個字符串,沒有類似問題

2.5所有的局部數據對象在函數返回就會消亡,其值不再有效,所以不能實現函數時返回在函數內部定義的局部數據對象的地址,一般都返回全局數據對象或主調函數中數據對象的地址

2.6 函數名可以做函數的實參,函數指針做函數的形參

2.學習體會

學的比較零散,所以做系統的時候有點亂了陣腳,知道整個框架要怎么做,但是具體到細節就不確定了,一直在改錯誤,改不完的感覺,嘆氣,做系統真的很考驗學習的扎不扎實。這周學的東西更體會到知識點的聯系的重要性。系統寫不出來的時候有挫敗感,有點擔心期末的課程設計。


免責聲明!

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



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