版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序没计编著 刘成王亚杰邱虹坤等审阅 鲁墨武沈阳航空工业学院刖R《c语言程序设计》是ー门实践性非常强的课程,只有通过上机实验、提高动手能力,才能够真正理解书本上的知识点,从而全面把握程序设计语言。为了满足教学需要,并使c语言的初学者能够很快进入角色,作者根据教学大纲和国家计算机等级考试(二级C语言)的相关内容,对原来的上机实验教程在内容上作了较大调整,使新版指导书更具实用性和现实性。调整后的实验指导教程包括三大方面的内容:①编程工具的使用说明。通过实例,分别说明了如何使用VC和TC编程工具去运行程序、调试程序。读者如果初步掌握了这些工具的使用,将大大降低学习本课程的难度,起到事半功倍的效果。对于这部分内容,读者可以没有任何计算机语言基础(零起点),就可以顺利阅读。②程序设计实验内容,是学员所提交的实验报告的题目来源,是本教程的核心内容。根据其综合性和深入性,实验内容可以划分为基础实验部分和提高实验部分。前者包括顺序结构的使用、选择结构的使用、循环结构的使用、数组等实验:后者包括函数的使用、指针的使用、结构体与共用体、链表、文件等。在实验内容中,没有任何特殊标记的题目是必须掌握的基本题H,标有"*"符号的题H较难,是选作题。③练习题。'‘熟能生巧”,通过多作习题,广泛接触不同类型的题目,会明显提高对程序的理解、判断能力。这不但是学好本课程的需要,也是通过全国计算机等级考试所必备的能力。鉴于此,作者不但针对各个章节给出了一些专门练习题,还收集了一些全国计算机等级考试的模拟题和以前的考题,使读者在学习过程中有个参照标准,自觉地校验自己的学习质量和学习水平。总之,本教程与学员所使用的教材之间具有很好的互补性:教材侧重概念、理论;实验指导教程侧重实际操作。全书由计算机基础教研室的多名教师参加编写,其中:熟悉编程工具、实验四、六、七、八、九、附录四、附录五、附录六由刘成编写;实验ー、二、三、五,综合实验ー、二、三,附录二,由王亚杰编写;附录ー、附录三,由邱虹坤编写。在编写过程中,还得到吴杰宏、王晓岩、尹航、孙玉霞等同事的支持,在此表示感谢。由于时间仓促和水平的关系,本书肯定有错误和不足之处,请广大读者批评指正,使之不断完善。编者2005年10月
目录TOC\o"1-5"\h\z\o"CurrentDocument"熟悉编程工具 1一,TurboC2.0集成开发环境的使用 2(-)在TC中运行程序的基本步骤 2\o"CurrentDocument"(二)如何在TC中调试程序 4\o"CurrentDocument"(三)美于TC的帮助系统 11\o"CurrentDocument"(四)使用TC的其它技巧 11\o"CurrentDocument"二、VC集成开发环境的使用 15\o"CurrentDocument"(-)在VC中运行程序的基本步骤 15\o"CurrentDocument"(二)如何在VC中调试程序 19\o"CurrentDocument"(三)如何使用帮助系统 23\o"CurrentDocument"三、上机实验要求 26\o"CurrentDocument"实验ー上机实验基础及顺序结构的使用 28实验ニ选择结构的使用 实验三循环结构的使用 综n突验ー 实验四数组的使用 实验五函数的使用 综合实验ニ 实验六指针的使用 实验七结构体与共用体 实为ノI縫表 实型九文仟 综合实验三 附录ー练习题 ー、基本概念与数据类型 —"、Cス王,字'tsci十^^«出 三、顺序程序设计 四、选择结构程序设计 五、循环结构程序设计 六、数组 七、函数 ハ、指针 九、预处理命令 十、结构体与公用体 十ー、文件 附录二自测题 期中自测题 期末自测题 33 44 46 33 44 46 53 59 62 72 79 91 94 97 101 106 111 115 120 129 135 139 139 148第一套 第二套 附录四全国计算机等级考试二级C语言上机考试部分题型近年上机考试编程题目部分题型 近年上机考试改错题目部分题型 附录五全国计算机等级考试二级C语言笔试考试资料….…2004年4月笔试试卷 2004年9月笔试试卷 2005年9月笔试试卷 附录六认识TC中常见的出错信息 TC中常见的出错信息 出错信息中的重要词汇 157 157 164 172 172 177 183 183 197 207 219 219 220 220熟悉编程工具我们编写的C程序需要用编程工具来运行,所以学会使用编程工具,是我们学习C程序设计的第一步。本教程首先将分别简要介绍TC和VC的使用。只有熟悉了编程工具,才能够顺利地把自己的程序设计设想转化为具体的程序,进而逐渐提高程序设计水平、培养实际动手能力。当然,这也是能够较好地完成老师所指定的程序设计任务的基本保证。上机实验意义重大。计算机科学本来就是•种实验科学,而对计算机语言的学习更是离不开大量的上机实验,这是本门课程区别于其它课程的最显著的特征之一。如果说每门课程都有一套学习方法的话,那么本课程的最好学习方法就是上机实验。实际上,学习计算机语言的过程可以归结为两个互相推动的方面:理论学习和上机实验。老师在课堂上主要是给学员讲授理论知识,而上机实验的学习过程只能依靠学员自己,并且这ー过程是任何大都无法替代的。上机实验是《C语言程序设计》课程的重要组成部分,本课程的总学时为56学时,其中课堂理论学习为36学时,课后上机为20学时。实践证明,如果要取得较好的学习效果,理论学习与上机实验的学时比例应保持在1:2左右。可见,计划的上机学时是远不够的,需要学员自己多利用课余时间上机。衡量一个大的计算机应用能カー般从两个方面认定:理论水平和实际操作。单强调一个方面是片面的、没有意义的。比如,在全国计算机等级考试中,绝大多数等级和科目的考试不但有笔试考试,还有上机考试。只有当两个考试成绩都合格オ能获得国家颁发的等级证书。目前,可以编写、运行C程序的集成环境(编程工具)有多种,在此简要介绍比较流行的两种:TurboC2.0和VC++6.0。在大家实际编程序时,选择哪种工具都可以,不过作者推荐使用后者,原因主要有两个:①VC++6.0是美国微软公司九ト年代的软件产品,是面向对象的可视化程序开发工具,在其中不但可以开发标准C程序,还可以开发C++程序。当然VC++6.0还支持其它更多的软件技术;相比较而言,TurboC2.0是美国Borland公司八十年代的产品,其中仅能编写面向结构的C程序,不支持某些重要的软件新技术。②VC++6.0的用户界面友好,对于英文和中文的处理都方便;但TurboC2.0在输出汉字时非常不易,只能方便地输出英文。值得注意的是,在全国计算机等级考试中,《二级C语言》的上机考试则采用TurboC2.0;而《二级C++》贝リ采用VC++6.0。作者认为,当以VC++6.0为平台掌握了C语言的编程技能以后,熟悉一下TurboC2.0的集成环境也只是大约几个小时的事情。下面首先通过编写ー个很简单的小程序,分别说明如何在TuAoC2.0和VC++6.0的集成环境中编写、运行程序。这个小程序的功能是在屏幕上打印(输出)问候语"Hello,World."。后续内容将把TurboC2.0和VC++6.0分别简称为TC和VC。一般地,编写程序很难ー挥而就,总会存在一些错误和问题,因此还将详细介绍如何单步运行程序,以监视程序中各个变量的状态,从而找出问题所在,即所谓的调试程序。地址(9心!D:\tc20ZJtcc.exeZJtcconfig.exe回TCCONFIGJC文件(E)编辑(£)查看(り收藏(»工具(I)帮助(由ッ后退,ウ,耳◎搜索1a文件夹ン历史I书里H我的电脑类型:应用程序大小:283KB 283KB图1-2在资源管理器中双击TC.EXE-1□Ix|IFl-HelpF5-ZoomF6-SviitchF7-TraceF8-StepF9-MakeF10-Menuー、TurboC2.0集成开发环境的使用(-)在TC中运行程序的基本步骤三!ダ转到「FileEditRunCompileProjectOptionsDebugBreak/watch1.启动TC有两种途径可以启动TC:①在桌面双击快捷方式图标(参见图1-1中的右下角图标)。②在资源管理器中先找到安装TC的文件夹,用鼠标双击该文件夹中的TC.EXE文件(参见图1-2)。TC启动后的界面如图1-3所示。文件夹-1□IX|國TCHEIP.TOコTCIN5T.EXE©TEST.PPTコTHELP.COM0Jthelp.doc2tlib.exeS〇javajiuc(20oracleBdtc20SロINCLUDE'ILIBEロtc30'Itemp SSIGNAL.CD:\tc20-ditLine1Col1InsertIndentTabFillUnindentD:N0NAME.C我的文档恵奈杰超级DVD2.1问回收站⑥InternetExplorer色事D震我的电脑网上邻居附件}TC2.0j图1-1TC在桌面的快捷方式图标图1-3TC程序主界面.编辑源程序启动TC后,直接在编辑窗口输入图启动TC后,直接在编辑窗口输入图1[所示的代码。图在编辑窗口输入源程序-1□1x|图-1□1x|图1-5保存源程序.保存程序编辑的源程序应及时保存,防止丢失。按下F2键,在弹出的对话框中输入D:\03031000\hello.c(假设在D盘己经创建了03031000文件夹),然后回车(参见图1-5)〇ChangedirOSshellQuit注意:①TC仅支持不超过8个字符的主文件名或文件夹名。②TC默认的源程序扩展名为・.C。.运行程序
按下Alt键,同时按下R键,打开Run菜单;用t键或I键选中Run菜单项,然后回车,程序便开始运行,并瞬间运行完毕。.观看运行结果按下Alt键,同时按下F5键,则TC切换到用户屏幕,可以见到英文的问候语已经打印在屏幕上了(参见图1-6)〇观察完毕后,按ESC键切换到原来的TC主界面。至此,我们已经经历了程序从编辑,到运行,再观看输出结果的全过程。.可以按照以上步骤不断修改、运行程序,并观察结果。需要注意的是,在退出TC时,一般不要用鼠标单击窗口右上角的凶按钮,而是执行File菜单中的Quit菜单项退出TC,其原因是:TC窗口并不是标准的Window窗口,直接用凶按钮关闭TC窗口,容易丢失尚未保存的源程序。(二)如何在TC中调试程序运行c程序主要经历如下步骤:编辑程序(Edit)f编译(Compile)连接(Link)->运行(Run)。一般来说,刚编辑好的源程序可能存在错误,本书根据这些错误的性质将其划分为两大类:语法错误,算法错误。使程序不能编译或不能连接的错误,称为语法错误。必需修改此类错误才能最终运行程序:程序虽然能够运行,但运行结果令人无法接受,则说明存在算法错误。在程序中查找、修改错误,使其能够运行并有理想的运行结果的过程称为程序调试。与错误类型相对应,程序调试分为2个阶段:语法调试和算法调试。即,先修改语法错误,后修改算法错误。一般地,语法错误容易处理(编译器会给出错误提示),而算法错误的隐蔽性相对较强,处理起来不如前者容易。调试程序的能力是程序设计能力的主要表现之ー。下面举例说明TC程序的调试步骤。问题:1+2+3+…+5的值是多少?
1.语法调试阶段按照图1-7所示在TC中编辑程序,并以add.c为文件名保存到D的根下(假设学员由于马虎,在i=l之后忘了加分号,还把printf错写成了print),执行Run命令(或按Ctrl+F9快捷键)。程序不运行,弹出编译出错对话框,告知发现1个错误和1个警告(参见图!-8)»实际上,在编译时只要发现1条错误编译就无法通过:但另一方面,警告不管有多少个,只要没有错误,是可以通过编译的,进而是可以运行的。所以警告并不阻碍编译,只是提醒我们应该注意的事情。错误信息对话框还提示,按任意键(Pressanykey)查看进ー步的提示,图1-7准备运行的程序-1□1x|图1-7准备运行的程序-1□1x|国TCFileEditRunCompileProjectOptionsDebugBreak/watch Edit
Line1Col1InsertIndentTabFillUnindent*D:ADD.C城include"stdio.hmainO<intsum,i;城include"stdio.hmainO<intsum,i;i=lwhile<i<=5>sum=sum+i;i=i*l;print<"Ndヽn"し Compiling Mainfile:\ADD.CCompiling:EDITOR-»ADD.CTotalFileLinescompiled:224224Warnings:11Errors:11Availablememory:249KErrors:Pressanykt■yIIIMessageIFl-HeIpF5-ZoorF6IFl-HeIp图1-8编译时出现错误
I国TCA按下空格键(按回车键也行),对话框消失,TC在编辑栏中加亮显示错误行;同时,在信息栏中给出了更详细的错误提示(参见图1-9),其中的错误提示的大意是:程序的第6行(在I国TC"lP12Sl「FileEditRunCompileProjectOptionsDebugBreak/watchEditLine1Col1InsertIndentTabFillUnindent*D:ADD.Cintsum,i;^include"stdiomainOintsum,i;sum=sum+i;i=i*l;>print〈‘シdヽn”,sum〉;MessageCompilingD:\ADD.C:•ErrorD:\ADD.C6:Statementmissing;infunctionmainWarningD:\ADD.C12:9iJisassignedaualuewhichisneuerusedinfunctionIFl-HelpF5-ZoomF6-SwitchF7—TraceF8-StepF9—MakeFl0-IFl-Help图!-9按下空格键之后显示详细的编译错误提示经认定,确实在前一行缺少分号。按下F6键,则切换回编辑状态。在i=l的后面加上分号。再次运行程序,但程序不运行,弹出连接出错对话框,告知发现1个错误(参见图l-10)o对话框提示按任意健查看进ー步的提示信息。EtcIFileEditRunCompileProjectOptionsDebugBreak/watchEdit一 =Line1Col1InsertIndentTabFillUnindent*D:ADD.C^includeMstdio.nmainOLinkingEXEfile:\TEMP\ADD.EXEintsum,i;^includeMstdio.nmainOLinkingEXEfile:\TEMP\ADD.EXEintsum,i;i=l;while<i<=5>sum=sum+i;i=i+l;>printぐシd'n",SUrLinking:LIB\CS.LIBTotalLinescompiled:0Warnings:0Errors:1Availablememory:249KErrorsPressanLinkPASS201MessageCompilingD:\ADD.C:•ErrorD:\ADD.C6:Statementmissing;infunctionmainWarningD:\ADD.C12:'i'isassignedaualuewhichisnewerusedinfunctionIFl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu
图1-10出现连接错误因TC>按下空格键,对话框消失,TC在信息栏中加亮显示错误信息(参见图其中的错误提示的大意是:程序中的print标识符没有定义,TC因TC[FileEditRunCompileProjectOptionsDebugBreak/watch=^=Edit===========Line1Col1InsertIndentTabFillUnindent*D:ADD.CItinclude"stdio.h"nainO<intsum.i;i=l;while<i<=5><sum=sun*i;i=i*l;>printぐ’Ndヽn”.sum);>, Mes—a"e 'LinkingD:\TEMP\ADD.EXE:ILinkerError:Undefinedsymbol'print'inmodulefiDD-C|
広:!-HelpF5-ZoomF6-SMitchF7-TraceF8-StepF9-MakeFl0-Menu
图1-11按下空格键之后显示详细的连接错误提示经认定,应将print改为printf。按下F6键,则切换回编辑状态。将print修改为printfo再次运行。程序终于运行,并瞬间完成。按Alt+F5切换至用户屏幕观看输出结果(参见图1-12)。遗憾的是,结果为2275,并不合理。需要继续调试ー算法调试。请继续阅读“算法调试阶段”部分。Etc2275±1I 2.U图!-12运行的结果不合理2.算法调试阶段所谓的“算法调试”是指由于程序的运行结果令人无法接受,而不得不査找错误原因的调试过程。具体方法为单步跟踪程序的运行,同时监视相关变量值的变化。需要说明的是,只有当程序没有语法错误时(完成了语法调试),才能够单步运行程序(算法调试)。调试步骤如下:>按下F7键,main所在行高亮显示,表示将进入main函数执行语句(参见图1-13)。“高亮显示”的语句是下ー个将要被执行的语句。|Fl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu图1-13>对于此程序,只要搞清楚sum和i的演化过程,就能够找到问题所在。按Alt+B键,展开Break/watch菜单,选中Addwatch菜单项,然后回车,出现Addwatch对话框,在Addwatch对话框中键入sum(参见图1-14)。|Fl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu图1-14键入1个观察变量名回车。按照同样方法在Addwatch对话框中键入i,回车(参见图1-15)。此时,在观察框中,sum和i均被认为是未知的(Undefined),原因是程序还未开始执行。按下F7键,开始执行main函数,i=l;语句高亮显示(参见图1-16)。此时的Watch栏中,sum和i都显示了值,但都是随机数,没有实际意义。按下F7键,执行了i=l;语句,i的值变为1,while所在行高亮显示(参
[FileEditRunCompilewhile<i<=5>•i:1sun:2260图1-18sum的第[FileEditRunCompilewhile<i<=5>•i:1sun:2260图1-18sum的第1次累积就是错的图1-17i的值被置为1IFl-HelpF5-ZoonF6-SwitchF7-TraceF8-StepF9-MakeF10-I1enu1-19正确程序在输出之前的变量情况intsun,i;i=l;sun=0;hincludeMstdio.hnainO国TCLine1Co11Insert11llinclude"stdiomainく)<intsun,i;_i=l: sun=sun*i;i=i+l;>printfぐ’Ndヽn”.sum〉;IFl-HelpF5-ZoomF6-Switi至此,整个程序正确无误。需要补充的是,在单步运行调试程序时,对变量值的监视除了使用Break/watch-AddWatch方法外,还可以使用Debug-Evaluate方法,请读者自己实验。(三)关于TC的帮助系统在编辑栏中,将插入点(光标)定位到感兴趣的TC关键字或函数名,按下Ctrl+Fl键,则TC将显示英文联机帮助信息,不过,TC的帮助系统内容比较单调,使用也不太方便,与其它软件的帮助系统相比(圳,TC3.0,VC等)则逊色得多。(四)使用TC的其它技巧.TC的安装与设置安装TC很简单。假设A计算机中的TC是已经安装好的,现打算在B计算机中也要安装TC,则只需将A中的TC文件夹,整个复制到B计算机的任何硬盘即可。如何运行TC,请参看前面的“如何启动TC”部分。在TC启动后,一般需要简单的设置,TC就能正常工作。常用的设置是在OptionsfDirectories菜单项中进行,是对有关文件夹(在DOS在TC启动后,一般需要简单的设置,TC就能正常工作。常用的设置是在OptionsfDirectories菜单项中进行,是对有关文件夹(在DOS中被称为目录,即,Directory)的设置。图1-20是某台微机TC系统按照OptionsfDirectoriesf回车步骤展开菜単项后的情景。Line1Co11InsertIndent^includeMstdio.h0mainく〉xiTTOTfflBFebuqBreak/watchConpilerLinkerEnuironnent图1-20某TC系统的文件夹(目录)的设置情况ONAME.CIncludedirectories:D:\TC20\INCLUDELibrarydirectories:D:\TC20\LIBIOutputdirectory:E:\TEMPTurboCdirectory:D:\TC20Pickfilename:ICurrentpickfile:printf<M\nH在展开Directories后,又出现了下ー级菜单,其中包括6个菜单项,在此仅介绍前4个菜单项,后2个不常用,就不介绍了。在前4个菜单项中,第1、2、4项,描述了安装TC系统的真实路径,请参看图1-20和1-21。第3项,描述了存放临时文件的文件夹。TC程序运行时,编译完毕后将产生・.。bj文件,连接完成后将产生・.exe文件,即,产生2个临时文件。第3项则描述了存放这些临时文件的、实际存在的文件夹。
总之,这些设置都应与实际情况相符合,否则应该修改这些设置。如果需要修改,则继续回车,便可在弹出的对话框中修改。同D:\tc20-1□1x|文件(E)编辑(日查看(ウ收藏®1*(1)帮助出西]シ后退,■・隹]|0搜索巨文件夹ぜ历史1嗜咗X叶》地址@ISiD:\k20▼jイ转到文件夹X2]INCLUDE 叵]CGA.BGIコLIB OCINSTXFR回ATT.BGI 1)CPA5DEMO回BC.OUT すCPA5DEMO.PAS司BGIDEMO SCPP3BGIOBJ 回CTOPAS.TC司BUILD-CO 回EGAVGA.BGI回CO,ASM «]EMUVAR5.ASI金!CALNDVI.BAK FILEOOOOI)CALNDVI ®GETOPT邕(CBAR 更]G01HCHR寸1 21EEヨ日DISK1_VOL2(D:)亩〔IgasnetmanagerS〇Gasnetmanager_old田口GasysS〇javajiuc由「!oracle囹曰飒3日DISK1_VOL3(E:)由口晩00MSDN98回{_]mywebS〇temp.J图1-21某台微机资源管理器的实际情况.常用的菜单项及其功能所在菜单菜单项功能简述FileLoad加载(打开)已存在的・.C源程序Save保存当前源程序Writeto将当前源程序另存为……Quit退出TCRunRun运行(实际包括编译、连接、运行3个过程)Programreset结束单步调试,返回编辑状态Gotocursor运行到光标处停止,以便于单步运行(调试)Ttraceinto单步运行(可跟踪到自定义函数内部)Stepover单步运行(只在当前函数体内)Userscreen切换到用户屏幕,査看输出的结果ProjectRemovemessages清除信息栏中的提示信息OptionsDirectories设置TC的工作目录(参见"TC的安装与设置”)SaveOptions保存对TC的工作目录的设置DebugEvaluate单步运行时,查看变量的值Break/watchAddwatch单步运行时,添加・个观察变量(参见"算法调试"部分)Deletewatch单步运行时,删除一个观察变量
.常用的功能键功能键作用F2保存当前源程序F3加载(打开)已存在的・.C源程序F4运行到光标处停止,以便于单步运行(调试)F6在编辑状态和信息提示状态之间切换F7单步运行(可跟踪到自定义函数内部)F8单步运行(只在当前函数体内)F10激活主菜单.常用的热键热键功能Ctrl+F9'运行(实际包括编译、连接、运行3个过程)Alt+F5切换到用户屏幕,查看输出的结果Alt+回车将TC在"窗口"和"全屏显示"的两种显示方式之间切换.TC窗ロ的常用属性设置TC的界面窗口不是标准的Windows窗口,及窗口有特殊的属性。在Windows平台上适当地设置TC窗口的某些属性,能够为使用TC提供ー些方便。属性的设置在属性对话框中进行。弹出属性对话框的方法:在Windows的任务栏中,对TC图标单击右键,单击菜单中的属性(参见图1-22),便弹出属性对话框(参见图!-23)»图!-22弹出属性对话框的方法printf<M\nF移动M大小⑸最小化(め最大化(冷图!-22弹出属性对话框的方法printf<M\nF移动M大小⑸最小化(め最大化(冷X关闭(0图1-23TC窗口的属性对话框在图1-23所示的对话框中,共有4个标签页面,可分别设置某方面属性。例如在“选项”页面中,可以指定TC是以窗口显示,还是以全屏幕方式显示;在“字体”页面中,可以指定字体的大小等。值的注意的是,在“窗口”和“全屏显示”的两种方式切换时,用Alt+回车热健最方便O二、VC集成开发环境的使用(一)在VC中运行程序的基本步骤1•准备工作启动Windows98或windows2000系统后,打开资源管理器,在D盘中(当然也可以是其它所允许的磁盘)创建200403031000(假设是你的学号)文件夹,再在200403031000中创建下一级文件夹hello(参见图1-24),以便于存放源程序。臼mDISK1_VOL2(D:)白0200403031000L-〇hello图1-24先创建存放源程序的文件夹2.VC6.0的启动用鼠标单击开始按钮,在逐级展开的菜单中选择"程序fMicrosoftVisualStudio6.0fMicrosoftVisualC++6.0”,就启动了VC。VC启动后,它的初始界面如图1-25所示。有的版本由于经过了一定程度的汉化,ー些菜单是用汉字表示的,但其功能与英语表达的菜单是ー样的。VC启动后的初始界面没有实质性内容,这是因为目前还没有作实际工作。图1-25VC启动后的初始界面3.生成源程序文件单击File菜单,单击其中的New••・菜单项,出现了如图1-26所示的New对话框。在对话框中选择Files标签,再用鼠标单击选择C++SourceFile;单击对话框右侧Location处的封按钮弹出ChooseDirectory对话框,在此对话框中选择D:\200403031000\hello文件夹,单击OK按钮,路径便显示在New对话框的Location栏中;在File栏中输入要创建的源程序文件名hello〇NewFilesProjects|Workspaces|ActiveServerPage现BinaryFilegBitmapFileロC/C++HeaderFileVAddtoproject:1 dFile|B|C++SourceFile汾CursorFile♦]nimlrayeコIconFile.:MacroFile45IResourceScript専ResourceTemplate国SQLScriptFile图TextFile|helloLocation:D:\200403031000\HELLO_...]OKCancel图1-26“新建文件”对话框单击OK按钮,关闭New对话框。在D:\200403031000\hello文件夹中就有了程序源文件hello.cpp;同时VC窗u的标题显示出hello.cpp字样,而编辑区域有光标在闪烁,表示可以编写源程序了。在编辑窗口输入以下代码,输入完毕以后的界面如图1-27所示。#include"stdio.h"main()(printf("Hello,World.\n");printff你好,编程世界。\n");
,1□1x|x|nain()printf("Hello,World.\n");,1□1x|x|nain()printf(“你好,编程世界。\nつ;图1-27输入了代码的VC界面.运行程序>单击Build菜单的CompileHello.cpp菜单项,编译程序。弹出了图!-28的对话框,单击“是”按钮,以产生工程。MicrosoftVisualC++Thisbuildcommandreauiresanactiveprojectworkspace.Wouldyouliketocreateadefaultprojectworkspace?图1-28“产生工程”对话框>单击Build菜单的Excecutehello.exe菜单项,运行程序。如图1・29。
-1□!x|BuildloolsWindowHelp,|g|X|I►BuildXDebugスFindinFilesSetActiveConfiguration...Configurations...-1□!x|BuildloolsWindowHelp,|g|X|I►BuildXDebugスFindinFilesSetActiveConfiguration...Configurations...Profile...hello.obj-0error(s'ExecutestheprogramLn1,Col19_Buildhello.exeE图RebuildAllBatchBuild...CleanStartDebugDebuggerRemoteConnection...图1-29StartDebugDebuggerRemoteConnection...>观看程序运行结果。程序在瞬间运行结束后,自动用DOS窗口显示程序的输出(运行结果),参见图!-300,'D:\200403031000\hello\Debug\hello.exe"Hello,Woi*ld.你好.编程世界。 ラPressanykeytocontinue.<1 : お图1-30在DOS窗口显示运行结果>按任意键将自动关闭DOS窗ロ,结束观看。5.可以按照以上步骤不断修改、运行程序,并观察结果。当然,如果所编写的程序存在语法错误,则程序是不能运行的,自然也不存在运行结果。需要说明的是,在程序编译或者运行后,D:\200403031000\hello文件夹中除了hello.cpp文件外,还新产生了一些其它的临时性文件和文件夹,不必关心;如果打算把编好的程序拷贝到其它磁盘,则仅拷贝hello.cpp文件即可。(二)如何在VC中调试程序关于调试程序的基本含义,请参见前面的“如何在TC中调试程序”的内容。VC和TC在调试技巧方面有很多是类似的。下面举例说明如何进行程序的两种调试。问题:1+2+3+…+5的值是多少?E曰DISK1_VOL2(D:)B0200403031000E曰DISK1_VOL2(D:)B0200403031000」Cadd
00hello2.生成源程序文件打开资源管理器,在D盘的200403031000文件夹中创建下ー级文件夹add,参见图1-312.生成源程序文件图1-31创建add文件夹>如果未启动VC,则按照前述步骤启动VC:如果VC已经启动,并正在使用一个工作空间(workspace),则象图1-32所示那样关闭工作空间。トーhello-MicrosoftVisualC++-[hello.cpp],1□1x|固FileEditViewInsertProjectBuildToolsWindowHelp-Ifflx|修□New… Ctrl+NOpen... Ctrl+OClose昌。▼た▼;す因西|啊!"hGMlglobalmembers*main=OpenWorkspace...SaveWorkspaceロSave Ctrl+SSaveAs...第SaveAllItinclude"stdio.h"main()printf("Hello.World.\n**);printf(“你好,编程世界。、n“);■lRecentFiles ►RecentWorkspaces►Exit11J2rJj-JJレFindinFiles1\FindinFile卜||►|ReadyLn5,Col20|rec|col|o图1-32关闭当前工作空间>按照前述步骤新建D:\200403031000\add\add.cpp源程序文件,并在编辑窗口输入图1-33所示的代码(假设学员由于马虎,在i=l之后忘了加分号,还把printf错写成了print)。
图!-33编译时发现了错误和警告.语法调试阶段执行Build菜单的Compileadd.cpp菜单项,编译没有通过(参见图1-33),原因是源程序存在2处错误,并且被描述在集成环境的output窗U:①D:\200403031000\add\add.cpp(6):errorC2143:syntaxerror:missingbefore'while'②D:\200403031000\add\add.cpp(11):errorC2065:'print':undeclaredidentifier错误①的大意为:句法错误,在,while,之前缺少,;,符号。错误②的大意为:标识符,print'没有被声明,VC不能识别。实际上,这些错误确实存在,因此首先修改第一个错误,在i=l之后加上分号;然后修改第二处错误,将print改为printf,重新编译,则编译通过。一般地,我们总是重视并修改第一个错误,因为其它错误有可能是由第一个错误导致、派生出来的。需要补充说明的是,原先无法通过编译时,除了在。utput窗口输出2条错误信息外,还有1条警告信息:D:\200403031OOO\add\add.cpp(12):warningC4508:'main':junctionshouldreturnavalue;'void'returntypeassumed其大致意思为:函数,main,最好返回一个值。但我们不用理会。实际上,不论有多少警告都不阻碍程序的编译;但另一方面,即使只有1条错误,程序也无法编译,更谈不上运行。编译通过后,再次运行程序(成功运行并瞬间结束),所求的5项之和被输出到DOS窗口(参见图1-34),但结果显然是错误的。这就需要继续调试ー算法调试。按任意犍关闭DOS窗口。图!-34运行结果不正确.算法调试阶段程序是山系列有序的指令构成的。计算机执行程序虽然速度很快(瞬间结束),但也是一条条指令执行的。我们可以人为地控制执行速度,一条条语句地去分解运行,同时观察运行中各变量的值,找出不合理的语句并作修改,此过程为“单步调试”,在VC中用F10键实现。让我们接着进行“算法调试”。按下F10键,VC便进入了单步调试状态,同时界面上的文本编辑器窗口出现中符号。在调试状态下,此符号指示将要执行的语句。现在它正指示着main函数的大括弧,表示准备执行main函数的ー些初始化工作。再次按下F10键,main函数的初始化工作结束,准备执行第一条赋值语句(定义变量的语句属于初始化范畴,已经执行完毕)。参见图1-35。从图1-35中的变量窗口可以看出,变量i和sum的初始值是很小的负数。这些值没有任何实际意义,是随机数。工add-MicrosoftVisualC++[break]-[add.cpp]|(Globals)歯ヮ:0け区电电二!▼こ▼Q因君聃|(Globals)▼I(Allglobalmembers▼]「<main曲FileEditViewInsertProjectDebugToolsWindowHelp手陶曷!®Ig北include,'stdio.h"main()intsum,i;文本编辑器窗口Oi=1;文本编辑器窗口sum=sum*i;i=i+1;11变量窗口printF(',%d\n",sum);Context:mainQ11变量窗口printF(',%d\n",sum);Context:mainQNameValue-858993460sum-858993460I►I►|\Auto4Locals\this7TH',a"hlrWatch2*Watch3ReadyLn5,Col1|rec|colQReadyLn5,Col1|rec|colQノ图1-35>再次按下FIO键,i被置为I:再次按下F10键,将对sum作第一次累积(参见图1・36),此时sum的初始值是仍然是随机数。求和的累积问题本应该从〇开始,但对于sum来说,以这样的初始值为基础计算各项的累加和显然是错误的。解决方法是取〇作为sum的初始值,而不是随机值。>单击Debud菜单的StopDebugging菜单项,结束调试状态。^include"stdio.h"^include"stdio.h"ttinclude"stdio.h"nain()nain()main(){<<intsum,i;intsum9i;intsumvi;i=1;i=1;i=1;<>while(i<=5)while(i<=5)while(i<=5)<<<sun=sun+i;(>sun=sun+i;sum=sum+i;i=i+1;i=i+1;(>i=i+1;>>>printF(',%d\n",sun);printF("%d\n",sum);printf("%d\n",sum)}>>NameValueNameValueNameValuei 1iHi|1sum-858993460sum-858993460sum-858993459图1・36sum的第一次累积就是错的>在程序中添加一条sum的赋值语句。完整、正确的程序参见图1・37。^include<stdio.h> —main() 一intsum9i;i=1;sum=O;while(i<=5)sun=sun*i;i=i+1;printf("*d\nヽsum);LdJ /图I-37完整、正确的程序(三)如何使用帮助系统在编写程序的过程中,开发者经常需要查阅ー些帮助性文档,例如一些程序设计语言的语法规则,或者查阅关于ー些新技术的论述等。这些帮助信息一般都被集成到开发环境中,称为联机帮助,以方便程序开发者的查阅。在VC的集成环境中就很容易启动・种帮助系统:MSDNLibrary(参见图1-38)。它是微软公司的软件产品,专门用于查阅开发程序可能需要的电子技术文档。其中不仅查阅与VC相关的帮助信.息,还可以査阅与VB、VF等更多开发工具相关的技术文档。|pMSDNLibraryVisualStudio6.0文件⑹编辑©查看(り跳转⑥帮助®活动子集也)I侄部集合)®A活动子集也)I侄部集合)®AA爲盘)BB瑜急JMSDNLibraryVisual-•欢迎进入MSDNLiVisualStudioD(VisualBasic文イVisualC++DocunVisualFoxPro文VisualInterDevVisualJ++DocunVisualSourceSai♦工具和技术MicrosoftOffice,平台SDKSDKDocwnentaticDDKDocwnentaticWindowsResourceSpecificationsKnowledgeBase.TechnicalArtic]BackgroundersBooksMSDNLibrary是VisualStudio6.0系列开发产品之一,该系列产品包括:VisualBasicVi_sualC++VisualFoxProVisualInterDevVi_sualJ++VisualSourceSafe.ISDILibraryd,GU!医生咖啡馆GU1医生介绍了MSDNLibrary的VisualStudio6.0版本.Library的新内容单击此处可获得有关此版本中新内容的热点链接清单。 」作者之角在此可阅读MSDN写作小妲的新技术文章和示例.MSDNOnline可找岀MSDNOnline成员中的新内容,阅读选定的特性文章,并可检查GU!医生的Online栏・查找Readme文件Readme文件提供了有关安装的重要信息以及其他此版本中较为川1ー」图!-38MSDN的主界面实际上,MSDN是基于微软开发工具开发各种应用的全方位的电子帮助系统,具有资料全、例子多、叙述详细、使用方便等优点,早已成为大多数Windows程序开发者的第一手资料库(从网上查找资料是另一回事)。其缺点是,由于比较庞大,很多电子文档仍然是用英文表述的,而不是汉语。尽管如此,VC中的MSDN对于我们的学习将有很大的帮助,因为C语言的全部语法知识都可以从中查到,尽管是用英文表述的,但由于所涉及的知识较少,而且这些英文的词汇都是简单的初级词汇,因此完全能够被学员们采用。实际上,我们推荐菜用VC编写C语言程序的一个重要原因就是因为这个优秀的MSDN联机帮助系统。下面举例说明MSDN的简单使用。假设要査阅关于prin情的帮助信息,经过2步操作即可:①在文本编辑器中选中printf(参见图レ39)。②按下F1键。则MSDN|printf|雷因念3Gゆ◎倒を膏隐藏定位上一步下ー步ー后退一前进ー停止刷新一主页一打印图1-40按下F!后MSDN自动显示相关帮助intsun,i;i=1;sum=0;while(i<=5)自动启动,并显示关于printf的帮助信息(参见图140)。此帮助信息阐述了printf函数的参数和返回值,并且还给出ー个例子(拖动滚动条可以浏览到,并且可以用鼠标选中拷贝至VC中运行)。sun=sun+i;("%d\n",suR);_图1-39选中关键词文件(£)编辑©查看(り跳转⑤帮助®,1□!x|!索引国)1,!上Printformattedoutputtothestandardoutputstream.^include"stdio,h*'nain()IkU活动子集色)「全部集合)3printf,wprintfprintf<stdio.h>ANSI,Win95,WinNTintprintf(constchar^format[,argument].,,);intwprintf(constwchar_t^format[,argument],,,);CompatibilityRoutineRequiredHeaderANSI,Win95,WinNTwprintf<stdio.h>or<wchar.h>JpMSDNLibraryVisualStudio6.0]MSDNLibi▲・欢迎R1 Visual]VisualVisual—]Visual]Visualj Visual]Visual,工具前▼1Ltr±j'三、上机实验要求《C语言程序设计》上机实验安排20学时。必须完成老师规定的所有实验内容后,オ有资格参加考试。总体上机实验的要求是:.明确上机实验目的上机实验不单是为了验证程序的正确与否,而更重要的是:①加深对讲授内容的理解,使理论知识和实际操作互相渗透、互相推动,最大限度提髙学习效率。仅片面地强调ー个方面是错误的,这是本课程区别于其它课程的最大特点。②学会上机调试程序,提高动手能力。从某个角度讲,调试程序的能力代表了程序的设计能力。调试程序的经验,主要是通过自己的直接实践来累枳,而且有的经验只能“意会”无法“言传”的。因此,调试程序需要自己动手上机实验,这是任何人、任何其它方法都无法取代的。.预习实验内容,准备好上机程序。按照老师指定的实验,预习实验内容,要理解、掌握实验中预备知识的内容。为了提高上机效率,要先编写好源程序,并经过人工检查无误后,再上机调试。对程序中有锭问的地方,应作出标记,以便在上机时给予注意。在上机前设计好上机调试用例(即所用的测试数据),并作好调试程序的记录,用以分析程序设计的正确与否。.提倡独立思考。上机过程中出现的问题,除了系统中的问题以外,一般应该独立处理,尤其对"出错信息”应该善于自己分析判断,这是学习调试程序的良好机会,是提高调试能カ的训练过程。.多编程序,多上机调试除了完成规定的上机学时外,还要再安排课外上机时间,才能达到本课程的教学要求。在完成指定实验内容的基础上,鼓励同学多做带"*"的题目及上机调试自己设计的程序。.保存好上机实验的程序作好上机程序的存盘工作。每个上机实验的程序应保存在软盘或优盘上。程序名的命名规则是:实验号ー题目号.C例如,实验一的第1题的源程序文件名是:SY1-1.C.实验一的第2题的源程序文件名是:SY1-2.C根据任课教师的要求,再将上机作业保存在软盘上或通过邮件发送给老师,以备检査。.写出实验报告上机结束后,应整理数据,写出实验报告,实验报告应包括如下内容:(1)实验目的⑵每个实验内容的程序框图(按实验中的要求做)、程序清单和运行结果。⑶分析与讨论。对程序的运行情况进行分析与讨论;本次调试程序所取得的经验、体会,如果程序未能通过,应分析其原因;完成指定实验中给定的分析与讨论题。实验ー上机实验基础及顺序结构的使用一.实验目的.了解ー个简单C程序的构成。.熟悉C语言程序的运行环境及运行过程。.掌握C语言中数据类型、常用运算符的意义。.掌握C语言表达式的运算规则和C程序的输入输出方法。二.预备知识.ー个C程序是由函数构成的,而且必须有一个main函数(也称为主函数),也可以包含若干个其它函数,ー个C程序总是从主函数开始执行的。C语言的许多功能是通过调用C的库函数来完成的,例如:printfO,它就是ー个实现输出数据功能的函数。但当我们在库函数中找不到所需功能的函数时,便要动手设计自己所需的函数,即自定义函数。.C程序的书写规则:⑴使用一对大括号来衣示函数体的范围,或程序的结构层次范围。⑵书写格式自由,--般使用英文小写字母书写,区分大小写字母。一行可以写多个语句,ー个语句也可以写在多行上。⑶毎个语句的后面必须有一个分号(つ。⑷为了增加程序的可读性,可以使用空格和空行,但函数名和变量名中间不能有空格,还可以用/*…*/的形式对程序中的任何部分作注释。.在计算机上运行一个C程序的标准步骤:>编辑将编制好的源程序输入到计算机,再将输入或修改后的源程序保存到磁盘中,建立一个源程序文件,通常扩展名为.c,源程序文件是以ASCH代码的形式存储的,不能被计算机直接执行。编译。将编辑好的源程序翻译成二进制的目标代码。在编译时还要对源程序进行语法检查,如发现有错,则在屏幕上显示出错信息,此时应重新进入编辑状态,对源程序进行修改后再亜新编译,直到通过编译为止。编译后得到的二进制代码文件的扩展名为Qbj,称作目标文件,目标文件还不能直接执行。连接,将各模块的二进制目标代码与系统标准模块经连接处理后得到可执行文件,扩展名为.exe。运行。执行ー个经过编译和连接后生成的可执行目标文件。需要说明的是,在实际上机时,不必按照上述步骤逐步操作,因为太烦琐,而是使用系统提供的运行程序的快捷命令。比如,在VC环境下,对当前源程序只要编译过一次,则单单执行一个菜单命令就可以运行(例如“Excecutehelkiexe”菜单,参见“熟悉编程工具”的“在VC中运行程序的基本步骤”部分);在TC环境下则更简单,单单执行“Run”菜单中的“Run”命令就可以运行。当然,其它步骤并非不存在,而是由系统自动处理罢了。.数据类型C语言规定,在程序中使用的每个数据都属于ー种类型。本次实验,要求掌握整型、实型和字符型数据的使用。数据类型的具体分类及每种数据类型所占内存的字节数见教材有关内容。.常量和变量常量就是值不变的量,它有不同的数据类型。变量就是其值可以改变的量。因为不同类型的数据所占的存储空间不同及数据存放形式不同,因此在程序中使用的每ー个变量必须先用声明语句指定变量的类型,编译时根据其类型分配一定的存储空间。例如:inta,b;/・声明a、b为整型变量,ー个整型变量一般占两个字节(16位)*/charchl,ch2;/・声明chi、ch2为字符型变量,ー个字符型变量占ー个字节・/floatx,y; /・声明x、y为实型变量,ー个单精度实型变量一般占四个字节・/注意:(1)由于数据存放形式不同及所占内存字节数不同,所以不同类型的变量表示的数的范围也不同。例如,整型变量占用内存2个字节,可表示的整数范围为-32768-32767i长整型变量占用内存4个字节,可表示的整数范围较大,为-2147483648〜2147483647;单精度变量虽然也用4个字节存放・个实数,但是山于采用了特殊的数据存放形式,所以用float语句声明的实型变量所能够表达的数的范围比长整型耍大的多。因此要根据实际需要声明不同类型的变量去存储不同类型的数据。(2)变量必须赋值后才能参与运算,否则它的初值是个随机数,运算的最后结果无实际意义。.不同数据类型的转换当整型、实型、字符型等多种类型的数据间进行混合运算时,不同数据的类型要先转换成同・类型,然后进行运算,运算后其值的类型保持同类型。数据类型的转换分为两种形式:显式(强制)和隐式(自动)转换。例如,若有inta=9;,则算术表达式3.28旬5的值是多少?如何计算?答:该算术表达式的值为4.28,其计算步骤如下:[3.28+a/5|——.28+9/5|-「3.28+1|-「3.28+1.0|—「4.28|在上述运算过程中,由于“除”的优先级比“加”高(参看教材附录HI,运算符和结合性),所以局部表达式9/5首先计算:但由于参与计算的9和5均为整型,则商也只能是整型的水平;后来当整型的1要和实型的3.28进行加运算时,由于实型表达数据相对整型比较精准,则1将自动由整型的1转换为实型的!.0(然后进行加运算;当运算3.28+1.0时,由于两个运算对象都是实型,则直接相加。1的类型转换就属于“隐式转换”。再如,若有inta=9;,则算术表达式3.28+(float)a/5的值是5.08,计算步骤:3.28+(float)a/5]—|3.28+9.0/5Iー13.28+9.0/5.0|ー13.28+1.8|-*|5.08|在上述运算过程中,整型数据a被临时转换成实型,这种转换就属于“显式转换”;整型数据5为了和9.0进行“除”运算,则隐式转换为实型。补充说明:①是否给予显式转换,要看问题的需要。例如对于9/5的问题,如果想舍弃小数部分,则不必给予显式转换。比如,为了表达91分和98分都属于优秀水平,用9レ10和98/10即可,因为两个表达式的值都是9;相反,如果重视数据的精度,则应给予显式转换。比如,计算多项式1-1/2+1/3-1/4+……的和时,若不显式转换,则和永远是1〇②不论是隐式转换,还是显式转换,都是在临时场所进行的,并不影响变量的原有性质,比如上例中的(noat)a,参与转换的只是a的值,但a并没有变为float型变量,而仍然是占用2个字节的整型变量。.数据的输入和输出数据的输入和输出通过函数来实现的,在此应掌握的函数为:scanル、prints)、getchar()、putchar(),着重掌握前两个函数。三.实验内容.选择填空(1)表达式18/4*sqrt(4.0)/8值的数据类型为ー。(sqrt的功能是求平方根)A)intB)floatC)doubleD)不确定(2)ー个int型数据在内存中占2个字节,则unsingedint型数据的取值范围为:A)〇〜255B)〇〜32767 C)〇〜65535 D)〇〜2147483647(3)设有说明:charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为 〇A)floatB)charC)intD)double(4)设i=3产4,程序段中执行计+;+ザ后,printff%d”,i+j);的输出结果为〇A)9 B)7 C)8 D)6⑸在C语言中,要求运算数必须是整型的运算符是ー〇A)/B)卄C)!= D)%.编程序求下列表达式的值,并与手工计算结果相比较。(1)若有inta=7;floatx=2.5,y=4.7;求x+a%3*(int)(x+y)%2/40(参考程序如下:)main(){inta=7;floatx=2.5,y=4.7;printf(,,%f,,x+a%3*(int)(x+y)%2/4);⑵若有inta=2,b=3;floatx=3.5,y=2.5;求(float)(a+b)/2+(int)x%(int)y。*(3)若有intx=3,y=4,z=5;求(x&&y)==(x|忆)。*(4)若有intx=3,y=4,z=5;求!(x>y)+(y!=z)||(x+y)&&(y・z)。.上机调试程序,找出错误并改正。#include<stdio.h>main()floatx,y,a;scanR"%x,%y”,&x,&y);a=(x+y)/2;printfi("Theaverageisa");.卷行程序。main()inta;floatb;longc;scanf(M%d%f%ldM,&a,&b,&c);printf("\nM);printffa=%d,b=%f;c=%ld\n”,a,b,c);分另;使用下面的一种输入方式(数据相同,而输入的方式不同),来测试上面的程序,分析运行结果为什么不相同,指出哪种数据的输入方式正确。第一种输入方式:12367.52174506/第二种输入方式:67.5,2174506/第三种输入方式:123/67.5/2174506/ (/代表回车).程序调试。已知矩形的面积为a,长为b,求宽c。某人写的程序如下。main()inta,b,c;scanf("%d%d”,&a,&b);c=a/b;printf(,,c=%dM,c);分别用下面的两组数据来测试上面的程序,你的评价如何?你认为该程序应如何编写?输入第一组测试数据:2/输入第二组测试数据:6.42/ (/代表回车).编写程序,求ー个圆的面积和周长,用scanf()函数输入圆的半径,文件名为SYl-5.Co.有两个变量a=2;b=5,编写程序,把它们的值交换过来(参考下图)。t[ ……;\tI5| •:・……r\tI5I-:,……r\tJ5丨al2[b[T]、区bl51‘al21b[T]、区*8.模拟SY0-2.C编写ー个程序实现求下面表达式的值。*9.输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,从小到大顺序输出这三个字符及其对应的ASCII值。注:一个字符的前驱字符是指在ASCII码表中,排列在该字符前面的ー个字符,即比该字符的ASCII码值小1的字符,而后继字符是排列在该字符后面的ー个字符。*10.输入ー个学生三门课的成绩,计算并输出其总成绩sum、平均成绩ave和总成绩除以3的余数mm。四.分析与讨论.总结C程序的结构和书写规则。.写出编写好一个C程序在计算机上运行一般需经过哪几个步骤?生成哪几个文件?指出你所用机器的Outputdirectory是什么?.小结你完成实验ー上机内容后的最深体会是什么?.第2题的输入函数写成scanf("%7.2f,%7.2f',&x,&y);可以吗?为什么?实验ニ选择结构的使用一.实验目的了解条件语句与程序流程的关系。熟练掌握if语句和switch语句。了解不同的测试数据将使程序的流程覆盖不同的语句、分支和路径,学会程序的调试方法。二.预备知识选择也称之为判断,它的求解规则:在不同的条件下所应进行的相应操作。在书写选择结构时,应先确定判断的条件,然后根据不同的情况应执行什么样的操作。C提供的选择结构大致分为二种:.ifelse二路分支选择结构二路分支选择结构是最基本的选择结构,工作流程为:首先对条件表达式进行判断,条件成立(为真),就执行if与else之间的语句,否则(为假),执行else后的语句。if••,else的形式:if(条件表达式)语句1else语句2例题:编写程序,要求整数a、b为整型变量,若a?+b2大于100,则输出a?+b2百位以上的数字,否则输出两数之和。程序如下:main()inta,b;printf("pleaseentera,b\nH);scanff%d%dn,&a,&b);if(a*a+b*b>100)printfi(H%d\n,,,(a*a+b*b)/l00);elseprintff%d\n”,a+b);.多分支选择结构某些事物的变化存在多种情况,需要多种条件进行判断。此时,二路分支选择结构ー不能满足要求,必须使用多分支选择结构来完成。多分支分为switch结构和if…elseif结构两种。if…elseif结构用于多条件并列测试,从中取一的情况;switch结构用于单条件测试,从多种结果中取ー种的情形。if…elseif语句的结构if(条件表达式1)语句1elseif(条件表达式2)语句2else语句n⑵switch多分支结构switch(表达式)(case常量表达式1:语句1case常量表达式2:语句2case常量表达式3:语句3case常量表达式n:语句ndefault!语句n+1例题:髙考录取考生,600分以上录取到A类学校,500分以上录取到B类学校,400分以上录取到C类学校,400分以下不录取(用D表示)。main(){intscore,n;printf("pleaseenterthescore:H);scanf(M%dM,&score);n=score/100;switch(n)(case7:case6:printsM\tA\nM);break;case5:printf(,,\tB\nn);break;case4:printffへtC\n");break;default:printff\tD\n");3.使用选择结构应注意的几点:(1)else子句不能単独使用,它属于if语句的一部分,必须与if配对使用。当有多个else出现在程序中时,它总是与离它最近的且尚未配对的if进行配对。⑵switch结构的执行部分由一个或ー些case子结构与一个可缺省的default子结构组成的复合语句。要特别注意写ー对花括号。⑶switch结构中条件表达式应是整型或字符型表达式,与之相应,case后面应是ー个整数常量或字符常量。⑷switch结构最多有一个入口和一个出口。⑸要注意break的使用。当满足某入口条件而进入switch结构后,switch将从入口处开始顺序执行每个case,只到遇到break为至(参见上个例题)。三.实验内容.编写程序:由键盘输入任意三个数,按降序打印此三个数。.将输入的百分制的分数,要求按下列分数段输出成绩等级:90分以上为A,80—89分为B,70—79分为C,60—69分为D,小于60分为E。(要求:用switch语句实现。可参考本实验中"预备知识2.多分支选择结构"中的"例题"来做)。.从键盘输入三个数,它们分别代表三条线段的长度。编写程序判断:这三条线段能否组成三角形,若能请进ー步判断三角形的类型(等边三角形、直角三角形)。参考下面的第3题框图编写程序。第3题框图.调试程序。如果输入字符在a〜g之间,贝リ输出YES,否则输出N0。运行程序,观察是否有错误,如有,请改正。#include"stdio.h"main()charc;c=getchar();if(4v=c<=g)printffYES");elseprintffN0»);*5.阅读程序,给出结果,上机调试程序,验证其运行结果与阅读结果是否相同?main()intx=1,y=0,a=0,b=0;switch(x)case1:switch(y)case0:a-H-;break;b-H-;break;a-H-;b-H-;break;printfi("a=%d,b=%d\n,,,a,b);7.编写程序:由键盘输入任意三个数,计算以这三个数为边长的三角形的面积。8.编写程序:判断某一年是否是闰年,闰年的条件是符合下面两者之一:一是能被4整除,但不能被!00整除;二是能被4整除,又能被400整除。9.编写程序:猜数游戏。由计算机想一个数请人猜,如果人猜对了,则结束游戏。提示:可以用函数rand()或random。产生一个随机数,例如,random(100),产生〇〜99之间的一个随机数;rand()产生〇〜32767之间的一个随机数。在TurboC中可用Ctrl+Fl提供帮助,在头文件"stdlib.h”中可以查找该函数的用法。相关的函数还有:srand()、randomize()〇10.编写程序:在屏幕上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 回迁房买卖合同版怎么理解
- 标准摩托车转让协议合同范本
- 技术升级与改善服务合同
- 购销合同中的供应链金融服务风险控制
- 仓储代表合同协议案例
- 解除劳务合同协议
- 深入解析采购订单与采购合同
- 精酿啤酒代理权协议
- 保密协议与数据安全示例
- 电力供应安全承诺书
- 松果体区肿瘤护理
- 招聘司机方案
- 《施工现场安全防护标准化防高坠篇》测试附有答案
- 浙江省宁波市2023-2024学年高一上学期1月期末地理试题【含答案解析】
- 流动资金贷款管理办法培训1
- 期末测试(试题)-2023-2024学年冀教版英语五年级上册
- 2022年1月上海春季高考英语真题(学生版+解析版+听力音频)
- 教育实习汇报课件
- 如何制作一个简易的动物细胞模型
- 2024年便携式X光机行业分析报告及未来发展趋势
- 腾讯公司营销策略
评论
0/150
提交评论