- 825.00 KB
- 2022-04-22 11:51:45 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'实验指导书内容l一、上机指南Turboc2.0l二、实验安排l三、教材习题解答(第1章—第11章)122
第一部分TurboC集成开发环境简介TurboC是一个集程序编辑、编译、连接、调试为一体的C语言程序开发环境,具有速度快、效率高、功能强、使用方便等优点。C语言程序开发人员可以在该集成开发环境下利用菜单操作进行编辑、编译、连接、调试、运行以及环境设置等工作。1、TurboC的安装TurboC的安装非常方便,只需将TurboC系统中的安装软盘(含有install.exe程序)插入A:驱动器中,然后将A:盘设定为当前盘,键入install"后,安装即开始,在安装过程中,只需按照屏幕提示信息进行操作即可。如果采用系统提供的默认方式安装,则安装完成后,用户的C盘上将会有以下主要的目录和文件:(1)C:TC(其中包括TC.EXE、TCC.EXE、MAKE.EXE、等可执行文件)(2)C:TCINCLUDE(其中包括stdio.h、math.h、string.h等头文件)(3)C:TCLIB(其中包括maths.lib、mathl.lib、graphics.lib等库函数文件)(4)C:TCBGI(其中包括多种显示适配器的驱动程序)2、启动TurboC(1)在DOS平台上启动使用下面的DOS命令可以进入TurboC的集成开发环境:C:>CDTC"(将TC目录设置为当前目录)C:TC>TC"(执行tc.exe文件)(2)在WINDOWS平台上启动进入包含tc.exe的文件夹,用鼠标双击tc.exe文件的图标,即可进入TurboC的集成开发环境。TurboC集成开发环境的屏幕显示如下:图1-13、TurboC的窗口TurboC的屏幕窗口分为如下几部分:(1)主菜单区它在屏幕窗口的上方。包含8个菜单选项:File(文件)、Edit(编辑)、Run(运行)、Compile(编译)、Project(项目)、Options(选项)、Debug(调试)、Break/Switch(断点/监视),主菜单的选择以ALT键加上菜单名的第一个字母来实现,如:ALT+F即选择File122
菜单。各个主菜单均有子菜单供用户选择来实现各种操作。(2)编辑窗口它在主菜单的下方,用于源程序的输入。在其右上角可见当前编辑的文件的名字。(3)信息窗口它在编辑窗口的下方,用于显示编译和连接时的有关信息,用户要注意其中显示的错误提示信息,以帮助调试程序。(4)功能键区它在TurboC的屏幕窗口的底部,它提示功能键的作用。具体如下:F1-Help(帮助):按下F1,屏幕上显示帮助信息。F5-Zoom(放大):将当前窗口放大或缩小。F6-Switch(转换):按下此键可选择编辑窗口或信息窗口为当前窗口,即在二者之间转换。F7-Trace(跟踪):用于跟踪程序的运行情况。F8-Step(单步执行):按一次F8键,执行一条语句。F9-Make(生成目标文件):按下此键将一次完成当前编辑窗口里源文件的编译和连接,生成.obj和.exe文件。F10-Menu(菜单):回到主菜单行并激活某一个菜单项(如File此时File反相显示),用户可以使用“←”、“→”键来激活自己想要的菜单项,回车后显示其子菜单。4、编辑、编译、运行程序(1)编辑源文件编辑源文件是将已经编写的程序输入到计算机中去并将其以某个文件名保存。注意:TurboC的源文件名的扩展名必须为.C。具体操作方法是:①编辑新文件单击F6键,将光标置于编辑窗口后即可输入文件内容。编辑完成后注意应保存该文件,具体方法是:RenameNONAMEC:TCNONAME图1-2按下ALT+F键,屏幕上显示File的子菜单,通过↑或↓键或者S键选择SAVE选项后,屏幕上显示:用户可以指定磁盘路径并将NONAME改为自己所要的文件名后回车,则当前编辑的源文件就按照该路径以及名字保存于计算机中。如:键入C:TCMYFILE。②编辑已经存在的文件LoadFileName*.C图1-3按下ALT+F键,屏幕上显示File的字菜单,通过↑或↓键或者L键选择Load选项后,屏幕上显示:用户在此可输入需要编辑的文件名或直接回车,若回车则屏幕上将显示当前目录下所有扩展名为.C的文件名,用户可用“←”“↑”“→”“↓”键选择需要编辑的文件,回车后屏幕上即显示该文件的内容供编辑。122
用户在保存文件时有两种选择,一是使用ALT+F调出File的子菜单后选择SAVE,这时,当前编辑的文件被保存到当前的文件名下,二是使用ALT+F调出File的子菜单后选择Writeto,这时,屏幕提示输入新文件名,用户可以输入新文件名后回车,此时当前编辑文件将保存到新文件名下。用户在保存文件时应特别注意屏幕上的提示信息,以免出现操作失误。③快捷键的使用在编辑过程中除了可以使用如“Backspace”、“Del”等一般编辑键外还可以使用快捷键,提高编辑效率。用户可以先将编辑窗口激活再按F1键,这时屏幕上显示出各种快捷键的使用方法。例如:使用CTRL+Y快捷键可以删除光标所在的一整行。使用CTRL+QF快捷键可以在当前编辑的源文件中查找某一字符串,方法是先按CTRL+Q,再按F键并输入所要查找的字符串即可。使用CTRL+KB和CTRL+KK可以选定“块”,用于复制、移动、删除等操作。用户应仔细阅读有关快捷键的使用说明并熟悉其使用方法,这样会大大提高自己的编辑效率。(2)编译源文件用户在编辑好源文件后,可以对其进行编译。对当前文件进行编译只需按ALT+C然后选择“CompiletoOBJ…”即可。编译正常完成时,屏幕提示信息中会显示“Success….”信息,如果有错误则显示“Errors….”,用户可以按任意键,屏幕上反相显示的行是可能有错误的行,这时应注意信息窗口里的提示信息以帮助自己快速找出错误并进行修改。在进行修改时可配合使用F5、F6键以及“↑”、“↓”键,以帮助对错误行的快速定位,提高修改速度。图4编译正常完成后,用户将获得一个名字于当前编辑文件一致,扩展名为.OBJ的目标文件。(3)连接程序当编译正常结束后,就需对.OBJ文件进行连接以得到.EXE文件供执行时使用。具体方法是使用ALT+C,然后选择“LinkEXEfile”项,即对经正常编译后的.OBJ文件进行连接,若正常结束则得到一个.EXE可执行文件,若有错误则屏幕提示“Errors…..”,用户可以按任意键,屏幕上信息窗口里显示错误信息。(4)运行程序122
运行程序有多种方式:①在DOS平台上运行由于通过编译、连接后得到一个可执行的.EXE文件,那么在DOS环境的系统提示符下,只需键入该可执行文件的路径和名字回车后即可运行该程序。如:C:TC>myfile"②在TurboC集成开发环境中运行使用CTRL+F9、F10、ALT+R键都可达到运行程序的目的。使用F10和CTRL+R时,进入“Run”菜单后选择“Run CTRL+F9”项回车后即可运行,而使用CTRL+F9则直接运行无需菜单操作。实际上用户可能会发现菜单项中的快捷键提示如:在“RunCTRL+F9”项中看到的CTRL+F9就是其快捷键。用户在使用的过程中应注意菜单项的快捷键并使用快捷键以达到简化操作的目的。需要说明的是:在TurboC集成开发环境中运行程序实际上是将编译、连接、运行这三个操作合为一体进行的。在这个过程中任意一个环节出错,系统将给出错误信息供用户参考并修改错误。③在WINDOWS平台上运行进入包含经编译、连接后得到可执行的.EXE文件的文件夹中用鼠标双击该文件图标即可执行该文件。(5)查看运行结果(用户屏幕)当程序正常运行结束后,用户可使用ALT+F5键显示用户屏幕查看运行结果。5、环境设置(1)改变用户工作目录所谓工作目录是指用户文件所在的目录。一般情况下,用户出于安全和管理上的需要愿意将自己的文件放置于自己的专用目录中,那么,如何改变用户在TurboC集成开发环境中的工作目录呢?改变工作目录后对用户操作有什么影响呢?我们知道在DOS环境下,改变工作目录是通过“CD”命令来实现的,而在TurboC集成开发环境中是使用菜单操作来实现。假定有C:TCUSER目录存在(如果不存在,用户可以使用DOS命令建立该目录),其中存放的是用户文件,在TurboC卷竟下改变用户工作目录的方法是:键入ALT+F(或F10)后使用“←”“↑”“→”“↓”或“C”键选择“Changedir”项后屏幕提示如下:NewDirctoryC:TC图1-5用户可以在该窗口中输入自己的工作目录名即可,如:NewDirctoryC:TCUSER图1-6这样改变用户工作目录后,用户在“LOAD”时,屏幕上显示的都是当前用户工作目录里的文件,从而方便操作。(2)建立TurboC的工作环境在TurboC中,要对源程序进行编译、连接、调试、运行,仅有源程序有时是不够的,122
在这个过程中还有诸如包含文件和库文件的存放位置、编译模式、连接方法等等一系列环境因素需要预先设置,才能保证程序正常执行。所谓建立工作环境,就是对这些因素进行设定,需要指出TurboC初次安装后,其工作环境的缺省设置可以保证程序的正常运行,除非有特殊要求,一般特别是初学者不要对其进行修改为好。另外,关于环境设置的内容很多,这里只介绍常用的目录设置的内容,有兴趣的读者可参见有关资料。建立工作环境的操作如下:CompileLinkerIncludedirectories:C:TCINCLUDEEnvironmentLibrarydirectories:C:TCLIBDirectoryOutputdirectories:ArgumentTurboCdirectory:C:TCSavePickfilename:RetrieveoptionCurrentpickfile:图1-7Option子菜单图1-8Directory子菜单键入ALT+O(或F10)后,再使用“←”“↑”“→”“↓”或“O”键选择“Options”项,屏幕提示如图7所示。选择“Directory”项后,屏幕提示如图8所示。建立“包含文件”的默认目录在第一行中显示的“Includedirectories”表示当前“包含文件”所在的目录,用户可以根据需要进行修改。修改的方法是:IncludeDirectoriesC:TCINCLUDE图1-9使用“↑”或“↓”键,选中该行后回车,屏幕提示如下:用户可对其中内容进行修改。例如:可以改为C:TCINCLUDE;C:TCINCLUDEUSER,表示“包含文件”存放在两个不同的目录中,注意要用“;”分隔。这样修改后系统有两条默认的“包含文件”路径。建立“库文件”的默认目录在第二行中显示的“Librarydirectories”表示当前“库文件”所在的目录,用户可以根据需要进行修改。修改的方法是:IncludeDirectoriesC:TCLIB图1-10使用“↑”或“↓”键,选中该行后回车,屏幕提示如下:修改的方法同“包含文件”的修改方法相同。建立输出文件的默认目录在第三行中显示的“Outputdirectories”表示当前用于存放输出文件(*.obj文件和*.exe文件)的目录,用户可以根据需要进行修改。修改的方法是:OutputDirectoriesC:TC图1-11使用“↑”或“↓”键,选中该行后回车,屏幕提示如下:用户可对其中内容进行修改。122
例如:可以改为C:TCINCLUDEUSER,表示在编译、连接过程中产生的所有*.obj文件和*.exe文件都存放在C:TCINCLUDEUSER目录中。注意:此处不能给出两个或多个路径,否则出错。TurboC的默认目录在第四行中显示的“TurboCdirectories”表示当前“包含文件”所在的目录,用户可以根据需要进行修改。需要指出:由于它是TurboC系统文件所在的目录,系统显示的是安装时的默认目录,一般不修改它。(1)保存配置在完成上述设置以后,应将这些信息保存起来。操作方法是:回到“Options”菜单中,选择“Saveoptions”项回车后,屏幕显示:ConfigureFileC:TCTCCONFIG.TC图1-12其中的文件名是TC的配置文件名,所有的配置信息均保存在该文件中。每次启动TC时,系统自动按照配置文件里的设置建立TC的工作环境。要将用户设置信息保存到配置文件TCCONFIG.TC中,只需在出现图12所示信息时,回车并确认即可。6、TurboC集成开发环境命令简介命令名含义Load装入一个已经存在磁盘上的文件Pick将最近编辑过的8个磁盘文件名列表显示,供用户选择New编辑新文件Save将当前编辑的文件以其现有的文件名存盘Writeto将当前编辑的文件以用户指定的文件名存盘Directory显示目录及目录中的文件供用户选择Changedir改变目录OSshell暂时退出TC,回到DOS界面,键入EXIT可返回TCQuit退出TC集成开发环境,返回操作系统界面表1-1(1)File菜单中子菜单名及含义如下:命令名含义命令名CTRL+KB设置块首PgDn向后翻页,光标移到下一屏CTRL+KK设置块尾Home光标移到所在行首CTRL+KV块移动End光标移到所在行尾CTRL+KC块复制CTRL+KY块删除CTRL+T删除光标所在位置的一个词CTRL+KR读文件(块插入)CTRL+Y删除光标所在行CTRL+KW将块写入文件PgUp向前翻页,光标移到上一屏CTRL+P块打印表1-2(2)Eidt菜单中,用户可以按F1键显示全部快捷键命令及含义,这里给出部分部分快捷键命令:命令名含义Run运行当前编辑窗口里的程序Programreset终止当前的调试,释放程序所占存储空间Gotocursor使程序运行到光标处停止Traceinto单步执行程序,可跟踪到函数内部的每一条语句Stepover单步执行程序,但不跟踪到函数内部Userscreen切换到用户屏幕以查看输出结果表1-3(3)Run菜单中子菜单名及含义如下:122
命令名含义CompiletoOBJ将当前窗口中的源程序编译成OBJ文件MakeEXEfile将当前窗口中的修改过的源程序编译并连接成EXE文件Buildall重新编译Project中的文件,并生成EXE文件PrimaryCfile设置主文件名,设置后,编译、运行均对该文件进行,当编译出现错误时,自动将该程序装入编辑窗口供修改(Option/Environment/MessageTracing为Allfile时)Getinto显示当前路径、文件名、文件大小、错误个数等信息表1-4(4)Compile菜单中子菜单名及含义如下:命令名含义Projectname建立一个项目文件Breakmakeon选择在何种类型错误停止MAKE编译或连接前停止Autodependencies当置为ON时,编译将检查.C何.OBJ文件的日期是否更新,若已更新则重新编译,为OFF时,不进行这种检查Clearproject清除项目文件名Removemessage清除Message窗口中的信息表1-5(5)Project菜单中子菜单名及含义如下:命令名含义Complier设置存储模式、硬件配置、调试技术、代码优化等参数Linker设置有关连接程序的选项Environment设置有关环境的选项Saveoption将有关编译、连接的设置信息保存到配置文件TCCONFIG.TC中Retrieveoption装入一个配置文件并按此配置文件设置TC的编译、连接等环境表1-6(6)Options菜单中子菜单名及含义如下:(7)Debug菜单中子菜单名及含义如下:命令名含义Addwatch插入一个监视表达式,使在屏幕下方的监视窗口显示其值Deletewatch从监视窗口中删除当前监视表达式Editwatch在监视窗口中编辑监视表达式Removeallwatch从监视窗口中清除所有监视表达式Togglebreakpoint对光标所在位置设置或清除断点Clearallbreakpoints清除所有断点Viewnextbreakpoint将光标移到下一断点处,移动的顺序按设置顺序进行表1-8命令名含义Evaluate在调试过程中,计算变量、表达式的值并显示其值。用于检查断点处某些变量的值Callstack在调试过程中,用于检查堆栈使用情况Findfunction显示当前程序中某一函数的定义。Refreshdislay当前编辑屏幕被重写时,可用此选项重新恢复表1-7(8)Break/watch菜单中子菜单名及含义如下:需要指出:在上述子菜单中,有很多还有子菜单,对于其中的选项这里没有进行解释,感兴趣的读者可以参看有关TurboC集成开发环境的资料。122
7、TurboC的命令行编译方式TurboC的集成开发环境为用户提供了一个非常有效的C语言程序的开发环境,但是在某些情况下我们不能使用它进行工作,例如:当采用C语言何其它高级语言或汇编语言混合编程时,不能使用集成开发环境,但可以使用TurboC的命令行方式,对程序进行编译,从而得到可执行程序。这里作一个简要介绍。TurboC的命令行编译就是指在DOS状态下,使用TurboC的编译程序TCC.EXE对源程序进行编译的方式,通过执行TCC.EXE程序将用户的源程序生成OBJ或EXE文件。TurboC的命令行方式的格式为:TCC[选项1选项2…选项n]文件名1文件名2…文件名n其中:(1)选项为编译程序或连接程序的可选项。常用的可选项见表9,使用选项时必须在每个选项前冠以“-”并注意其大小写的含义是不同的,各个选项间用空格分隔,文件名是同时进行编译、连接的源文件名、中间代码文件名或库文件名。若省略扩展名,则按默认扩展名.C处理。(2)在没有指出只编译而不连接时,TCC将自动进行连接工作。例如:tcc–ms–eMyfile–Lc:tclib–Ic:tcincludeFile1File2.objgraphics.lib命令含义是:编File1.c并与File2.obj以及graphics.h连接生成小模式存储的可执行文件Myfile.exe。其中:–ms表示使用小模式存储模式。-eMyfile表示连接后可执行文件名为Myfile.exe,注意-e 和Myfile间不空格。-Lc:tclib表示库文件的路径,注意-L 和Myfile间不空格。-Ic:tcinclude表示包含文件的路径,注意-I 和Myfile间不空格。选项含义选项含义-C只编译成.OBJ文件-Lxxx指定库文件的路径(xxx为路径)-f使用浮点仿真-Ixxx指定包含文件的路径(xxx为路径)-B编译带有行内汇编的程序-nxxx指定输出目录(xxx为路径)-S输出一个调用汇编模块的格式-exxx指定执行文件名(xxx为文件名)-ms使用小型存储模式-w显示所有警告错误-d合并重复串-wxxx显示警告信息xxx-mt使用微型存储模式-w-xxx不显示警告错误xxx-180186/80286指令集-Dxxx定义宏-G按时间优化-K缺省字符为无符号型-O优化转移指令-Uxxx取消宏定义-M产生连接映射-oxxx指定目标文件名(xxx为文件名)-r寄存器变量-PPascal调用-y产生行号信息-zxxx设置段名-v源级调试-N堆栈溢出检查-gN出现N个警告信息时,停止编译-Z寄存器优化-jN出现N个错误信息时,停止编译-f878087浮点运算-mh使用巨型模式-iN最大标识符长度N-mm使用中型模式-U外部名下划下划线-mc使用紧缩模式-ml使用大型模式-A禁止非ANSI扩展-Exxx选择汇编器名-C允许注释嵌套-a产生字对齐表1-9File1File2.objgraphics.lib表示源文件名为File1.c,需要进行编译处理得到File1.obj后,再将其与File2.obj和graphics.lib进行连接得到可执行文件。122
第2部分实验实验一TurboC集成环境的熟悉与使用一、实验目的(1)了解实验所用计算机系统以及启动TurboC的方法。(2)了解TurboC环境下编辑、编译、连接、运行程序的基本方法。(3)通过对对示例程序的修改,进一步了解C程序的特点。二、实验内容及步骤1.查找计算机系统中是否已经安装TurobC系统。名称所在文件夹大小类型修改时间tc.exec:tc284KB应用程序88-8-292:00在WINDOWS环境下,通过桌面上开始/查找进入查找窗口,在“名称”栏中输入tc.exe,在“搜索栏”中选择本地硬盘驱动器,再单击“开始查找”按钮,如果所用计算机系统中已经安装TurboC系统,则会显示已经安装的TurboC系统的路径,如下图所示:如果计算机系统中没有安装TurboC系统,则搜索栏中没有文件名和路径名显示。2.启动TurboC集成环境(1)从WINDOWS98环境中启动双击查找窗口中,已经找到的tc.exe文件名即可启动TurboC。(2)从DOS环境中启动通过桌面上开始/程序/MSDOS方式,进入DOS窗口,将tc.exe文件所在目录设定为当前工作目录(假定tc.exe所在文件夹为c:tc)。具体方法是:在提示符后键入CDC:TC↙,再键入TC↙即可启动TurboC集成环境。(3)在WINDOWS98中汉字环境下启动在WINDOWS98中,查找pdos95.bat文件,找到后,选定该文件并单击右键选择“编辑”该文件,在该文件尾部增加一条命令:c:windowscommand.com,存盘后,双击该文件名,则屏幕上显示汉字状态下的DOS窗口。将tc.exe文件所在目录设定为当前工作目录(假定tc.exe所在文件夹为c:tc)。在提示符后键入CDC:TC↙,再键入TC↙即可启动TurboC集成环境。通过这种方式进入TurboC集成环境后,可以通过CTRL+空格或CTRL+SHIFT功能键选择中/英文输入方式,以达到在程序中使用汉字的目的。3.熟悉TurboC集成环境(1)认识TurboC集成环境的各个窗口即编辑窗口(Edit)、信息窗口(Message),找出功能键区。(2)使用F5和F6功能键,观察屏幕窗口发生什么变化,单击F10键选择主菜单行并与↑、↓、←、→、回车键等配合使用,可选择子菜单,或者使用ALT+(主菜单项首字母)并配合使用↑、↓、←、→、回车键,观察菜单变化。(3)通过编辑一个文件来熟悉编辑时常用的键,具体方法是:①通过选择File菜单项建立新文件或打开已有的文件。选择File的子菜单中的New可以进入建立新文件的编辑窗口,选择File的子菜单中的Load可以打开已有的文件。②通过上述方式进入Edit122
窗口后,会发现光标在闪烁,这时就可以进行输入,试着输入下列程序:main(){printf(“Hello,C”);}在输入过程中,请有意地使用↑、↓、←、→、回车键、Del、Backspace、PageUp、PageDown等编辑键和下列组合编辑键:CTRL+Y的作用是删除光标所在的行。CTRL+QF的作用是在当前编辑文件中查找字符串,按下CTRL键不放的同时按下Q键,这时编辑窗口的左上角会出现^Q,再单击F键,编辑窗口出现Find:提示,这时输入需要查找的字符串后回车后出现Option时,再回车即可,如果找到,则光标停在该字符串上,如果没有,则显示红色提示,按ESC键,返回编辑状态,需要注意的是:字符串查找是从当前光标所在位置开始向文件尾部查找,因此,要想从文件头部开始查找,则须将光标移到文件头部后再进行查找操作。CTRL+KB(定义块首)、CTRL+KK(定义块尾)、CTRL+KC(块复制)、CTRL+KV(块移动)、CTRL+Y(块删除)这些组合编辑键在处理多行程序时来得非常方便。例如:要进行多行复制,则可以进行下列操作:定义块首:将光标移到上面程序中{的前面,按下CTRL键不放的同时按下K键后,单击B键,即完成块首的定义。定义块尾:将光标移到上面程序中}的后面,按下CTRL键不放的同时按下K键后,单击K键,即完成块首的定义,这时所定义的块呈反相显示。再将光标移到一空行上,分别按下CTRL+KC、CTRL+KV、CTRL+Y组合编辑键,观察结果。③保存文件操作是通过File菜单中的Save或Write两个子菜单来进行的。前者是将当前编辑的文件内容保存到当前编辑的文件名下,后者是将当前编辑的文件内容保存到新文件名下,操作时应注意提示信息,以免引起不必要的麻烦。(4)编译、连接、运行程序是通过以下功能键或菜单选项来实现的。编译:通过ALT+C或F10选择Compile菜单,然后选择CompiletoOBJ子菜单,回车即对当前文件进行编译,请注意编译后屏幕提示以确定当前程序中是否有错误,若有则使用F5和F6键来查找错误,通过F5将Edit窗口和Message窗口同时显示出来,这时会发现两个窗口中都有反相显示,表明程序中有错误的行和该行所存在的错误性质。使用↑、↓光标移动键,可以将错误行逐行与其错误性质对应显示,以便修改,编译连接还可通过F9功能键来一次完成。连接:通过通过ALT+C或F10选择Compile菜单,然后选择LinkEXEfile子菜单,可以对经编译后并且没有错误的OBJ文件进行连接,得到.exe文件。运行:通过ALT+R或F10选择Run子菜单来达到运行目的,也可通过CTRL+F9来完成运行程序的操作。(5)检查运行结果是通过ALT+F5功能键转换TurboC集成环境和用户屏幕的方式来实现的。若上述程序运行完毕,按下ALT+F5后在用户屏幕上可以看到屏幕上显示Hello,C。实验二数据类型、运算符和表达式一、实验目的1.掌握如何定义不同类型的变量以及变量赋初值的方法。122
2.掌握不同类型数据间赋值规律并通过小程序来进行检验。3.熟悉C语言表达式的书写方式和表达式类型的变化规律。二、实验内容即步骤1.输入下面的程序main(){printf(“Hello,c”);printf(“Ilikeyou”);}运行后检查结果。再将其中的printf(“Hello,C);改为printf(“Hello,Cn”);并加注释行/*commentline*/运行并检查结果。比较两次运行的结果有什么不同并观察第二次运行后结果中是否有注释行的内容。分析原因。2.运行下面的程序main(){charc=’a’;printf(“Hello,c”);printf(“%cn”,c);printf(“%dn”,c);}检查运行结果,分析为什么后面两行输出的变量名一样而输出结果不一样。进一步,将%d改为%x、%o,再运行程序比较结果并分析原因。3.运行下面的程序main(){chari=-1;intp;p=123;p=i;printf(“Hello,c”);printf(“p=%un”,p);}变量p的输出结果为65535,分析为什么不是123或–1。再将p=123;和p=i;改为p=0oxff61;和i=p;,将printf(“p=%un”,p);改为printf(“p=%cn”,i);,运行并分析结果。4.运行下面的程序main(){chari=-1;intp;i*=-3;p=10*(i+2)/255;printf(“p=%dn”,p);printf(“Hello,c”);122
}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。5.运行下面的程序main(){intp;p=1;p++;printf(“p=%dn”,p);printf(“p=%dn”,p,p++);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。6.运行下面的程序main(){intp,q=2;p=1,(q+2);printf(“Hello,c”);printf(“p=%dn”,p);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。再将p=1,(q+2);改为p=(1,(q+2)),再运行后分析结果。7.运行下面的程序main(){chari=‘+’;i<<=1;printf(“i=%cn”,i);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。8.运行下面的程序main(){inti=0xfb12,p=0xf;i=i∧pprintf(“i=%dn”,i);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。9.运行下面的程序main()122
{chari=-3;intp;p=(int)(i+1);printf(“p=%d%un”,i,p);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。10.运行下面的程序main(){intp;p=sizeof(“”3\n’”);printf(“p=%dn”,p);}先分析程序并判断输出结果,再运行程序检查结果是否与判断的结果相同,若不同试分析原因。实验三顺序程序设计一.实验目的:1.掌握赋值语句的使用。2.掌握数据的输入输出方法,能正确使用各种格式转换符。二.实验内容及步骤:1.运行下面的程序,分析输出结果。(1)main(){inti=45;printf(²n(1)i=%d,%u,%ld²,i,i,i);printf(²n(2)i=|%+8d|%2d|%-8d|%08d|²,i,i,i);}将i的值改成-45,重新运行。(2)main(){unsignedk=200;printf(²n(1)k=%d,%u,%ld²,k,k,k);printf(²n(2)k=|%+10u|%-10o|%10x|²,k,k,k);}将k的值改成50000,重新运行。(3)main(){longa=178L;printf(²n(1)a=%ld,(0)%lo,(0x)%lx²,a,a,a);printf(²n(2)a=|%8ld|(0)%-8lo|(0x)%08lx|²,a,a,a);}122
(4)main(){floatx=12.374;printf(²n(1)x=%f,%e,%g²,x,x,x);printf(²n(2)x=|%12f|%12.2f|%.0f|²,x,x,x);}将x的值改成6.72e-7,并将第二条输出语句改为printf(²n(2)x=|%12e|%12.2e|%.1e|²,y,y,y);然后重新运行。(4)main(){charch=¢E¢;intm=65;printf(²n(1)ch1=%c,%d²,ch,ch1);printf(²n(2)m=%d,%c²,m,n);}将m的值依次改成180、400,然后重新运行。(5)main(){printf(²n%s²,²abcdefg²);}将%s依次改成%-10s、%10.2s、%.4s,然后重新运行。2.输入以下程序:main(){intm;floatx;printf(²n请输入数据:²);scanf(²%d%f²,&m,&x);printf(²nm=%d,x=%f”);}(1)运行程序,输入10↙20↙或者输入1020↙或者输入10.0↙20.0↙(2)将输入语句改为scanf(²%3d%4f²,&m,&x);,运行程序输入1345.7↙或者输入234567↙观察输出结果,并分析原因。3.输入以下程序:main(){inti;charc1,c2,c3;scanf(²%c²,&c1);scanf(²%c²,&c2);scanf(²%c²,&c3);printf(²%c²,c1);printf(²%c²,c2);printf(²%c²,c1);}(1)运行程序,输入abc↙(2)运行程序,输入a↙b↙c↙(3)在每个scanf语句后面加上语句:getchar();运行程序,输入a↙b↙c↙122
(4)在源程序的基础上,将scanf语句的%c前面加一空格,即改为:scanf("%c",¼);运行程序,输入a↙b↙c↙或输入abc↙观察程序的执行结果,并分析原因。4.编制一程序,用getchar函数输入字符,然后用putchar函数输出字符,同时要求输出字符的ASCII码。分别考虑用int和char型变量来接收键盘输入的字符,分析两者是否等价?5.输入x的值,据下面的多项表达式求y的值:y=x5+12x4-7.3x3-x2+2x-4实验四选择结构程序设计一、实验目的1.学会使用关系表达式及逻辑表达式。2.学会使用条件表达式。3.熟练地运用if语句的不同格式编写程序。4.掌握switch语句的编程方法。5.学会使用if-goto实现循环。6.掌握求和、求积的算法。二、实验内容及步骤1.下面是一个计算分段函数的程序,对x的各种取值进行运算后,找出程序中的错误并改正。1当x>0时y=0当x=0时-1当x<0时程序如下:main(){floatx;inty;scanf("%f",&x);if(x<0)y=-1;if(x=0)y=0;elsey=1;printf("x=%f,y=%dn",x,y);}2.从键盘上输入三个数,用条件表达式编程找出最大数和最小数。3.分别利用if语句的不同格式和switch语句编程,计算下面的分段函数。4x-8(-1≤x<0)y=3x2+10x-1(0≤x<1)8x3-3x2+2x-1(1≤x<2)4.水果店有苹果,一级5.50元/kg,二级4.20元/kg,三级3.00元/kg,四级122
2.50/kg,输入苹果的等级、数量以及顾客的付款数,显示出苹果的等级、数量、应付款数以及找给顾客的钱数。5.编写一个求二次方程ax2+bx+c=0根的程序。要求考虑以下几种情况:(1)a=0不是二次方程的根。(2)b2-4ac=0有两相等的实根。(3)b2-4ac>0有两个不相等的实根。(4)b2-4ac=0有两个不相等的共轭复根。(5)一次输入5组数据,输出5个方程的根。实验五循环结构程序设计一、实验目的1.熟练地运用while、do-while、for语句实现循环结构的编程方法。2.通过实验进一步了解三种实现循环语句之间的异同点。3.掌握求最大数、最小数、递推、迭代以及枚举等算法。二、实验内容及步骤1.下面是求12+22+……+1002的程序main(){inti,sum;for(i=1;i<101;i++){i*=i;sum+=i;}printf("sum=%dn",sum);}(1)运行程序观察结果,若有错则改正。(2)用while循环结构编此程序。2.任意一个一位数每次加7,消去十位数可得十个不同得数字,编程序显示这10个不同得数字。3.求3.若口袋里有12个球,其中3个红球,3个白球,6个黑球,从中任取8个球,有多少不同得取法。4.“百马百瓦问题”:有100匹马驮100块瓦,大马驮3块,小马驮2块,两个马驹驮1块,求大马、小马、马驹各有多少。5.用循环语句编程序,显示下列图案*****************实验六数组122
一、实验目的1.掌握数组的定义和数组元素的引用。2.掌握数值型数组的赋初值、输入和输出。3.掌握字符型数组的赋初值以及字符串的输入和输出。4.掌握常用字符串函数的应用。5.掌握比较、选择和冒泡等排序方法。二、实验内容及步骤1.下面程序是统计20个整数中非负整数的个数以及计算非负整数之和,请将程序补充完整。#includemain(){inti,s,count,______;s=count=0;for(i=0;i<20;i++)scanf("%d",_____);for(i=0;i<20;i++){if(a[i]<0)_________s+=a[i];count++;}printf("s=%dtcount=%dn",s,count);}2.从键盘上任意输入一个字符串,显示出其长度。(不得使用strlen函数)3.输入m*n个数(m、n均小于20),组成m行n列的数组,求出其中最大的元素,并输出它在数组中的位置.4.若一个从小到大排列的序列中有10个数,现要插入5个数,使插入后的序列仍保持升序排列。5.有10名运动员参加400米跑的编号和成绩如下:编号T404T356T804T424T570T723T729T413T586T519成绩44.644.244.543.744.744.945.145.744.845.3编写程序,按成绩从优到劣的次序输出编号和成绩。实验七函数一、实验目的1.掌握函数的定义方法。2.掌握通过实参和形参在函数间进行“值传送”的编程方法。3.掌握函数嵌套调用和函数的递归调用。4.掌握全局变量和局部变量、动态变量和静态变量的定义和使用方法,以及编程时的差别。5.了解宏定义、带参宏和文件包含处理的方法。二、实验内容及步骤1.下面是判断一个数是否是素数的程序,若是显示“yes",若不是则显示“no”122
,请补充完整并上机验证。main(){intx;scanf("%d",______);if(prime(x))________else__________;}prime(inta){inte,i=2,y=1;e=a/2;while((i<=e)_________)if(a%______==0)y=0;elsei++;_______________;}2.有键盘输入a,b,c的值,写一函数计算:3.计算下面的级数(1)用递推方式写出求xn和n!的函数,采用嵌套调用函数的方法编程。(2)用递归方法写出求xn和n!的函数,编程计算。4.编写一函数,统计字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出统计结果。实验八指针一、实验目的1.正确地定义和使用指针变量。2.掌握数组的指针以及指向数组的指针变量的应用。3.正确使用字符串的指针以及指向字符串的指针变量的应用。4.掌握指针数组的应用。5.掌握函数指针的使用方法。二、实验内容及步骤1.观察下面程序的执行结果main(){inti,j,*p[4],a[12]={1,2,3,4,5,6,7,8,9,10,11,12};p[0]=&a[0];p[1]=&a[3];p[2]=&a[6];p[3]=&a[9];122
for(i=0;i<4;i++){for(j=0;j<3;j++)printf("%4d",p[i][j]);printf("n");}}1.下面是删除字符串中相同字符(相同字符仅保留一个)的程序,将程序补充完整。#include#includemain(){charstr[80],*p=str;inti,j,k,n;_____________;n=strlen(str);for(i=0;istruncA{intm;floatx;charch[8];};unionB{intm;floatx;charch[8];}date;main(){inti;printf(“nA:%d”,sizeof(structA));printf(“nB:%d”,sizeof(structA));printf(“n请输入4个字符:”);for(i=0;i<4;i++)scanf(“%c”,&date.ch[i]);printf(“nm:%d”,date.m);printf(“nx:%f”,date.x);}实验十文件一.目的要求:1.掌握文件、文件指针的概念;2.学会使用文件打开、关闭、读、写等文件操作函数;二.实验内容122
1.文件的建立、修改,每次运行后查看文件内容。(1)从键盘输入一行字符存入文件file1中。(2)将file1中数据排序后重新放入文件file1中。(3)将一从键盘输入的字符插入到文件file1中。2.建立存放角度为0°~360°(每隔1°)的正弦函数值的文件;然后通过查找文件,求出角度x(整型)的正弦函数值。(1)要求以文本文件存放,两列形式。第一列为角度值,第二列为对应的正弦函数值。(2)要求以二进制文件存放。3.利用fputc函数写一函数myputw(w,fp)将整数w写入fp所指文件中;利用fgetc函数写一函数mygetw(fp)从fp所所指文件中读出一整数。然后编程利用myputw()将一整数写入文件中,再用mygetw()从文件中读出。第三部分教材习题解答122
第1章C语言程序设计基础知识习题一、单选题1.一个二进制数位也称为一个()。A.bitB.byteC.KBD.word2.存储容量1KB等于()。A.23字节B.210字节C.220字节D.230字节3.内存中每个基本单元都有唯一的序号,这个序号称为()。A.地址B.字节C.代码D.字4.与十进制39等值的二进制数是()。A.00100111B.01001001C.10100111D.010110005.下面数据中最大数是()。A.(1010001.101)2B.(121.3)8C.(97.6)10D.(51.5)166.以十六个二进制位表示–123,其补码是()。A.(1111111110010101)2B.(177606)8C.(ff86)16D.(FF85)167.(FFFF)16是一个数的补码表示,该数的值是()。A.-1B.32767C.-32767D.655368.(11111110)补和(00000001)补相加后,其结果所表示的十进制数是()。A.-1B.1C.0D.2559.计算机对编译型高级语言的执行方式是()。A.逐条语句边解释边执行,即解释一条就执行一条。B.将整个程序编译完成后再执行,不生成目标程序。C.将源程序编译成目标程序,生成并保留目标程序,连接后执行。D.将源程序解释完毕后再执行。10.计算机对解释型高级语言的执行方式是()。A.逐条语句边解释边执行,即解释一条就执行一条。B.将整个程序编译完成后再执行,不生成目标程序。C.将源程序编译成目标程序,生成并保留目标程序然后执行。D.将源程序解释完毕后再执行。二、填空题1.用高级语言编写的程序要变成目标程序,必须经过()程序处理。2.负整数在计算机中通常是以()码形式存储的。122
3.在计算机中,应用最普遍的字符编码是()编码。4.在计算机中,常用()个二进制数位表示一个字符。5.现有二进制数(11111111)2,若它是一个十进制数的原码,则该十进制数是()6.现有二进制数(11111111)2,若它是一个十进制数的补码,则该十进制数是()7.现有二进制数(01111010)2,若它是一个字符,则该字符是()8.国标汉字编码规定用连续的()个二进制位来表示一个汉字9.在连续的八位二进制位中,用补码表示法表示数据,其表示范围是()10.TurboC中规定标识符的长度不超过()字符。一、简答题1.简述机器语言、汇编语言和高级语言各自的特点。2.简述一个算法的基本特点。3.简述结构划程序设计三种基本结构的共同特点。4.简述C语言的基本结构。5.简述在C语言中定义用户标识符的规则和应注意的事项。附加题一、单选题1.下面哪种设备是输出设备()A.扫描仪B.键盘C.鼠标D.显示器2.微机中的主存储器一般由()组成。A.CD-ROM和RAMB.硬盘和RAMC.ROM和RAMD.硬盘和CD_ROM3..DOS是()的操作系统。A..单用户、单任务B.单用户、多任务C..多用户、单任务D.多用户、多任务4.Windows是()的操作系统。A..单用户、单任务B.单用户、多任务C..多用户、单任务D.多用户、多任务5,热启动就是同时按下()键。A.Ctrl+Alt+DelB.Shift+Alt+DelC.Ctrl+Alt+InsD.Shift+Alt+Ins6.通常3.5英寸的软盘其容量为()122
A.360KBB.720KBC.1.2MBD.1.44MB7.计算机对下列几种存储器中,访问速度最快的是()A.内存储器B.CD-ROMC.软盘D.硬盘8.断电后会使存储器失去信息的是()A.RAMB.CD-ROMC.ROMD.硬盘9.一个完整的计算机系统应包括()A.主机和外设B.主机和操作系统C.硬件系统和系统软件D.硬件系统和软件系统10.DOS的内部命令是()A.在CPU中固有的命令B.在ROM中固有的命令C.包含在conmmand.com中的命令D.在磁盘上的特定文件二、填空题1.DOS操作系统的内部命令都包含在()文件中。2.DOS对磁盘文件的管理是采用()结构的目录。3.要使二级及二级以下目录回到其上一级目录,通常使用的DOS命令是()4.写出将当前路径下名为MY.TXT的文件更名为MY.C的操作命令C:>()5.若当前盘为C,写出按页显示A盘根目录TC子目录下扩展名为C的操作命令C:>()6.若当前盘为C,在C盘根目录DOS子目录下带有常用的外部命令,写出对A盘格式化并传送系统的操作命令C:>()7.汉字编码一般是用()个字节表示一个汉字。8.二进制加法计算:1110.01+110.101=()9.一个完整的文件标识符应由[盘符]、()、[文件名]、[扩展名]组成。10.若内存的地址从十六进制0000到十六进制FFFF,则该机内存的容量为()KB.三、简答题1.冯。若依曼提出的计算机体系结构的设计思想是什么?2.简述计算机系统的组成。3.计算机存储器分为哪两大类?指出它们之间的异同点。4.简述一般操作系统的作用和功能?5.简述MS-DOS的内部命令和外部命令。习题答案一、1.A2.B3.A4.A5.C6.D7.A8.A9.C10.A二、1.编译2.补码3.ASCII4.85.2556.–17.z8.169.–128到12710.32122
三、略附加题答案一、1.D2.C3.A4.B5.A6.D7.A8.A9.D10.二、1.COMMAND.COM2.树型或层次型3.CD..4.RENMY.TXTMY.C5.DIRA:TC*.C/P6.DOSFORMATA:/S或DOSFORMATA:/S或C:DOSFORMATA:/S7.28.10100.1119.路径10.64三、略第2章基本数据类型及其运算习题一、单选题1.在有字符型、整型、实型常数的表达式运算中,其最后结果的类型是()A.Char型B.long型C.float型D.double型2.字符串"Iamstudent"在内存中占用的字节数是()A.12个B.13个C.14个D.15个3.TurboC2.0中,若定义unsignedlongb,则变量b在内存中分配的字节数是()A.1个B.2个C.4个D.8个4.下面表达式结果为3的是()A.(-7)%4B.(-7.0)%4.0C.7%(-4)D.7.0%4.05.若有inta,b;下面正确的表达式是()A.7.0%3.0B.(a+b)++C.7++D.a+"a"6.设有inta=4,b=-7;表达式(int)(a+b)/2.0+a/b的值是()A.4B.-7C.-1D.-1.57.设有inta=2,表达式(a<<=2/a)>>1的值是()A.1B.2C.4D.88.设有inta=3,a+=a-=a*a的值是()A.18B.9C.-12D.39.设有inta=3,b=-4,c=5;表达式a++-c+(++b)的值是()122
A.-7B.-5C.-4D.-310.运算符++、*、>>、=、,、sizeof的优先级由高到低排序值是()A.++、*、>>、=、,、sizeofB.*、++、>>、=、,、sizeofC.++、*、sizeof、=、,、>>D.sizeof、++、*、>>、=、,二、填空题1.C语言的标识符必须以()开头。2.字符常量是由()括起来的字符。3.C语言中“转义字符”是以符号()开头。4.字符变量中存放的是字符所对应的()编码值。5.在定义变量的同时给变量赋予初值,称为变量的()6.字符串"ab 45\x66"的长度是()。7.代数表达式的C语言算术表达式是()。8.代数表达式||的C语言算术表达式是()。9.代数表达式的C语言算术表达式是()。10.代数表达式的C语言算术表达式是()。三、简答题1.下列那些是C语言中的合法常量。010181950xhh0xff21‘ff’e5-0.e51.0e0.5“123”‘ff1’2.下列那些是C语言中的合法标识符。9xy_year_123ABCπepiintint_file.c3.简述在C语言中字符与字符串的区别。4.在C语言中为什么变量要“先定义,后使用”。5.简述C语言中各种类型数据间运算的类型转换规则是什么?附加题一、单选题1.下面转义字符中,表示字符串结束的是()A. B.nC.rD.f2.下面几种运算符中,优先级最低的是()A.||B.,C.=D.?:122
3.设有inta=3,b=-4,c=5;表达式a=b=c=6+3/5的值是()A.3B.4C.6D.6.64.设有inta=3,b=-4,c=5;表达式(a+b,b*c,a+=b+4)的值是()A.-1B.-20C.0D.35.设有inta=3;表达式a=a*=a*=a的值是()A.3B.9C.81D.1626.设有inta=3,b=-4,c=5;表达式b%=a+b+c-1/10的值是()A.7.5B.0.5C.4D.-47.设有inta=3;表达式a%=a+=(a*=a)/3的值是()A.0B.3C.9D.128.TurboC2.0中,unsingned型数的取值范围是()A.-215∽(215-1)B.-231∽(231-1)C.0∽(216-1)D.0∽(232-1)9.退出TurboC2.0返回系统,在主菜单File项中可选择()A.LoadB.NewC.SaveD.Quit10.在TurboC2.0中,在主菜单File项中选择OsShell后,要重新回到TurboC2.0,应使用命令()A.ReturnB.ExitC.QuitD.Nwe二、填空题1.表达式10%3的结果是()。2.C语言中大小写字母被认为是()的字符。3.对符号常量进行定义的命令是()。4."x"在存储时占用()个字节。5.实型数据与整型数据进行算术运算,其结果是()型。6.八进制整型常量必须以()开头。7.整型常量后加U,则表示该数为()整型常量。8.将一个unsignedchar型变量赋值给long型变量时,long型变量的高位要充()。9.“―”作为单目运算符时比它作为双目运算符时的优先级别()。10.整型变量a的值为1,语句a<<1;执行后,变量a的值为()。三、简答题1.简述定义变量时要注意的事项。2.简述TurboC中符号扩展的规则。3.简述本章中所学到的各种数据类型及其长度、格式、取值范围。习题答案一、单选题1.D2.B3.C4.C5.D6.D7.B8.-129.B10.B二、填空题1.字母或下划线2.单引号或""3.4.ASCII5.初始化6.57.sqrt((sin(30*3.14/180)+1)*(sin(30*3.14/180)+1)/cos(30*3.14/180));8.fabs(1-pow(x,3.6));122
9.(exp(1.2)+exp(-1.2))/2.0;10.cos(30*3.14/180)/sin(30*3.14/180)+log(7)/log(2);三、简答题1.01、195、0xff21、"ff"、-0.e5、"123"2.year、123、ABC、e、pi、int_3.字符是用单引号括起来的一个字符,其长度为1,而字符串是用双引号括起来的多个字符且在其尾部有一个空字符‘ ’,其长度为字符个数加1。4.因为在C语言中,定义变量即通知系统按变量的类型分配一个单元,并建立意义对应的关系,以后程序中引用该变量名即引用该变量对应单元的内容。如果一个变量没有定义而被引用,由于系统没有为该变量分配内存单元,故对其引用是无意义的。所以要“先定义,后使用”。5.相同类型数据间的运算,其结果的类型不变。不同类型数据间的运算,其结果类型变化如图2-11所示。附加题解答一、单选题1.A2.B3.C4.D5.C6.A7.A8.C9.D10.B二、填空题1.12.不同3.#define4.25.double6.07.无符号8.09.高10.2三、简答题略第3章顺序结构程序设计习题一、单选题1.下面选项中不是语句。A.;B.x=a+b/c;C.a=5,b=4,c=a+b;D.printf(²nthisisasentence!²)2.可用格式说明%d输出一个数据。A.int型B.long型C.值为50000的unsigned型D.float型3.对于int型非负数据不可采用格式说明符输出。A.%xB.%dC.%ldD.%u4.若有char型变量ch=¢a¢,则下面的输出语句在编译或运行中会产生错误。A.printf(²n%d²,ch);B.putchar(ch);C.printf(²n%c²,ch);D.printf(²n%e²,ch);二、填空题1.在C语言中没有专门的输入输出语句,程序中的数据的输入输出都是通过来完成的。2.C语言中最简单的语句为。122
3.C语言程序中,只有函数和函数可以不加任何说明直接使用。4.若有赋值语句x=x+3;,则其含义为。三、阅读题1.若下面程序运行时输入为:001245.78392,试写出运行结果。main(){inta;floatx;charch;scanf(²%4d%5f%2c²,&a,x,ch);printf(²na=%dnx=%fnch=%c²,a,x,ch);}2.执行下面的程序时,为使变量m=12,n=9,x=9.34,y=17.2,c1=¢b¢,c2=¢G¢,请写出正确的输入方式。main(){intm,n;floatx,y;charc1,c2;scanf(²m=%d,n=%d²,&m,&n);scanf(²%f%f²,&x,&y);scanf(²%c,%c²,&c1,&c2);printf(²nm=%d,n=%dnx=%f,y=%enc1=%c,c2=%c²,m,n,x,y,c1,c2);}3.试写出下面程序的运行结果。main(){intm=10;unsignedu=42315;longk=600000;floatx=34.5;doubley=76.1;chara=¢0¢,b=¢a¢,c=¢A¢;printf(²nintm=%d,%-10d,%6o²,m,m,m);printf(²nunsignedu=%u,%10d,%x²,u,u,u);printf(²nlongk=%3ld,%15d²,k,k);printf(²nfloatx=%f,%e,%g²,x,x,x);printf(²ndoubley=%10.3f,%4.1e²,y,y);printf(²nchara=¢%c¢,b=%-5c,c=%d²,a,b,c);printf(²n%s,%-7s,%9.3s²,²string²,²abcd²,²1234567890²);}4.试写出下面程序的运行结果。main(){inta=4,b=9,c;122
printf(²na=%-8db=%-8d²,a,b);c=a;a=b;b=c;printf(²na=%-8db=%-8d²,a,b);}四、编程题1.已知三角形的两条边a、b及其夹角a,求第三边c及其面积s。2.输入x的值,据下面的多项表达式求y的值:y=x5+12x4-7.3x3-x2+2x-43.输入一个三位正整数,然后逆序输出。如输入为123,则输出为321。4.编写程序,用1分、2分、5分的硬币凑成300元以下的钱数,要求硬币的数目最少。附加题一.单选题1.利用scanf函数输入整型时,键入的内容应是相同类型的。A.常数B.常量表达式C.变量D.含变量的表达式2.若有scanf(²%d²,&ch);现在想将字符¢A¢输入给字符变量ch。输入数据时,键入的内容是,才不会导致读入错误。A.AB.65C.101D. 413.若有charch;利用getchar(ch);语句将字符¢A¢输入给变量ch,则输入方式是正确的。A.A↙B.65↙C. 41↙D.101↙4.若有intm;doublex;利用scanf(²%d%lf²,&m,&x);语句,则输入方式是正确的。A.10,20↙B.1020.0↙C.10.020↙D.10.020.00↙5.是C语言中的正确的赋值语句。A.i++;B.x=4,y=1;C.x=4*y=2;D.x=floatm;6.若变量已正确说明为float类型,要通过语句scanf(²%f%f%f²,&a,&b,&c);给a赋于10.0,b赋予20.0,c赋予30.0,不正确的输入形式是。A.10↙B.10.0,20.0,30.0↙20↙30↙C.10.0↙D.1020↙20.030.0↙30↙7.若有以下定义和语句:intu=010,v=0x10,w=10;printf(²%d,%d,%dn²,u,v,w);122
则输出结果是。A.8,16,10B.10,10,10C.8,8,10D.8,10,108.若有以下定义和语句charc1=¢b¢,c2=¢e¢;printf(²%d,%cn²,c2-c1,c2+¢a¢-A);则输出结果是。A.2,MB.3,EC.2,ED.输出项与对应的格式控制不一致,输出结果不确定9.若有定义:intx,y;chara,b,c;并有以下输入数据:12ABC则能给x赋整数1,给y赋整数2,给a赋字符¢A¢,给b赋字符¢B¢,给c赋字符¢C¢的正确程序段是。A.scanf(²x=%dy%d²,&x,&y);a=getchar();b=getchar();c=getchar();B.scanf(²%d%d²,&x,&y);a=getchar();b=getchar();c=getchar();C.scanf(²%d%d%c%c%c²,&x,&y,&a,&b,&c);D.scanf(²%d%d%c%c%c%c%c%c²,&x,&y,&a,&a,&b,&b,&c,&c);10.设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:scanf(²i=%d,f=%f²,&i,&f);为了把100和765.12分别赋给i和f,则正确的输入为。A.100,765.12B.i=100,f=765.12C.100765.12D.i=100f=765.1211.以下叙述中正确的是。A.输入项可以是一个实型常量,如:scanf(²%f²,3.5);B.只有格式控制,没有输入项,也能正确输入数据到内存,如:scanf(²a=%d,b=%d²);C.当输入一个实型数据时,格式控制部分可以规定小数点后的位数,如:scanf(²%4.2f²,&d);D.当输入数据时,必须指明变量地址,如:scanf(²%f²,&f);二.填空题1.以下程序的输出结果是。main(){inta=5,b=9;a=a+b;b=a-b;a=a-b;printf(²%d,%dn²,a,b);}2.下列程序的输出结果是12.00,请填空。main(){inta=9,b=2;floatx=,y=1.1,z;122
z=a/2+b*x/y+1/2;printf(²%5.2fn²,z);}3.下列程序执行后的输出结果是(小数点后只写一位)。main(){doubled;floatf;longl;inti;i=f=l=d=20/3;printf(²n%d%ld%f%f²,i,l,f,d);}4.请读程序:#includemain(){inta;floatb,c;scanf(²%2d%3f%4f²,&a,&b,&c);printf(²na=%d,b=%f,c=%fn²,a,b,c);}若运行时从键盘上输入9876543210,则上面程序的输出结果是。5.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是_______。intb,c;floata;scanf(²%f,%d,c=%d²,&a,&b,&c);6.若有定义intm=98;,则语句printf(²n|%-5d|,|%05d|,|%-05d²,m,m,m);的输出为。三.阅读题1.试写出下面程序的运行结果。main(){inti=178,j=-34;printf(²n(1)i=%d,%u,%ld²,i,i,i);printf(²n(2)i=|%+8d|%2d|%-8d|%08d|²,i,i,i);printf(²n(3)j=%d,%u,%ld²,j,j,j);printf(²n(4)j=|%8d|%2d|%08d|²,j,j,j);}2.试写出下面程序的运行结果。main(){unsignedk=178,n=65502;printf(²n(1)k=%d,%u,%ld²,k,k,k);printf(²n(2)k=|%+10u|%-10o|%10x|²,k,k,k);printf(²n(3)n=%d,%u,%ld²,n,n,n);}3.试写出下面程序的运行结果。main(){longa=178L;printf(²n(1)a=%ld,(0)%lo,(0x)%lx²,a,a,a);printf(²n(2)a=|%8ld|(0)%-8lo|(0x)%08lx|²,a,a,a);}122
4.试写出下面程序的运行结果。main(){floatx=12.374,y=6.72e-7;printf(²n(1)x=%f,%e,%g²,x,x,x);printf(²n(2)x=|%12f|%12.2f|%.0f|²,x,x,x);printf(²n(3)y=%f,%e,%g²,y,y,y);printf(²n(4)y=|%12e|%12.2e|%.1e|²,y,y,y);}5.试写出下面程序的运行结果。main(){charch1=¢E¢,ch2=¢8¢;printf(²n(1)ch1=%c,(ASCII)%d:(0)%o:(0x)%x²,ch1,ch1,ch1,ch1);ch1=ch1-¢A¢+¢a¢;printf(²n(2)%c,(ASCII)%d²,ch1,ch1);printf(²n(3)ch2=%c,(ASCII)%d²,ch2,ch2);printf(²n(4)%d,%c²,ch2-¢0¢,ch2+1);}6.试写出下面程序的运行结果。main(){printf(²n(1)|%s|%10s|%-10s|²,²12345²,²12345²,²12345²);printf(²n(2)|%10.2s|%.3s|²,²12345²,²12345²);}四.编程题1.已知圆锥体的底部圆的半径和锥体的高度,求其体积。2.输入一个实数,分别输出其整数部分和小数部分。如输入76.35,输出为76和0.35。3.输入一个四位正整数,然后分别显示其千位数、百位数、十位数和个位数及其每位数字对应的ASCII码。如若输入为7592,则要求输出为:7592555357504.按年率r%存入本钱A,n年末本利合计为T=A*((100+r)/100)n,试编写一程序,输入A、r和n的值,输出T的值。5.输入一小写英文字母,首先输出它及其ASCII码,然后输出其对应的大写字母及其ASCII码。6.编程将单词“GOOD”转换成“good”。要求采用getchar()、putchar()函数。习题答案一、单选题1.D2.A3.C4.D二、填空题1.输入输出函数2.;3.printf(),scanf()4.将x原来的值加上3以后重新赋给变量x122
三.、阅读题1.a=98x=45.78c=92.m=12,n=99.3417.2b,G或m=12,n=99.3417.2b,G3.intm=10,10,12unsignedu=42315,-23221,a54blongk=600000,10176floatx=34.500000,3.45000e+01,34.5doubley=76.100,8e+01chara=¢0¢,b=a,c=65string,abcd,1234.a=4b=9a=9b=4四、编程题1.#include#definePI3.14159main(){floata,b,c,alfa,p,area;printf(²n请输入三角形的两条边的边长及夹角:²);scanf(²%f%f%f²,&a,&b,&alfa);c=sqrt(a*a+b*b-2*a*b*cos(alfa*PI/180));p=(a+b+c)/2;area=sqrt(p*(p-a)*(p-b)*(p-c));printf(²n该三角形的第三条边边长为:%6.1f²,c);printf(²n该三角形的面积为:%6.2f²,area);}2.#includemain(){floatx,y;printf(²n请输入x的值:²);scanf(²%f²,&x);y=((((3.0/4*x+12)*x-7.5)*x-8.0/3)*x+2)*x-4;printf(²n多项式的值为:%f²,y);}或者/*3.4.2.2y=3/4*x**5+12*x**4-7.5*x**3-8/3*x**2+2*x-4*/122
#includemain(){floatx,y;printf(²n请输入x的值:²);scanf(²%f²,&x);y=3.0/4*pow(x,5)+12*pow(x,4)-7.5*pow(x,3)-8.0/3*x*x+2*x-4;printf(²n多项式的值为:%f²,y);}3.main(){intm,a,b,c,n;printf(²n请输入一个三位正整数:²);scanf(²%d²,&m);a=m/100;b=m%100/10;c=m%10;n=c*100+b*10+a;printf(²n逆序的整数为:%d²,n);}或者/*3431123---->321*/main(){inta,b,c;printf(²n请输入一个三位正整数:²);scanf(²%c%c%c²,&a,&b,&c);printf(²n逆序的整数为:%c%c%c²,c,b,a);}4.main(){intm,num1,num2,num5;floatx;printf(²n请输入钱的数目:²);scanf(²%f²,&x);m=(int)(x*100);num5=m/5;m=m%5;num2=m/2;m=m%2;num1=m;printf(²n最少的硬币数为:²);printf(²n需要1分硬币%d个,2分硬币%d个,5分硬币%d个²,num1,num2,num5);}附加题答案122
一、单选题1.A2.B3.A4.B5.C6.B7.A8.B9.D10.B11.D二、填空题1.9,52.4.43.666.0000006.0000004.a=98,b=765.000000,c=4321.0000005.5.0,4,c=36.|98|,|00098|,|98|三、阅读题1.(1)i=178,178,92930226(2)i=|+178|178|178|00000178|(3)j=-34,65502,92995550(4)j=|-34|-34|-0000034|2.(1)k=178,178,91488434(2)k=|+178|262|b2|(3)n=-34,65502,915537583.(1)a=178,(0)262,(0x)b2(2)a=|178|(0)262|(0x)000000b2|4.(1)x=12.374000,1.23740e+01,12.374(2)x=|12.374000|12.37|12|(3)y=0.000001,6.72000e-07,6.72e-07(4)y=|6.72000e-07|6.7e-07|7e-07|5.(1)ch1=E,(ASCII)69:(0)105:(0x)45(2)e,(ASCII)101(3)ch2=8,(ASCII)56(4)8,96.(1)12345|12345|12345|(2)|12|123|四、编程题1.main(){floatr,h,v;printf(²n请输入圆锥体的底部圆的半径和锥体的高度:²);scanf(²%f%f²,&r,&h);v=1.0/3*3.14*r*r*h;printf(²n圆锥体的体积为:%f²,v);}2.122
main(){intm,a,b,c,d;printf(²n请输入一个四位正整数:²)scanf(²%d²,&m);a=m/1000;m=m%1000;b=m/100;m=m%100;c=m/10;m=m%10;d=mprintf(²n%8d%8d%8d%8d²,a,b,c,d);printf(²n%8d%8d%8d%8d²,a+¢0¢,b+¢0¢,c+¢0¢,d+¢0¢);}3.#includemain(){intn;floata,r,t;printf(²n请输入本钱(元)和年利率:²);scanf(²%f%f²,&a,&r);printf(²请输入存储年数:²);scanf(²%d²,&n);t=a*pow((100+r)/100,n);printf(²nt=%.2f²,t);}4.main(){charch;printf(²n请输入一个小写英文字母:²);scanf(²%c²,&ch);printf(²n%5c%5d²,ch,ch);ch-=¢a¢-¢A¢;printf(²n%5c%5d²,ch,ch);}5.#includemain(){charch1,ch2,ch3,ch4;intm=¢a¢-¢A¢;printf(²n请输入英文单词(GOOD)²);ch1=getchar();ch2=getchar();ch3=getchar();ch4=getchar();122
putchar(¢n¢);putchar(ch1+m);putchar(ch2+m);putchar(ch3+m);putchar(ch4+m);}6.main(){intm;floatx,y;printf(²n请输入一个实数:²);scanf(²%f²,&x);m=x;y=x-m;printf(²n%d,%f²,m,y);}第4章选择结构程序设计习题一、单选题1.设intyear;要使!(year%4==0&&year%100!=0||year%400==0)的值为1,year可取的数据是A.1600B.1900C.2000D.20082.下面哪一个不是逻辑运算符A.^B.!C.||D.&&3.若有inta=1,b=2,c=3,d=4;则表达式ad)?c:d:b的值是A.1B.2C.3D.44.下面程序段所表示的逻辑关系是if(a________________3.若a=2,b=3,c=-1,d=5;下面表达式的值为:__。a+b>c+d&&a>=c+d||!c>0||d<0122
4.用表达式表示:x=100且y、z都大于80,或者y=100且x、z都大于80。________________三、阅读题1.main(){inta=0,b=0,c;c=a++&&(b=1);printf("a=%d,b=%d,c=%dn",a,b,c);}2.main(){inta,b,c;intx=8,y=10;a=(++x==--y)?--x:++y;b=x++;c=++y;printf("a=%d,b=%d,c=%dn",a,b,c);}3.main(){floaty;ntx=2;if(x<0)y=0.0;elseif((x<=2.0)&&(x!=2.0))y=1.0/(x+2.0);elseif(x<10.0)y=1.0/x;elsey=10.0;printf("y=%fn",y);}4.main(){intx=1,y=1;switch(x){case1:switch(--y){case0:printf("%dn",++x);break;case1:printf("%dn",++x);break;}case2:printf("%dn",++x);}}四、编程题1.编写完成以下计算的程序:x+exx>0y=0x=0lg|x|+x4x<02.当键盘输入字符“k”或“K”时,输出KOREAWORLDCUP;当键盘输入字符“j”或“J”时,输出JAPANWORLDCUP;当键盘输入字符“c”或“C”时,输出BEIJIN122
OLYMPICGAMES;若输入其他字符则原样输出。 3.从键盘上任意输入三个整数,按从小到大的次序排列出来。4.任意输入一个成绩显示出其等级。90分以上为A等、80分以上为B等、70分以上为C等、60分以上为D等、60以下为E等。若输入数据大于100或小于0,则显示“dataerror”。附加题一、单选题1.设intyear;要使(year%4==0&&year%100!=0||year%400==0)的值为0,year可取的数据是A.1600B.1900C.2000D.20082.下面哪一个不是关系运算符A.=B.==C.>=D.!=3.若有inta=1,b=2,c=3,d=4;则表达式ac)?a:b:c的值是A.1B.2C.3D.44.指出下列程序段if(a=0)y=1;B.y=1;if(x<0)y=-1;if(x<0)y=-1;C.if(x>=0)y=1;D.if(x>=0)y=1;y=-1;elsey=-1;6.执行下面程序段后i的值为:{inti=10;switch(i){122
case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}A.10B.11C.12D.13二、填空题:1.在C语言中,关系表达式的结果为:__或__。2.若a=2,b=3,c=-1,d=5;下面表达式的值为:__。a+b=c+d||!c>=0&&d>03.在if(表达式)语句;的格式中要使语句被执行,则要求表达式的值__。4.若a=1,f=2,表达式((!a>2)?1:0)<(f!=1)?0:1)的结果为:__。5.用表达式表示:整数p不能被整数q整除。________________6.用表达式表示:整数a不是偶数。________________三、阅读题1.main(){inta=0,b=0,c;c=++a||(b=1);printf("a=%d,b=%d,c=%dn",a,b,c);}2.main(){inta=1,b=1,x=3,y=5;if(x>0)a=a+1;if(x>y)b=b+1;elseif(x==y)b=5;elseb=2*x;printf("a=%d,b=%dn",a,b);}3.main(){inta=1,b=1,x=3,y=5;if(x>0)x++;if(x>y)b=b+1;elseif(x==--y)a--;elseb=2*y;printf("a=%d,b=%dn",a,b);}4.main() {intx=20,y=0;if(x>20)y=5;if(x>10)y=y+5;if(x>1)y+=5;printf("y=%dn",y);}122
5.main(){intx=2,a=0,b=0;switch(x){case1:a++;b++;case2:++a;++b;case3:a++;b++;case4:a+=b;b+=a;}printf("a=%d,b=%dn",a,b);}6.main() {inti=1,sum=0; loop:sum+=i; if(sum<100) {++i; gotoloop;} printf("sum=%dn",sum-i); }四、编程题1.从键盘上输入一个英文字母,若为大写字母则转换成小写字母输出;若为小写字母则原样输出;若输入的不是英文字母则输出“cuole”。 2.求二次方程ax2+bx+c=0(a≠0)的根3.用switch语句编写完成以下计算的程序:x+exx>0y=0x=0lg|x|+x4x<04.从键盘输入年、月,显示出该年该月的天数。5.从键盘上输入一个1~15之间的整数n,求n!。6.输入若干个成绩显示出各等级的人数。90分以上为A等、80分以上为B等、70分以上为C等、60分以上为D等、60以下为E等。若输入数据大于100或小于0,则显示“dataerror”重新输入,以-999为结束标记。习题答案一、单选题1.B2.A3.B4.B二、填空题1.102.!、%、>、&&、||、?:、=3.14.(x==100&&y>80||y==100&&x>80)&&z>80三、阅读题1.a=1,b=0,c=02.a=8,b=8,c=103.y=0.5000004.2122
3四、编程题1.#includemain(){floatx,y;scanf("%f",&x);if(x>0)y=x+exp(x);if(x==0)y=0;if(x<0)y=log10(abs(x))+pow(x,4);printf("y=%fn",y);}2.#include"stdio.h"main(){charc;c=getchar();if(c=="k"||c=="K")printf("KOREAWORLDCUP");elseif(c=="j"||c=="J")printf("JAPANWORLDCUP");elseif(c=="c"||c=="C")printf("BEIJINOLYMPICGAMES");elseprintf("%cn",c);}3.方法一:main(){inta,b,c,max,min;scanf("%d%d",&a,&b);min=(a=b)?a:b;scanf("%d",&c);if(cmax)printf("%d,%d,%dn",min,max,c);if(c>min&&cb){t=a;a=b;b=t;}122
if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%dn",a,b,c);}4.main(){inte=0;floatscore;chargrade;printf("inputscore:");scanf("%f",&score);if(score>100||score<0){printf("ndataerror");e=1;}switch(score/10){case10:case9:grade="A";break;case8:grade="B";break;case7:grade="C";break;case6:grade="D";break;case5:case4:case3:case2:case1:case0:grade="E";}if(e==0)printf("scoreis%6.2f,gradeis%cn",score,grade);}若将switchz中的条件稍作改动,程序可写为:main(){inte=0;floatscore;chargrade;printf("inputscore:");scanf("%f",&score);if(score>100||score<0){printf("ndataerror");e=1;}switch(score/10-5){case5:grade="A";break;case4:grade="A";break;case3:grade="B";break;case2:grade="C";break;case1:grade="D";break;default:grade="E";}if(e==0)printf("scoreis%6.2f,gradeis%cn",score,grade);}附加题答案122
一、单选题1.B2.A3.C4.B5.C 6.D一、填空题1.102.13.非04.05.p%q!=06.a%2!=0三、阅读题1.a=1,b=0,c=12.a=2,b=63a=0,b=14.y=105.a=4,b=66.sum=91二、编程题1.#include main() {charx; x=getchar(); if("a"<=x&&x<="z")putchar(x); elseif("A"<=x&&x<="Z")putchar(x+32); elseprintf("cuole"); }2.分析:对a≠0应考虑下面的情况:(1)b2-4ac>0时,方程有两个不等的实根(2)b2-4ac=0时,方程有两个相等的实根(3)b2-4ac<0时,方程有两个复数根方法一:用嵌套的if语句#includemain(){floata,b,c,disc,x1,x2,real,imag;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if(disc>=0)if(disc>0){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("x1=%0.2ftx2=%0.2fn",x1,x2);}else{x1=x2=(-b)/(2*a);printf("x1=x2=%0.2fn",x1);}else{real=(-b)/(2*a);122
imag=sqrt(fabs(disc))/(2*a);printf("x1=%.2f+%.2fitx2=%.2f-%.2fin",real,imag,real,imag);}}方法二:用if-elseif语句#includemain(){floata,b,c,disc,x1,x2,real,imag;scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if(disc>0){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("x1=%0.2ftx2=%0.2fn",x1,x2);}elseif(disc==0){x1=x2=(-b)/(2*a);printf("x1=x2=%0.2fn",x1);}elseif(disc<0){real=(-b)/(2*a);imag=sqrt(fabs(disc))/(2*a);printf("x1=%.2f+%.2fitx2=%.2f-%.2fin",real,imag,real,imag);}}3.#includemain(){floatx,y,z;scanf("%f",&x);z=1*(x>0)+2*(x==0)+3*(x<0);switch(z){case1:y=x+exp(x);break;case2:y=0;break;case3:y=log10(abs(x))+pow(x,4);}printf("y=%fn",y);}4.main(){intyear,month,days,leap;scanf("%d%d",&year,&month);switch(month){case1:case3:case5:122
case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:if(year%4==0&&year%100!=0||year%400==0)days=29;elsedays=28;}printf("%d%ddays:%dn",year,month,days);}5.main(){intn,i=1;longs=1;scanf("%d",&n);loop:if(i<=n){s*=i;++i;gotoloop;}printf("n!=%ldn",s);}6.main(){inta=0,b=0,c=0,d=0,e=0;floatscore;loop1:printf("inputscore:");scanf("%f",&score);if(score==-999)gotoloop2;if(score>100||score<0){printf("ndataerror");gotoloop1;}switch(score/10-5){case5:a=a+1;gotoloop1;case4:a=a+1;gotoloop1;case3:b=b+1;gotoloop1;case2:c=c+1;gotoloop1;case1:d=d+1;gotoloop1;default:e=e+1;gotoloop1;}loop2:printf("A=%d,B=%d,C=%d,D=%d,E=%dn",a,b,c,d,e);}122
第5章循环结构程序设计习题一、单选题1.结束while(表达式)循环的条件是A.当表达式的值为0时B.当表达式的值不为0时C.当表达式的值为1时D.当表达式的值为非1时2.在do—while(表达式);结构的循环中,下面哪种说法是正确的A.只要表达式的值不为0就开始执行循环B.当表达式的值为0时循环体一次也不执行C.循环体仅能执行一次D.循环体至少被执行一次3.下面哪种说法是正确的A.在循环体中可以用break语句结束本次循环B.在循环体中可以用continue语句结束本次循环C.break语句仅能使用在switch结构中D.可以使用continue语句跳出switch结构4.下面程序段的执行结果为:main(){charx=97;while(x<"d"){printf("%c",x);x++;printf("n");}}A.aB.aC.aD.abbbccd 二、填空题1.若e1,e2,e3为表达式,正常结束for(e1;e2;e3)循环的条件是______。2.Break语句可用于___结构和___结构中。3.若有intx=5;while(x^x){循环体}则循环体执行的次数为___次4.若有inta=10,s=0;while(s+=a--,--a;);执行完循环后,a的值为___;s的值为___。三、阅读题1.#include122
main(){intk;for(k=1;k<=5;k++)switch(k%5){case0:printf("@");break;case1:printf("&");break;default:printf("n");case2:printf("#");}}2.main(){intk=1,j=1;do{k+=(j-1)*j;if(j>4)break;elsek+=2*j;j++;}while(j<10);printf("%dn",k);}3.main(){intx,y,z;for(x=0;x<2;x++)for(y=1;y<3;y++)for(z=2;z<4;z++)printf("%d,n",(x==0||y==1)+(z==2&&x==y)+!(z==3));}4.从键盘输入2473(回车),下面程序的结果是什么。#includemain(){intc;while((c=getchar())!="n"){switch(c-"2"){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}printf("n");}四、编程题122
1.求s=1*2!+2*3!+……+9*10!2.求s=a+aa+aaa+……+aaa…a,其中a是1~9之间的数字;n是1~9之间的数字。n个a3.输入20个字符,分别统计出其中大写英文字母、小写英文字母、数字和其它符号的个数。4.若有算式:ABCD-CDCABCA、B、C、D均为一位非负整数,求出A、B、C、D各值。附加题一、单选题1.执行while(表达式)循环的条件是A.当表达式的值为0时B.仅当表达式的值为1时C.当表达式的值为非0时D.当表达式的值不为1时2.下面哪种说法是正确的A.break语句仅能使用在switch结构中B.执行continue语句可以结束包含它的整个循环结构C.执行循环体中的break语句可以结束本次循环D.执行break语句可以结束包含它的循环结构3.下面程序段的执行结果是intx=100;dox+=1;while(x>120);printf("%d",x);A.100B.101C.120D.1214.下面程序段的执行结果为:main(){inti,j,a=0,b=0;for(i=0;i<2;i++)for(j=0;j<2;j++)if(j>=i)a=1;b++;printf("a=%d,b=%dn",a,b);}A.a=1,b=1B.a=3,b=3C.a=1,b=3D.a=3,b=15.下面程序段的执行结果为:main(){inti,j;for(i=1;i<3;i++){for(j=1;j<=i;j++)printf("%d",i+j);printf("n");122
}}A.2345B.234C.23D.234346.下面程序段的循环次数为:intk=2;while(k=0)printf("%d",k);k--;printf("n");A.无限次B.0次C.1次D.2次二、填空题:1.除用while、do—while、for外,还可以用___语句和___语句构成循环。2.要从嵌套循环结构的内层循环体直接离开整个循环结构,可使用___语句实现。3.若有for(a=0;a<10;a++){a++;}则循环体执行的次数为___次4.若有intx=1;while(x++<5);正常结束循环后x的值为___5.若有inta,x=0;for(a=0;a<9&&x<=99;a++)scanf(“%d”,&x);问,循环最多执行次数为___;循环最少执行次数为___。6.若有inta=10,s=0;while(a!=0){a--;s+=--a;}执行完循环后,a的值为___;s的值为___。三、阅读题1.main(){inti,j,k;for(i=0;i<5;i++){for(j=0;j<10;j++)printf("");for(k=0;k<=i;k++)printf("$");printf("n");}}2.main(){intx,y,z,s=0;for(x=1;x<4;x++)for(y=1;y<=x;y++)for(z=y;z<4;z++)s+=2;printf("s=%dn",s);122
}3.main(){intx=0;do{x+=3;if(x%5)printf("%3d",x/5);elseprintf("%3d",x);}while(x<=15);}4.main(){intx=678,y=0;while(x!=0){y+=x%10;y=y*10;x=x/10;}printf("y=%dn",y/10);}5.从键盘输入Programming(回车),下面程序的结果是什么。#includemain(){inti=0,j=0;charch;while((ch=getchar())!="n"){switch(ch){case"a":case"A":case"e":case"E":case"o":case"O":default:i++;case"i":case"I":case"u":case"U":case3:j++;}}printf("%d%dn",i,j);}6.main(){inti,j,k;printf("");for(i=1;i<10;i++)printf("%4d",i);printf("n");for(i=1;i<10;i++)122
printf("-");printf("n");for(i=1;i<10;i++){printf("%d",i);for(k=0;k<4*(i-1);k++)printf("");for(j=i;j<10;j++)printf("%4d",i*j);printf("n");}}四、编程题1.求两个整数的最大公约数和最小公倍数。2.求100~300之间的素数。3.如果一个三位数等于其各位数字之和,则称为“水仙花数”,求所有的“水仙花”数。例如153=13+53+33,所以153是“水仙花数”。4.用循环语句编程,显示出ZzYyXxWw&……CcBbAa。5.用矩形法求函数f(x)=x2+x+1在[0,2]区间的定积分,即6.用牛顿迭代法求下面方程在1.5附近的根。2x3-4x2+3x-6=0习题答案一、单选题1.A2.D3.B4.C二、填空题1.e2等于02.switch、循环或循环、switch3.04.030执行结果为:k=61三、阅读题1.##@2.613.2,1,2,1,3,1,1,04.668977四、编程题1.main(){longs=0,t=1;inti;for(i=1;i<5;i++){t*=i+1;122
s+=i*t;}printf("s=%ldn",s);}2.main(){longs=0,a,b=0;intn,i;scanf("%ld%d",&a,&n);for(i=0;imain(){charc;inti,dx=0,xx=0,sz=0,qt=0;for(i=0;i<20;i++){c=getchar();if("A"<=c&&c<="Z")dx+=1;elseif("a"<=c&&c<="z")xx+=1;elseif("0"<=c&&c<="9")sz+=1;elseqt+=1;}printf("dx=%d,xx=%d,sz=%d,qt=%dn",dx,xx,sz,qt);}4.main(){inta,b,c,d,x,y,z;for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(c=1;c<=9;c++)for(d=0;d<=9;d++){x=1000*a+100*b+10*c+d;y=100*c+10*d+c;z=100*a+10*b+c;if(x-y==z)gotoloop;}loop:printf("A=%d,B=%d,C=%d,D=%dn",a,b,c,d);printf("%d-%d=%dn",x,y,z);}附加题答案122
一、单选题1.C2.D3.B4.A5.D6.B二、填空题1.ifgoto2.goto3.54.55.916.020三、阅读题1.$$$$$$$$$$$$$$$2.s=283.01121534.y=8765.10116.123456789---------11234567892468101214161839121518212427416202428323652530354045636424854749566386472981四、编程题1.main(){inta,b,r,m;scanf("%d%d",&a,&b);m=a*b;r=a%b;while(r!=0){a=b;b=r;r=a%b;}printf("%d,%dn",b,m/b);}2.#includemain(){inti,j,a,m;for(j=100;j<=300;j++){m=sqrt(j);for(i=2;i<=m;i++)122
{if(j%i==0)break;continue;}if(i>m)printf("%5d",j);}}3.main(){inti,j,k,n;for(n=100;n<1000;n++){i=n/100;j=(n-100*i)/10;/*或j=n/10-i/10;*/k=n-100*i-10*j;/*或k=n%10;*/if(n==i*i*i+j*j*j+k*k*k)printf("%dn",n);}}执行结果为:1533703714074.main(){charch;for(ch="Z";ch>="A";ch--)printf("%c%c",ch,ch+32);}5.main(){intn=1000,i;floata=0.0,b=2.0,h,x,f0,f1,s=0.0,s1;x=a;h=(b-a)/n;f0=x*x+x+1.0;for(i=1;i<=n;i++){s1=f0*h;s+=s1;x+=h;f0=x*x+x+1.0;}printf("n=%d,a=%5.2f,b=%5.2f,s=%8.2fn",n,a,b,s);}6.#includemain(){floatx,x0,f,f1;x=1.5;122
do{x0=x;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;}while(fabs(x0-x)>=1e-5);printf("%5.2fn",x);}第6章数组习题一、单选题1.以下对数组描述正确的是A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,且数组元素的类型必须相同。C.数组一旦定义其大小是可变的,且数组元素的类型可以不同D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。2.若有inta[4]={1,2,3,4};则a[a[0]+2*a[2]-a[3]]的值为A.1B.2C.3D.43.以下能正确将字符串“Boy”进行完整赋值操作的是A.chars[3]={‘B’,’o’,’y’};B.chars[]=“Boy”;C.chars[3]={“Boy”};D.chars[3];s[0]=’B’;s[1]=’o’;s[2]=’y’;4.下面程序段的输出结果是for(i=0;i<2;i++)for(j=0;j<2;j++)if(i==j){a[i][j]=0;printf(“%d”,a[i][j]);}else{a[i][j]=1;printf(“%d”,a[i][j]);}printf(“n”);A.1001B.0110C.10D.010110二、填空题1.数组元素下标可取的最小值是___。2.C语句中数组名是一个___常量,表示数组在内存中的___。3.描述将字符串“Iamateacher”用初始化的方法存于字符数组str中_______________。4.若有定义inta[3][5];排列在数组中的第8个元素是_____。三、阅读题1.main(){inta[]={1,2,3,4},i,j=1,sum=0;for(i=3;i>=0;i--)122
{sum+=a[i]*j;j*=10;}printf("sum=%dn",sum);}2.#defineN5main(){inta[N+1]={0,-1},i,j,x;for(i=0;i<=N-1;i++){for(j=1;j<=i+1;j++){x=2+i-j;a[x]=a[x]+a[x-1];;if(i>=N-1)printf("%3d",a[x]);}}printf("n");}3.main(){inta[3][3]={{1,0,2},{2,2},{0,2}},c[3][3],i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[a[i][j]][a[j][i]];printf("%5d",c[i][j]);}printf("n");}}4.阅读下面程序段,当键盘输入你的姓(用汉语拼音输入),写出执行结果#include"stdio.h"#include"string.h"main(){chart,a[20];inti,j,s;gets(a);s=strlen(a);for(i=0;i