当前位置:首页 » 编程语言 » 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%的可移植性。
软件设计时应该将“设备相关程序”与“设备无关程序”分开,将“功能模块”