當前位置:首頁 » 編程語言 » c語言怎麼編寫千年蟲問題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼編寫千年蟲問題

發布時間: 2022-08-12 18:14:25

⑴ 2038年問題的32位時間表示

網路時代,機會與危機共存,這也許是你我必須面對和必須付出的代價。「千年蟲」解決之後,會不會有新的「蟲」出現?回答是肯定的,「2038年」就是一個新的關卡。
也許大家都已經知道計算機的2000年問題是什麼概念,但是什麼時候又冒出來一個2038年問題的呢?
用C語言編制的程序不會碰到2000年問題,但是會有2038年問題。這是因為,大多數C語言程序都使用到一個叫做「標准時間庫」的程序庫,這個時間庫用一個標準的4位元組也就是32位的形式來儲存時間信息。
當初設計的時候,這個4位元組的時間格式把1970年1月1日凌晨0時0分0秒(這個時間名叫 the Unix Epoch)作為時間起點,這時的時間值為0。以後所有的時間都是從這個時間開始一秒一秒累積得來的。
比方說如果時間已經累積到了919642718這個數值,就是說這時距離 the Unix Epoch已經過去了919642718秒,換算一下就應該是1999年2月21日16時18分38秒。
這樣計算時間的好處在於,把任意兩個時間值相減之後,就可以很迅速地得到這兩個時間之間相差的秒數,然後你可以利用別的程序把它換算成明白易懂的年月日時分秒的形式。
要是你曾經讀過一點兒關於計算機方面的書,你就會知道一個4位元組也就是32位的存儲空間的最大值是2147483647,請注意!2038年問題的關鍵也就在這里———當時間一秒一秒地跳完2147483647那驚心動魄的最後一秒後,你猜怎麼樣?
答案是,它就會轉為負數也就是說時間無效。那一刻的准確的時間為2038年1月19日星期二凌晨03:14:07,之後所有用到這種「標准時間庫」的C語言程序都會碰到時間計算上的麻煩。
這就是2038年問題。
但是大家也不用太過緊張。2038年問題比千年蟲(the Millennium bug)問題解決起來相對要容易一些,只要給那些程序換一個新版本的「標准時間庫」就可以了,比如說,改用8位元組64位的形式來存儲時間。這樣做並不怎麼費事,因為在C程序中「標准時間庫」是相對獨立的一個部分,裡面的時間表達都有自己的一套時間類型和參數(而在碰到Y2K的那些大型主機中,時間格式大都沒有一)。
說到這里,一些冰雪聰明的菜鳥DDMM們應該可以聯想到,WindowsNT用的是64位操作平台,它的開始時間是1601年1月1日———但是它每過1個納秒就跳一下,因此,WindowsNT它會碰到的是2184年問題……
而在一些用64位來表示時間的平台上,例如DigitalAlpha、SGI、Sparc等等,想要看到它們的時間出錯你得等到天荒地老———那大概是2920億年。到那時,位於獵戶座旋臂的太陽,已經是黑矮星或暗黑物質,獵戶座旋臂已經被重力波震斷,銀河系大概則已經變成小型似星體了。
所以,給那些准備攢機的菜鳥DD一個建議,除非您想要把資料流傳給下一個宇宙,一台64位的電腦已經足夠。
總之,32位的最後時間是2038年1月19日03:14:07,星期二。
64位的最後時間約2900億年後的292,277,026,596年12月4日15:30:08,星期日。

⑵ 進入C語言編寫的貪吃蛇問題

一般是內存問題,比如使用了指向未知位置的指針,使用完的內存沒有釋放等等。

老的DOS游戲出現錯誤一般是XP的模擬16位環境與游戲不兼容,可以用一個工具叫DOSBox的DOS模擬器,專門玩老游戲的。

⑶ 千年蟲問題到底是怎麼解決的

在設計計算機的程序時規定了的年份僅用兩位數來表示,那麼無論遇到是哪一個世紀的,計算機都會老老實實地取年份中的後兩位來表示其年份,決不會採取四位數來表示年份的。也就是說,假如是1971年,在計算機里就會被表示為「71」,而假如是2002年,計算機就會將其年份表示為「02」。這樣的話假如要計算相差多大,計算機要用02減去71了。這就是千年蟲(計算機2000年問題)。
計算機千年蟲(2000年問題)的定義:

2000年問題,就是指在某些使用了計算機程序的智能系統(包括計算機系統、自動控制晶元等)中,由於其中的年份只使用兩位十進制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運算(如多個日期之間的計算或比較等)時,就會出現錯誤的結果,進而引發各種各樣的系統功能紊亂甚至崩潰。

另外,更廣泛的講,2000年問題還包括其他兩個方面的問題:

一個是在一些計算機系統中 ,對於閏年的計算和識別出現問題,不能把2000年識別為閏年,即在該計算機系統的日歷中沒有2000年2月29日這一天,而是直接由2000年2月28日過渡到了2000年3月1日;
另外一個是在一些比較老的計算機系統中,使用了數字串99(或99/99等)在程序中來表示文件結束、永久性過期、刪除等一些特殊意義的自動操作,這樣當1999年9月9日(或1999年4月9日即1999年的第99天)來臨時,計算機系統在處理到內容中有日期的文件時,就會遇到99或99/99等數字串,從而將文件誤認為已經過期或者將文件刪除等錯誤操作,引發系統混亂甚至崩潰等故障。這個問題有的時候也被稱為「9999蟲」。
2000年問題(英文為 Year 2000 Problem)在國際上有各種各樣的叫法,比較通俗的一種就是「千年蟲」,英文為Millennium Bug,其中 Millennium 是「一千年」的意思。而Bug在漢語中是「臭蟲」,它是美國常用俗語,在計算機界表示那些程序開發中沒有注意到的漏洞和毛病。2000年問題就是當初設計程序時沒有注意到的一個毛病,它在2000年來臨時才發作,所以我們把他叫做「千年蟲」(Millennium Bug)。另外,國外經常把一千(KILO-)簡寫為K,所以2000年問題(Year 2000 )國際上也簡稱為Y2K,其中Y是英語單詞Year的簡寫,2K是2000的簡寫。

同時,從上面的第三個問題中,我們已經看出,假如只用兩位數來表示年份的話,當我們在進行不同世紀里的兩個年份之間的計算時,我們會得出多麼錯誤的結果。而對於這個結果,我們目前僅僅感覺到的是它的錯誤可笑,但當這樣的錯誤一旦發生到關鍵部門的話,其帶來的後果又是不可想像的。

⑷ "千年蟲「問題是什麼

計算機2000年問題,又叫做"2000年病毒"、"千年蟲"、"電腦千禧年問題"或"千年病毒".縮寫為"Y2K".是指在某些使用了計算機程序的智能系統(包括計算機系統、自動控制晶元等)中,由
於其中的年份只使用兩位十進制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運
算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發各種各樣的系統功
能紊亂甚至崩潰。另外,更廣泛地講,「千年蟲」還包括以下兩個方面的問題:一個是在一
些計算機系統中,對於閏年的計算和識別出現問題,不能把2000年識別為閏年,即在該計算
機系統的日歷中沒有2000年2月29日這一天,而是直接由2000年2月28日過渡到了2000年3月1
日;另一個是在一些比較老的計算機系統中,在程序中使用了數字串99(或99/99等)來表示
文件結束、永久性過期、刪除等一些特殊意義的自動操作,這樣當1999年9月9日(或1999年4
月9日即1999年的第99天)來臨時,計算機系統在處理到內容中有日期的文件時,就會遇到99
或99/99等數字串,從而將文件誤認為已經過期或者將文件刪除等錯誤操作,引發系統混亂
甚至崩潰等故障。
「千年蟲」問題的根源始於60年代。當時計算機存儲器的成本很高,如果用四位數字表示年
份,就要多佔用存儲器空間,就會使成本增加,因此為了節省存儲空間,計算機系統的編程
人員採用兩位數字表示年份。隨著計算機技術的迅猛發展,雖然後來存儲器的價格降低了,
但在計算機系統中使用兩位數字來表示年份的做法卻由於思維上的慣性勢力而被沿襲下來,
年復一年,直到新世紀即將來臨之際,大家才突然意識到用兩位數字表示年份將無法正確辨
識公元2000年及其以後的年份。1997年,信息界開始拉起了「千年蟲」警鍾,並很快引起了
全球關注。
更多內容
http://ke..com/view/9349.htm

⑸ 世界上千年蟲問題最後是怎麼樣解決的

世界上千年蟲問題其實不是在在2000年之前一下子解決的,在80年代,也就是1980年,就已經開始一點一點的解決問題了,但是到最後依然是沒有替換干凈,就產生了後續的影響。

千年蟲不是病毒,其實就是一個bug,千年蟲是一種程序處理日期上的bug,也就是計算機程序故障,而非病毒。

「千年蟲」影響是巨大的。從計算機系統包括PC機的BIOS、微碼到操作系統、資料庫軟體、商用軟體和應用系統等,到與計算機和自動控制有關的電話程式控制交換機、銀行自動取款機 、保安系統、工廠自動化系統等。

乃至使用了嵌入式晶元技術的大量的電子電器、機械設備 和控制系統,等等,都有可能受到「千年蟲」的攻擊。世界各國已紛紛由政府出面,全力圍殲「千年蟲」。

⑹ 怎樣用程序實現千年蟲問題

要寫千年蟲的程序必須了解它。我這里作了一些分析,你自己跟據著寫吧。
計算機2000年問題,又叫做"2000年病毒"、"千年蟲"、"電腦千禧年問題"或"千年病毒".縮寫為"Y2K".是指在某些使用了計算機程序的智能系統(包括計算機系統、自動控制晶元等)中,由
於其中的年份只使用兩位十進制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運
算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發各種各樣的系統功
能紊亂甚至崩潰。另外,更廣泛地講,「千年蟲」還包括以下兩個方面的問題:一個是在一
些計算機系統中,對於閏年的計算和識別出現問題,不能把2000年識別為閏年,即在該計算
機系統的日歷中沒有2000年2月29日這一天,而是直接由2000年2月28日過渡到了2000年3月1
日;另一個是在一些比較老的計算機系統中,在程序中使用了數字串99(或99/99等)來表示
文件結束、永久性過期、刪除等一些特殊意義的自動操作,這樣當1999年9月9日(或1999年4
月9日即1999年的第99天)來臨時,計算機系統在處理到內容中有日期的文件時,就會遇到99
或99/99等數字串,從而將文件誤認為已經過期或者將文件刪除等錯誤操作,引發系統混亂
甚至崩潰等故障。
「千年蟲」問題的根源始於60年代。當時計算機存儲器的成本很高,如果用四位數字表示年
份,就要多佔用存儲器空間,就會使成本增加,因此為了節省存儲空間,計算機系統的編程
人員採用兩位數字表示年份。隨著計算機技術的迅猛發展,雖然後來存儲器的價格降低了,
但在計算機系統中使用兩位數字來表示年份的做法卻由於思維上的慣性勢力而被沿襲下來,
年復一年,直到新世紀即將來臨之際,大家才突然意識到用兩位數字表示年份將無法正確辨
識公元2000年及其以後的年份。1997年,信息界開始拉起了「千年蟲」警鍾,並很快引起了
全球關注。

⑺ C語言編程代碼好壞如何判斷

1.2.1 正確性
正確性是指軟體按照需求正確執行任務的能力,涵蓋「精確性」。正確性是第一重要的軟體質量屬性。技術評審和測試的第一關是檢查工作成果的正確性。
從「需求開發」到「系統設計」再到「編程」,任何一個環節出現差錯都會降低正確性。軟體運行出錯通常都是人造成的,開發者應做到為「正確」兩字竭盡全力。
1.2.2 健壯性
健壯性是指在異常情況下,軟體能夠正常運行的能力。正確性與健壯性的區別是:前者描述軟體在需求范圍之內的行為,後者描述軟體在需求范圍之外的行為。想不到異常情況,把異常錯當正常而不作處理,這些都會降低健壯性。提高軟體的健壯性也是開發者的義務。
健壯性有兩層含義:一是容錯能力,二是恢復能力。
容錯是指發生異常情況時系統不出錯誤的能力。高風險系統如航空航天、武器、金融等領域的系統,容錯性設計非常重要。
容錯是非常健壯的意思。而恢復則是指軟體發生錯誤後(不論死活)重新運行時,能否恢復到沒有發生錯誤前的狀態的能力。
從語義上理解,恢復不及容錯那麼健壯。
1.2.3 可靠性
可靠性是指在一定環境下,在給定的時間內,系統不發生故障的概率。因為我們無法對軟體進行徹底的測試,無法根除軟體中潛在的錯誤,所以軟體平時運行良好,說不準哪天就會不正常,如「千年蟲」、「內存泄露」、「誤差累積」等。
軟體可靠性分析通常採用統計技術,但目前可供第一線開發人員使用的成果少見。
1.2.4 性能
性能通常是指軟體的「時間—空間」效率,而不僅是指軟體的運行速度。程序員可以通過優化數據結構、演算法和代碼來提高軟體的性能。演算法復雜度分析是很好的方法,可以達到「未卜先知」的功效。
1.2.5 易用性
易用性是指用戶使用軟體的容易程度。它直觀體現為「界面友好」、「方便」等。
1.2.6 清晰性
清晰意味著工作成果易讀、易理解。開發人員只有在自己思路清晰的時候才可能寫出讓別人清晰性好的程序和文檔。可理解的東西通常是簡潔的。簡潔是人們對工作「精益求精」的結果,而不是潦草應付的結果。
1.2.7 安全性
安全性是指信息安全Security,不是safety。安全性是指防止系統被非法入侵的能力,既屬於技術問題又屬於管理問題。對於大多數軟體產品而言,杜絕非法入侵既不可能也沒必要。一般地,如果黑客為非法入侵花費的代價(考慮時間、費用、風險等因素)高於得到的好處,這樣的系統被認為是安全的。
1.2.8 可擴展性
可擴展性反映軟體適應「變化」的能力。在軟體開發過程中,需求、設計、演算法的改進、程序本身都有可能變化,
軟體是否容易修改關鍵看它的規模和復雜性。可擴展性是系統設計階段重點考慮的質量屬性。
1.2.9 兼容性
兼容性是指兩個或以上的軟體相互交換信息的能力。開發某領域的新軟體,應與已流行的軟體相兼容,否則難以被市場接受。
1.2.10 可移植性
可移植性是指軟體運行於不同軟硬體環境的能力。編程語言越低級,程序越難移植。C比匯編可移植性好,Java號稱「一次編程、到處運行」,具有100%的可移植性。
軟體設計時應該將「設備相關程序」與「設備無關程序」分開,將「功能模塊」