C语言与数据结构 实验指导.docx
- 文档编号:18342232
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:19
- 大小:823.87KB
C语言与数据结构 实验指导.docx
《C语言与数据结构 实验指导.docx》由会员分享,可在线阅读,更多相关《C语言与数据结构 实验指导.docx(19页珍藏版)》请在冰点文库上搜索。
C语言与数据结构实验指导
HarbinInstituteofTechnology
C语言与数据结构
实验指导书
刘梅索莹田文龙
哈工大电子与信息工程学院
电子工程系
实验1实验平台
一、实验目的
1.掌握MicrosoftVisualC++6.0集成环境的使用方法。
2.掌握C程序在MicrosoftVisualC++6.0开发环境中的编辑、编译、链接和运行全过程
二、实验内容
1)启动MicrosoftVisualC++6.0开发环境
双击桌面应用程序图标
或“开始”菜单程序组中的MicrosoftVisualC++6.0应用程序,启动VC++,如图所示
图1.1VC++初始界面
2)建立C源程序文件
方法1:
单击工具栏的“新建文本文件”按钮
,打开文本文件编辑界面如下图所示
图1.2文本文件编辑界面
方法2:
执行“文件”->“新建”命令,如图1.3所示,在“文件”选项卡下选择C++SourceFile文件类型,然后输入C源程序文件名和保存文件,如图1.3所示,然后单击“确定”按钮,打开源程序文件编辑界面,如图1.4所示。
注意:
输入C源程序文件名时必须带上扩展“.c”,否则默认创建的是扩展名为“.cpp”的C++文件。
3)编辑源文件
方法1:
在如图1.2所示的文本文件编辑界面中输入源程序代码,如图1.5所示。
方法2:
在如图1.4所示的C源程序文件编辑界面中编辑源程序代码,如图1.6所示。
图1.3新建文件
图1.4C源程序文件编辑界面
图1.5文本文件编辑界面编辑源文件
图1.6C源程序编辑界面编辑源文件
4)保存源文件
源文件编辑结束后,执行“文件”->“保存”命令保存文件,文本文件编辑界面中编辑的源文件保存时必须在文件名后加上扩展名“.c”,否则保存的是扩展名为txt的文本文件,不能编译运行。
5)组件文件
执行“组建”->“组建”命令或直接按F7功能键或单机工具栏Build按钮,可以对源文件进行编译、链接而不运行该程序。
当然也可以先执行“组建”->“编译”(快捷键Ctrl+F7)命令编译文件,再执行“组建”->“组建”(快捷键F7)命令链接文件。
由于VC++有工作区的要求,所以组建时,系统提示需要建立工作区,如图1.7所示。
单击“是”按钮,系统会自动建立工作区,组建后的结果如图1.8所示。
图1.7提示建立工作区
图1.8组建源程序结果
注意:
图1.8下方的“组建”信息窗口中的内容说明了组建的结果,必须保证错误(error(s))数为0才能运行程序。
6)运行文件
执行“组建”->“执行”命令或直接按Ctrl+F5键或单击工具栏BuildExecute按钮,可以运行程序,结果显示在用户输出窗口中,如图1.9所示。
图1.9用户输出窗口
注意:
如果要编辑下一个C源程序,由于新建的文件不会自动加入工作区,因此需要先关闭当前工作区。
方法是执行“文件”->“关闭工作空间”命令,或者关闭后重新启动VC++,再按照上述方法建立、编辑新的C源文件,让VC++自动建立工作区。
7)运行“加法”程序
在VC++环境中建立并编辑实现加法运算的源程序,然后组建该文件,结果如图1.10所示。
运行该文件,并按要求输入数据,得到运行结果。
图1.10VC++环境下组建“加法”程序后的界面
实验2顺序结构程序设计
一、实验目的
1.掌握上机运行C程序的全过程。
2.掌握各种格式说明符的使用方法。
3.掌握格式输入输出函数scanf()和printf()的用法。
4.熟悉字符输入输出函数getchar()和putchar()的用法。
二、实验内容
1.格式说明符的使用。
创建并编辑输入输出各个类型数据的程序,分析各个格式说明符的作用。
2.编写“输入输出字符”程序,功能如下:
使用getchar()函数接收一个字符,用printf()函数显示;使用scanf()函数接收一个字符,用putchar()函数显示。
3.编写“求三角形面积”程序,功能如下:
输入三角形三边长,求三角形的面积。
已知三角形的三边长a、b、c,则该三角形的面积公式为:
其中,
。
4.编写“圆柱体”程序,功能如下:
设圆柱体的半径r=2.5,圆柱高h=5.0,求出该圆柱体的表面积和体积。
要求:
用scanf()函数输入数据,输出时要求有文字说明,取小数点后两位数字。
三、实验指导
1.格式说明符的使用
(参考教材)
2.“输入输出字符”程序
1)编程分析
(1)需要定义字符型变量存放输入的数据;
(2)用scanf()函数输入字符时,要注意不要接收缓冲区中已有的字符。
2)参考程序
(略)
3.“求三角形面积”程序
1)编程分析
(1)该问题的解决过程如下:
(2)需要定义实型(float或double)变量存放相应的数据;
(3)计算面积需要用到开平方函数sqrt(),该函数原型包含在头文件math.h中,因此需要在程序开始将头文件包含进来;
(4)根据实际情况确定各个变量在输出时的宽度和小数位数。
2)参考程序
(略)
3.“圆柱体”程序
1)编程分析
(1)该问题的解决过程如下:
(2)需要定义实型(float或double)变量存放相应的数据;
(3)计算过程中需要用到常数
,为使用方便,在程序开始用宏定义命令define将常数3.14159(即
)用PI表示;
(4)输出数据时根据要求确定各个变量的宽度和小数位数(本例采用10.2)。
2)参考程序
(略)
实验3选择结构程序设计
一、实验目的
1.学会使用逻辑表达式表示条件的方法。
2.掌握switch语句的用法。
二、实验内容
1.switch语句的应用
编写计算器程序。
要求从键盘任意输入两个数值,然后输入一个四则运算符,自动完成运算后输出结果。
三、实验指导
1.switch语句的应用
1)编程分析
(1)四则运算共有加(+)、减(-)、乘(*)、除(/)4种运算,要做出判断需使用switch语句。
(2)当输入符号为四则运算之外的符号时,不进行任何运算,但应给出相应的提示信息。
当使用提示信息时,switch语句应含有default子句。
2)参考程序
(略)
3)程序调试
调试程序时,+、-、*、/及非四则运算符的情况都应予以调试。
实验4循环结构程序设计
一、实验目的
1.通过本实验,加深对循环控制结构有关概念的理解。
2.掌握二重循环结构程序的设计方法。
二、实验内容
1.阶乘累加问题。
编写程序,求1!
+2!
+3!
+…+n!
的值。
2.取彩球问题。
有12个彩球:
3个白色,5个红色,4个黄色,从中任意取n个球
,求出所有不同的取法。
三、实验指导
1.阶乘累加问题
1)编程分析
(1)本实验内容为求解阶乘问题。
(2)求n!
用一个循环即可实现。
(3)求1!
+2!
+3!
+…+n!
的值,需要在求阶乘程序之外增加一个外重循环。
2)参考程序
(略)
3)程序调试
(1)输入一个不大的正整数,分析程序执行结果。
(2)输入一个零或者负数,分析程序执行结果。
(3)输入一个很大的正整数,分析程序执行结果。
(4)当程序结果不符合要求时,修改程序,直到对任何输入数据都能输出正确的执行结果,或者给出一个明确的提示信息。
例如,当输入数据非法时,给出一个错误的提示信息。
2.取彩球问题
1)编程分析
本题用到“穷举”算法。
穷举的基本思想是对问题的所有可能性一一测试,直到找到解或将全部可能状态都测试过为止。
“穷举”的核心是依次测试循环体。
循环控制有两种办法:
计数法和标志法。
计数法要先确定循环次数,然后逐次测试,完成测试次数后循环结束;标志法是达到某一目标后循环结束。
2)参考程序
(略)
3)程序调试
(1)输入不小于2并且不大于12的整数值,查看并分析程序结果。
(2)输入小于2或者大于12的整数值,查看并分析程序结果。
(3)修改程序,使得程序运行时只接受
的输入值,并能获得正确结果。
实验5数组
一、实验目的
1.了解数组的特点,掌握一维数组的定义、初始化及其使用方法。
2.掌握二维数组的定义、初始化及其使用方法。
3.能用一维数组和二维数组解决简单的实际问题。
二、实验内容
1.鞍点问题
在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的鞍点。
要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。
2.选择法排序问题
将存储在一维数组中的10个整数用选择法进行排序。
三、实验指导
1.鞍点问题
1)编程分析
(1)对二维数组按行处理。
(2)对每一行首先找出它的最大值元素,然后看它在该列上是否为最小值,若是,则找到一个鞍点。
(3)找到鞍点后输出元素值及其所在的行列值。
2)参考程序
(略)
3)程序调试
(1)输入有鞍点的一组数据,查看并分析程序的运行结果。
例如:
98021540
60-60891
210-310189
(2)输入没有鞍点的一组数据,查看并分析程序的运行结果。
例如:
98021540
60-601891
210-310189
2.选择法排序问题
1)编程分析
(1)我们已经学习了冒泡法排序,冒泡法排序依次,就有可能交换一次,需要交换的次数越多,效率越低。
(2)选择法的基本思路是:
第一趟,从所有元素中选择一个最小元素后放在a[0]中,最多交换一次;第二趟,从a[1]开始到最后的各元素中选择一个最小元素,放在a[1]中;以此类推,M个数需要进行M-1趟比较,但交换的次数比冒泡排序法少得多。
2)参考程序
(略)
3)程序调试
(1)运行程序,任意输入10个整数,查看并分析程序执行结果。
(2)运行程序,输入多余10个的整数,查看并分析程序执行结果。
(3)运行程序,输入一组升序排列的有序整数,查看并分析程序执行结果。
(4)运行程序,输入一组降序排列的有序的整数,查看并分析程序执行结果。
实验6函数
一、实验目的
1.掌握自定义函数的一般结构及定义函数和函数调用的方法。
2.熟练掌握一维数组作函数的参数时函数的定义和调用方法,熟悉用函数求解二维数组问题的函数定义及调用方法。
二、实验内容
1.选择法排序函数的定义及使用
编写一个用选择法对一维数组升序排序的函数,并在主函数中调用该排序函数,实现对任意20个整数的排序。
三、实验指导
1.选择法排序函数的定义及使用
1)编程分析
这是一维数组作函数参数的问题。
(1)设计一个对一维数组的前n个数用选择法进行排序的函数select()。
select()函数有两个形参,一个是一维数组形参,一个是排序元素数形参。
select()函数不需要返回值,函数类型说明为void型。
(2)在进行函数调用时,实参和形参要按照参数的意义在位置上对应一致。
2)参考程序
(略)
3)程序调试
(1)运行程序,任意输入20个整数,查看并分析程序执行结果。
(2)把主函数中的函数调用select(M,a)改为select(M,&a[0]),用
(1)中使用的数据运行程序,查看并分析程序执行结果。
(3)把主函数中的函数调用select(M,a)改为select(M,a[0]),用
(1)中使用的数据运行程序,查看并分析程序执行结果。
(4)把主函数中的函数调用select(M,a)改为select(a,M),用
(1)中使用的数据运行程序,查看并分析程序执行结果。
实验7指针
一、实验目的
1.掌握指针变量的定义和基本使用方法。
2.熟悉指针和一维数组的关系,熟练使用指针变量访问一维数组元素。
3.熟练掌握用简单指针变量作函数的参数时函数的定义和调用方法。
4.明确数组名作函数的参数和指向数组的指针作函数的参数的异同,学会相关的函数定义和调用。
二、实验内容
1.用指针法在一维有序数组中插入数据
如下是具有10个整数的升序数列,存储在一维数组中,要求在其中插入任意一个整数后数列仍然有序。
数列:
10,20,30,40,50,60,70,80,90,99。
2.数据插入函数
编写在一维有序数组中插入数据的函数insert(),并调用该函数实现数据插入。
要求插入数据后的数组仍然有序。
三、实验指导
1.用指针法在一维有序数组中插入数据
1)编程分析
按照下标访问数组元素的方法,用指针解决该问题。
2)参考程序
(略)
2.数据插入函数
1)编程分析
(1)在实验内容1中,解决了用指针法在一维有序数组中插入数据的问题。
现只需对数据的插入处理部分函数化即可。
(2)插入函数insert()需要有三个形参:
第一个int型简单形参,表示要插入的数据;第二个int型简单形参,表示数组中数据的个数;第三个为int型指针形参,它将指向一个一维数组。
(3)在进行函数调用时insert()函数的第一个实参为要插入的数据:
第二个实参是数组数据个数;第三个实参是数组名,即数组首地址。
2)参考程序
(略)
实验8线性表的顺序存储系统维护
一、实验目的
1.掌握线性表的顺序存储的定义和基本使用方法。
2.掌握线性表的顺序存储存储单元的排列特点。
3.掌握线性表的顺序存储系统的建立、查找、修改、插入、删除操作,学会相关的函数定义和调用。
二、实验内容
1.建立一个顺序表。
2.能够对建立的顺序表进行查找、修改、插入、删除等操作。
当输入指令错误时,能够提示错误信息。
主函数中可以选择由switchcase语句构成主菜单,再根据提示进行相应操作。
3.使用C语言程序编写。
三、实验指导
1)编程分析
(1)在线性表的建立时,可直接用数组赋初值;
(2)在查找功能中要实现的功能为:
当能找到时该值时返回该值所在节点,找不到时返回-1;
(3)修改功能是在查找的基础上,将找到的值加以修改;
(4)在插入功能中要实现的功能为:
在找到指定节点后,当线性表满时,提示不能插入,当线性表不满时,插入数据;
(5)删除功能主要实现:
当线性表为空或者删除位置超出线性表长度时,都显示位置错误,其他情形进行删除操作。
2)参考程序
(略)
实验9线性表的链式存储系统维护
一、实验目的
1.掌握线性表的链式存储的定义和基本使用方法。
2.掌握线性表的链式存储存储单元的排列特点。
3.掌握线性表的链式存储系统的建立、遍历、插入、查找、删除操作,学会相关的函数定义和调用。
二、实验内容
1.建立一个链表。
2.能够对建立的链表进行查找、修改、插入、删除等操作。
当输入指令错误时,能够提示错误信息。
主函数中可以选择由switchcase语句构成主菜单,再根据提示进行相应操作。
3.使用C语言程序编写。
三、实验指导
1)编程要求
(1)以循环的方式建立一个有表头的链表;
(2)遍历链表,并计算链表结点个数;
(3)在查找功能中要实现:
当能找到时打印该值的前驱结点,找不到时输出“没找到”;
(4)在插入功能中要实现:
在某个特定的结点之后插入一个结点;
(5)在删除功能主要实现:
删除特定值的结点,注意区分该节点是否为链表结尾。
2)参考程序
(略)
实验10二叉树的遍历
一、实验目的
1.理解二叉树的原理,掌握二叉树的存储方法。
2.掌握二叉树前、中、后序顺序遍历的过程。
3.掌握前、中、后序遍历二叉树程序的编写,并用递归与非递归方法分别实现。
二、实验内容
1.输入数据建立一棵二叉树。
2.输出其前、中、后序遍历的结果,分别用递归与非递归方法实现。
3.使用C语言程序编写。
三、实验指导
1)编程分析
(1)在二叉树的建立时,先用递归算法建立一颗二叉树,以所输入的字母为其数据项,当输入为#时,所对应的节点为空;
(2)分别以前、中、后序遍历二叉树,打印相应的节点值。
2)参考程序
(略)
实验11二叉排序树系统维护
一、实验目的
1.掌握二叉排序树定义和基本使用方法。
2.掌握二叉排序树存储数据的排列特点。
3.掌握二叉排序树系统的建立、插入、查找、替换、删除操作,学会相关的函数定义和调用。
二、实验内容
1.输入数据自行建立一棵二叉排序树。
2.能够对建立的二叉排序树进行查找、插入、替换、删除等操作。
当输入指令错误时,能够提示错误信息。
主函数中可以选择由switchcase语句构成主菜单,再根据提示进行相应操作。
3.使用C语言程序编写。
三、实验指导
1)编程分析
(1)在建立一棵二叉排序树时,可以采用反复调用插入函数直到整个二叉排序树建立完成;
(2)查找功能主要实现:
若找到返回该节点指针并打印“找到了”,否则返回空并打印“没找到”;
(3)在删除时,要充分考虑到被删除节点的各种情况:
是否有左子女,是否有右子女,是否有双亲;
(4)替换功能的实质是将一个节点删除,然后再插入一个新节点。
2)参考程序
(略)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言与数据结构 实验指导 语言 数据结构 实验 指导