Ⅰ c语言 栈的操作
#include
#include
#define Max 100
typedef char T;
typedef struct MyStack
{
T aa[Max];
unsigned int p;
} stack;
//创建空栈
stack* createEmptyStack()
{
stack* st = (stack *)malloc(sizeof(stack));
int i=0;
for(i=0;i<Max;i++)
st->aa[i]=0;
st->p=0;
return st;
};
//栈判空
int isEmpty(const stack* st)
{
if(st->p==0) return 1;
else return 0;
};
//求栈的大小
unsigned int size(const stack* st)
{
return st->p;
};
//push操作
void push(stack* st,const T a)
{
st->p=st->p+1;
if(st->p==Max)
{
printf("栈满\n");
st->p--;
return;
}
st->aa[st->p]=a;
};
//pop操作
T pop(stack* st)
{
if(isEmpty(st))
{
printf("栈空");
return NULL;
}
char t=st->aa[st->p];
st->p=st->p-1;
printf("%c ",t);
return t;
};
//栈销毁
void destroy(stack* st)
{
free(st);
};
int main()
{
stack* st = createEmptyStack();
if(isEmpty(st)) printf("MyStack is empty\n");
else printf("MyStack is not empty\n");
push(st,'a');
push(st,'b');
push(st,'c');
push(st,'d');
push(st,'e');
printf("%d\n",size(st));
while(!isEmpty(st)) pop(st);
destroy(st);
system("pause");
return 0;
}
Ⅱ 学习C语言的要领和技巧
从最基本的流程学起,从最基本的语句学起。
在学习的过程中,特别注意每个函数的作用,多想想这个函数能怎样用,用在哪里,能起到什么另外的效果!要学会活用!
程序,对数学,特别是逻辑的要求把比较高。
写好程序,首先对整个程序的流程有缜密的思考,要求周到,准确,先思考,不要急着写程序!!这一点请注意!也就是说先算法,先研究程序的结构,是用什么来实现的,循环?分支?等等。然后再用语言来实现!语言只是编写程序的工具。所以学语言,先学会程序化的思想。在将算法翻译成语言的时候,再结合实际情况,逐步求精,有目的的修改,达到最优化。
我们学院的C语言,很有特色,英文版,考试也是。我想说的就是,外文版的这本书,它在引领一个不懂编程的人,逐步养成程序、流程、逻辑的思想,是非常优秀的一本书。如果能字字句句阅读,将会很清楚领会到程序的思想。然而,书太厚,生词太多,时间太短。我的建议是,看某一本中文版的书,一本不够,看两本。先尽快学会程序的思想,也就是用程序来想问题,这样,就会编程了。然后,考试前几周,背一背生词、关键词,就可以考试了。如果你坚持要读外文版,可以,但要跳读!
然后,还要看你是想只是应付期末考试,还是想学好编程。应付期末考,需要注意书中的重点,也就是考点,这样就够了。比如说字符型变量加指针,这样就够了,不需要更高级的指针的知识。
而你如果想真正学好程序(我不说C语言是因为我说过C语言只是编写程序的工具之一),肯定是要打好基础的!任何一个细节,都是不能放过的!而且,这样的人往往会很郁闷~因为我们程序真正要求的,考试一般不会涉及到,因为比较难!(不会指针的人,永远不要说他会C语言!)而考试的内容,恰恰是最无聊的东西,比如格式化输出printf函数的第一个参数,太繁了,记都记不住。如果学的深的话,只需要知道有这么一个函数,有这么一个功能。而要用的时候,查书就行。可是对考试来说,显然不行。所以要看看你是哪一种~
Ⅲ C语言程序 如何把当前程序的内存状态保存下来(到硬盘),下次运行时接着上次保存的内存状态运行
有稻草
当怀疑系统重新启动之前针对计算机所进行的更改可能导致故障,可以在启动系统时按F8键,选择“最后一次正确的配置”来恢复对系统所做的更改。
2.自动登陆
单击开始→运行,输入“rundll32 netplwiz.dll,UsersRunDll”(不带引号),然后在User Accounts中取消“Users must enter a user name and password to use this computer”,单击“OK”,接着在弹出的对话框中输入你想自己登陆的用户名和密码即可。
3.快速关机或重启的快捷键(可定时)
在桌面点击鼠标右键,选择新建(快捷方式,在弹出的向导中输入位置为:C:/WINDOWS/system32/shutdown.exe -s -t 10(其中的-s可以改为-r,也就是重新启动,而-t 10表示延迟10秒,你可以根据自己的需要更改这个数字)。制作完这个快捷键后,按照上面的方法为它指定一个图标。这个快速关机或重启的技巧会显示一个比较漂亮的对话框提示关机(重启),而且你可以在后面加上“-c "我要关机啦!"”,这样这句话会显示在对话框中,当然文字你可以随意写,但要注意不能超过127个字符。
4.关机、重启只要1秒钟
如果你想让Windows XP瞬间关机,那么可以按下CTRL+ALT+DEL,接着在弹出的任务管理器中点击“关机”→“关机”,与此同时按住CTRL,不到1秒钟你会发现系统已经关闭啦,简直就在眨眼之间。同样道理,如果在“关机”菜单中选择“重启”,即可快速重启。
5. 寻找丢失的快速启动栏
把鼠标移到任务栏的空白区域,单击右键从弹出的菜单中选择“属性”,在弹出的窗口中选择“任务栏”选项卡,再从“任务栏外观”框中把“显示快速启动”的复选框选中,“确定”就行了。
6. 快速锁定计算机
在桌面上单击鼠标右键,在随后出现的快捷菜单上选择新建“快捷方式”,接着系统便会启动创建快捷方式向导,在文本框中输“rundll32.exe user32.dll,LockWorkStation”,点击“下一步”,在弹出的窗口中输入快捷方式的名称,点击“完成”即可。当然最简单的锁定计算机的方法是直接按WinKey + L。
7.恢复“开始”菜单
Windows XP新的“开始”菜单还是挺方便的,对系统资源的影响也不大。如果你喜欢过去的经典菜单的话,用鼠标右键单击任务栏空白处,选择“属性”菜单,进入“任务栏和开始菜单属性”的设置窗口,选择“[开始]菜单”选项卡,选择“经典[开始]菜单”即可恢复到从前的模样了。
8.优化视觉效果
Windows XP的操用界面的确是很好看,好看的背后是以消耗大量内存作为代价的,相对于速度和美观而言,我们还是宁愿选择前者,右键单击“我的电脑”,点击“属性/ 高级”,在“性能”一栏中,点击“设置/视觉效果”,在这里可以看到外观的所有设置,可以手工去掉一些不需要的功能。在这里把所有特殊的外观设置诸如淡入淡出、平滑滚动、滑动打开等所有视觉效果都关闭掉,我们就可以省下“一大笔”内存
9.禁用多余的服务组件
Windows XP和Windows 2000一样可以作为诸如Http服务器、邮件服务器、FTP服务器,所以每当Windows XP启动时,随之也启动了许多服务,有很多服务对于我们这些普通用户来说是完全没用的,所以关掉它们是一个很好的选择。操作的方法是:右键单击“我的电脑”,依次选择“管理/服务和应用程序/服务”,将不需要的服务组件禁用。
注意:有些服务是Windows XP必需的,关闭后会造系统崩溃。查看详细说明确认后再禁止。
10.减少启动时加载项目
许多应用程序在安装时都会自作主张添加至系统启动组,每次启动系统都会自动运行,这不仅延长了启动时间,而且启动完成后系统资源已经被吃掉不少!我们可以减少系统启动时加载的程序,方法是:选择“开始”菜单的“运行”,键入“msconfig”启动“系统配置实用程序”,进入“启动”标签,在此窗口列出了系统启动时加载的项目及来源,仔细查看你是否需要它自动加载,否则清除项目前的复选框,加载的项目愈少,启动的速度自然愈快。此项需要重新启动方能生效。
11.关闭系统还原功能
“系统还原”功能是Windows系列操作系统的一个重要特色,当Windows运行出现问题后,还原操作系统。“系统还原”虽然对经常犯错误的人有用,但是它会让你的硬盘处于高度繁忙的状态,你会发现你的硬盘总是忙个不停,因为Windows XP要记录操作,以便日后还原。如果你对自己有信心,那么就不要使用它,因为它可占不少内存。
关闭系统还原功能方法是:单击“开始/所有程序/附件/系统工具/系统还原”,在系统还原界面,单击“系统还原设置”进入“系统还原设置”窗口,清空“在所有驱动器上关闭系统还原”复选框,这样Windows XP就会删除备份的系统还原点,从而释放它占用的磁盘空间。
12.关闭自动更新
“自动更新”是Windows XP为了方便用户升级系统而推出的一种新功能,这种功能可以在微软推出系统升级补丁或系统安全补丁的时候,自动提醒用户升级自己的系统,不过这种功能有一个要求,就是用户必须时时在线,但是对于我们这些缺铁少银的“穷人”来说,这个要求未免苛刻,所以我们把“自动升级”功能关闭掉,改为“手动升级”。
关闭自动更新具体操作为:右键单击“我的电脑/属性/自动更新”,在“通知设置”一栏选择“关闭自动更新。我将手动更新计算机”一项。
13.关闭远程桌面
这个功能的一个特点就是可以让别人在另一台机器上访问你的桌面。在局域网中,这个功能很有用。比如你有问题了可以向同事求助,他可以不用到你的跟前,直接通过“远程桌面”来访问你的机器帮你解决问题。但是对于我们只有一台计算机的普通用户来说这个功能就显得多余了,所以我们把它关掉,不让它在那儿白白浪费内存。具体操作为:右键单击“我的电脑”,选择“属性/远程”,把“远程桌面”里的“允许用户远程连接到这台计算机”勾去掉。
14.禁用消休眠功能
Windows XP的休眠可以把内存中当前的系统状态完全保存到硬盘,当你下次开机的时候,系统就不需要经过加载、系统初始化等过程,而直接转到你上次休眠时的状态,因此启动非常快。但它会占用大量的硬盘空间(和你的内存大小一样),可以到“控制面板/电源选项/休眠”中将其关闭,以释放出硬盘空间,待到要需要使用时再打开即可。方法是:单击“开始/控制面板/电源管理/休眠”,将“启用休眠”前的勾去掉。
15.合理设置虚拟内存
对于虚拟内存文件,Windows XP为了安全默认值总是设的很大,浪费了不少的硬盘空间,其实我们完全可以将它的值设小一点。方法是:进入“控制面板/系统/高级/性能/设置/高级/虚拟内存/更改”,来到虚拟内存设置窗口,首先确定你的页面文件在哪个驱动器盘符,然后将别的盘符驱动器的页面文件全部禁用。建议你把它是设置到其他分区上,而不是默认的系统所在的分区,这样可以提高页面文件的读写速度,有利于系统的快速运行。根据微软的建议,页面文件应设为内存容量的1.5倍,但如果你的内存比较大,那它占用的空间也是很可观的,所以,建议如果内存容量在256MB以下,就设置为1.5倍,最大值和最小值一样,如果在512MB以上,设置为内存容量的一半完全可行。
16.删除多余文档
Windows XP中有许多文件平时我们很少用到,放在硬盘中,白白浪费空间,降低系统性能。我们完全可以把这些用不到的文件删除,需要删除的文件有:
帮助文件:在C:/Windows/Help目录下。
驱动备份:C:/Windows/driver cache/i386目录下的Driver.cab文件。
系统文件备份: 一般用户是不怎么用的,利用命令sfc.exe /purgecache删除。
备用的dll文件:在C:/Windows/system32/dllcache目录下。
输入法:在C:Windows/Ime文件夹下直接删除chtime、imjp8_1、imkr6_1三个目录即可,分别是繁体中文、日文、韩文输入法。
17.禁止MSN随Windows启动
每次启动Windows时,Messenger总是自动运行,即使你不想启动它,可是它也自动运行,非常烦人,我们能不能禁止它,不让它随Windows启动呢?回答是可以的。
第一种方法:
1.在“开始”菜单中单击“运行”,在“打开”框中输入“msconfig”,“确定”后打开“系统配置实用程序”窗口。
2.单击“启动”选项卡,在“启动项目”列表中,清除“MSMSGS”前的复选框,单击“确定”按钮。
3.当系统提示“重新启动计算机”时,请单击“是”按钮。
第二种方法:
1.打开“注册表编辑器”窗口。
2.依次展开“KEY_CURRENT_”分支,然后在右窗格中右键单击“MSMSGS”,再单击快捷菜单中的“删除”命令,当系统提示确认删除时,请单击“是”按钮。
经过设置,MSN就再也不会随Windows XP的启动而启动了。
18.删除多余字体
Windows XP中安装的字体越多,就会占用更多的内存的系统资源,减慢系统的运行速度,因此,对于不常用的字体,我们最好把它从系统中删除。字体文件存放在C:/Windows/font目录下,你完全可以根据需要选择一些字体,对于更多不用的字体,一删了之。
19.更改IE临时文件夹
上网时产生的大量临时文件都存放在IE临时文件夹中,默认情况下,临时文件夹是在系统分区上,大量的临时文件会影响硬盘读写系统文件的性能。你可以更改临时文件的位置来避免出现这种情况。方法是单击“开始/控制面板/Internet选项”,在“常规”选项卡中单击“设置”按钮,在打开的窗口中单击“移动文件夹”按钮,指定一个非系统分区上的文件夹,单击“确定”后,临时文件就会移到指定的文件夹上。
20.加快“网上邻居”共享的速度
不知道各位使用者用Windows XP开“网上邻居”里面的共享资源时,有没有发现所花的时间相当的长,这是因为它会检查其它计算机中的设定工作,有时甚至就在那边停了将近一分钟,相当讨厌,大家可以通过下面的方法将其检查的步骤取消:选择“开始/运行”,输入regedit,在弹出注册表编辑器中寻找 [HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Explorer/RemoteComputer/NameSpace],按鼠标右将在此位置的删除之即可。
21.清除预读文件
当Windows XP使用一段时间后,安装目录下的预读文件夹(C:/Windows/prefetch)里的文件会变的很大,里面会有死链接文件,这会减慢系统时间,建议你定期删除这些文件。
22.设置预读以提高速度
Windows XP使用预读设置这一新技术,以提高系统速度。如果你的电脑配置不错,拥有PIII 800, 512M内存以上,你可以进行以下修改:单击“开始/运行”,输入“regedit”,打开注册表,找到 [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management/PrefetchParameters/EnablePrefetcher],设置数值0,1,2,3(0-Disable,1- 预读应用程序,2-启动预读,3-前两者皆预读),推荐使用“3”,这样可以减少启动时间。
23.启用DMA传输模式
所谓DMA,即直接存储器存储模式,指计算机周边设备(主要指硬盘)可直接与内存交换数据,这样可加快硬盘读写速度,提高速据传输速率。由于某些原因, Windows XP有时会在IDE通道上使用PIO并行输入输出传输模式,而不是DMA模式。如果有这种情况,用户可以手动把IDE通道改为DMA模式,这样可以减少该设备占用的CPU周期。方法是:右键点击“我的电脑”,选“属性”,点选“硬件”选项卡,单击“设备管理器”按钮,打开“设备管理器”,然后点击展开 “IDE ATA/ATAPI 控制器”分支,其中“IDE控制器”有两项“主要IDE通道”及“次要IDE通”,分别选中,依次进入“属性/高级设置”,该对话框会列出目前IDE接口所连接设备的传输模式,检查“传输模式”下拉菜单,把它们全部设“DMA(若可用)”,点击“确定”。
24.关闭计算机时自动结束任务
在关机的时候,有时会弹出讨厌的对话框,提醒某个程序仍在运行,是否结束任务。其实完全可以通过一点点修改让Windows自动结束这些仍在运行的程序。在注册表中打开HKEY_CURRENT_USER/Control Panel/Desktop 目录,把里面的AugoEndTasks键值改为1。
注意:可能会找不到AutoEndTasks键值,如果是这样的话,自己建一个串值并把它改为这个名字,值设为1就可以了。
25.减少磁盘扫描等待时间
WindowsXP虽然号称稳定,但是并不是永不死机,偶尔也会给你个蓝脸,非法操作后系统会自动扫描,出现大段大段的E文,告诉你刚才系统非正常结束,现在需要检查一下是否出错,可是还要等待一段时间才开始,所以我们可以在dos下,键入“chkntfs/t:0”,表示等待时间为0秒。
26.设置共享文件夹的权限
Windows 2000操作系统中用户在设置文件夹的共享属性时操作非常简便,只需用鼠标右击该文件夹并选择属性,就可以找到共享设置标签,来设置文件夹的访问权限,只允许特定用户访问,可在Windows XP中却找不到这个功能了。难道在Windows XP中不能使用这个功能吗?其实不然,你可以这样操作:打开“我的电脑”中的“工具”,选择“文件夹属性”,调出“查看”标签,在“文件和文件夹”部分将 “使用简单文件共享(推荐)”项前面的选择取消,这样修改后用户就可以象使用Windows 2000一样对文件夹属性进行方便修改了。
27.彻底隐藏文件
每个人的机器上都或多或少有一点不愿意别人看见的东西,怎么办,直接隐藏起来吗?一打开显示隐藏文件就什么都看见了,其实你只要HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/explorer/Advanced/Folder/Hidden/SHOWALL下, DWORD值Checkedvalue设为0(如果没有这一项可新建一个),这样当有非法用户开启显示隐藏文件功能后,你的文件也不会被显示出来。
28.快速锁定计算机
如果你因为有急事而需要离开,但又不希望电脑进行系统注销。这时你可以选择“新建/快捷方式”,接着系统便会启动创建快捷方式向导,在文本框中输入 "rundll32.exe user32.dll,LockWorkStation",单击“下一步”,在弹出的窗口中输入快捷方式的名称。比如我们可将它命名为“锁定计算机”或选用你所喜欢的任何名称,单击“完成”。以后,我们就可以简单地点击这个快捷方式,锁定计算机。
29.禁止隐藏不活动的图标
在使用一段时间后,Windows XP会自动检测并隐藏不活动的图标,我们可以通过下面的方法来禁止它:在任务栏的空白处单击鼠标右键,在弹出的快捷菜单中选择“属性”,在“任务栏”标签中将“隐藏不活动的图标”取消即可,如果你不想完全禁止这项功能,可以单击“自定义”按钮,自行设置有关项目的隐藏和显示。
30.让欢迎窗口更清晰
Windows XP系统的显示效果得到了较大提高,这主要是基于它使用了名“ClearType”的清晰化技术,该技术特别让使用笔记本电脑及液晶显示器的用户在运行 Windows XP操作系统时感受到与以往系统不同的效果。但由于该清晰效果只有当Windows启动完毕后才能调用,因此在系统启动过程中的欢迎窗口仍然无法实现这一效果。为了使欢迎窗口更加清晰,用户可以使用注册表编辑器进行修改,寻找到这两个主键:
HKEY_USERS/.Default/Control Panel/Desktop/FontSmoothing
HKEY_USERS/.Default/Control Panel/Desktop/FontSmoothingType
将键值修改为“2”,这样便可以实现清晰显示效果了。
31.隐藏桌面图标
在Windows XP中增加了隐藏桌面图标的功能,你只需用鼠标单击桌面空白处,在弹出的右键菜单中选定“排列图标”命令,然后在其下一级级联菜单中取消对“显示桌面图标”命令的选定,系统就会自动将所有桌面图标隐藏。
32.缩短等待时间
HKEY_CURRENT_USER\Control Panel\Desktop 键,将右边窗口的 WaitToKillAppTimeout 改为 4000(原设定值:20000),即关闭程序时仅等待1秒。将 HungAppTimeout 值改为:2000(原设定值:5000),表示程序出错时等待0.5秒。
33.优化“启动和故障恢复”设置:
右键单击“我的电脑”,点击属性,点击“高级”,在“启动和故障恢复”
一栏中,点击“设置”,其中的“系统失败”一栏中,只选择“自动重新启动”,写入调试信息选择“无”。
34.定制特殊的启动提示注册表:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Winlogon中的"LegaNoticeCaption"是登陆提示语言,“LegalNoticeText”是欢迎词。
35.windowsXP的内存优化!!!!!!!!!!!!(警告!!!!!以下设置需要有256M以上的内存才能有好的效果!!!)
注册表:
HKEK_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SessionManager/Memory Management
中的:禁用内存页面调度: DisablePagingExecutive 值改为“1”
提升系统缓存: LargeSystemCache 值改为“1”
36.卸载无用的动态链接
资源管理器经常在内存中留下无用的动态链接,为了消除这种现象,你可以打开注册表编辑器,设置键值:HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows\CurrentVersion\Explorer/AlwaysUnloadDLL(字符串值)将其设为1
37.在关机时清空页面文件
打开“控制面板”,点击“性能和维护”-“管理工具”→“本地安全策略”→“本地策略”→“安全选项”,双击其中“关机:清理虚拟内存页面文件”
一项,点击弹出选单中的“已启用”选项,单击“确定”即可
38.Windows XP 安装好后,如何把FAT 32转化为NTFS
使用convert命令,在命令行模式下用convert.exe这个命令随时转化的。例如:convert c: /fs:ntfs把c盘转化为NTFS
39.上网时在地址栏内输入网址,系统会记录下来,虽然方便以后不用再重复,不过如果是公用的机子,又不想让别人知道自己到过哪些地方,可以用“CTRL+ O(字母O,不是0)”,这时对弹出一个“打开”对话框,在其中的地址栏内 输入网址,就不会被记录下来了.
电脑死机原因大全
由硬件原因引起的死机
显示器、电源和CPU在工作中发热量非常大,因此保持良好的通风状况非常重要,如果显示器过热将会导致色彩、图象失真甚至缩短显示器寿命。工作时间太长也会导致电源或显示器散热不畅而造成电脑死机。CPU的散热是关系到电脑运行的稳定性的重要问题,也是散热故障发生的“重灾区”。
在电脑移动过程中受到很大振动常常会使机器内部器件松动,从而导致接触不良,引起电脑死机,所以移动电脑时应当避免剧烈振动。
机器内灰尘过多也会引起死机故障。如软驱磁头或光驱激光头沾染过多灰尘后,会导致读写错误,严重的会引起电脑死机。
如主板主频和CPU主频不匹配,老主板超频时将外频定得太高,可能就不能保证运行的稳定性,因而导致频繁死机。
三维软件和一些特殊软件,可能在有的微机上就不能正常启动甚至安装,其中可能就有软硬件兼容方面的问题。
主要是内存条松动、虚焊或内存芯片本身质量所致。应根据具体情况排除内存条接触故障,如果是内存条质量存在问题,则需更换内存才能解决问题。
主要是硬盘老化或由于使用不当造成坏道、坏扇区。这样机器在运行时就很容易发生死机。可以用专用工具软件来进行排障处理,如损坏严重则只能更换硬盘了。另外对于在不支持UDMA 66/100的主板,应注意CMOS中硬盘运行方式的设定。
超频提高了CPU的工作频率,同时,也可能使其性能变得不稳定。究其原因,CPU在内存中存取数据的速度本来就快于内存与硬盘交换数据的速度,超频使这种矛盾更加突出,加剧了在内存或虚拟内存中找不到所需数据的情况,这样就会出现“异常错误”。解决办法当然也比较简单,就是让CPU回到正常的频率上。
是由于声卡或显示卡的设置冲突,引起异常错误。此外,其它设备的中断、DMA或端口出现冲突的话,可能导致少数驱动程序产生异常,以致死机。解决的办法是以“安全模式”启动,在“控制面板”→“系统”→“设备管理”中进行适当调整。对于在驱动程序中产生异常错误的情况,可以修改注册表。选择“运行”,键入“REGEDIT”,进入注册表编辑器,通过选单下的“查找”功能,找到并删除与驱动程序前缀字符串相关的所有“主键”和“键值”,重新启动。
内存容量越大越好,应不小于硬盘容量的0.5~1%,如出现这方面的问题,就应该换上容量尽可能大的内存条。
少数不法商人在给顾客组装兼容机时,使用质量低劣的板卡、内存,有的甚至出售冒牌主板和Remark过的CPU、内存,这样的机器在运行时很不稳定,发生死机在所难免。因此,用户购机时应该警惕,并可以用一些较新的工具软件测试电脑,长时间连续考机(如72小时),以及争取尽量长的保修时间等。
由软件原因引起的死机
病毒可以使计算机工作效率急剧下降,造成频繁死机。这时,我们需用杀毒软件如KV3000、金山毒霸、瑞星等来进行全面查毒、杀毒,并做到定时升级杀毒软件。
该故障现象很普遍,如硬盘参数设置、模式设置、内存参数设置不当从而导致计算机无法启动。如将无ECC功能的内存设置为具有ECC功能,这样就会因内存错误而造成死机。
由于Windows 9x启动需要有Command.com、Io.sys、Msdos.sys等文件,如果这些文件遭破坏或被误删除,即使在CMOS中各种硬件设置正确无误也无济于事。解决方法:使用同版本操作系统的启动盘启动计算机,然后键入“SYS C:”,重新传送系统文件即可。
由于Windows 9x启动需要读取System.ini、Win.ini和注册表文件,如果存在Config.sys、Autoexec.bat文件,这两个文件也会被读取。只要这些文件中存在错误信息都可能出现死机,特别是System.ini、Win.ini、User.dat、System.dat这四个文件尤为重要。
在Windows操作系统中还有一类文件也相当重要,这就是扩展名为DLL的动态链接库文件,这些文件从性质上来讲是属于共享类文件,也就是说,一个DLL文件可能会有多个软件在运行时需要调用它。如果我们在删除一个应用软件的时候,该软件的反安装程序会记录它曾经安装过的文件并准备将其逐一删去,这时候就容易出现被删掉的动态链接库文件同时还会被其它软件用到的情形,如果丢失的链接库文件是比较重要的核心链接文件的话,那么系统就会死机,甚至崩溃。我们可用工具软件如“超级兔仔”对无用的DLL文件进行删除,这样会避免误删除。
如果硬盘的剩余空间太少,由于一些应用程序运行需要大量的内存、这样就需要虚拟内存,而虚拟内存则是由硬盘提供的,因此硬盘要有足够的剩余空间以满足虚拟内存的需求。同时用户还要养成定期整理硬盘、清除硬盘中垃圾文件的良好习惯。
应备份BIOS以防不测,但如果你的系统需要对BIOS进行升级的话,那么在升级之前最好确定你所使用BIOS版本是否与你的PC相符合。如果BIOS升级不正确或者在升级的过程中出现意外断电,那么你的系统可能无法启动。所以在升级BIOS前千万要搞清楚BIOS的型号。如果你所使用的BIOS升级工具可以对当前BIOS进行备份,那么请把以前的BIOS在磁盘中拷贝一份。同时看系统是否支持BIOS恢复并且还要懂得如何恢复。
大多数人可能认为软件升级是不会有问题的,事实上,在升级过程中都会对其中共享的一些组件也进行升级,但是其它程序可能不支持升级后的组件从而导致各种问题。
最好少用软件的测试版,因为测试软件通常带有一些BUG或者在某方面不够稳定,使用后会出现数据丢失的程序错误、死机或者是系统无法启动。
不要把软件安装所在的目录直接删掉,如果直接删掉的话,注册表以及Windows目录中会有很多垃圾存在,久而久之,系统也会变不稳定而引起死机。
因为这些软件可能隐藏着病毒,一旦执行,会自动修改你的系统,使系统在运行中出现死机。
这种情况是常见的,如在Win 98中运行那些在DOS或Windows 3.1中运行良好的16位应用软件。Win 98是32位的,尽管它号称兼容,但是有许多地方是无法与16位应用程序协调的。还有一些情况,如在Win 95下正常使用的外设驱动程序,当操作系统升级后,可能会出现问题,使系统死机或不能正常启动。遇到这种情况应该找到外设的新版驱动。
这使系统资源消耗殆尽,使个别程序需要的数据在内存或虚拟内存中找不到,也会出现异常错误。
用非法格式或参数非法打开或释放有关程序,也会导致电脑死机。请注意要牢记正确格式和相关参数,不随意打开和释放不熟悉的程序。
Ⅳ C语言中有哪些实用的编程技巧
这篇文章主要介绍了C语言高效编程的几招小技巧,本文讲解了以空间换时间、用数学方法解决问题以及使用位操作等编辑技巧,并给出若干方法和代码实例,需要的朋友可以参考下
引言:
编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。
第1招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招——以空间换时间。
例如:字符串的赋值。
方法A,通常的办法:
代码如下:
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,“This is a example!!”);
方法B:
代码如下:
const char string2[LEN] =“This is a example!”;
char * cp;
cp = string2 ;
(使用的时候可以直接用指针来操作。)
从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵 活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序 执行的高效率。
如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。
该招数的变招——使用宏函数而不是函数。举例如下:
方法C:
代码如下:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
int BIT_MASK(int __bf)
{
return ((1U << (bw ## __bf)) - 1) << (bs ## __bf);
}
void SET_BITS(int __dst, int __bf, int __val)
{
__dst = ((__dst) & ~(BIT_MASK(__bf))) | /
(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
}
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
方法D:
代码如下:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))
#define SET_BITS(__dst, __bf, __val) /
((__dst) = ((__dst) & ~(BIT_MASK(__bf))) | /
(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查 选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要 一些CPU时间。而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函 数的时候,该现象尤其突出。
D方法是我看到的最好的置位操作函数,是ARM公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。
第2招:数学方法解决问题
现在我们演绎高效C语言编写的第二招——采用数学方法来解决问题。
数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
举例如下,求 1~100的和。
方法E
代码如下:
int I , j;
for (I = 1 ;I<=100; I ++){
j += I;
}
方法F
代码如下:
int I;
I = (100 * (1+100)) / 2
这个例子是我印象最深的一个数学用例,是我的计算机启蒙老师考我的。当时我只有小学三年级,可惜我当时不知道用公式 N×(N+1)/ 2 来解决这个问题。方法E循环了100次才解决问题,也就是说最少用了100个赋值,100个判断,200个加法(I和j);而方法F仅仅用了1个加法,1 次乘法,1次除法。效果自然不言而喻。所以,现在我在编程序的时候,更多的是动脑筋找规律,最大限度地发挥数学的威力来提高程序运行的效率。
第3招:使用位操作
实现高效的C语言编写的第三招——使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。举例如下:
方法G
代码如下:
int I,J;
I = 257 /8;
J = 456 % 32;
方法H
int I,J;
I = 257 >>3;
J = 456 - (456 >> 4 << 4);
在字面上好像H比G麻烦了好多,但是,仔细查看产生的汇编代码就会明白,方法G调用了基本的取模函数和除法函数,既有函数调用,还有很多汇编代码和寄存 器参与运算;而方法H则仅仅是几句相关的汇编,代码更简洁,效率更高。当然,由于编译器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 来看,效率的差距还是不小。相关汇编代码就不在这里列举了。
运用这招需要注意的是,因为CPU的不同而产生的问题。比如说,在PC上用这招编写的程序,并在PC上调试通过,在移植到一个16位机平台上的时候,可能会产生代码隐患。所以只有在一定技术进阶的基础下才可以使用这招。
第4招:汇编嵌入
高效C语言编程的必杀技,第四招——嵌入汇编。
“在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾”。这种说法虽然偏激了一些,但是却有它的道理。汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法 ——嵌入汇编,混合编程。
举例如下,将数组一赋值给数组二,要求每一字节都相符。
代码如下:
char string1[1024],string2[1024];
方法I
代码如下:
int I;
for (I =0 ;I<1024;I++)
*(string2 + I) = *(string1 + I)
方法J
代码如下:
#ifdef _PC_
int I;
for (I =0 ;I<1024;I++)
*(string2 + I) = *(string1 + I);
#else
#ifdef _ARM_
__asm
{
MOV R0,string1
MOV R1,string2
MOV R2,#0
loop:
LDMIA R0!, [R3-R11]
STMIA R1!, [R3-R11]
ADD R2,R2,#8
CMP R2, #400
BNE loop
}
#endif
方法I是最常见的方法,使用了1024次循环;方法J则根据平台不同做了区分,在ARM平台下,用嵌入汇编仅用128次循环就完成了同样的操作。这里有 朋友会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为0的字节,这样的话,标准库函数会提前结束而不会完成我们要求的操作。这个 例程典型应用于LCD数据的拷贝过程。根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率。
虽然是必杀技,但是如果轻易使用会付出惨重的代价。这是因为,使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,卧虎藏龙,险象环生!同时该招数也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用。切记,切记。