這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/zswxy/CST2020-2 |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11757 |
這個作業的目標 | 回顧數據類型和表達式,學習文件操作 |
學號 | 20208987 |
2.1 題目:給定一個十進制正整數N,寫下從1開始,到N的所有整數,然后數一下其中出現的所有“1”的個數。
例如:
N=2,寫下1,2。這樣只出現了1個”1“。
N=12,我們會寫下1,2,3,4,5,6,7,8,9,10,11,12。這樣,1的個數是5。
問題是:
1.寫出一個函數f(N),返回1到N之間出現的”1“的個數,比如f(12)=5;
2.滿足條件”f(N)=N“的最大的N是多少?
要求:
1.貼出代碼圖片,寫出解題思路,列出測試數據(5分)
解題思路:
首先想到的方法是:遍歷1~N,統計每個數1出現的個數,相加便得到所有1的個數。
測試數值:
2.給出不同測試數據的運算時間,如果你的運算時間不變,說明你的測試數據不夠大(5分)
3.思考針對足夠大的數據,如何減少運算時間,並給出在原有算法基礎上的改進算法和改進思路。(10分)
這個方法雖然很容易想,但是不是一個好方法。致命問題就是效率問題。如果給定的N很大,需要很長時間才能得出計算結果。分析的出規律。如果N = 3,那么從1到3的所有數字:1,2,3,只有個位數出現1,而且只出現一次。可以發現,N是個位數時,N >=1,那么f(N)= 1;N = 0,f(N)= 0;同理分析2位數,3位數。。。。。設N = abcde ,其中abcde分別為十進制中各位上的數字。如果要計算百位上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的情況是:1210012113,一共114個,等於低位數字(113)+1。如果百位上數字大於1(29),則百位上出現1的情況僅由更高位決定,比如12213,則百位出現1的情況是:100199,11001199,21002199,...........,1110011199,12100~12199,一共有1300個,並且等於更高位數字+1(12+1)乘以當前位數(100)。
2.2 將上題中多組測試數據寫入文件,並給出測試程序以檢測你的代碼有沒有問題,貼出你的代碼、運行結果和文件內容。(5分)
2.3 用自己的語言回答兩個問題,並給出所查閱資料的引用(10分)
1.什么是文件緩沖系統?工作原理如何?
目前C語言使用的文件系統分為緩沖文件系統(標准I / O)和非緩沖文件系統(系統I / O)。緩沖文件系統的特點是:
在內存開辟一個“緩沖區”,為程序中的每一個文件使用,當執 行讀文件的操作時,從磁盤文件將數據先讀入內存“緩沖
區”,裝滿后再從內存“緩沖區”依此讀入接收的變量。執行寫文件的操作時,先將數據寫入內存“緩沖區”,待內存“緩沖
區”裝滿后再寫入文件。 因此當程序運行時雖然進行了寫數據操作,但是如果寫入的數據沒有裝滿內存中的緩沖區,就
不會將數據寫入到磁盤文件中。當程序運行結束后,系統就會將緩沖區中的數據寫入到磁盤上的文件中,因此就可以看
到文件中的內容。
如果打開讀,就只有bai輸入緩du沖區,打開寫,則為輸出zhi緩沖區,如果讀dao寫則有兩個緩沖區了。你zhuan不能獲
得這個緩沖區地址,如果要強行刷新緩沖區,需要利用函數,如fflush,緩沖區就是預先開辟的內存,你也可以自己實現
,文件等到緩沖區滿了再一次寫入文件,或一次讀入一個緩沖區數據,所有這些都是為了加快文件讀寫,因為文件讀寫是
程序中最費時的操作之一!
2.什么是文本文件和二進制文件?
文本文件:文本文件是一種計算機文件,它是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。簡單的說,文本
文件是基於字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。
二進制文件:是基於值編碼的文件,你可以根據具體應用,指定某個值是什么意思(這樣一個過程,可以看作是自定義編
碼)。用戶一般不能直接讀懂它們,只有通過相應的軟件才能將其顯示出來。二進制文件一般是可執行程序、圖形、圖像
、聲音等等。
2.4 請給出本周學習總結(15分)
1 學習進度條(5分)
2 累積代碼行和博客字數(5分)
3 學習內容總結和感悟(5分)
1.面對新學的知識和題目,體會到自己存在很多問題,應該要及時去理解並以解決.
2.把上學期學習的內容再去復習復習,不然感覺到自己代碼很不熟練.
3.努力學習,預備挑戰這學期的難題.
4.要時刻提醒自己內心的目標,加油!