| 這個作業屬於哪個課程 | C語言程序設計II |
|---|---|
| 這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11757 |
| 我在這個作業的目標 | 回顧數據類型和表達式,學習文件操作。 |
| 學號 | 20208984 |
1 題目:給定一個十進制正整數N,寫下從1開始,到N的所有整數,然后數一下其中出現的所有“1”的個數。
問題是:
1.寫出一個函數f(N),返回1到N之間出現的”1“的個數,比如f(12)=5;


2.給出不同測試數據的運算時間,如果你的運算時間不變,說明你的測試數據不夠大

2.滿足條件”f(N)=N“的最大的N是多少?


解題思路:定義兩個函數,分別用來計算1到N中有多少個1和計算最大的N值。
2 將上題中多組測試數據寫入文件,並給出測試程序以檢測你的代碼有沒有問題,貼出你的代碼、運行結果和文件內容。




3.思考針對足夠大的數據,如何減少運算時間,並給出在原有算法基礎上的改進算法和改進思路。
如果要計算百位上1出現的次數,它要受到3方面的影響:百位上的數字,百位一下(低位)上的數字,百位一上(高位)上的數字。
如果百位上數字為0,百位上可能出現1的次數由更高位決定。比如:12013,則可以知道百位出現1的情況可能是:100199,11001199,21002199,,.........,1110011199,一共1200個。可以看出是由更高位數字(12)決定,並且等於更高位數字(12)乘以 當前位數(100)。
如果百位上數字為1,百位上可能出現1的次數不僅受更高位影響還受低位影響。比如:12113,則可以知道百位受高位影響出現的情況是:100199,11001199,21002199,,.........,1110011199,一共1200個。和上面情況一樣,並且等於更高位數字(12)乘以 當前位數(100)。但同時它還受低位影響,百位出現1的情況是:12100~12113,一共114個,等於低位數字(113)+1。
如果百位上數字大於1(29),則百位上出現1的情況僅由更高位決定,比如12213,則百位出現1的情況是:100199,11001199,21002199,...........,1110011199,1210012199,一共有1300個,並且等於更高位數字+1(12+1)乘以當前位數(100)。
2.3 用自己的語言回答兩個問題,並給出所查閱資料的引用(10分)
1.什么是文件緩沖系統?工作原理如何?
系統自動地在內存區為每一個正在使用的文件開辟一個緩沖
區。從磁盤向內存讀入數據時,則一次從磁盤文件將一些數據輸入到內存緩沖區(充滿緩
沖區),然后再從緩沖區逐個地將數據送給接收變量;向磁盤文件輸出數據時,先將數據
送到內存中的緩沖區,裝滿緩沖區后才一起送到磁盤去。用緩沖區可以一次讀入一批數據,
或輸出一批數據,而不是執行一次輸入或輸出函數就去訪問一次磁盤,這樣做的目的是減
少對磁盤的實際讀寫次數,因為每一次讀寫都要移動磁頭並尋找磁道扇區,花費一定的時
間。緩沖區的大小由各個具體的C 版本確定,一般為512
2.什么是文本文件和二進制文件?
文本文件也稱為ASCII文件,這種文件在磁盤中存放時每個字符對應一個字節,用於存放對應的ASCII碼。二進制文件是按二進制的編碼方式存放文件的。
只占二個字節。二進制文件雖然也可在屏幕上顯示, 但其內容無法讀懂。C系統在處理這些文件時,並不區分類型,都看成是字符流,按字節進行處理。
輸入輸出字符流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。 因此也把這種文件稱作“流式文件”。
2.4 請給出本周學習總結(15分)
1 學習進度條(5分)

2 累積代碼行和博客字數(5分)

3 學習內容總結和感悟(5分)
1.之前所學知識基本忘記需要花時間多加復習
2.學習新知識的同時對於之前的知識也要強加復習
3.要多加動手練習
