C语言程序设计上机指导与习题解答(第2版)pdf/doc/txt格式电子书下载
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询
书名:C语言程序设计上机指导与习题解答(第2版)pdf/doc/txt格式电子书下载
推荐语:
作者:胡佳,卢昕等编
出版社:人民邮电出版社
出版时间:2017-08-01
书籍编号:30509907
ISBN:9787115462817
正文语种:中文
字数:61534
版次:2
所属分类:教材教辅-大学
版权信息
书名:C语言程序设计上机指导与习题解答(第2版)
作者:胡佳 卢昕
出版日期:2017-08-01
出版社:人民邮电出版社
ISBN:9787115462817
版权所有 · 侵权必究
内容提要
本书是与《C语言程序设计(第2版)》配套的上机指导与习题解答教材,主要内容包括《C语言程序设计(第2版)》实验指导、实训演练及课后习题参考答案。
本书可作为高等院校C语言课程的辅助教材和全国计算机二级考试参考书。
前言
C语言程序设计是一门实践性很强的课程。学生看书或听课时,对于语言要素的应用和编程方法都觉得不难,对于老师讲过的内容基本上也都能理解,但当自己为一个具体问题编写程序时,往往又无从下手,上机调试程序时更是手足无措。要改变这种现象,只有通过上机实践,才能让学生真正理解程序设计的基本思想;正确使用各种语言元素,熟练使用Visual C++ 6.0开发环境,才能提高学生的动手编程能力。
为此,我们编写了这本与主教材《C语言程序设计(第2版)》配套的辅导教材。本书从以下3方面进行了精心组织和详细讲解,旨在为学生上机实践提供一定的帮助。
1.实验指导
学习C程序设计不能只满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写源程序、独立上机调试、独立运行程序和分析结果。上机实验的目的,绝不仅仅是为了验证教材和讲课的内容,或者验证自己所编写程序的正确与否。而是在给出调试程序全过程的前提下,让学生在反复调试程序的过程中掌握根据出错信息修改程序的方法。为此,本书在实验指导环节中,设置了验证实验、陷阱实验和提高实验3个环节。
2.实训演练
本部分挑选了各章具体的示例进行实训演练,每章包括学习情景、知识必备、任务分析和任务实施4个部分,以帮助读者提高编程和调试程序的能力。
3.习题参考答案
本部分给出了《C语言程序设计(第2版)》各章习题的参考答案。其中,编程题的源程序严格按照编码规范,并且与教材案例的编码风格保持一致。
需要指出的是,无论是习题解答还是上机示例,本书给出的仅仅是参考答案,希望能对学生们有一定的启示,从而设计出更加简单且效率更高的程序。本书的习题答案和上机示例全部在Visual C++ 6.0环境下调试通过。
本书由南昌师范学院数学与计算机科学系教师编写,由徐新爱组织并统稿。其中,“实验指导”部分实验1~9由胡佳编写,实验10由卢昕编写;“实训演练”部分第1~9章由胡佳编写,第10章由吴瑜鹏编写,第11章由卢昕编写,“习题参考答案”部分由徐新爱整理。
在本书的编写过程中,计算机教研室的老师对本书提出了许多宝贵意见,在此表示诚挚的感谢。
编者
2017年6月
第1部分 实验指导
实验1 熟悉C语言编程环境
一、实验目的
(1)熟悉C语言编程环境下的Visual C++6.0,掌握运行一个C程序的基本步骤,包括编辑、编译、连接和运行。
(2)了解C程序的基本框架,能够编写简单的C程序。
(3)了解程序调试的思想,能找到并改正程序中的语法错误。
二、实验内容
1.编程示例
在屏幕上显示“THIS IS A PROGRAM.”
运行结果:
下面在Visual C++的编程环境下,以上述C语言程序源程序为例,介绍运行一个C程序的基本步骤。
(1)建立自己的文件夹。在计算机磁盘中新建一个用于存储C程序的文件夹,比如C:\\C_PRO。
(2)启动Visual C++。执行“开始”→“所有程序”→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0,进入编程环境,如图1-1所示。
(3)新建文件。执行“文件”→“新建”命令,选择“文件”选项卡(见图1-2),在“文件名”文本框中输入pro_test.c,在“位置”下拉列表框中选择已经建立好的文件夹,比如:C:\\C_PRO;然后选择C++ Source File选项,单击“确定”按钮,在C:\\C_PRO下新建文件,显示编辑窗口和信息窗口(见图1-3)。
图1-1 Visual C++窗口
图1-2 新建文件
图1-3 编辑源程序
(4)编辑和保存。在编辑窗口中输入源程序,然后执行“文件”→“保存”命令,保存源程序。
(5)编译。执行“组建”→“编译pro_test.c”命令(见图1-4),在弹出的信息窗口(见图1-5)中单击“是”,开始在信息窗口中显示编译信息(见图1-6)。
图1-4 编译源程序
图1-5 产生一个工作区
图1-6 编译正确
(6)连接。执行“组建”→“组建”命令,开始连接,并在信息窗口中显示连接信息,如图1-7所示。
图1-7 连接成功并产生运行文件
(7)运行。执行“组建”→“执行pro_test.exe”命令(见图1-8),自动弹出运行窗口(见图1-9),显示运行结果。
图1-8 运行程序
图1-9 运行窗口
(8)关闭程序工作区。执行“文件”→“关闭工作空间”命令(见图1-10),在弹出的信息框(见图1-11)中单击“是”,关闭工作区。
图1-10 关闭程序工作区
图1-11 关闭所有文档窗口
2.验证实验
改正下列程序中的错误。在屏幕上显示“How do you do?”
源程序(有错误的程序):
(1)打开源程序err01_1.c文件。
(2)编译。执行“组建”→“编译err01_1.c”命令,信息窗口显示____error(s),____warning(s)。
(3)找出错误。在信息窗口中双击第一条出错信息,编辑窗口就会出现一个箭头指向程序出错的位置(见图1-12),一般在箭头的当前行或者上一行,可以找到出错语句,并在状态栏显示当前错误信息。图1-12中箭头指向第4行,状态栏显示“\'How\' : undeclared identifier”,出错信息指出“How”是一个未定义的变量,但是“How”并不是变量,出错的原因是“How”前少了前双引号。
图1-12 编译产生的错误信息
(4)改正错误。在“How”前加上前双引号。
(5)重新编译。信息窗口显示____条本次编译的错误信息。双击第一条出错信息(见图1-13),箭头指向出错位置,出错信息指出在“return”前少了分号,改正错误。
图1-13 重新编译后产生的错误信息
(6)再次编译。信息窗口中显示编译正确。
(7)连接。执行“组建”→“组建err01_1.c”命令,信息窗口显示连接错误信息(见图1-14)。仔细观察,引起错误的原因是____。
图1-14 连接产生的错误信息
(8)改正错误后,重新编译和连接,信息窗口中没有出现错误信息。
(9)运行,执行“组建”→“执行err01_1.c”命令,自动弹出运行窗口(见图1-15),显示运行结果,与题目要求的结果一致,按任意键返回。
图1-15 程序运行窗口
3.陷阱实验
改正下列程序中的错误,在屏幕上显示以下3行信息(源程序err01_2.c)。
源程序(有错误的程序):
(1)编译后信息窗口显示____error(s),____warning(s),分别记下错误信息及其中文含义。
错误信息1:________,中文含义________。
错误信息2:________,中文含义________。
错误信息3:________,中文含义________。
错误信息4:________,中文含义________。
(2)双击第一个错误信息,这时候编辑窗口箭头指向行号为____的语句,错误的原因是____,正确语句为:____;重新编译,再次双击第一个错误信息,此时编辑窗口箭头指向行号为____的语句,错误的原因是____,正确语句为:____。
(3)再次编译后无错误信息,进行连接,信息窗口显示____error(s),____warning(s),错误原因是____,改正后运行____(正确/错误)。
4.提高实验
(1)在屏幕上显示一个短句“what is a computer?”(2)在屏幕上显示下列图形。
*
***
*****
*******
实验2 用C语言编写简单程序
一、实验目的
(1)掌握算术表达式和赋值表达式的使用。
(2)掌握基本输出函数的使用。
二、实验内容
1.验证实验
改正下列程序中的错误,求圆的周长。计算公式如下:
l=2πr
其中,l表示周长,r表示半径(源程序err02_1.c)。
源程序(有错误的程序):
运行结果(改正后程序的运行结果):
(1)使用菜单来完成编译、连接和运行操作,现在介绍使用工具栏完成上述操作的方法。在工具栏或菜单栏上右击,出现图2-1所示的完整的工具箱菜单,单击选中“编译微型条”选项,该工具条即出现在工具栏下方(见图2-2)。其中,第一个按钮“Compile”表示编译,第二个按钮“Build”表示组建,第四个按钮“Build Execute”表示运行。
(2)单击按钮“Compile”,编译时出现的第一条错误信息是:
图2-1 显示完整的工具箱菜单
双击该错误信息,箭头指向源程序的第1行,错误信息指出____,仔细观察后,发现错误原因是____。改正后重新编译,新产生的第一个错误信息是:
图2-2 编译微型条
双击该错误信息,箭头指向源程序的第5行,错误信息指出____,仔细观察后,发现错误原因是____。另外在重新编译时,产生一个警告,警告信息是:
双击该警告信息,箭头指向源程序的第7行,警告信息指出____,仔细观察后,发现警告原因是____。再运行发现结果不对,最后发现“printf(\"r=d,l=%d\\n\",r,l);”的d前少了%,并且两个格式字符d,要改为f,改正后运行正确。
2.陷阱实验
改正下列程序中的错误。计算某个数x的2倍,赋值给y,并分别以“y=2*x”和“2*x=y”
的形式输出x和y的值(源程序err02_2.c)。
输入输出示例(假设x的值是4):
源程序(有错误的程序):
(1)打开源程序err02_2.c,对程序进行编译,信息窗口显示____error(s)____warning(s)。双击第一个警告,观察源程序中的箭头位置,并分析错误原因。
错误信息:____________。
错误原因:____________。
改正方法:____________。
(2)改正错误后再次进行编译和连接,没有出现错误信息,运行程序。运行结果为____,是否正确____。仔细查看源程序,指出错误的位置并给出正确的语句。
错误行号:________,正确语句:________。
错误行号:________,正确语句:________。
3.提高实验
(1)已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。
输入输出示例:
数学=87,英语=72,计算机=93,平均分=84
(2)当n为182时,分别求出n的个位数、十位数和百位数的值。
输入输出示例:
整数182的个位数字是2,十位数字是8,百位数字是1
实验3 顺序结构程序设计
一、实验目的
(1)能够编程实现简单的数据处理。
(2)能够编译错误信息的含义,掌握简单C程序的查错方法。
二、实验内容
1.验证实验
改正下列程序中的错误,把小写字母转换成大写字母输出(源程序err03_1.c)。
源程序(有错误的程序):
(1)对程序进行编译,信息窗口显示____error(s),____warning(s),单击按钮“Compile”,编译时出现的第一条错误信息是:
双击该错误信息,箭头指向源程序的第6行,错误信息指出____,仔细观察后,发现错误原因是________________。
(2)单击按钮“Compile”,信息窗口显示0error(s),0warning(s),单击按钮“Build”,再单击按钮“Build Execute”。程序运行结果错误如图3-1所示。
(3)返回程序仔细查找,发现第7行的“a=a-32;”输入成了“a=a+32;”,经过修改后编译、组建再运行,程序运行正确(见图3-2)。
图3-1 程序运行出错
图3-2 程序运行正确
2.陷阱实验
改正下列程序中的错误,求华氏温度100℃对应的摄氏温度。计算公式如下:
c=5×(f−32)/9
其中,c表示摄氏温度;f表示华氏温度(源程序err03_2.c)。
输入输出的示例:
(1)打开源程序err03_2.c,对程序进行编译,信息窗口显示____error(s),____warning(s)。
双击第一个错误,观察源程序中的箭头位置,并分析错误原因。
错误信息:____________。
错误原因:____________。
改正方法:____________。
(2)改正错误后再次进行编译和连接,没有出现错误信息,运行程序。运行结果为____,是否正确____。仔细查看源程序,指出错误的位置并给出正确的语句。
错误行号:________,正确语句:________。
错误行号:________,正确语句:________。
3.提高实验
(1)求摄氏温度26℃对应的华氏温度。计算公式如下:
f=(9×c/5)+32
其中,c表示摄氏温度;f表示华氏温度。
输入输出的示例:
c=26f=78
(2)输入大写字母,输出对应的小写字母。
输入输出的示例:
实验4 选择结构程序设计
一、实验目的
(1)使用if语句计算分段函数。
(2)正确书写关系表达式。
(3)掌握基本输入函数的使用,能正确调用C语言提供的数学函数。
(4)掌握简单的单步调试方法。
二、实验内容
1.验证实验
改正下列程序中的错误,输入x,计算并输出下列分段函数f(x)的值(源程序err04_1.c)。
运行结果1(改正后程序的运行结果):
运行结果2
(1)打开源程序err04_1.c,单击按钮“Compile”,出现的第一条编译错误信息是:
双击该错误信息,箭头指向行号为____的语句,出错信息指出____。
改正后重新编译,新出现一条警告错误信息是:
此错误信息的中文含义是____。双击该错误信息,箭头指向行号为____的语句,出错原因是________________,改正后重新编译并连接,正确。
(2)执行“工具”→“定制”命令,在图4-1所示的“定制”对话框中选中“调试”选项,显示调试工具条(见图4-2)。用户可以拖动此工具条将其放置在工具栏上。
图4-1 选择工具栏
图4-2 调试工具条
(3)程序调试开始,单击调试工具条中的按钮“StepOver”。按钮“StepOver”的功能是单步执行,即单击一次执行一次(见图4-3),编辑窗口中的箭头指向某一行,表示程序将要执行该行。图4-3中列出了变量窗口“Variables Window”和观察窗口“Watch Window”,在观察窗口中还可以改变变量的值。
图4-3 程序调试开始
(4)单击按钮“StepOver”两次,程序执行到输入语句一行(见图4-4),同时运行窗口(见图4-5)显示“Enter x:”(此时将要执行输入语句),继续单击按钮“StepOver”,在运行窗口输入“10”(见图4-6),按Enter键后,箭头指向了“if(x!=0)”这一行(见图4-7),在变量窗口可以看到变量x的值是10。
图4-4 程序单步调试
图4-5 运行窗口
图4-6 在运行窗口输入变量x的值
图4-7 程序单步调试,显示变量x的值
(5)继续单击按钮“StepOver”一次,箭头指向了行号为____的语句,即将要执行该语句,表明条件“x!=0”的值为____。再次单击按钮“StepOver”一次,箭头指向“else”这行(见图4-8),在变量窗口可以看到变量y的值是20。
图4-8 程序单步调试,显示变量y的值
(6)继续单击按钮“StepOver”一次,箭头指向了行号为____的语句(见图4-9),发现跳过了“y=0;”这行,说明没有被执行到,原因是____,再次单击按钮“StepOver”一次,运行窗口显示运行结果(见图4-10),符合题目的要求。
图4-9 程序单步调试
(7)按钮“Stop Debugging”的作用是停止调试,单击此按钮,程序调试结束。
2.陷阱实验
改正下列程序中的错误。输入实数x,计算并输出下列分段函数f(x)的值。
图4-10 在运行窗口中显示结果
输入输出示例(共运行两次)
第一次运行:
第二次运行:
源程序(有错误的程序):
打开源程序(err04_2.c),对程序进行编译,采用每次修改第一个错误并重新编译的方法,记录各个错误信息、分析错误原因并给出正确的语句。
错误信息1:____________。
错误原因:____________。
改正方法:____________。
错误信息2:____________。
错误原因:____________。
改正方法:____________。
错误信息3:____________。
错误原因:____________。
改正方法:____________。
3.提高实验
(1)输入存款金额money、存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
输入输出示例:
(2)输入两个整数num1和num2,计算并输出它们的和、差、积、商和余数。输入输出示例:
实验5 循环结构程序设计
5.1 一般循环一结般构循环结构
一、实验目的
(1)熟练使用while、do…while和for语句实现循环程序设计。
(2)理解循环条件和循环体,以及while、do…while和for语句的相同和不同之处。
(3)熟练掌握break和continue语句的使用。
(4)掌握使用Debug菜单调试程序的方法。
二、实验内容
1.验证实验
改正下列程序中的错误。输入两个正整数m和n,输出它们最大公约数。
源程序(有错误的程序):
运行结果(正确的程序):
(1)打开源程序err05_1.c,对程序进行编译和连接,没有出现错误信息。
(2)调试程序开始,设置两个断点,具体位置见源程序的注释处。
(3)执行“组建”→“开始调试”→“GO”命令,如图5-1所示,输入“12”和“8”,此时,菜单栏中新出现了一个Debug菜单,如图5-2所示,包括了调试工具条中所有的功能,用户可以选择使用Debug菜单或调试工具条调试程序。
图5-1 “编译”菜单中的调试命令
图5-2 Debug菜单
(4)连续单击按钮“GO”,直到运行到第二个断点处,变量窗口显示n值是8,结果显然错误,因为最大公约数n的值应该是4,说明错误出现的位置在____。
(5)单击按钮“Stop Debugging”停止调试,仔细分析程序,发现____语句有错误,原因是________,正确的应该是________。
(6)改正错误后,重新编译、连接,然后单击按钮“GO”,程序运行到第一个断点处,查看变量窗口中各变量的值。再次单击按钮“GO”,程序运行到第二个断点处观察变量窗口变量的变化,观测到最大公约数n为4。
(7)单击按钮“Stop Debugging“,程序调试结束。
2.陷阱实验
求SN=a+aa+aaa+…+aaa…a,其中a是一个数字。例如2+22+222+2222+22222(此时n=5),n由键盘输入。
(1)打开源程序5_2.c,对程序进行编译,信息窗口显示____error(s),____warning(s)。运行程序,输入测试数据,运行结果为____,是否正确____。
(2)若不正确,请调试程序,并简要说明你的方法,指出错误的位置并给出正确语言。
方法:____________________________________________。
改错汇总:
错误行号:________,正确语句:________。
错误行号:________,正确语句:________。
3.提高实验
(1)读入一批正整数(以零或负数为结尾标志),求其中的奇数和。请使用while语句实现循环。
输入:1,2,80,7,0
输出:8
(2)输入一个正整数n,再输入n个整数,输出最小值。
第一次运行:
输入n:4
输入数据:-3,-134,90,0
输入最小值:-134
第二次运行:
输入n:4
输入数据:-8,-2,9,8
输入最小值:-8
第三次运行:
输入n:3
输入数据:85,66,33
输入最小值:33
(3)输入一个整数,求它的位数以及各位数字之和。例如,123的位数3,各位数字之和是6
输入:234
输出:9
(4)输入一个正整数n,输出2/1+3/2+5/3+8/5+…的前n项之和,保留2位小数。(该序列从第二项起,每一项的分子是前一项分子和分母的和,分母是前一项的分子。)
输入:4
输出:6.77
5.2 嵌套循环嵌套循环
一、实验目的
(1)熟练掌握嵌套循环程序设计。
(2)掌握C程序的调试方法。
二、实验内容
1.验证实验(有错误的程序)
输入一个正整数n,计算下列式子的和,用嵌套循环完成。
源程序(有错误的程序)
(1)打开源程序err05_3.c,对程序进行编译和连接,没有出现错误信息。
(2)调试程序开始,设置两个断点,具体位置见源程序的注释处。
(3)执行“组建”→“开始调试”→“GO”命令,输入3,程序运行到断点处(见图5-3),在观察窗口输入i的值,变量i的值为1,应该求出第一次循环时“1!”,但是变量窗口显示item=6,并且变量j的值为4,这样的结果显然是错误的。仔细分析了求阶乘的循环,发现____错误语句,原因是________,正确的应该是________。
图5-3 查看当前变量的值
(4)单击按钮“Stop Debugging”停止调试,修改错误,重新编译、连接,单击按钮“GO”,输入3,程序运行到断点处,变量窗口显示正确。再次单击按钮“GO”,变量窗口“item=2;”为“2!”,显示正确,再次单击按钮“GO”(见图5-4),变量窗口的值为12,观察窗口的值为3,但是“3!”应该为6,出现错误。
图5-4 查看阶乘的值
(5)单击按钮“Stop Debugging”停止调试,发现____错误语句,原因是____,正确的应该是____。
(6)改正错误后,重新编译、连接,并取消第一个断点,同时设置第二个断点,然后单击按钮“GO”,输入3,程序运行到断点处,变量窗口显示变量s的值为9,与正确结果相差1,仔细分析程序,发现题目给出公式4项,而程序只计算了从“1!”开始的3项,少了首项1。检查后发现____错误语句,正确的应该是____。
(7)单击按钮“Stop Debugging”停止调试,修改错误,重新编译、连接,并去掉所有的断点,运行程序,运行窗口显示结果。
2.陷阱实验
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有“完数”,并按下面格式输出其因子:6的因子是1,2,3。
源程序(有错误的程序):
(1)打开源程序error05_4.c,对程序进行编译,信息窗口显示____error(s),____warning(s)。运行程序,输入测试数据,运行结果为____,是否正确____。
(2)若不正确,请调试程序,并简要说明你的方法,指出错误的位置并给出正确语言。方法:____________________________。
改错汇总:
错误行号:____,正确语句:____。
错误行号:____,正确语句:____。
3.提高实验
(1)输入一个整数n,计算下列式子的和:
输入:10
输出:2.7183
(2)输入一个整数,从高位开始进行分割输出它的各位数字。
输入:654321
输出:6 5 4 3 2 1
实验6 数组
6.1 一维数组一维数组
一、实验目的
(1)熟练掌握使用一维数组编程的方法。
(2)熟练掌握排序算法。
(3)掌握一维数组的调试方法。
二、实验内容
1.验证实验
改正下列程序的错误,输入一个正整数num(0 < num < 9)和一组(num个)有序的整数,再输入一个整数data,把data插入到这组数据中,使该组数据仍然有序(源程序err06_1.cpp)。
源程序(有错误的程序):
运行结果(改正后程序的运行结果)
先找到插入点,从插入点开始,所有的数据顺序后移,然后插入数据;如果插入点在最后,则直接插入(说明插入的数排在该组数据的最后)。
(1)打开源程序err06_1.c,编译后共有____error(s),____warning(s),双击第一个错误,观察源程序中的箭头位置,并分析错误原因。
错误信息:________________。
错误原因:________________。
改正方法:________
....
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询