C++程序设计谭浩强版实验指导书.docx
- 文档编号:8389645
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:13
- 大小:23.69KB
C++程序设计谭浩强版实验指导书.docx
《C++程序设计谭浩强版实验指导书.docx》由会员分享,可在线阅读,更多相关《C++程序设计谭浩强版实验指导书.docx(13页珍藏版)》请在冰豆网上搜索。
C++程序设计谭浩强版实验指导书
《C++程序设计》
实验教学指导书
课程编号:
?
?
?
?
?
撰写人:
朱世华
审核人:
前言
程序设计是一门实践性很强的课程,通过实验可以巩固和加强课堂教学内容,提高学生实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定重要的基础。
因此,学生在进行理论知识学习的同时,必须十分重视实践环节----上机。
上机实验时应该一人一组,独立上机。
在上机过程中出现的问题,一般应自己独立处理,学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。
上机前应事先作好准备工作,以提高上机实验的效率,准备工作至少应包括:
(1)复习和掌握与本实验有关的教学内容。
(2)准备好上机所需的程序。
(3)对运行中可能出现的问题应事先做出估计;对程序中有疑问的地方,应做上记号,以便上机时给予注意。
(4)准备好调试和运行时所需的数据。
实验设备与环境:
1、硬件配置
PentiumⅡ以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于32MB,硬盘自由空间不少于60MB。
推荐配置为内存256MB(或以上),硬盘自由空间1GB以上。
2、软件配置
操作系统:
WindowsXP,Windows2000以上版本
开发环境:
MicrosoftVisualC++2010以上版本。
实验一VisualC++2010的基本用法1
实验二数据类型、运算符和表达式4
实验三三种基本结构的实现17
实验四三种基本结构的实现29
实验六指针13
实验七函数14
实验八结构和联合17
实验九类与对象20
实验十综合实验23
实验一VisualC++2010的基本用法
一、实验目的
1.熟悉VisualC++2010集成开发环境的基本命令和功能键。
2.学习完整的C++程序开发过程。
3.理解简单的C++程序结构。
二、实验内容与步骤
本次实验将学习有关VisualC++开发环境的一些知识,并尝试实现一个简单的DOS程序和Windows程序。
通过本次实验,可以了解用VisualC++开发应用程序的全过程。
1、熟悉VisualC++开发环境
我们选择VisualC++那一项就可以了。
下图是VS2010打开后的画面,当然可能你的界面跟我的不一样,没关系,那只是设置问题。
菜单栏我们常用的是File,View和Debug菜单下的菜单项。
工具栏各项其实在菜单栏都有与它们对应的菜单项,功能是一样的。
左侧面板可以放多个视图,我这里放了解决方案浏览器、类视图和资源视图,解决方案浏览器中我们可以看到所有头文件和源文件构成的树,头文件就是.h后缀的文件,源文件就是.cpp后缀的文件,类视图中显示了每个工程的每个类,也是树状结构,在解决方案浏览器或类视图中双击每一项,中间区域都会打开相应的文件或者到类的位置。
资源视图中显示了界面工程中使用的一些界面资源。
中间区域默认是打开startpage,打开一个工程后我们在左侧面板上双击某项时,中间区域会出现相应的界面。
右侧面板上有个Toolbox,是在界面工程中用来往界面资源模板上添加控件的,里面包含了各种控件,直接拖到模板上就行了。
底侧还有几个标签,其中一个是output,这是输出视图,用来输出程序运行信息和我们程序中写的一些调试信息,还有一个FindResult视图,用来显示我们搜索任何字母或单词的结果。
File->New->Project项可以创建一个工程,也可以在startpage中点击NewProject...,然后出现的NewProject窗口中有多个工程类型可以选择,Win32ConsoleApplication是Win32控制台程序,MFCApplication是MFC应用程序,可以建立以开发界面程序,Win32Project是Win32程序,EmptyProject是空程序,MFCDLL用来建立生成动态链接库的工程,其它的不常用就不介绍了。
我们要建立一个没有应用程序界面的只有Dos命令行界面的工程就选Win32ConsoleApplication项,我们学习C++基础知识用这个就可以了。
它跟Win32Project的区别是,它的入口是main函数,而Win32Project的入口是WinMain函数。
File->Open->Project/Solution可以打开以前建立的工程或者解决方案,一个解决方案中可以包含多个工程,你可以把它理解为多个有关系或者没关系的工程的集合,有时把多个工程放到一个解决方案里调试起来很方便。
在View下的菜单项我们就可以控制它。
View->SolutionExplorer可以打开或关闭解决方案浏览器视图,View->ClassView用来控制类视图的显示,View->ResourceView控制资源视图的显示,当然只有界面工程的资源视图中才会有内容。
View->Output和View->FindResults等项大家应该也知道它们的含义了吧。
Debug->StartDebugging(快捷键是F5)用来开始调试,Debug->ToggleBreadpoint(快捷键是F9)用来设置断点,设置断点后然后开始调试,程序运行到断点时会停下来,我们用鼠标放到断点处的各个变量上时可以看到当时这些变量的值。
Debug->StartWithoutDebugging表示不调试直接运行,也就是到断点处也不会停止运行。
Debug->StepInto(快捷键是F11)用来单步执行,遇到子函数就进入并且继续单步执行;Debug->StepOver(快捷键是F10)也是单步执行,但在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完而跳到下一步,也就是把子函数整个作为一步。
工具栏上有个下拉列表框,它包含有Debug、Release和ConfigurationManager,选择Debug时为调试模式,生成的可执行程序中包含调试信息,我们可以调试并清楚的看到变量值,选择Release时生成的可执行程序中不含调试信息,在设置断点后看到的变量值可能不准确。
msdn帮助可以点Help->ViewHelp(快捷键是F1),也可以点开始->MicrosoftVisualStudio2010->MicrosoftVisualStudio2010Documentation打开。
2、控制台应用程序的建立
用Appwizard建立一个控制台应用程序,在显示器上输出“Hello,World!
”。
(1)创建项目(project)
首先创建一个项目,用来管理用户的应用程序。
创建项目的步骤为:
1启动visualStudio2010。
2从主菜单中选择菜单项“File”→“New”,打开“New”对话框。
3选择“Projects”标签,从项目列表中单击“Win32ConsoleApplication”选项。
在“projectname”编辑框中键入项目的名字,如“hello”,系统将自动为用户的项目分配一个默认的目录。
也可以在“Location”编辑框中重新输入项目存放路径。
单击“OK”按钮继续。
(2)编辑源程序
在项目中添加一个文件:
1从主菜单中选择菜单项“File”→“New”,打开“New”对话框。
2在“New”对话框中选择“File”标签,单击“C++SourceFile”选项,建立源文件(扩展名为.cpp)。
选中“AddtoProject”复选框。
在右边的“File name”编辑框中为文件指定一个名字,如“Hello”,系统将自动加上后缀“.cpp”。
这时在编辑窗口将自动打开一个新的空白文件,在文件中输入源程序。
本例中输入以下内容:
#include<>
voidmain()
{
cout<<〞hello,world!
〞< } 仔细检查输入的内容,确保内容正确。 (3)保存源文件 单击工具栏中的“save”图标,或选择菜单项“File”→“Save”保存源文件。 (4)编译源文件 选择菜单项“Build”→“Compile”来编译源文件,如果输入的内容没有错误,那么,在屏幕下方的输出窗口将会显示: error(s),0warning(s) 如果在编译时得到错误或警告,则表明源文件出现错误,检查源文件,改正错误后再编译,直至无误。 (5)链接程序 选择菜单项“Build”→“Build”链接程序,如果链接过程中没有错误,则在输出窗口会显示: error(s),0warning(s) 如果有错误,应改正,然后重复(4)、(5),直至无误。 (6)运行程序 选择菜单项“Build”→“Execute”运行程序,将显示一个类似于DOS的窗口,在窗口中第一行输出“hello,world! ”,第二行输出“Pressanykeytocontinue”,提示用户按任意键回到开发环境。 3、编写一个简单的C++程序 要求: 输入圆的半径,计算圆的周长和面积。 步骤: (1)按照上面的步骤创建一个项目,名字为“Circle”。 (2)在项目中增加一个文件,命名为“”。 (3)在文件中输入源程序如下: #include<> constdoublePI=; < else cout< } 判断素数的算法,在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。 这里要注意函数的定义声明的方法和格式。 2、分析程序的运行结果 输入下列程序,运行它,分析得到的结果。 #include<> intn=0; intfunc(intx=10); voidmain() { inta,b; a=5; b=func(a); cout<<”\nlocala=”< <<”globaln=”< a++; b=func(a); cout<<”\nlocala=”< <<”globaln=”< func(); } intfunc(intx) { inta=1; staticintb=10; a++; b++; x++; n++; cout<<”\nlocala=”< <<”parameterx=”< returna+b; } 运行该程序,得到执行结果。 分析得到的结果,说明为什么得到这样的结果。 3、递归函数与非递归函数。 编写一个函数,求从n个不同的数中取r个数的所有选择的个数。 其个数值为: n! Crn= r! *(n-r)! 其中: n! =n*(n-1)*(n-2)*……..*1。 要求: (1)分别用递归和非递归两种方式完成程序设计; (2)主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入00时,程序结束; (3)能检查输入数据的合法性,要求n>=1并且n>=r; (4)注意整数能存放的数据范围有限,如何解决? 提示: (1)可以用double数据类型来存放函数的计算结果。 (2)递归结束条件: 如果r=0,则C(n,r)=1; 如果r=1,则C(n,r)=n。 测试数据: 输入: 53 输出: 10 输入: 1020 输出: IputInvalid1 输入: 503 输出: 1.#IND 输入: 00 IputInvalid1 程序结束 思考问题: (1)对各种数据类型的字长是否有了新的认识? (2)递归函数的书写要点是什么? (3)递归和非递归函数各有哪些好处? 1、求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个函数求最小公倍数。 (提示: 可以用下面的方法求: 一、利用辗除法或其它方法求得最大公约数; 二、最小公倍数等于两数之积除以最大公约数。 ) 要求: 两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。 实验八结构和联合 一、实验目的 1、掌握结构体类型变量的定义和使用。 2、掌握结构数组的概念和使用。 3、掌握链表的概念,初步学会对链表进行操作。 4、掌握联合体的概念与应用。 二、试验内容与步骤 1、输入和运行以下程序。 #include<> uniondata { shortints[2]; floata; intb; charc[4]; }u; voidmain() { cin>>[0]>>[1]; cout<<"s[0]="<<[0]<<"s[1]="<<[1]< <<"a="<<<<"b="<<< <<"c[0]="<<[0]<<"c[1]="<<[1]< <<"c[2]="<<[2]<<"c[3]="<<[3]< } 输入两个整数10000、20000给[0]和[1],分析运行结果。 然后将cin语句改为: cin>>;输入60000给b,分析运行结果。 2、打印学生成绩单,内容包括学号、姓名、三门课(数学MT、英语EN、计算机COMPU)的成绩。 计算每个学生三门课程的总分SUM和平均分AVER。 若三门课成绩都在90分以上者,输出“Y”;否则输出“N”,并打印学生成绩单,格式如下: NUMNAMEMTENCOMPSUMAVER>=90 9501Liufan9598Y 9502Zhanghua9582N 9503Liming688985242N 输入以下程序并调试运行。 #include<> structstudent { intnum; charname[15]; floatscore[3]; floatsum; floataver; charch; }; voidmain() { studentstu[3]; inti,j; for(i=0;i<3;i++) { cin>>stu[i].num; cin>>stu[i].name; for(j=0;j<3;j++) cin>>stu[i].score[j]; } for(i=0;i<3;i++) { stu[i].sum=0; stu[i].ch='Y'; for(j=0;j<3;j++) { stu[i].sum+=stu[i].score[j]; if(stu[i].score[j]<90) stu[i].ch='N'; } stu[i].aver=stu[i].sum/3; } cout<<"NUMNAMEMTENCOMPSUMAVER>=90"< for(i=0;i<3;i++) { cout< < < < } } 3、设计一个单向链表。 从标准输入读取若干整数,建立链表,每次读入的数放入链表结尾。 当用户输入0时,结束链表的建立工作。 然后从前往后依次输出链表结点中的内容。 提示: (1)链表结点空间动态申请。 (2)因为每次新结点插入在表尾,所以应设一个指针总是指向当前的表尾。 (3)处理申请不到空间的情况。 测试数据: 程序输出: 请输入若干整数建立链表(输入0结束): 用户输入: 12345670 程序输出: 1234567 思考问题: 如果是双向链表,程序要做哪些改动? 4、有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课的平均成绩,以及最高分学生的数据(包括学号、姓名、3门课的成绩、平均分数)。 要求: 用input函数输入10个学生的数据;用average函数求平均分;用max函数找出最高分的学生数据;平均分和最高分学生的数据都在主函数中输出。 5、建立一个链表,每个结点包括: 学号、姓名、性别、年龄、。 输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。 实验九类与对象 一、实验目的 1、掌握类和对象的定义和使用。 2、理解构造函数和析构函数的作用。 3、学习使用静态成员和内联成员函数。 4、掌握从现有类派生出新类的方式。 5、了解基类成员在派生类中的访问控制。 6、了解虚函数对多态性的支持。 二、实验内容与步骤 1、构造函数和析构函数的调用。 输入和运行以下程序。 #include<> classA{ int*a; public: A(intx) { a=newint(x); cout<<”Constructor: ”<<*a< } ~A(){cout<<”Destructor: ”<<*a< }; voidmain() { Ax(3),*p; p=newA(5); deletep; } 2、派生类构造函数和析构函数的调用。 输入以下程序并调试运行。 #include<> classA{ inta; public: A(intaa=0): a(aa) {cout<<”ConstructorA:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 谭浩强版 实验 指导书