C语言实验指导与习题解析再版_第1页
C语言实验指导与习题解析再版_第2页
C语言实验指导与习题解析再版_第3页
C语言实验指导与习题解析再版_第4页
免费预览已结束,剩余165页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言实验指导与习题解析饶琛 陈舜青蔡晓丽率州ス挙角TOC\o"1-5"\h\z\o"CurrentDocument"第1单兀TurboC2.0集成开发环境 1\o"CurrentDocument"ー、进入TurboC的工作窗口 1\o"CurrentDocument"二、TurboC的工作窗口介绍 1\o"CurrentDocument"三、设置TC工作环境 2\o"CurrentDocument"四、改变用户工作目录 2\o"CurrentDocument"五、TC常用菜单项的使用 3\o"CurrentDocument"六、对单文件的编辑、编译、连接、运行 8\o"CurrentDocument"七、对多文件程序进行编译和连接 9\o"CurrentDocument"ハ、TC程序的调试 10\o"CurrentDocument"第2单元C语言上机实验 1\o"CurrentDocument"实验1C程庁的运行方法 1\o"CurrentDocument"实验2基本语句(一) 5头お3本世句(—•) 8\o"CurrentDocument"实验5数组(一) 18实验6数组(二) 23\o"CurrentDocument"实验7函数(一) 27\o"CurrentDocument"实验8函数(二) 35实込セ9指针(一) 42实验!0指科(二) 46\o"CurrentDocument"实验11结构体和共用体(一) 52实验13文件的使宿(一). 63\o"CurrentDocument"实验14文件的使用(二) 67\o"CurrentDocument"第3单元习题与マ题解析 76\o"CurrentDocument"习题1基本语句解析 79\o"CurrentDocument"づ题2数组 85习题2数组解析 89\o"CurrentDocument"习题3函数 93\o"CurrentDocument"习题3函数解析 101\o"CurrentDocument"习题4指针 109\o"CurrentDocument"习题4指针解析 112\o"CurrentDocument"ス题5帀构体和共用体 120\o"CurrentDocument"习题5结构体和共用体解析 126\o"CurrentDocument"习题6文件 133\o"CurrentDocument"第4单元C语言理论考试模拟试卷 145\o"CurrentDocument"附录TurboC编译常见出错信息 156第1单元TurboC2.0集成开发环境ー、进入TurboC的工作窗口TurboC提供了两种编译环境:集成编译开发环境TC和命令行编译TCC。TC是ー个集编辑、编译、连接、调试及运行为一体的集成模块,为用户提供了一个方便的集成开发环境。厂家提供的编译系统都是以压缩文件的形式存放在软盘或光盘上的,安装时只要在硬盘建立TC文件夹,将存放在软盘上的压缩文件TTC.EXE复制到硬盘TC文件夹中,双击该文件解压,或者用TurboC(简称TC)系统提供的install.exe安装程序进行安装,用户可以根据系统提示进行操作,指定存放系统文件的目录和存储模式,也可以按默认方案安装。在TC主目录下已经存放了tc.exe、tcc.exe两个执行文件,其中tc.exe是将编辑、编译、连接、调试和运行集成为•体的基本模块;tcc.exe则提供了某些补充功能,例如可以在程序中嵌入汇编代码等,一般只需用到tc.exe。进入TurboC环境需要调用tc.exe,可以在DOS平台进入TCH录,键入TC执行Tc.exe。或者在Windows平台通过“资源管理器”、“我的电脑”找到TC文件夹中的Tc.exe,双击该文件即可进入TurboC环境。为更方便地进入TC环境,可以在桌面上建立相应的快捷方式。二、TurboC的工作窗口介绍进入TurboC的工作窗口后,可以使用Alt+Enter进行全屏和窗口工作两种方式的切换,TurboC的界面如图1所示。屏幕上最上面一行是主菜单,有8个下拉菜单选项:主菜单下面为编辑框,程序文件的编辑工作就在该框中进行,在编辑框的最上面一行显示编辑状态,如当前光标所在行号(Line)、列号(Col)、当前正在编辑的文件的文件名和路径等;编辑框下面有一部分是信息框(Message),表示程序编译和连接时产生的信息;TurboC工作窗口的最下面一行为常用热键,用户可以使用热键快速完成所需要的操作。图1TC环境界面主菜单的操作有两种方法:1、按F10键激活主菜单,按光标移动键"I"或“t”把光标希望的菜单项处,然后按回车键。2、直接按Alt+菜单项第一个字母(例如按Alt+F就是选择了“File”项,进入文件菜单)。三、设置TC工作环境除Edit菜单项仅为进入编辑状态外,其他菜单项被选择后会打开ー个子菜单。通过如下操作制作可以配置文件:选择“Options”菜单项,屏幕上弹出ー个子菜单窗口,如图2所示。为了保存安装程序建立的环境,在子菜单中选择"SaveOptions”命令,被选中后,弹出ー个对话框,要求输入配置文件名,为了方便,一般取缺省文件名TCCONFIGTC。图2图2配置文件界面如果想重建工作环境,可以改变“Options”子菜单中的命令。例如:可以选择“Directories”命令,并按下图3所示设置存放文件的目录(这里假定TC文件夹位置是安装在C盘,用户文件夹为D:\ZXF)〇设置完毕后按Esc键返回“Options”子菜单.,然后用上面的方法(执行SaveOptions命令)保存设置好的环境。注意:Includedirectories>Librarydirectories,TurboCdirectories这几项中的盘符路径一定要与硬盘中TC文件夹实际位置相符,否则就在此界面上Includedirectories:C:\TC\INCLUDEInstall建立的头文件所在的缺省目录Librarydirectories:C:\TC\LIBOutputdirectories:D:\ZXFTurboCdirectories:C:\TCPickfilename:CurrentPickfile:Install建立的库文件所在的缺省目录自己建立的存放*.exe和・.obj输出文件的目录Librarydirectories:C:\TC\LIBOutputdirectories:D:\ZXFTurboCdirectories:C:\TCPickfilename:CurrentPickfile:Install建立的TC所在的缺省口录弹出ー个窗口,允许用户规定pick文件名显示当前pick文件名和它所在的目录,不能修改图3"Options”子菜单设置界面四、改变用户工作目录安装程序把TurboC系统的可执行文件存放在C:\TC目录中,如果直接在这个H录中エ作,源文件、・.obj及・.exe等文件都将被存储在该目录中,这样,系统文件和用户自己的文件混杂在ー起,导致了管理不便。可以专设存放源文件和存放用户自己的可执行文件的目录,比如,用目录D:\ZXF存放源文件、用户生成的・.obj和・.exe文件亿XF是某用户在D盘上自己建立的文件夹)。

为了能将用户生成的・.。bj和・.exe文件自动存放在D:\ZXF中,在图3中要明确指出输出文件的H录(Outputdirectories:D:\ZXF)〇为了将源文件・.C存放在D:\ZXF目录中,一般是把D:\ZXF目录作为工作目录。具体方法是:在“File”下拉菜单中选择“Changedir”项,出现新目录输入框,提示用户输入所选择的工作目录名(如:将原有系统默认工作目录删除,输入新的用户工作目录D:\ZXF),如图4所示。此后,存盘和加载文件时,只要键入文件即可,无需再输入盘符路径。图4图4改变用户文件夹界面五、TC常用菜单项的使用1、File菜单l)Load(加载):在编辑器中装入一个已有的文件,可以用通配符(*)进行列表选择,也可以直接键入文件名及其路径。例如:想装入的文件是E盘的GB文件夹中的P3.C文件,则输入文件名如图5所示。按回车键后,该文件就被调入内存并显示。如果记不淸所要装入的源文件名,想看一下当前目录中有哪些源文件,则可以在Load命令后出现・.C时直接按回车键,TC就会显示当前目录下所有后缀为.C的文件名,用光标移动键移到要装入的文件名处按回车键,就可以显示该文件内容。要调出D盘ZXF文件夹中的源程序,只要键入:E:\ZXR*.C即可。—— Edit.LoadF3||Col1InsertIndentTabFill LoadFileNameE:\GB\P3.C_图5加载已有文件的界面2)Pick(选择):将最近装入编辑器的八个文件组成一个表,让用户选择后装入编辑器,可以方便快速地打开最近操作过的文件。3)New(新文件):说明当前要编辑的文件是最新文件,装入编辑器后的文件缺省名为NONAME.Co4)Save(存盘):将编辑器中的文件存盘。如果该文件已存盘,则按原有文件名存盘;如果该文件未存过盘,则出现输入文件名对话框,非当前盘非当前目录必须输入盘符路径。5)Writeto(另存为):将编辑器中的文件以另ー个文件名存盘,如果该文件已存在,则覆盖该文件。6)Directory(目录):按冋车键显示・.*,再按回车键显示当前目录及其所需文件列表,可以选择要打开的文件。如果显示・.・时改为・.C,则只显示当前目录及其C源程序文件列表。7)ChangDir(改变驱动器):显示当前目录,改变当前驱动器及其口录。8)0sShell(暂时退出):暂时退出TurboC,转到DOS提示符下,可以用EXIT命令返冋。9)Quit(退出):退出TurboC。2、Edit菜单执行Edit命令可以对源程序文件进行编辑。在编辑窗口最上面一行出现Insert提示时,表示当前处于插入编辑状态;Insert消失时,表示当前处于重写(覆盖)状态。按Insert键可以改变“插入Z重写”状态。Ctrl+Fl键的作用是显示在线帮助。用法是:把光标移到任一关键字或函数名处按Ctrl+Fl键,会在屏幕上显示出关键字或函数的使用信息。3、Run菜单使用该菜单命令可以运行和调试程序。下面介绍各菜単命令:l)Run(运行):编译、连接生成目标文件和可执行文件并运行程序。如果选择Debug/Sourcedebug为on,程序执行时每ー个断点处都会暂停下来,再次按Ctrl+F9键,继续执行到下ー个断点处或程序结束。2)Programreset(程序重启):该命令终止当前调试,释放分配给程序的空间,关闭已打开的文件。但不改变断点设置。3)GotoCursor(执行到光标所在行):用于动态调试,使程序执行到编辑窗口中光标所在行。注意光标所在行应该是可执行代码语句。4)Traceinto(跟踪进入被调用函数):执行当前函数中的下一条语句,如果该语句为函数调用语句,则进入该函数,包括系统函数。用于动态调试,单步跟踪程序执行。5)Stepover(単步执行):执行当前函数的下一条语句,但不跟踪进入被调入的子函数,用该命令单步跟踪程序执行,一次执行一条语句。6)Userscreen(用户屏幕):使用该命令可以看到程序执行后的屏幕(把编辑窗口切换到程序输出窗口)。4、Compile菜单使用该菜单命令可以编译和连接程序,生成可执行文件。各子菜单命令功能如下:l)CompiletoOBJ(把源文件编译成H标文件):把C语言源文件(*.C)编译成H标文件(*.obj),在编译过程中,弹出ー窗口显示编译信息,如有编译错误,则显示在信息框中,并用高亮度条在编辑中显示出错语句的位置。2)MakeEXEfile(生成可执行文件):此命令调用相应工程文件生成一个可执行文件,并显示生成的可执行文件的文件名。如果处理的是.C文件,编译并连接生成相应的.。bj和.exe文件。如果源文件的生成时间比.。bj文件早,则不再对源文件进行编译,更新了源文件后オ重新编译。如果处理的是.。bj文件,只进行连接生成相应的.exe文件,同样只有更新了.。bj文件后才重新连接。对文件的处理顺序是:©Projectname中的.PRJ;②PrimaryCfile中的.C文件;③最后装入编辑窗口的.C文件。3)LinkEXEfile(连接生成可执行文件):将当前目标文件和相应库文件连接成一个新的可执行文件,但不执行。该命令不检查日期和时间。4)Buildall(编译连接相关文件):重新编译连接相应工程文件中的所有文件,不管其是否是过期文件,无条件重新编译与连接生成相应的可执行文件。5プ!40^7じ£怕(主©文件):该命令用于编译含有多个嵌入文件的C语言源程序,执行时弹出ー个对话窗口,要求输入将要编译或Make的新文件名。当编译出现错误时,自动装入源文件以便用于修改错误。6)Getinfb(获得编译信息):该命令可以显示编译信息,如当前文件名、源文件长度,可用内存空间等。5ヽProject菜单该命令可以用来把多个源文件和目标文件连接成一个完整的程序,子程序功能如下:1)Projectname:弹出对话窗口,要求输入将要编译、连接的.PRJ文件名。用这种方法生成的.EXE文件的主文件名就是.PRJ文件的主文件名。2)Breakmakeon:规定终止Make的缺省条件,共有四个选项:Warning:编译完一个文件后如发现“警告”以上的错误停止编译;Error:编译完一个文件后如发现“错误”,停止编译;FatalError:编译完全部文件后,如发现错误,停止编译:Link:在连接前Make,即只生成.obj文件。3)AutoDependencies:设置自动依赖关系。On:自动检查.C文件与相应.obj文件的日期时间关系,TC在编译时把日期时间信息存放在.obj文件中,若.C文件比.obj文件新,则重新编译。Off:不进行日期时间检查。4)ClearProject:清除Projectname和重置消息窗口。5)Removemessage:清除消息窗口中的出错信息。6、Options菜单该命令可以进行集成开发环境的各项设置,包括库和包含文件的目录、程序运行参数等。常用设置如下:Compile4编译程序选项):其下子菜单提供如下功能:Model子菜单:设置存储器模式,允许用户选择Tiny、Small>Medium、Compact>Large>Huge等6种模式中的ー种:Defines子菜单:输入宏定义;Codegeneration子菜单:控制生成目标代码的形式,如Instructionsetuj'以选择8088、8086或80286指令;Optimization:控制代码生成策略,弹出子菜单供选择:Source;控制编译器如何处理源代码,弹出ー个子菜单供选择。如指定标识符有效字符个数(Identifierlength可选择1~32);Errors子菜单:代码优化和诊断信息,设置停止编译的错误个数及警告个数,弹出子菜单供选择。Names:改变代码、数据和BSS段的缺省段、组和类名,一般不需改变。Linker(连接子菜単):改变连接子菜单中的命令,可以改变连接器的设置。子菜単如下:MapFfile:控制是否产生映射文件;Initializesegments:控制连接器是否对未初始化的段初始化。Defaultlibraries:当由其他编译器产生的目标文件时,那些编译器可能在目标文件中放入了一个缺省库。该命令控制连接器是否在那些库中寻找所需函数。Graphicslibrary:打开或关闭自动查找图形库的开关,当选择了Off时可在.PRJ文件中写上graphics.lib,也可输出图形;Warnduplicatesymbols:控制是否检查.OBJ文件和.LIB文件中的重复符号;Stackwarning:控制是否Nostack警告信息;Case-sensitivelink:控制是否区分大小写字母不通用。Environment(环境子菜単):设置文件是否自动存盘、制表键的空格数和显示屏幕行数等,为编辑程序设置环境。子菜单功能如下:Messagetracking:当滚动信息窗口中的错误信息是,控制TC是否跟踪编辑程序中的语法错误及跟踪方式;Keepmessages:控制在编译、Make之前是否保存信息窗口中的错误信息;Configautosave:控制是否保存选项设置;Editautosave:控制是否将正在编辑的文件自动存盘:Backupfiles:控制是否产生备份文件:Tabsize:选择制表(Tab)键的空格数。默认值为8,可取值为2〜16(Tabmodeon时有效);Zoomedwindows:与热键为F5的作用ー样,把当前激活的窗口(编辑窗或信息窗)放大到整屏;Screensize:弹出ー个子菜单,允许选择显示屏幕的行数,标准为25,EGA为43,VGA为50.Directories(目录子菜单):选择头文件、库文件、编译器等所在的目录及可执行文件的输出目录。子菜单功能如前面图3所示;Arguments(参数设置命令):允许用户在集成环境下运行程序时使用参数,执行这一命令后,在弹出的窗口中输入运行所需参数,如图6所示,然后Run/Run执行程序。图6集成环境运行程序输入运行所需参数的界面SaveOptions(环境保存命令):如前面图2所示。该命令的作用是将设置的命令保存到磁盘文件中,缺省的文件是配置文件Tcconfig.tc。RetrieveOptions(恢复环境命令):装入以前用Saveoptions命令保存的配置文件,为TC设置环境。7、Debug菜单该菜单命令可以设置除断点和表达式之外的集成调试环境和各项功能。常用设置如ド:Evaluate(计算):用于计算和显示变量或表达式的值,还允许用户修改此值。运行该命令后,弹出ー个窗口,该窗口包含计算域(Evaluate)、结果域(Result)和新值域(Newvalue)三部分。用户可以在其中计算任何合法的C语言表达式或变量,但不包括函数调用语句和宏定义的常量。如果调试程序可以计算表达式的值,它就可以在结果域中显示出来:如果表达式引用了一个变量或简单的数据单元,用户可以将光标移动到新值域并把表达式作为新值输入。在调试过程中可以采用给某些变量赋新值的办法寻找错误。CallStrack(调用栈):显示程序正在运行的函数调用、序列。FindFunction:显示编辑窗口中某ー函数的定义。弹出ー个窗口,在其中输入要显示的函数名并按回车,光标就指向函数的定义处。RefreshDisplay(恢复原先屏幕):如果编辑屏幕被重写,该选择项可恢复当前屏幕内容。DisplaySwapping(屏幕切换):控制编辑窗口与程序输入窗口的转换关系,弹出ー个窗口提供三种选择:Smart(缺省方式):执行代码产生输出时切换到程序输入窗口,然后返回到编辑窗口;♦None:不进行屏幕切换;Always:每执行一条语句切换一次屏幕。SourceDebugging(源程序调试):控制编译器是否在可执行文件中加入调试信息,弹出选择窗口提供三种选择:On:在可执行文件中加入调试信息,为源代码级调试做准备;Standalone:在可执行文件中加入调试信息,但只能使用独立调试工具Turbodebugger;None:在可执行文件中不加入调试信息。8、Break/Watch菜单使用该菜单命令可以进行集成调试环境中断点和监视表达式的设置,子菜单功能如下:AddWatch(加入一个监视表达式):监视表达式是其运算值可在监视窗口中显示的表达,每当程序暂停时它的值会被亜新计算。用户可以通过监视表达式的值来判断程序执行的情况。当用户选择本命令时,调试程序打开ー个弹出窗口,提示用户键入ー个监视表达式,按回车键可以增加一个表达式及其当前值到观察窗口。DeleteWatch(删除监视表达式):该命令用来从观察窗口中删除监视表达式,使用该命令时,监视表达式必须是可见的。也可以把光标移到Watch窗口中某ー表达式用De!键或Ctrl+Y键删除。EditWatch(编辑监视表达式):该命令允许用户编辑观察窗口中的当前监视表达式。RemoveAllWatch(删除所有监视表达式):该命令用来从观察窗口中删除所有监视表达式。ToggleBreakpoint(打开或关闭断点):断点是程序执行中暂停的地方,设置断点可以C语言上机实验指导让用户有足够的时间检查关键变量和表达式的值。否则,用户无法确定程序是否按设计的那样执行。该命令用来设置和删除(再次执行时)光标所在处的断点,程序运行过程中遇到断点就暂停。ClearAllBreakpoints(清除所有断点):该命令用来从程序中清除所有断点。ViewNextBreakpoints(显示下ー个断点):该命令将光标移动到程序的下一个断点,它不执行程序,只是在编辑窗口中定位活动的断点。六、对单文件的编辑、编译、连接、运行1、编辑要输入和编辑ー个新的C程序,应先按F10激活主菜单,用光标移动键选定File/New命令,按回车键。出现空白的编辑窗口,用户就可以输入和编辑源程序了。输入完整的程序或部分程序后,应及时将源程序保存起来,按F2功能键或执行File/Save命令。第一次存盘将弹出ー个对话框,要求用户输入文件名,以后再次存盘不再弹出对话框。文件将保存在用户工作目录内,如果TurboC安装在D盘TC文件夹中,且用户未更改过工作目录时,默认的工作目录即为D:\TC,默认文件名为NONAME.C(一般用户应改成自己命名的文件名)。建议较长的程序在录入时多存几次。不指定路径时,文件就存在D:\TC中,如果用户不想保存在D:\TC,也可以自己设定盘符路径,如:D:\ZXF\P126_2.C,或在存盘前先用File/Changedir命令改变用户的工作目录。在用指定的文件名P126_2.C存盘后,编辑窗口中右上角的文件名就自动改为P126_2.Co如果以后还想改名,可以使用File/Writeto命令。编辑ー个已存在的文件,可以使用File/Load命令,调出已存在的文件,重新修改、处理。为了验证TC是否能正常工作,TC自带ー个测试程序Helb.C,用菜单命令File/Load可将该文件从TC文件夹中调出,观察其是否能正常编译连接和运行。2、编译执行Compile/CompiletoOBJ命令,此时系统显示默认的目标文件名。如果当前被编译的源程序文件名为P126_2.C,则系统自动将目标文件名定为P126_2.obj,按冋车键执行该命令即可编译程序。3、连接有了目标文件后还不能直接运行,必须把目标文件与系统提供的库函数和包含文件等连接成一个可执行文件(后缀为.exe),才能运行这个.exe文件。执行Compile/LinkEXEfile命令就可进行连接,在当前工作目录或配置文件TCCONFIGTC指定的输出目录中生成一个可执行文件P126_2.exe〇用Compile/MakeEXEfile命令或者直接按F9键可以一次完成编译和连接,生成目标文件和可执行文件。4、运行如果在编译、连接过程中未出现错误,系统就会生成目标文件和可执行文件,这时就可以运行了,运行程序可以采用以下几种方法:1)在DOS环境下运行如果当前目录就是输出文件.EXE所在目录,直接输入可执行文件名,即可运行程序。假设可执行文件名为P126_2.EXE,输入命令P126_2,按回车就能运行该程序。如果该文件不在当前目录中,则应指出其路径,如输入:D:\ZXF\P126_2命令。2)在TC环境中通过菜单选择运行按Ctrl+F9键,或选择执行RuiVRun命令,即可运行程序。实际上Ctrl+F9的作用不仅是运行,而是包括编译、连接和运行。因此,在编辑窗口完成一个源程序的编辑后,如果经过检查认为没有问题,就可直接按Ctrl+F9键,TurboC将一次完成从编译、连接到运行的全过程。如果在编译或连接中有错,就停下,显示出错信息,用户改正后再按Ctrl+F9键重新编译、连接,若没有错误就自动开始运行。程序运行时,如有键盘输入语句(scanf语句),屏幕显示会切换到用户屛,此时用户可以从键盘输入数据。如果想看运行结果,可选择Run/Userscreen命令,或者直接按Alt+F5键,此时屏幕的显示切换到用户屏,程序运行的结果显示在用户屏上。用户看完结果后,按任一・键就回到编辑窗口。下面是最常用的功能键的有关操作:F2:保存文件F9:进行编译和连接Ctrl+F9:编译、连接、运行Alt+F5:观看运行结果操作顺序一般为:输入程序fF2fF9-Ctrl+F9fAit+F5七、对多文件程序进行编译和连接如果ー个源程序包含多个文件(源程序.C),则应当对各文件分别进行编译,得到多个文件(目标文件.。bj),然后将这些目标文件以及库函数、包含文件等连接成一个可执行文件。TC提供了对多文件程序进行编译和连接的简便方法。要将这些文件组成一个“项目”就要建立一个“项目文件”,在该文件中包含各文件的名字,然后将该项目连接,就可以得到可执行文件.exe。具体步骤如下:闇7建立项冃文件在TC编辑环境中,输入各源文件的名字。如果有一个程序,包含两个文件,分别为P1.C和P2.C(后缀名.C可以省略不写,源文件名可以带有路径),则在TC编辑窗口中输入这两个文件名,如图7闇7建立项冃文件执行File/Writeto命令将文件保存,文件名为P1_P2.PRJ,P1_P2是用户自己指定的名字,后缀必须用.PRJ(Project的缩写),以表示为项目。执行Project/Projectname命令,在对话框中输入需要进行编译和连接的项目文件名(系统显示为・.PRJ,要求用户修改为实际的文件名)。由于刚オ是用P1_P2.PRJ存盘的,因此现在应输入P1_P2.PRJ,按回车键确认。选择Compile/MakeEXEfile命令,系统就会对此项目文件进行编译和连接,并生成两个目标文件P1.OBJ和P2.OBJ,以及可执行文件P1_P2.EXE»在选择“MakeEXEfile”或按F9键进行编译连接时,系统首先查找有无项目文件(.PRJ)。如果在Projectname中指定了当前有效的项目文件,则系统优先编译该项目中的文件,而不是编译编辑窗口中的文件。因此,在处理完一个多文件程序的编译和连接后,应及时将Projectname项清空(选择Project下拉菜单中的ClearProject项),否则就会在编译连接时仍然把项目文件.PR!当做编译的对象,而不是编译编辑窗口中的源文件。ハ、TC程序的调试1>TC集成环境的调试程序我们把发现改正程序中错误的过程称为程序调试。有时仅仅靠观察不正确的程序是很难找到错误的关键所在的。因此大多数程序员都借助调试程序,再对被调试程序进行定位。调试程序能够控制程序的运行,可以在任一点上停止程序的执行,每次执行一句,观察程序输出的数据等。要想使用集成调试程序,首先应该设置启用集成调试程序的开关,即选择Debug/SourceDebugging为打开状态。这时,用RUN选项或Ctrl+F9进行调试程序时,TurboC2.0集成调试程序自动接管对程序的调试工作。在程序较大时,一般是将一个源程序设置几个断点,当运行程序到断点处时,它就在执行断点所在行的第一个语句之前将程序挂起,同时把调试程序的控制权交给程序员。在程序暂停时,你可以用许多方法来研究和处理程序。如:可以显示ー个变量或表达式的值;在ー个特定的窗口设置ー些表达式并观察它们值的变化:修改变量的值:清除所有的断点或者设置断点:一次一行地单步执行程序:编辑文件,重新编译和连接程序等。调试程序的方法互不相同,要靠自己不断积累,使之日益丰富。ー•般使用TC的集成环境编译用户程序时,采用RUN选择项或Ctrl+F9命令,系统也能给出出错的地点供程序员修改调试之用,我们称这种方法为静态调试:而将使用调试程序进行的调试称其为动态跟踪调试。2、动态调试1)一般调试方法为了使用集成调试工具,在编译和连接时耍把Options/Compiler/Codegeneration/OBJdebuginfbrmation选择开关和Debug/SurceDebugging选择开关都置为On。这样,在生成的运行文件中才能包含与调试有关的符号信息。为了调试方便,在编译和连接时应当把Options/Compiler/Optimization/JumpOptimization选择开关置为OfF。因为当这个开关为On时,编译程序在优化代码时会引起执行代码与源代码行的不对应。2)步进执行法为了找出逻辑错误,可以RurVTraceinto(热键F7)或RnWStepover(热键F8)一步一步地逐行执行程序,在怀疑可能出错的地方停下来使用Break/watch/Addwatch(热键Ctrl+F7)命令或10Debug/Evaluate使用(热键Ctrl+F4)命令,在弹出的监视窗口中输入监视表达式(ー个变量或ー个C表达式等)。通过查看、分析表达式的值,逐步找出出错原因。3)设置断点法当调试ー个大的程序时,为了冋忆调试速度,可以使用Break/watch"ogglcbreakpoint(热键Ctrl+F8)命令在怀疑可能出错的代码行设置断点。设置了断点后,当按下Ctrl+F9键快速执行程序时,程序执行到断点处就会暂停下来等待输入命令。这时,可以用上面的方法查看表达式的值,也可以接着步进跟踪程序,再次按Ctrl+F9键,程序继续执行到下ー个断点处或程序结束。如果在调试的过程中想终止调试操作,可以按下Ctrl+F2键。要删除某ー断点,可把光标移到断点行按Ctrl+F8键。九、常用功能键表表1TurboC常用编辑命令及功能键命令功能命令功能Home光标移到行首F1打开帮助文件End光标移到行尾F2把当前编辑的文件存储到磁盘上,见File/SaveCtrl+N插入一行F3装载ー个文件,见File/loadCtrl+Y删除光标所在行F4让程平从执行长条执行到光标所在行,见Run/GotoCursorCtrl+KB块头标记F5放大或缩小激活的窗口,见Options/Environment/ZoomedWindowsCtrl+KK块尾标记F6交替激活编辑或信息窗口Ctrl+KC块复制F7单步执行程序,跟踪函数调用,见Run/TraccintoCtrl+KY块删除F8单步执行程序,不跟踪函数调用,见Run/StcpoverCtrl+KH显示/隐藏块标记F9编译并连接,见Compile/MakeCtrl+KV块移动F10返回主菜单Ctrl+KR从磁盘读入块Alt+F5显示用户屏,见Run/UscrscreenCtrl+KW把块写入磁盘Alt+F7光标指向前ー个出错处Ctrl+U撤消正在进行的操作Alt+F8光标指向下一个出错处Ctrl+P允许加入控制符Alt+F9不进行日期和时间检查的编译,生成.OBJ文件

续前表命令功能命令功能Ctrl+KD文件存盘退出Alt+C打开编译菜单Ctrl+KQ文件不存盘退出Alt+D打开Debug菜单Ctrl+QF查找Alt+E进入编辑状态Ctrl+QA査找和替换Alt+F打开File菜单Ctrl+Fl显示光标所指的关键词或函数的使用信息Alt+O打开Options菜单Ctrl+F2终止调试Alt+P打开Project菜单Ctrl+F3操作显示函数的调用序列,£Debug/CallStackAlt+R打开Run菜单Ctrl+F4检查和改变表达式的值,见Debug/EvaluateAlt+X退出TC,返回Ctrl+F7在观察窗口屮输入表达式,见Debug/watchTab制表符Ctrl+F8设置或清除断点,见Debug/watchEsc返回上一级菜单Ctrl+F9编译、连接并运行程序,见Run/Run命令Ins插入与改写状态切换注:Ctrl+KB表示按住Ctrl键不放,再按K键和B键。12第2单元C语言上机实验实验1C程序的运行方法ー、关键知识点:通过前面的学习,我们认识到C程序的编辑、编译、连接和运行可以在TC环境中通过菜单、热键、功能键,按照一定的顺序和方法来完成。TurboC2.0中不能使用鼠标时,或者输入中文(需要在DOS下执行命令PDOS95)感觉不方便时,可以在记事本、写字板、Word中编辑程序,然后保存为.txt纯文本文件,再到TC下编译、连接、运行。TC下编辑的源程序(.C文件)也可以插入到Word文档中,编辑后打印输出。在C语言中数据的输入输出大致分为以下几种情况:1、用键盘输入、屏幕输出用scanf函数从键盘输入数据给程序中的变量或数组元素,每次运行到scanf函数时,程序将停止运行,在用户屏幕上等待用户从键盘输入数据后再继续运行,每次运行程序输入的数据可以不同;用printf函数将程序运行结果输出到扉幕上,但输出结果不保存。2、在程序中用文件输入输出语句用fscanf、fprintf、fread,fwrite等函数,通过已存在的文件中的数据输入给程序中的变量或数组元素(代替人工键盘输入),或将程序运行的结果输出到ー个已存在的也可以是新建立的文件中。3,在DOS下用重定向符在DOS下,用重定向符“V”将文件中的数据输入到程序中,或用重定向符“>”,将结果输出到文件中。二、实验目的:了解TC编译环境,掌握一般程序的上机步骤,了解C语言基本结构及输入输出函数的基本形式。学习将源程序及运行结果打印出来的方法。三、实验内容:1、程序的静态调试1)在资源管理器中找到TC文件夹(大多数系统安装在C盘或D盘,这里假定TC文件夹安装在C盘,用户文件夹为D:\ZXF)中的TC.EXE文件,双击该文件进入TC,经常使用TC的用户可以在桌面建立快捷方式。2)调出TC文件夹中自带的测试程序Hello.C.验证其是否能正常编译。3)为了将源文件・.C存放在D:\ZXF文件夹中,可以把D:\ZXF文件夹作为用户工作文件夹。选择File/Changedir命令,出现新路径输入框,提示用户输入所选择的工作文件夹名(将原有的系统默认工作目录删除,输入新的用户工作文件夹D:\ZXF,该文件夹名可以按自己的名字拼音重新命名,盘符也可以选择优盘或其他硬盘)〇4)为了能将用户生成的・.obj和・.exe文件自动存放在D:\ZXF中,选择Options/Directories命令,并设定输出文件的目录(Outputdirectories:D:\ZXF),Outputdirectories设置缺省时・.obj文件和・.exe文件将自动存放在用户工作文件夹中,*.obj文件和・.exe文件与源程序文件*.c分开放在不同的文件夹时则一定要设置。观察Includedirectories:C:\TC\INCLUDE、Librarydirectories:C:\TC\LIB和TurboCdirectories:C:\TC设置是否与TC实际存放位置相符。5)设置完毕后按Esc健返回“Options”子菜单,然后执行SaveOptions命令保存设置好的环境。6)编辑新程序,输入如下程序练习调试(学会在程序适当的地方加注释,便于他人阅读和自己以后阅读):(源程序文件名为al」.C)#include<stdio.h>#include<stdlib.h>intmax(intx,inty){intz;ifi[x>y)z=x;elsez=y;retum(z);}main(){inta,b,c;intmax(intx,inty);scanf(”%d,%d”,&a,&b); /・程序运行到此会等待用户从键盘输入两个整数・/c=max(a,b); /*max()函数使用前必须先定义・/printf("max=%d",c);system("pause");}程序运行到scanf函数时,将切换到用户屏幕等待用户输入a、b的值,若输入3,5/将重新回到编辑窗口,按Alt+F5又回到用户屏幕观察程序运行结果。请记录运行结果,并再次运行程序,输入9,3/记录结果。观察D:\ZXF文件夹中是否存在al」.C文件,D:\ZXF文件夹中是否存在al」.obj文件和al」.exe文件,在Windows中双击al」.exe文件即可运行该程序。7)用文件输出方式,将下列程序(文件名为al_2.c)的运行结果存放到用户文件夹(D:\ZXF)下名为al_2.out的文件中。#include<stdio.h>#include<stdlib.h>main(){FILE・巾; /・定义ー个文件指针・/intt=l,i=2;if((fp=fdpen(Hal_2.out,,,',w,'))=NULL)/*建立al_2.out文件,并使文件指针指向C语言实验指导与习题解析al_2.out文件*/{printf("cannotopenthefile\n");exit(O); /・建立al_2.out文件失败,退出程序・/)while(i<=5){t=t*i;i=i+l;}巾rintセ电"5的阶乘是:%d\n",t); /*将5的阶乘写入al_2.out文件中・/printff5的阶乘是:%d\n",t); /*将5的阶乘输出到屏幕上・/fclose(fp);system(,,pauseM);}上述程序编辑、编译、连接后,在D:\ZXF中生成可执行文件al_2.exe,运行该程序的方法有:①在Windows中双击al_2.exe文件:②在TC中按Ctrl+F9:③在DOS下,键入盘符:隔径、文件名,如果是当前盘可以省去盘符,当前目录可以省去路径。程序运行后就可以在ZXF文件夹中生成一个存放程序运行结果的文件al_2.outo要查看文件al_2.out的内容,可以在DOS下提示符D:\ZXF后键入typeal_2.out命令或者在Windows中用记事本打开该文件。记录al_2.out文件内容:录入程序的方法可以采用:①在TurboC提供的界面上编辑输入。②为了输入中文方便,整个程序都可以在记事本中输入,存盘时文件名和扩展名都在文件名输入框中输入,如:al_2.c,然后再在TC中用Load命令调入该文件。③在Windows中输入,或者从网页等其他文档处复制到Windows中,保存文件时选择保存类型为“纯文本文件”,在文件名框输入al_2.c,然后再在TC中用Load命令调入该文件。4、使用调试程序对程序进行动态调试在首次使用TC调试程序进行调试时,可使用TC附带的ー个供练习调试用的程序ーwordcnt.e。它是ー个显示ー个正文文件(wordent.dat)中只有一个字符的词有多少个,两个字符的词有多少个等等。为了供练习调试,该程序中包含了几个错误。调试前应先检查ー下工作环境是否正确,头文件目录和库文件目录设置是否正确。如:在调试wordcnt.c时,设置wordcnt.c和wordent.dat所在目录为当前目录。使用调试程序进行程序调试,没有固定的步骤,下面提供参考步骤,请照此练习:1)检查调试程序是否正确将wordent.e程序调入编辑窗口,选择Run/Run命令运行该程序,系统将提示你输入文本文件名,输入wordcnt.dat。wordentdat被读入并显示第一,行后就锁了起来,说明本程序有错误。按Ctrl+Break键,再按ESC健解除闭锁。然后用Run/Programreset选择项或Ctrl+F2热键结束此次调试。2)错误的初步定位在有疑问的地方设置断点,用光标移动键移到while(電ets)…开始的行上(要设置断点的地方),选择Break/Watch和Togglebreakpoint在当前光标所在行上设置断点。运行程序到断点处,用Run/Run重新运行此程序,运行到断点处将暂停,等待进ー步操作。逐步执行疑问区的程序,按F8(或选择Run/Stepover)和F7(或选择RurVTraeeinto)均可单步执行程序,只是前者将跳过所调用的函数,而后者将跟踪进入被调用的函数之内。运行到printflj语句处,按Alt+F5(或选择Run/Userscreen)观察程序输出结果,在屏幕上显示wordent.dat文件的第一行。可见while。语句和printfl;)函数均是正确的。继续执行下一句,计算输入行的长度,其值赋给变量i。选择Debug/Evaluate项,出现ー个窗口,在计算域中输入变量i,回车后结果域应显示变量i的值是43,这说明赋值语句是正确的。按F8运行while。语句,高亮条将移动到循环体的第一个语句匕它调用wordlen。函数,该函数计算・wordptr所指向的单词长度。按F8执行该语句,再计算i,此时的i值为〇,错误!第-个单词的长度是2,错误在wordlen。函数中。3)错误的详细定位选择RurVRun运行到断点,单步执行到调用wordlen。函数,选择RurVTraceinto进入wordlen。函数中。连续两次单步执行完成赋值语句。计算wordimit指向的字符串,为输入文件的每行,正确。单步执行while。语句,高亮条以下一行,却返回到了一个返回语句行。它就是我们要查找的错误!观察while。循环中的语句,打出疑点:*wordlimit&*wordlimit!=SPACE。使用Debug/Evaluate计算・worldimit的值为T,“*worldimit!="其值为1,整个表达式的值就为I。计算“*wordlimit&*worldimit!="的值为0,所以此处有错误!将&&运算符误为&运算符了。4)改正错误返回到编辑窗口,将光标移动到错误处,把&改为&&,按F2将修改过的程序存盘,再次运行,系统提示是否要“rebuild",按“Y”,重新编译、连接,进行再次调试。5)继续调试在未调试程序段设置几个断点,观察运行断点前的程序是否正确,也可以利用在监视窗口中设置监视表达式来简化观察操作,可以用BreakAVatch菜单中的Addwatch向监视窗口加入表达式。还可以对监视表达式进行编辑:先激活监视窗口将高亮度条移动到需要编辑的表达式上,然后选择Break/Watch菜单中的Editwatch选择项,即可对该监视表达式进行编辑。每次调试程序暂停时,都要重新计算监视窗口中的监视表达式,在程序运行时观察表达式值的变化。实验2基本语句(一)(顺序结构程序设计)ー、关键知识点:C语言是由函数组成的,一个函数包含声明部分和执行部分,声明部分的内容不称为语句,执行部分オ称之为语句。声明部分进行数据描述,定义数据类型和数据初值;执行部分进行数据操作,対已提供的数据进行加工处理。顺序结构程序是按照语句的书写顺序依次执行的。一般,每个程序都至少有一个输出语句。二、实验目的:掌握C语言顺序结构程序设计,掌握输入输出函数的用法,初步理解算法和结构化程序设计的基本概念,了解顺序程序的基本结构。三、实验内容:1、改错题改正下面程序的错误,给源程序命名为g2」.c。main{floatx=5.0;printf("%f\n",x%3);)2、编程题A、基础题1)要将“Hello”译成密码,密码的规律是:用原来的字母后面第2个字母代替原来的字母。例如:用字母"c”取代字母“a",用字母"D”取代字母“B”。因此,“Hello”应译成“Jgnnq”。请编写ー程序,用赋初值的方法使5个变量cl、c2、c3、c4、c5的值分别为‘H','e',T,T,‘〇’,经过运算,使cl、c2、c3、c4、c5的值分别为‘J','g','n','n','q',并输出。源程序命名为:a2_Lc。【请在此处编写程序】2)编写程序,实现从键盘输入学生的4门课成绩,计算并输出其总成绩sum和平均成绩avg。源程序命名为:a2_2.c,【请在此处编写程序】「5(—32)3)输入ー个华氏温度,输出摄氏温度。公式为 9 ,结果取两位小数。源程序命名为:a2_3.c«[请在此处编写程序】B、选做题1)从犍盘上输入三角形的三条边a,b,c的值,假定它们能够构成一个三角形,利用公式 _a+b+cブ須=/(5-4)"ーの"ーケ计算三角形的面积,其中5—2 ,结果取两位小数。源程序命名为:b2」.c。【请在此处编写程序】2)求一元二次方程以2+版+。=°的根,a、b、c由键盘输入,假设输入的a、b、c的值满足がー4ac>°。源程序命名为:b2_2.c.【请在此处编写程序】实验3基本语句(二)(选择结构程序设计)ー、关键知识点:顺序结构程序一般只能对逻辑关系相对简单的问题求解。如果要使程序具备对条件进行逻辑判断和选择的功能,根据不同情况选择不同方式进行处理,就必须在程序中使用控制语句来控制程序的执行流程,使用选择结构也叫分支结构进行编程。c语言表示逻辑变量时,以〇代表"假",以非〇代表"真"。kif条件分支语句一般形式为:iR表达式){语句体!;)else{语句体2;}条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。 TurboC2.0规定:else语句与最近的ー个if语句匹配。可用阶梯式i比lse-if结构。阶梯式结构的一般形式为:if(表达式1)语句1;elseiル表达式2)语句2;else语句n;这种结构是从上到下逐个对条件进行判断,一旦发现条件满足点就执行与它有关的语句,并跳过其它剩余阶梯:若没有一个条件满足,则执行最后ー个else语句n。最后这个else常起着“缺省条件”的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用“ド和“}”把这些语句包括在其中。switch多重:选择结构一般形式为:switch(表达式){case常量1:语句1或空;break;case常量2:语句2或空;break;1Icase常量n:语句n或空;break;default: 语句n+1或空;break;}执行switch开关语句时,将表达式的值逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。switch表达式可以是任何产生整数结果的表达式。二、实验目的:掌握关系运算符和逻辑运算符的运算规则,学会使用关系表达式和逻辑表达式正确描述选择结构的判断条件。学习结构化程序设计思想和开发方法,熟练掌握if语句和switch语句的格式和功能,结合程序掌握ー些简单的算法,进ー步学习调试程序。三、实验内容:1、改错题1)改正下面程序中的错误,给源程序命名为g3_l.Comain();{intx,y;scanf(M%d%d\nn,&x,&y);if(x>=y)thenprintf(,,x>=yM);printf(Mx<y");}2)改正下面程序中的错误,给源程序命名为g3_2.c。main(){floatx,y,z;intc=25;scanf("%£%f',x,y);if(x!=0&&y/x<c){z=y/x;printf(M%f\nM,z);}else{z=x+y;printf(',%f\n,,,z);}2、编程题A、基础题1)从键盘输入3个整数,输出其中最大的整数。源程序命名为:a3_l.Co【请在此处编写程序】2)从键盘输入ー个字符,如果是小写,则转换为大写字母,并显示转换后的结果:如果不是小写字母,则原样输出。源程序命名为:a3一2.c。【请在此处编写程序】3)试编程判断输入的正整数是否既是5又是7的倍数。若是,则输出yes:否则输出no。源程序命名为:a3_3.Co【请在此处编写程序】4)输入三个整数,将它们按照从小到大的顺序输出。源程序命名为:a3-4.c。【请在此处编写程序】B、选做题1)从键盘上输入年、月、日,计算这1天是这1年的第几天。源程序命名为:b3_l.c«【提示】按大月小月计算每月天数,判断是否是闰年,如果是闰年,则天数加1。【请在此处编写程序】2)求一元二次方程の2+bx+c=。的根,a、b、c由键盘输入,考虑パー4改>0、从ー4ac=0、グ-4ac<0三种情况。源程序命名为:b3_2.c»【请在此处编写程序】实验4基本语句(三)(循环结构程序设计)ー、关键知识点:TurboC2.0提供三种基本的循环语句:fbr语句、while语句和do-while语句。1、fbr循环的一般形式为:fbr(く初始化〉;〈条件表过式〉;〈增量〉){语句体;}for循环中的“初始化”、’’条件表达式”和“增量”都是选择项,即可以缺省,但“;”不能缺省。for循环可以有多层嵌套。2、while的一般形式为:while(条件){语句体;}while循环当条件为真时,便执行语句,直到条件为假才结束循环,并继续执行循环程序外的后续语句。与for循环ー—样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。3、do-while循环的一般格式为:do{语句体;}while(条件);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假则终止循环。因此do-while循环至少要执行一次循环语句。4、break、continue和goto语句break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句。当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。break语句对if-else的条件语句不起作用。在多层循环屮,ー个break语句只向外跳ー层。continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句ー起使用,用来加速循环。goto语句是ー种无条件转移语句,使用格式为:goto标号;执行goto语句后,程序将跳转到该标号处并执行其后的语句。通常goto语句与if条件语句连用,当满足某ー条件时,程序跳到标号处运行。goto语句应尽量不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。二、实验目的熟悉掌握用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现ー些常用算法,进ー步学习调试程序。三、实验内容1、改错题1)有一分数序列:2ハ,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。改正下面程序的错误,给源程序命名为g4」.c。main(){intn,t,number=20;floata=2,b=l,s=0;fbr(n=1;n<=number;n-H-){s=a/b;t=a;a=a+b;b=a;)prin氓"sumis%9.6f\n",s);)2)从键盘输入ー个正整数,要求按照逆序输出该数。改正下面程序的错误,给源程序命名为g4_2.Co#include<stdio.h>main(){intn;printf("请输入ー个正整数:");scanf("%d",&n);do{printf("%d",n/10);n=n/10;}while(n/10!=0);printf("\nM);)3)ー个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子是1、2、3,而6=1+2+3,因此6是完数。编程找出1000以内的所有完数。改正下面程序的错误,给源程序命名为g4_3.c。#include<stdio.h>main(){intm,s,i;fbr(m=2;m>1000;m-H-){s=0;

if((m%i)=O)m=m+i;if(s=m){printf("%d是ー个完数,它的因子是",m);fbr(i=l;i<m;i-H-)inm%i=O)printn"%d",i);printf("\n");2、编程题A、基础题1)求l!+2!+……+n!。n由键盘输入,源程序命名为a4」.c(注意结果范围及数据类型)。【请在此处编写程序】2)输出1000以内既能被5整除又能被7整除的数,要求5个数一行。源程序命名为a4_2.Co【请在此处编写程序】3)输入两个正整数a和b,求其最大公约数和最小公倍数。源程序命名为a4_3.c#include<stdio.h>main(){intp,r,a,b,t;printfif”请输入两个正整数:");scanfiC,%d,%dH,&a,&b);/・/・交换a与b的值,保证a大于b*//・保存a与b的乘积到p中,后面a与b的值要发生改变ッ{t=a;a=b;b=t;}p=a*b;while(b!=0) /・该循环采用的算法称为辗转相除法,是由数学家推导出来的・/{r=a%b;a=b;b=r;}printf("最大公约数为:%d\n",a);printff最小公倍数为:%d\n",p/a);/・原来的a与b的乘积除以最大公约数(现在的a)即为最小公倍数・/|【如果不用辗转相除法,请在下面编写用另ー种方法求最大公约数的程序】【提示】用for循环从较小的数b开始倒推,测试b到2之间有没有既能被a又能被b整除的数,如果有,就终止循环,输出这个数(最大公约数)。最小公倍数求法同前。【请在此处编写程序】4)打印出所有的“水仙花数”。所谓“水仙花数”是指ー个3位数,其各位数字的立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。源程序命名为a4_4.c。【请在此处编り程序】B、选做题1)打印出以下图案,源程序命名为b4」.c。*****【请在此***【请在此处编写程序】2)求一元二次方程+シx+c=O的根,a、b、C由键盘输入,若产生的方程无实根(即パ-4ac<0的情况),则反复输入下ー组a、b、c直到构成的新方程有实根,源程序命名为:b4_2.c.【请在此处编写程序】3)用二分法求下面方程在(-10,10)之间的根。2x3-4x2+3x-6=0【提示】(1)取两个不同点xl、x2,如果f(xl)和f(x2)符号相反,则(xl,x2)区间内必有一个根(曲线与x轴的交点)。如果出xl)与f(x2)同符号,则应改变xl、x2,直到Rxl)、f(x2)异号为止。注意xl、x2的值不应相差太大,以保证(xl,x2)区间只有一个根。⑵xl和x2两点之间的中点x=(xl+x2)/2,见图4-1,再从x求出函数值Rx)。⑶若取)与f(xl洞符号,则根必在(x,x2)区间内,此时将x作为新的xl;如果f(x)与fi(x2)同符号,则表示根在(xl,x)区间内,将x作为新的x2。(4)重复步骤(2)和(3),直到|f(x)卜e为止,e为ー个很小的数。此时认为f(x)^0,x即为根。根据上述思路画出N-S流程图,如图4-2所示。源程序命名为b4_3.c。【请在此处编写程序】输入xl、x2,求Rxl)、f(x2)言到口xl)与1x2)异号求x=(xl+x2)/2y=f(x),yl=f(xl)ゝザ具 、11做xl=x x2=xyi=y y2=y直到|f(X)|<£输出根X实验5数组(一)(效组的定义和引用)ー、关键知识点:数组是有序数据的集合,数组中的每•个元素都属于同一个数据类型。ー维数组的定义:类型说明符ー维数组元素的引用形式:二维数组的定义:类型说明符一・维数组元素的引用形式:数组名[常量表达式]数组名[下标]数组名[常量表达式][常量表达式]数组名[下标][下标]可类推至多维数组,是几维数组,在数组名后就有相应的几对方括号。注意:数组名定名规则遵循标识符定名规则;每ー维数组元素的下标值都是从0到N-1(设该维长度为N);初始化时应依次对相应元素置初值;对全部数组元素赋值时可以不指定数组长度,但在对多维数组初始化时只可以省略第一维的长度值,其余各维的长度值均不得省略。二、实验目的:掌握・维数组和二维数组的定义、初始化、赋值、数组元素的引用方法,掌握数组的输入输出方法,掌握与数组有关的数值计算方法,如查找、排序、矩阵、线性方程组求解等。三、实验内容:1、改错题1)生成一个数列的前40项。该数列的第1、2项(对应a数组的下标0、1)分别为2、3,以后每个数组下标奇数编号的项是前两项之和,偶数编号的项是前两项之差(前项减后项),要求每行输出10个数。改正下面程序的错误,给源程序命名为g5_l.c。main(){inta[40]={2,3},i;fbr(i=3;i<40;i-H-)if(i%2!=0)a[i]=a[i-2]-a[i-l];elsea[i]=a[i-2]+a[i-l];fbr(i=0;i<=40;i-H-){iRi%10=0)printfTW");printfi("%5d”,a[iD;|}2)下面程序的功能是找出数组x中的最小值和次小值,并分别将其与x[〇]和xロ]进行交换。程序中的mini放当前最小值,min2放当前次小值。改正下面程序的错误,给源程序命名为g5_2.c»main(){intx[]={5,8,7,6,2,7,3,9,0,4);intj,t,ml=0,m2=0,minl=32767,min2=32767;fbr(j=0j<10j++)if(x[j]>minl){min2=min1;m2=m1;minl=x[j]^nl=3;)elseif(x[j]>min2){min2=x[j];m2弓;)t=x[O];x[m1]=x[O];x[m1]=t;t=x[l];x[m2]=x[l];x[m2]=t;fbr(j=00<10J++)printf「%3d”,x);}2、编程题A,基础题1)下面程序用折半查找法査找key值。数组中元素值已递增排序,若找到key,则打印对应的下标,否则打印ー1,请将程序填写完整。源程序命名为a5」.cmain(){intn=9,key=5;inta[]={1,2,3,45,6,7,8,9};intlow,high,mid,k; /*k为标志位,为1表示key值在数组中,为〇则不存在・/scanRRdl&key);k=O;low=0;high=n-l;【请在此处编写程序】

2)某公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则为:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。请编程,键盘输入一个四位数,加密后输出。源程序命名为a5_2.c。【请在此处编写程序】3)下面程序的功能是将一个4X4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。源程序命名为a5_3.c»main(){inta[4][4],b[4][4],ij; /*a存放原始数组数据,b存放旋转后数组数据・/printfif"input16numbers:n);【请在此处编写程序】 /・输入ー组数据存放到数组a中,然后旋转存放到b数组中・/printfl^arrayb:\iT);【请在此处编写程序】 /・输出旋转后b数组中内容・/4)编程打印以下的杨辉三角形。【提示】4)编程打印以下的杨辉三角形。【提示】找出规律,通过上一行可以得到下一行的数据。【直角杨辉ー:角形编程,源程序命名为a5_41.c][等腰杨辉三角形编程,源程序命名为a5_3_2=]【提示】直角杨辉三角形输出每行数据之前先输出空格,每行上显示的空格数量用小循环控制随着行数的递增逐渐减少,即为等腰杨辉二角形。B、选做题1)用筛选法求!00以内的素数。算法为:用ー个ー维数组a,其初值为:2,3,4,5,…,99,100;对每一元素a[i](i=2,…,99),若a[i]不等于0,则从该元素的后ー个元素开始,凡是a[i]倍数的数组元素均不是素数(置为〇);数组a中不为〇的元素,均为素数,要求每一行输出5个素数。源程序命名为b5」.c。//include<stdio.h>//include<math.h>main(){intij,line,a[101];fdr(i=2;i<101;i++) a[i]=i; /*对数组进行初始化*/【请在此处编写程序】2)通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。要求所有成绩均放入ー个4行5列的数组中,其中最后一列和最后一行分别放每个学生的平均成绩和每门课程的平均成绩。源程序命名为b5_2.Co实验6数组(二)(字符教组的定义和引用)ー、关键知识点:ー维字符型数组的定义:char 数组名[常量表达式]二维字符型数组的定义:char 数组名[常量表达式][常量表达式]C语言中没有字符串变量,字符串只能存放在字符型数组中,ー个数组元素中放ー个字符。一个字符串可以放在ー维字符数组中,而多个字符串的处理就要用到二维字符数组。二、实验目的:掌握字符数组的定义、初始化、赋值、数组元素的引用方法,掌握对字符串进行插入删除等处理的方法。三、实验内容:1、改错题1)下面程序是判断字符串sub是否是字符串st的子串。若是,则打印sub在st中首次出现的下标,否则打印」。改正下面程序的错误,给源程序命名为g6」.c。main(){charst[50],sub[30];inti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论