lanyanlei
CMOS与BIOS的区别

CMOS是互补金属氧化物半导化的缩写。本意是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片。其实,在这里是指主板上一块可读写的存储芯片。它存储了微机系统的时钟信息和硬件配置信息等,共计128个字节。系统加电引导时,要读取CMOS信息,用来初始化机器各个部件的状态。它靠系统电源或后备电池来供电,关闭电源信息不会丢失。

BIOS是基本输入输出系统的缩写。指集成在主板上的一个ROM芯片,其中保存了微机系统最重要的基本输入输出程序、系统开机自检程序等。它负责开机时,对系统各项石硬件进行初始化设置和测试,以保证系统能正常工作。

由于CMOS与BIOS都跟微机系统设置密切相关,所以才有CMOS设置与BIOS设置的说法,CMOS是系统存放参数的地方,而BIOS中的系统设置程序是完成参数设置的手段。因此,准确的说法是通过BIOS设置程序对CMOS参数进行设置。而我们平常所说的CMOS设置与BIOS设置是其简化说法,也就在一定程度上造成两个概念的混淆。

lanyanlei
XP系统“虚拟内存不足”原因

电脑系统是WinXP,最近使用时,没开多少程序,却常常出现“虚拟内存不足”的系统提示。这是什么原因造成的呢?

可能有以下几个原因:

1、感染病毒

有些病毒发作时会占用大量内存空间,导致系统出现内存不足的问题。赶快去杀毒,升级病毒库,然后把防毒措施做好!

2、虚拟内存设置不当

虚拟内存设置不当也可能导致出现内存不足问题,一般情况下,虚拟内存大小为物理内存大小的2倍即可,如果设置得过小,就会影响系统程序的正常运行。重新调整虚拟内存大小以WinXP为例,右键点击“我的电脑”,选择“属性”,然后在“高级”标签页,点击“性能”框中的“设置”按钮,切换到“高级”标签页,然后在“虚拟内存”框中点击“更改”按钮,接着重新设置虚拟内存大小,完成后重新启动系统就好了。

3、系统空间不足

虚拟内存文件默认是在系统盘中,如WinXP的虚拟内存文件名为“pagefile.sys”,如果系统盘剩余空间过小,导致虚拟内存不足,也会出现内存不足的问题。系统盘至少要保留300MB剩余空间,当然这个数值要根据用户的实际需要而定。用户尽量不要把各种应用软件安装在系统盘中,保证有足够的空间供虚拟内存文件使用,而且最好把虚拟内存文件安放到非系统盘中。

4、因为SYSTEM用户权限设置不当

基于NT内核的Windows系统启动时,SYSTEM用户会为系统创建虚拟内存文件。有些用户为了系统的安全,采用NTFS文件系统,但却取消了SYSTEM用户在系统盘“写入”和“修改”的权限,这样就无法为系统创建虚拟内存文件,运行大型程序时,也会出现内存不足的问题。问题很好解决,只要重新赋予SYSTEM用户“写入”和“修改”的权限即可,不过这个仅限于使用NTFS文件系统的用户。

lanyanlei
拒绝窜改 锁定IE浏览器首页的技巧

有时候IE浏览器的首页会被恶意网站窜改,要保护电脑中的IE首页不被窜改,有一个简单有效的方法,那就是锁定IE首页,让绝大多数的窜改手段失效

点击“开始”→“运行”,输入“gpedit.msc”,进入系统的组策略,选择“用户配置→Windows设置”,再选择“Internet Explorer维护”里面的“URL”,然后双击右侧窗口中的“重要URL”,选择“自定义主页URL”,在“主页URL”输入预设的网页地址,设置完成后退出即可。

此外,我们还要开启杀毒软件的实时监控功能,每天更新杀毒软件的病毒库;使用带网页木马拦截功能的安全辅助工具;关闭系统的自动播放功能,点击“开始”→“运行”,输入“gpedit.msc”,打开“组策略”窗口, 点击“计算机配置”→ “管理模板”→ “系统”,在右栏双击“关闭自动播放”,选择“已禁用”即可。

附:如何知道系统的安全状态

利用一些安全辅助工具对系统进行检测并对系统的安全程度进行打分,用户针对系统当前存在的安全隐患进行有针对性的修补。这个工作要定期做,时刻保持自己的系统处于最佳状态。

xiaowuhello
都学习了
展开Biu

呵呵 不错 都学习了 啊 大家也来支持lz

[查看全文]
lanyanlei
lanyanlei
内存不能为read的详细解决办法

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。

“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。

“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。

出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

一:先说说硬件:

一般来说,电脑硬件是很不容易坏的。内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。内存条坏了(二手内存情况居多)、2。使用了有质量问题的内存,3。内存插在主板上的金手指部分灰尘太多。4。使用不同品牌不同容量的内存,从而出现不兼容的情况。5。超频带来的散热问题。你可以使用MemTest这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

二、如果都没有,那就从软件方面排除故障了。

先说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在缓冲区,需要操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“光标”。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用光标,继续在之后的执行中使用这块内存。真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的内存不能为“read”错误,并指出被引用的内存地址为“0x00000000“。内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统档案之后。

在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其它随机数字。

首先建议:

1、检查系统中是否有木马或病毒?

2、更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。

3、尽量使用最新正式版本的应用程序、Beta版、试用版都会有BUG。

4、删除然后重新创建WinntSystem32WbemRepository文件夹中的文件:在桌面上右击我的电脑,然后单击管理。在"服务和应用程序"下,单击服务,然后关闭并停止WindowsManagementInstrumentation服务。删除WinntSystem32WbemRepository文件夹中的所有文件。(在删除前请创建这些文件的备份副本。)打开"服务和应用程序",单击服务,然后打开并启动WindowsManagementInstrumentation服务。当服务重新启动时,将基于以下注册表项中所提供的信息重新创建这些文件:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWBEMCIMOMAutorecoverMOFs

下面从几个例子给大家分析:

例一:打开IE浏览器或者没过几分钟就会出现\"0x70dcf39f\"指令引用的\"0x00000000\"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替。

例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\\winnt\\apppatch\\slayerui.dll。右键,属性,也会出现兼容性的选项。

例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。

例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Ox060692f6”(每次变化)指令引用的“Oxff000011”内存不能为“read”,终止程序请按确定。解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。

例五:双击一个游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示Client.dat程序错误。 解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。

依次排查

Windows XP系统中运行一些容量较大的程序或者游戏时,系统常常会自动弹出“xx内存不能为 read或written”的错误提示,遇到这种故障信息时,我们该如何才能将它有效排除,同时确保下次运行容量较大的程序或者游戏时,系统不会再次出现系统内存读写错误呢?事实上,当我们不幸遭遇上面的故障信息时,我们可以尝试按照如下步骤进行依次排查:

移除无效插件程序

在上网冲浪的过程中,许多插件程序会偷偷地安装到计算机系统中,而不少插件程序往往都有防删除的功能,因此这些插件很容易与其他的应用程序发生冲突,从而间接地引起系统内存读写错误的现象。为了给那些大容量的应用程序或游戏提供一个干净、稳定的工作环境,我们最好定期使用类似360安全卫士这样的程序,来查看系统是否被偷偷安装了各种无效的垃圾插件程序,一旦发现的话,那可以直接将它们从系统中及时卸载干净。

手工修复系统服务

与系统内存读写操作有关的Windows Management Instrumentation服务要是发生错误的话,也会导致系统弹出内存读写错误的提示,所以当我们遇到这种错误现象时,可以尝试手工修复一下 Windows Management Instrumentation服务,下面就是具体的修复步骤:

首先用鼠标右键单击系统桌面中的“我的电脑”图标,从弹出的快捷菜单中执行“管理”命令,打开本地系统的计算机管理窗口,在该窗口的左侧显示区域,依次展开“服务和应用程序”/ “服务”选项,在对应“服务”选项所在的右侧显示区域中,找到Windows Management Instrumentation服务,并用鼠标右键单击该服务选项,从弹出的快捷菜单中执行“属性”命令,打开如图所示的服务属性设置界面;

其次在该设置界面的“常规”标签页面中,单击“停止”按钮,将Windows Management Instrumentation服务暂时停止运行。之后,打开计算机系统的资源管理器窗口,在该窗口中依次展开“Windows”、 “ssystem32”、“wbem”、“repository”文件夹,然后将“repository”文件夹窗口中的所有文件进行一下备份,备份完成后将该文件夹中的所有内容全部清除掉;

接下来,重新启动一下计算机系统,待系统启动成功后,按前面操作打开Windows Management Instrumentation服务的属性设置界面,单击该界面中的“启动”按钮,相信这么一来Windows Management Instrumentation服务就能正常运行了。

修复系统损坏文件

如果计算机系统不小心感染了病毒或者发生了误删除操作,那么与系统内存读写操作有关的系统文件很可能受到损坏,而这些系统文件一旦受到损坏的话,那么我们就很容易遭遇内存读写故障提示了。所以,我们一旦碰到内存读写错误的提示时,不妨按照如下步骤修复一下系统,看看系统是否存在损坏的文件:

首先使用最新版本的杀毒软件,来对计算机系统进行彻底地病毒查杀操作,因为计算机系统一旦感染了病毒而不进行清除的话,我们即使修复了系统文件,病毒仍然有可能会继续破坏系统文件,所以及时使用杀毒软件来将计算机中的病毒全部清除干净,可以确保系统文件不会继续受到病毒的威胁。

其次使用木马专家软件自带的功能 修复系统功能 程序就会对系统每个角落处的系统文件进行搜索扫描,一旦发现系统文件的版本不正确或者系统文件已经损坏的话,它就能自动弹出提示界面,要求我们插入Windows系统的安装光盘,以便从中提取正常的系统文件来替代不正常的系统文件,从而达到修复系统文件的目的。要是系统修复操作成功的话,相信我们重新启动计算机系统时,就不会看到有什么不正常的现象了。

及时释放系统内存

我们知道,在运行一些容量较大的程序或者游戏时,需要消耗相当的系统内存资源,要是此时内存空间不够时,那么系统内存读写错误的故障提示很有可能就会发生。为了有效避免这种错误提示,我们最好在运行容量较大的程序或者游戏之前,应该先将计算机系统重新启动一下,这样能够将系统内存空间充分释放出来;如果计算机内存空间本身就比较小的话,那么我们建议各位最好及时升级内存,以便拓展内存的有效使用空间,以防止由于系统内存不足而造成系统内存读写错误的发生。

当然,在系统自身内存空间不足的情况下,我们应该先将那些随机启动的杀毒软件以及相关即时监控的程序暂时关闭掉,之后再尝试运行容量较大的应用程序或者网络游戏,因为杀毒软件及相关监控程序会在一定程度上消耗一些系统内存资源,将它们关闭可以节省不小的内存空间,从而能够有效避免内存读写错误现象的发生。当然,值得注意的是,我们在运行完大容量的程序或游戏之后,还必须记得及时将相关程序的监控功能全部打开。

xiaowuhello
这个帖子真的强大
展开Biu

这个帖子真的强大 写的很有深度 学习了

[查看全文]
lanyanlei
还是黑体
展开Biu

还是黑体!~字比较多!~看起来还是黑体好!~

[查看全文]
lanyanlei
教你怎样升级主板BIOS

BIOS管理着微机的底层输入输出模块,采用较新的BIOS可以改善微机的性能和支持新型CPU等。BIOS升级,以前是通过更换芯片实现的。但现在基本都是通过重写Flash ROM来实现了。新型的主板均采用Fla shROM,使用软件方法进行升级。那么,什么是Flash ROM呢?

486档次以下微机的BIOS芯片是一块EPROM(可擦除只读存储器),芯片上有一个小窗口,通过紫外线照射可以清除BIOS内容,所以这些芯片上都贴有一块印有厂商标记的不干胶,用于保护芯片中的BIOS。EPROM 的BIOS升级、维护都很不方便。在586以上的主板中普通采用了更新的芯片技术――Flash ROM来作为BIO S程序的载体。Flash ROM也称为闪速存储器,在本质上属于EEPROM(电可擦除只读存储器)。 平常情况下 Flash ROM与EPROM一样是禁止写入的,在需要时,加入一个较高的电压就可以写入或擦除。因此,其维护与升级都很方便。BIOS升级的程序盘一般由主板厂商提供,也可以到互联网上去下载 。

为预防用户误操作删除Flash ROM中的内容导致系统瘫痪,一般 的主板厂商都在 Flash RO M中固化了一小块启动程序(BOOT BLOCK)用 于紧急情况下接管系统的启动。一般主板上有关Flash RO M的跳线开关用于设置BIOS的只读/可读写状态。关机后在主板上找到它将其设置为可写 (Enable或Write ),重新开机,就可以重写BIOS升级了。 Flash ROM升级需要两个软件:一个是FlashROM写入程序,一般由主板附带的驱动程序盘提供;另一个是新版BIOS的程序数据,一般需要到主板厂商的网站上下载。升级前请检查B IOS数据的编号及日期,确认它比你使用的BIOS版本更新,同时一定要注意检查它与你所用的BIOS是否是同一产品系列。

BIOS升级程序只能在DOS实模式运行,以下情况可确定您的系统处在实模式下:

a)用无Config.sys及Autoexec.bat文件的系统软盘开机,或开机时按F5跳过。

b)Win98启动时,按F8在启动菜单中,选取" Safe mode command prom pt only"。

当你确认处于实模式后, 在DOS提示符下键入PFLASH ,即可进入更新程式画面,为安全起见,建议您先选取[1]"Save Current BIOS To File"将目前系统之BIOS内容备份到您的磁盘中, 以 防止在更新BIOS的过程中发生错误时,还可以重新写回原先之BIOS数据文件

然后,选取"Update BIOS Including Boot Block and ESCD"将整个BIOS区域更新,并依照提示,键入欲更新之BIOS数据文件名,便开始更新BIOS。

在更新BIOS的过程千万不要随便关机!若更新BIOS失败,应及时用“热拔插”等方法加以修复。

lanyanlei
有的网站链接不上的
展开Biu

有的网站链接不上的!~BIOS 更新速度太快了!~

我这有个BIOS 解析图!~ 但不是很全!所以没传上来!~

[查看全文]
xiaowuhello
我还在中关村的论坛发了帖子的
展开Biu

我还在中关村的论坛发了帖子的 升级我的BIOS时 哪天我弄到论坛来

[查看全文]
xiaowuhello
更新时非常有益的
展开Biu

BIOS更新时非常有益的

[查看全文]
xiaowuhello
要是可以发一些
展开Biu

呵呵 要是可以发一些 主板芯片组和cpu搭配的帖子 就好了

[查看全文]
xiaowuhello
xiaowuhello
Google、百度被攻击的冷思考

不知道是不是巧合,一个中国最大的搜索引擎百度被攻击而导致无法正常使用,另一个是全球最大

的搜索引擎Google要退出中国运营,当然理由是其遭受了网络攻击。这里除去目前流行于网络间

的充满毫无根据的想象力的评论和指责,二者都具有一个共性:即都是遭到了来自外部的针对它

们的攻击。实际上我们冷静下来之后,最应该引发我们思考,且最实际的是有关云计算安全及一

旦出现问题,责权该如何划分。

谁都知道,近几年,云计算成为了业内和厂商们关注、议论和发展的焦点。似乎云计算注定

成为未来产业的发展趋势,所以无论是传统的IT厂商、互联网企业、电信运营商等都在有意或者无

意间不同程度地涉足到云计算当中。而随着云计算应用(包括云计算服务的提供者和使用者)的增

多,与云计算相关的安全问题也就日益凸现。实际上在阻碍云计算发展的若干理由中,云安全始终

被摆在相当重要的位置。

具体到Google,它应该是全球云计算最大的倡导者和提供者。而百度在去年也发布了面向未来

的“框计算”战略,无疑也是将云计算作为一个重要的发展方向。按理说作为全球和中国最大的互

联网公司其对于自身网络安全的防范是一流的,但即便是这样,它们还是遭到了不同程度的攻击。

这已经很直白地告知世人“道高一尺,魔高一丈”的道理。所谓的云计算安全也只是个相对的概念

。所以通过Google和百度被攻击事件,首先应该自省的是类似于Google和百度这样的云计算的提供

者。如何最大限度地保证自身不被攻击,是减少自身和用户损失的关键。但如何确定这个最大限度

,恐怕应是未来云计算服务提供者来给业内一个公认的标准才好。因为这有利于增加自身服务的透

明度,以便于一旦出现问题好对外界和用户有一个基于事实和标准的交待。

其次是对于使用云计算的用户,尤其是付费使用云计算服务的客户来说,面对这次Google和百

度被攻击,一个可能要退出市场,另一个暂时无法登陆使用的事实,是否已经在相关的合作协议中

分清了责任和相关的赔偿事宜。笔者通过相关报道了解到,无论是Google退出中国市场的运营,还

是百度暂时的无法登陆,都会给相关的客户及合作伙伴造成一定的损失,那么这个损失该如何界定

?赔偿的标准又该是怎样的?不过这可能已经上升到了法律的层面,但这两个事件,完全可以让客

户意识到,如果未来使用云计算服务的话,这些可抗拒或不可抗拒因素导致的损失将不得不仔细斟

酌。因为毕竟目前云计算的用户多数是中小企业,而云计算的提供者多又是比较大型和有实力的企

业,一旦出现问题造成损失的话,对于云计算的提供者可能只是损失,但对于某些中小企业将可能

面临生存的危机。从这个意义上看,目前云计算在买方和卖方间存在着不平衡,那云计算的使用者

惟有通过事先的约定,甚至是法律的形式来保护自己。

百度和Google被攻击的事件,云计算安全的问题依旧存在,但百密一疏,不能因噎废食却又是不可回避的现实。那笔者认为,在未来云计算的发展过程中,云计算的主要提供者能否就云计算的安全达成一个公认的事实的标准,让用户能够事先就了解到云计算可能存在的风险,及可能造成的后果及损失,让他们依此来选择合适的云计算服务提供商和根据自己业务的重要性来理性选择不同的云计算服务,同时事先确定好一旦出现问题后,损失的评估及赔偿的标准,因为只有这样,云计算才有可能清除障碍普及开来,厂商和用户才有双赢的结局。

xiaowuhello
电脑创新学习方法指南

电脑创新学习方法指南http://tech.163.com 2006-07-08 21:36:52 来源: 网易学院(广州)  网友评论181 条 论坛

应广大网友要求,金鹰为大家推出《电脑创新学习方法指南》,由 网易学院 发布。该指南从“学习目的的确立”到“如何把创新学习法应用到实际的学习中”,都一一作了详细的讲解。让你轻松学会使用电脑的方法和经验,并举一反三,从而能够在电脑的快乐世界中徜徉。

·第一章:学习目的
·1. 确定目的 ·2. 细分目的 ·3. 选择软件 ·4. 软件划分 ·5. 文字著名软件
·6. 图像著名软件 ·7. 媒体著名软件

·8. 网页制作著名软件 ·9. 确定软件 ·10. 行业划分

·第二章:学习态度
·1. 放松心情 ·2. 坚持自信 ·3. 如何自信

·第三章:选择教程
·1. 如何选择 ·2. 判断教程好坏 ·3. 适用对象

·第四章:学习方法
·1. 创新学习法 ·2. 理论结合实际 ·3. 命令的掌握技巧 ·4. 掌握流程 ·5. 提高的方法
·6. 关于实例练习 ·7. 注重现实 ·8. 培养创造思维

·9. 触类旁通 ·10. 相信老师
·11. 学习实战 ·12. 新的开始
推荐视频: Flash AS视频教程 ASP.NET视频教程 PS CS2中文视频教程 3ds max 7造型设计视频教程 等。 对本视频教程有问题请点这里 。更多请见 视频中心

lanyanlei
很不错的帖子!~支持!~
展开Biu

很不错的帖子!~支持!~

[查看全文]
cws
C++试卷,可以检验你的技术

C++/C 试题

本试题仅用于考查 C++/C 程序员的基本编程技能。内容限于C++/C 常用语法,不

涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C

的理解程度,但不能反映考生的智力和软件开发能力。

笔试时间 90 分钟。请考生认真答题,切勿轻视。

一、请填写 BOOL , float, 指针变量与“零值”比较的 if 语句。(10 分)

提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针”。例如int 变量 n 与“零值”

比较的 if 语句为:

if ( n == 0 )

if ( n != 0 )

以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句:

请写出 float x 与“零值”比较的 if 语句:

请写出 char *p 与“零值”比较的 if 语句:

二、以下为 Windows NT 下的32 位C++程序,请计算sizeof 的值(10 分)

void Func ( char str[100])

{

请计算

sizeof( str ) =

}

char str[] = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) =

sizeof ( p ) =

sizeof ( n ) =

void *p = malloc( 100 );

请计算

sizeof ( p ) =

三、简答题(25 分)

1、头文件中的ifndef/define/endif 干什么用?

2、#include <filename.h> 和#include “filename.h” 有什么区别?

3、const 有什么用途?(请至少说明两种)

4、在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”声明?

5、请简述以下两个for 循环的优缺点

// 第一个

for (i=0; i<N; i++)

{

if (condition)

DoSomething();

else

DoOtherthing();

}

// 第二个

if (condition)

{

for (i=0; i<N; i++)

DoSomething();

}

else

{

for (i=0; i<N; i++)

DoOtherthing();

}

第一个程序的优点:

缺点:

第二个程序的优点:

缺点:

四、有关内存的思考题(20 分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, "hello world");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

char *GetMemory(void)

{

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:

Void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

请问运行 Test 函数会有什么样的结果?

答:

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

请问运行 Test 函数会有什么样的结果?

答:

五、编写 strcpy 函数( 10 分)

已知 strcpy 函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中 strDest 是目的字符串,strSrc 是源字符串。

(1)不调用C++/C 的字符串库函数,请编写函数strcpy

(2)strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?

六、编写类 String 的构造函数、析构函数和赋值函数(25 分)

已知类 String 的原型为:

class String

{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

请编写 String 的上述4 个函数。

cws
大家有空可以看一下啊
展开Biu

大家有空可以看一下啊!

[查看全文]
cws
这里是答案
展开Biu

这里是答案:

C++/C 试题的答案与评分标准

一、请填写 BOOL , float, 指针变量与“零值”比较的 if 语句。(10 分)

请写出 BOOL flag 与“零值”比较的 if 语句。(3 分)

标准答案:

if ( flag )

if ( !flag )

如下写法均属不良风格,不得分。

if (flag == TRUE)

if (flag == 1 )

if (flag == FALSE)

if (flag == 0)

请写出 float x 与“零值”比较的 if 语句。(4 分)

标准答案示例:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON)

不可将浮点变量用“==”或“!=”与数字

比较,应该设法转化成“ >=”或“<=”此类

形式。

如下是错误的写法,不得分。

if (x == 0.0)

if (x != 0.0)

请写出 char *p 与“零值”比较的 if 语句。(3 分)

标准答案:

if (p == NULL)

if (p != NULL)

如下写法均属不良风格,不得分。

if (p == 0)

if (p != 0)

if (p)

if (!)

二、以下为 Windows NT 下的32 位C++程序,请计算sizeof 的值(10 分)

void Func ( char str[100])

{

请计算

sizeof( str ) = 4 (2 分)

}

char str[] = “Hello” ;

char *p = str ;

int n = 10;

请计算

sizeof (str ) = 6 (2 分)

sizeof ( p ) = 4 (2 分)

sizeof ( n ) = 4 (2 分)

void *p = malloc( 100 );

请计算

sizeof ( p ) = 4 (2 分)

三、简答题(25 分)

1、头文件中的ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include <filename.h> 和#include “filename.h” 有什么区别?(5 分)

答:对于#include <filename.h> ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义const 常量

(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东

西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);

该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像

_foo_int_int 之类的名字。

C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i<N; i++)

{

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i<N; i++)

DoSomething();

}

else

{

for (i=0; i<N; i++)

DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且

打断了循环“流水线”作业,使得编译

器不能对循环进行优化处理,降低了效

率。

优点:循环的效率高

缺点:程序不简洁

四、有关内存的思考题(每小题 5 分,共20 分)

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

strcpy(str, "hello world");

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:程序崩溃。

因为 GetMemory 并不能传递动态内存,

Test 函数中的 str 一直都是 NULL。

strcpy(str, "hello world");将使程序崩

溃。

char *GetMemory(void)

{

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

请问运行Test 函数会有什么样的结果?

答:可能是乱码。

因为 GetMemory 返回的是指向“栈内存”

的指针,该指针的地址不是 NULL,但其原

现的内容已经被清除,新内容不可知。

void GetMemory2(char **p, int num)

{

*p = (char *)malloc(num);

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

请问运行 Test 函数会有什么样的结果?

答:

(1)能够输出hello

(2)内存泄漏

void Test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

printf(str);

}

}

请问运行 Test 函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预

料,非常危险。

因为 free(str);之后,str 成为野指针,

if(str != NULL)语句不起作用。

五、编写 strcpy 函数( 10 分)

已知 strcpy 函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中 strDest 是目的字符串,strSrc 是源字符串。

(1)不调用C++/C 的字符串库函数,请编写函数strcpy

char *strcpy(char *strDest, const char *strSrc);

{

assert((strDest!=NULL) && (strSrc !=NULL)); // 2分

char *address = strDest; // 2分

while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分

NULL ;

return address ; // 2分

}

(2)strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值?

答:为了实现链式表达式。 // 2 分

例如 int length = strlen( strcpy( strDest, “hello world”) );

六、编写类 String 的构造函数、析构函数和赋值函数(25 分)

已知类 String 的原型为:

class String

{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

请编写 String 的上述4 个函数。

标准答案:

// String 的析构函数

String::~String(void) // 3 分

{

delete [] m_data;

// 由于m_data 是内部数据类型,也可以写成 delete m_data;

}

// String 的普通构造函数

String::String(const char *str) // 6 分

{

if(str==NULL)

{

m_data = new char[1]; // 若能加 NULL 判断则更好

*m_data = ‘\0’;

}

else

{

int length = strlen(str);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, str);

}

}

// 拷贝构造函数

String::String(const String &other) // 3 分

{

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, other.m_data);

}

// 赋值函数

String & String::operate =(const String &other) // 13 分

{

// (1) 检查自赋值 // 4 分

if(this == &other)

return *this;

// (2) 释放原有的内存资源 // 3 分

delete [] m_data;

// (3)分配新的内存资源,并复制内容 // 3 分

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好

strcpy(m_data, other.m_data);

// (4)返回本对象的引用 // 3 分

return *this;

}

[查看全文]
xiaowuhello
呵呵 :victory: 很不错啊
展开Biu

呵呵 :victory: 很不错啊

[查看全文]