這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/ |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11757 |
這個作業的目標 | 認真獨立完成,搜集整理資料,更深入理解編程知識 |
學號 | 20208967 |
2.1 題目:給定一個十進制正整數N,寫下從1開始,到N的所有整數,然后數一下其中出現的所有“1”的個數。 |
1.寫出一個函數f(N),返回1到N之間出現的”1“的個數,比如f(12)=5;
解題思路:通過調用stdlib,string源文件,通過循環取余累加得到從1到正整數N之間含有的1的個數;
輸入 | 輸出 | 測試時間 |
---|---|---|
20010317 | 24004448 | 7.008420seconds |
20021029 | 401843 | 6.420550seconds |
1413 | 782 | 2.258210seconds |
1029 | 343 | 1.245870seconds |
改進思路:對於較大數據,如果百位上的數字為 1,則可以知道,百位上可能出現 1 的次數不僅受更高位影響,還受低位影響,也就是由更高位和低位共同決定。例如對於 12 113,受更高位影響,百位出現 1 的情況是 100~199,1 100~1 199,2 100~2 199,…,11 100~11 199,一共 1 200個,和上面第一種情況一樣,等於更高位數字(12)×當前位數(100)。但是它還受低位影響,百位出現 1 的情況是 12 100~12 113,一共114 個,等於低位數字(123)+1。 如果百位上數字大於 1(即為 2~9),則百位上可能出現 1的次數也僅由更高位決定,比如 12 213,則百位出現 1 的可能性為:100~199,1 100~1 199,2 100~2 199,…,11 100~11 199,12 100~12 199,一共有 1 300 個,並且等於更高位數字+1(12+1)
2.滿足條件”f(N)=N“的最大的N是多少?
滿足f(N)最大的正整數是1。
2.2 將上題中多組測試數據寫入文件,並給出測試程序以檢測你的代碼有沒有問題,貼出你的代碼、運行結果和文件內容。
代碼截圖
運行結果
文本內容
2.3 用自己的語言回答兩個問題,並給出所查閱資料的引用
1.什么是文件緩沖系統?工作原理如何?
文件緩沖區即系統在讀寫程序時在存中開辟的數據源與數據目標中間的一個用於保容存完整數據內容的緩沖區域。
目前C語言使用的文件系統分為緩沖文件系統(標准I / O)和非緩沖文件系統(系統I / O)。緩沖文件系統的特點是:在內存開辟一個“緩沖區”,為程序中的每一個文件使用,當執 行讀文件的操作時,從磁盤文件將數據先讀入內存“緩沖區”,裝滿后再從內存“緩沖區”依此讀入接收的變量。執行寫文件的操作時,先將數據寫入內存“緩沖區”,待內存“緩沖區”裝滿后再寫入文件。 因此當程序運行時雖然進行了寫數據操作,但是如果寫入的數據沒有裝滿內存中的緩沖區,就不會將數據寫入到磁盤文件中。當程序運行結束后,系統就會將緩沖區中的數據寫入到磁盤上的文件中,因此就可以看到文件中的內容。
2.什么是文本文件和二進制文件?
從存儲方式來說,文件在磁盤上的存儲方式都是二進制形式,所以,文本文件其實也應該算二進制文件。先從他們的區別來說,雖然都是二進制文件,但是二進制代表的意思不一樣。打個比方,一個人,我們可以叫他的大名,可以叫他的小名,但其實都是代表這個人。二進制讀寫是將內存里面的數據直接讀寫入文本中,而文本呢,則是將數據先轉換成了字符串,再寫入到文本中。
2.4 請給出本周學習總結
1 學習進度條
周 | 這周花的時間 | 代碼行數 | 目前迷惑的地方 |
---|---|---|---|
第一周 | 10 | 102 | 對文件相關內容疑惑,以及stlib源文件 |
2 累積代碼行和博客字數
3 學習內容總結和感悟
感悟:主動上機,多多實踐,提高動手能力。通過上機實踐來驗證所學的理論,通過在機器上查找錯誤來鞏固概念,通過提高上機能力來促進理論學習,開闊編程思路,提高反映速度,提高分析問題解決問題的能力,鍛煉心理素質,提高心理承受能力。學習C語言的初期重點要放在掌握語言的語法和規定上,一定要養成良好的編程習慣,平時寫程序注意語法規范格式控制,格式規范了,出了錯誤也容易找到出錯的地方,這是C語言的基礎;后期的重點要轉移到掌握編程的思路和基本算法上來。課后多做習題,找一些經典例子嘗試自己編寫,寫程序切忌半途而費,想到一個思路,就要按自己思路把它寫完,就算錯了,也可以讓自己了解為什么這樣做會錯?錯在哪里?會出什么結果?以后自己也很難在這個地方犯同樣的錯誤。當學到一個新的知識點,就試着把它運用到以前做的習題上,不但鞏固了以前學的內容,也更加能加強新知識的理解。學習C語言就是要經過以上這樣幾個反復,才能前后融會貫通,積累所應該掌握的知識。C語言是這樣,其他語言也是這樣,從基本抓起,多動手,多動腦,不懂就問,注意平時積累