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