当前位置:首页 >> 理学 >> 《C++程序设计》谭浩强版实验指导书

《C++程序设计》谭浩强版实验指导书


《C++程序设计》 实 验 教 学 指 导 书
课程编号:?????

撰写人:朱世华 审核人:

前言
程序设计是一门实践性很强的课程, 通过实验可以巩固和加强课堂教学内容, 提高学生 实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定重要的基础。因此,学生 在进行理论知识学习的同时,必须十分重视实践环节--

--上机。 上机实验时应该一人一组, 独立上机。 在上机过程中出现的问题, 一般应自己独立处理, 学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。 上机前应事先作好准备工作,以提高上机实验的效率,准备工作至少应包括: (1) 复习和掌握与本实验有关的教学内容。 (2) 准备好上机所需的程序。 (3) 对运行中可能出现的问题应事先做出估计;对程序中有疑问的地方,应做上记 号,以便上机时给予注意。 (4) 准备好调试和运行时所需的数据。

实验设备与环境: 1、硬件配置
PentiumⅡ以上 PC 兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于 32MB,

硬盘自由空间不少于 60MB。推荐配置为内存 256MB(或以上) ,硬盘自由空间 1GB 以上。 2、软件配置 操作系统:Windows XP,Windows 2000 以上版本 开发环境:Microsoft Visual C++ 2010 以上版本。

目录
实验一 Visual C++ 2010 的基本用法 ....................................................1 实验二 数据类型、运算符和表达式 ....................................................5 实验三 三种基本结构的实现 1 .............................................................8 实验四 三种基本结构的实现 2 ...........................................................10 实验六 指 针.........................................................................................14 实验七 函数...........................................................................................15 实验八 结构和联合 ..............................................................................18 实验九 类与对象 ..................................................................................21 实验十 综合实验 ..................................................................................24

《C++程序设计》实验指导

实验一
一、实验目的

Visual C++ 2010 的基本用法

1. 熟悉 Visual C++2010 集成开发环境的基本命令和功能键。 2. 学习完整的 C++ 程序开发过程。 3. 理解简单的 C++ 程序结构。

二、实验内容与步骤
本次实验将学习有关 Visual C++ 开发环境的一些知识,并尝试实现一个简单的 DOS 程 序和 Windows 程序。通过本次实验,可以了解用 Visual C++ 开发应用程序的全过程。 1、熟悉 Visual C++ 开发环境 我们选择 Visual C++那一项就可以了。下图是 VS2010 打开后的画面,当然可能你的界面跟 我的不一样,没关系,那只是设置问题。

菜单栏我们常用的是 File,View 和 Debug 菜单下的菜单项。工具栏各项其实在菜单栏都有 与它们对应的菜单项,功能是一样的。左侧面板可以放多个视图,我这里放了解决方案浏 览器、类视图和资源视图,解决方案浏览器中我们可以看到所有头文件和源文件构成的树, 头文件就是.h 后缀的文件,源文件就是.cpp 后缀的文件,类视图中显示了每个工程的每个 类,也是树状结构,在解决方案浏览器或类视图中双击每一项,中间区域都会打开相应的
1

《C++程序设计》实验指导

文件或者到类的位置。资源视图中显示了界面工程中使用的一些界面资源。中间区域默认 是打开 start page,打开一个工程后我们在左侧面板上双击某项时,中间区域会出现相应 的界面。右侧面板上有个 Toolbox,是在界面工程中用来往界面资源模板上添加控件的,里 面包含了各种控件,直接拖到模板上就行了。底侧还有几个标签,其中一个是 output,这 是输出视图, 用来输出程序运行信息和我们程序中写的一些调试信息, 还有一个 Find Result 视图,用来显示我们搜索任何字母或单词的结果。 File->New->Project 项可以创建一个工程,也可以在 start page 中点击 New Project...,然后出现的 New Project 窗口中有多个工程类型可以选择, Win32 Console Application 是 Win32 控制台程序,MFC Application 是 MFC 应用程序,可以建立以开发界 面程序,Win32 Project 是 Win32 程序,Empty Project 是空程序,MFC DLL 用来建立生成 动态链接库的工程,其它的不常用就不介绍了。我们要建立一个没有应用程序界面的只有 Dos 命令行界面的工程就选 Win32 Console Application 项,我们学习 C++基础知识用这个 就可以了。它跟 Win32 Project 的区别是,它的入口是 main 函数,而 Win32 Project 的入 口是 WinMain 函数。 File->Open->Project/Solution 可以打开以前建立的工程或者解决方案,一个解 决方案中可以包含多个工程,你可以把它理解为多个有关系或者没关系的工程的集合,有 时把多个工程放到一个解决方案里调试起来很方便。 在 View 下的菜单项我们就可以控制它。View->Solution Explorer 可以打开或关闭解决方 案浏览器视图,View->Class View 用来控制类视图的显示,View->Resource View 控制资 源 视 图 的 显 示 , 当 然 只 有 界 面 工 程 的 资 源 视 图 中 才 会 有 内 容 。 View->Output 和 View->FindResults 等项大家应该也知道它们的含义了吧。 Debug->Start Debugging (快捷键是 F5) 用来开始调试, Debug->Toggle Breadpoint (快捷键是 F9)用来设置断点,设置断点后然后开始调试,程序运行到断点时会停下来, 我们用鼠标放到断点处的各个变量上时可以看到当时这些变量的值。 Debug->Start Without Debugging 表示不调试直接运行,也就是到断点处也不会停止运行。Debug->Step Into(快 捷键是 F11)用来单步执行,遇到子函数就进入并且继续单步执行;Debug->Step Over(快 捷键是 F10)也是单步执行,但在单步执行时,在函数内遇到子函数时不会进入子函数内单 步执行,而是将子函数整个执行完而跳到下一步,也就是把子函数整个作为一步。 工具栏上有个下拉列表框,它包含有 Debug、Release 和 Configuration Manager, 选择 Debug 时为调试模式,生成的可执行程序中包含调试信息,我们可以调试并清楚的看 到变量值,选择 Release 时生成的可执行程序中不含调试信息,在设置断点后看到的变量 值可能不准确。 msdn 帮助可以点 Help->View Help (快捷键是 F1 ) ,也可以点开始 ->Microsoft Visual Studio 2010->Microsoft Visual Studio 2010 Documentation 打开。 2、控制台应用程序的建立 用 Appwizard 建立一个控制台应用程序,在显示器上输出“Hello,World! ” 。 (1)创建项目(project) 首先创建一个项目,用来管理用户的应用程序。创建项目的步骤为: ① 启动 visual Studio 2010。 ② 从主菜单中选择菜单项“File” →“New”,打开“New”对话框。 ③ 选择“Projects”标签,从项目列表中单击“Win32 Console Application”选项。 在“project name”编辑框中键入项目的名字,如“hello” ,系统将自动为用户的 项目分配一个默认的目录。也可以在“Location”编辑框中重新输入项目存放路径。

2

《C++程序设计》实验指导

单击“OK”按钮继续。 (2)编辑源程序 在项目中添加一个文件: ① 从主菜单中选择菜单项“File”→“New”,打开“New”对话框。 ② 在“New”对话框中选择“File”标签,单击“C++ Source File”选项,建立源 文件(扩展名为.cpp) 。选中“Add to Project”复选框。在右边的“File name” 编辑框中为文件指定一个名字,如“Hello” ,系统将自动加上后缀“.cpp” 。 这时在编辑窗口将自动打开一个新的空白文件,在文件中输入源程序。 本例中输入以下内容: #include <iostream.h> void main() { cout<<〞hello,world!〞<<endl; } 仔细检查输入的内容,确保内容正确。 (3)保存源文件 单击工具栏中的“save”图标,或选择菜单项“File”→“Save”保存源文件。 (4)编译源文件 选择菜单项“Build‖→―Compile Hello.cpp‖来编译源文件,如果输入的内容没有错误, 那么,在屏幕下方的输出窗口将会显示: hello.obj--0 error(s),0 warning(s) 如果在编译时得到错误或警告,则表明源文件出现错误,检查源文件,改正错误后再编 译,直至无误。 (5)链接程序 选择菜单项“Build‖→―Build Hello.exe‖链接程序,如果链接过程中没有错误,则在输 出窗口会显示: hello.exe--0 error(s),0 warning(s) 如果有错误,应改正,然后重复(4) 、 (5) ,直至无误。 (6)运行程序 选择菜单项“Build‖→―Execute Hello.exe‖运行程序,将显示一个类似于 DOS 的窗口, 在窗口中第一行输出 “hello,world!” ,第二行输出“Press any key to continue” ,提示 用户按任意键回到开发环境。 3、编写一个简单的 C++ 程序 要求:输入圆的半径,计算圆的周长和面积。 步骤: (1) 按照上面的步骤创建一个项目,名字为“Circle” 。 (2) 在项目中增加一个文件,命名为“Circle.cpp” 。 (3) 在文件中输入源程序如下: #include<iostream.h> const double PI = 3.14159; // 定义符号常量 void main( ) { double radius; // 定义半径 double perimeter, area ; // 定义周长和面积
3

《C++程序设计》实验指导

cout<<"请输入圆的半径:"; cin>>radius; perimeter=2*PI*radius; // 计算周长 area=PI*radius*radius; // 计算面积 cout<<"圆的周长为:"<<perimeter; cout<<"\n 圆的面积为:"<<area<<endl; } (4) 编译、链接程序,直到没有错误。 (5) 运行程序,输入测试数据,测试程序的功能。 测试数据: 输入:5 输出: 圆的周长为: 31.4159 圆的面积为: 78.5397 输入:7 输出: 圆的周长为: 43.9823 圆的面积为: 153.938 思考问题: (1) 程序中为什么要包含头文件 iostream.h? (2) 建立控制台应用程序的一般步骤是怎样的?

4

《C++程序设计》实验指导

实验二
一、实验目的

数据类型、运算符和表达式

1. 掌握 Visual C++ 基本数据类型的字节宽度和范围表示,熟悉如何定义一个整型、字符 型和实型变量,以及对它们赋值的方法。 2. 掌握不同类型数据之间赋值的规律。 3. 学会使用 C++的有关算术运算符,以及包含这些运算符的表达式,特别是自增(++)和 自减(――)运算符的使用。 4. 进一步熟悉 C++程序的编辑、编译、连接和运行的过程。

二、实验内容与步骤
1、基本数据类型的长度 编写一个程序, 输出基本数据类型 char、 short、 int、 long、 float、 double 和指针类型 void*、 char*、short*、int*、long*、float*、double*的数据类型的长度。 要求: 弄清所使用的系统上运行的 C++编译器中每个基本数据类型的长度。 提示: 利用运算符 sizeof(数据类型名)来得到各个数据类型的长度。 思考问题: 为什么所有的指针长度都一样? 2、整型、字符型变量的定义及赋值 (1) 输入并调试运行下面的程序 #include<iomanip.h> void main( ) { char c1, c2; c1=‘a‘; c2=‘b‘; cout<<c1<<setw(5)<<c2<<endl; } ① 运行此程序,写出执行结果。 ② 在此基础上增加一个语句: cout<<(int)c1<<setw(5)<<(int)c2<<endl; 再运行,并观察结果。 ③ 将第 1 行改为; int c1, c2; 再运行,并观察结果。 ④ 将第 2、3 行改为: c1= a; //不用单撇号
5

《C++程序设计》实验指导

c2= b; 再使之运行,分析其运行结果。 ⑤ 将第 2、3 行改为: c1=‖a‖; // 用双撇号 c2=‖b‖; 再使之运行,分析其运行结果。 ⑥ 将第 2、3 行改为: c1=300; //用大于 127 的整数 c2=400; 再使之运行,分析其运行结果。 (2) 输入并调试运行下面的程序 #include<iostream.h> void main( ) { char c1=‘a‘, c2=‘b‘, c3=‘c‘, c4=‘\101‘, c5= ‘\116‘; cout <<c1<<c2<<‖\t‖<<c3<<‖\t‖<<c1<<c2<<c3<<endl; cout<<‖\t\b‖<<c4<<c5<<endl; } 要求:在实验前先分析程序,写出应得结果,实验时将二者对照。 (3) 输入并调试运行下面的程序 include<iomanip.h> void main( ) { int x, y, m, n; x = 8; y = 10; m = ++x; n = y++; cout<<x<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl; } ① 运行程序,注意 x、y、m、n 各变量的值。 ② 将第 4、5 行改为: m = x++; n = ++y; 再运行。 ③ 将程序改为: #include<iomanip.h> void main( ) { int x,y; x = 8; y = 10; cout<<x++<<setw(5)<<++y<<endl; }
6

《C++程序设计》实验指导

④ 在③的基础上,将 cout 语句改为: cout<<++x<<setw(5)<<++y<<endl; ⑤ 再将 cout 语句改为: cout<<x<<setw(5)<<y<<setw(5)<<x++<<setw<<y++<<endl; ⑥ 将程序改为: #include<iomanip.h> void main ( ) { int x, y, m=0, n=0; x = 8; y = 10; m += x++: n -= --y; cout<<x<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl; } 写出程序的执行结果。

7

《C++程序设计》实验指导

实验三
一、实验目的

三种基本结构的实现 1

1、 学会正确使用逻辑运算符和逻辑表达式。 2、 熟练掌握 if 语句和 switch 语句。 3、 学习调试程序。

二、实验内容与步骤
1、已知三个数 a、b、c,找出最大值放于 max 中。 (1) 输入并调试运行下面的程序: #include<iostream.h> void main() { int a,b,c,max; //定义四个整型变量 cin>>a>>b>>c; if(a>= b) max = a; //a>=b else max = b; //a<b if(c>max) max = c; //c 是最大值 cout<<"max="<<max<<endl; } (2) 若输入下列数据,分析程序的执行顺序并写出运行结果。 ① 1 2 3 ② 2 1 3 ③ 3 2 1 ④ 3 1 2 ⑤ 3 3 2 ⑥ 2 1 2 2、输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90 分以上(包括 90) :A 80 至 90(包括 80) :B 70 至 80(包括 70) :C 60 至 70(包括 60)D 60 分以下:E 输入以下程序并调试运行。
8

《C++程序设计》实验指导

#include<iostream.h> void main() { float score; char grade; cout<<"input a student score:"; cin>> score; if ( score <0 || score >100 ) cout<<"input error!"<<endl; else { switch ( int(score)/10 ) { case 10: case 9: grade = 'A';break; case 8: grade = 'B';break; case 7: grade = 'C';break; case 6: grade = 'D';break; default: grade = 'E'; } cout<<"the student scort:"<< grade <<endl; } } 输入测试数据,调试程序并写出结果。测试数据要覆盖所有路径,注意临界值,例如此 题中的 100 分、60 分、0 分以及小于 0 和大于 100 的数据。 3、有一函数: x ( x<1 ) y = 2x-1 ( 1≤x<10 ) 3x-11 ( x≥10 ) 用 cin 语句输入 x 的值,求 y 值。 运行程序,输入 x 的值(分别为 x<1、1≤x<10、x≥10 三种情况) ,检查输出的 y 值是 否正确。 思考问题: (1) if 语句和 switch 语句适合于什么情况? (2) 能否用 switch 语句完成对输入值的判断?

9

《C++程序设计》实验指导

实验四
一、实验目的

三种基本结构的实现 2

1、学会正确使用逻辑运算符和逻辑表达式。 2、理解并掌握程序的循环结构。 3、熟练掌握用 while 语句、do—while 语句和 for 语句实现循环的方法。 4、 掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等) 。 5、 进一步学习调试程序。

二、实验内容与步骤
1、打印 500 以内的“水仙花数” 。 “水仙花数”是一个 3 位数,其各位数立方和等于该数本 身。 输入以下程序并调试运行 #include <iostream.h> void main() { int i, j, k, n; for ( n = 100; n<=500; n++ ) { i = n/100; j = n/10-i*10; k = n%10; if ( n==i*i*i+j*j*j+k*k*k) cout<<n<<endl; } } 2、一个数如果恰好等于它的因子之和,这个数就称为完数。求 500 之内的所有完数。 输入以下程序并调试程序。 #include <iostream.h> void main() { int n, s, j; for ( n=1; n<=500; n++ ) { s=0; for ( j=1; j<n; j++) if ( n%j==0 ) s=s+j; if ( s==n )
10

《C++程序设计》实验指导

cout<<s<<endl; } } 3、任给一个的正整数,要求: (1) 求出它是几位数。 (2) 按逆序打印出各位数字。例如原数为 321,应输出 123。 (3) 除此之外,程序还应当对不合法的输入作必要的处理。例如:输入负数。 提示:利用 %、/ 运算符,循环迭代。 4、编写一个程序,循环从标准输入读入某雇员的工作时间(以小时计)和每小时的工资数, 计算并输出他的工资。若雇员月工作小时超过 40 小时,则超过部分按原工资的 1.5 倍 的加班工资来计算。若雇员月工作小时超过 50 小时,则超过 50 的部分按原工资的 3 倍的加班工资来计算。 而 40 到 50 小时的工资仍按照原工资的 1.5 倍的加班工资来计算。 要求: (1)分别用三种循环(for、while、do--while)完成程序要求。 (2)要求有输入提示和输出提示,如要输入雇员的工作时间和每小时的工资值时,可 以提示: ―请输入雇员的工作时间和小时工资:‖ 输出时,提示: ―雇员工资为:‖ (3)循环在用户输入的工作时间为 0 时结束。 测试数据: 输入:30 4 输出:120 输入:45 4.5 输出:213.75 输入:60 5 输出:425 输入:0 0 程序结束 思考问题: (1) 三种循环语句都适合于什么情况?如果已经知道要计算的雇员的数目(如 10 个) , 用哪种循环更方便? (2) while、do—while 的区别?

11

《C++程序设计》实验指导

实验五
一、实验目的

数 组

1、 掌握一维数组和二维数组的定义、赋值和输入输出的方法。 2、 掌握字符数组和字符串函数的使用。 3、 掌握与数组有关的算法(特别是排序算法和查找算法) 。

二、实验内容与步骤
1、输入一串字符,计算其中*字符的个数。 输入以下程序并调试运行。 #include <iomanip.h> void main( ) { char c[30]; int i , sum=0; cin>>setw(30)>>c; for ( i=0; c[i]!=‘\0‘; i++ ) if (c[i] == ?*?) sum=sum + 1; cout << c <<endl; cout << ―*字符的个数为:‖ << sum << endl ; } 2、输入一行字符,分别统计出其中的英文字母、数字和其他字符的个数。 在得到正确结果后,请修改程序使之能分别统计大小写字母、数字和其他字符的个数。 提示:用数组统计个数。 3、从键盘读入若干整数,使用选择排序方法将它们按由低到高排序输出。 要求:用一个数组存放各个整数,用 cin 语句输入。 提示:选择排序法的算法如下: (1) 从 n 个数中选择最小的一个,把它和第一个数组元素交换; (2) 从剩下的 n – 1 个数中选择最小的一个,把它和第二个数组元素交换; (3) 依此类推,直到从最后两个元素中选出倒数第二小的元素并把它和倒数第二个 元素交换为止。 测试数据: 程序先输出:请输入数据个数:: 用户输入: 5 程序再输出:请输入全部数据: 用户输入: 31 75 63 45 58 程序输出: 31 45 58 63 75 4、有若干个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几 个元素的值。如果该数不在数组中,则输出“无此数” 。
12

《C++程序设计》实验指导

要求:若干个数用赋初值的方法在程序中给出,要找的数用 cin 语句输入。 提示:折半查找法: 折半查找的思想为:在有序表中,取中间元素作为比较对象,若给定值与中间元素的关 键码相等, 则查找成功; 若给定值小于中间元素的关键码, 则在中间元素的左半区继续查找; 若给定值大于中间元素的关键码, 则在中间元素的右半区继续查找。 不断重复上述查找过程, 直到查找成功,或所查找的区域无数据元素,查找失败。 (1)low=0;high=length-1; //设置初始区间 (2)当 low>high 时,返回查找失败信息 //表空,查找失败 (3)low<=high,mid=(low+high)/2; //取中间 ① 若 kx<elem[mid],high=mid-1;转(2) //查找在左半区进行 ② 若 kx>elem[mid],low=mid+1;转(2) //查找在右半区进行 ③ 若 kx==elem[mid],返回数据元素在表中位置 //查找成功 测试数据: 例如,有序表{20,25,30,36,42,48,55,61,69,72,83,97} 程序先输出: 请输入一个整数: 用户输入: 72 程序则应输出: 数据 72 在有序表中的位置下标是 10。 用户输入: 35 程序则应输出: 在有序表中无此数! 5、将两个字符串链接起来。 要求:不使用 strcat 函数。 提示:定义两个字符型数组,找到第一个串的最后一个字符位置,将第二个串的字符依 次放入。注意串的结束标志“\0” 。 6、找出一个二维数组的“鞍点” ,即该位置上的元素在该行上最大,在该列上最小。也可能 没有鞍点。 提示: 用 cin 语句从键盘输入数组各个元素的值,检查结果是否正确。题目并未指定二维 数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当 准备许多种不同行数和列数的数组数据, 但这样的工作量太大, 一般来说不需要这样做, 只需要准备典型的数据即可。 如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用 cin 语句。请同学们修改程序以实现之。 测试数据: (至少应当准备两组测试数据) (1)二维数组有鞍点 9 80 205 40 90 -60 96 1 210 -3 101 89 (2)二维数组没有鞍点 9 80 105 40 90 -60 196 1 210 -3 101 89

13

《C++程序设计》实验指导

实验六
一、实验目的

指 针

1、 掌握指针的概念,会定义和使用指针变量。 2、 能正确使用数组的指针和指向数组的指针变量。 3、 能正确使用字符串的指针和指向字符串的指针变量。 4、 了解二级指针的概念及其使用方法。

二、实验内容与步骤
1、输入两个整数,按由大到小的顺序输出。 输入以下程序并调试运行。 #include<iomanip.h> void main() { int a, b; int * p=&a, *q=&b, *t; cout<<"请输入 a 和 b:"; cin>>a>>b; if ( a<b ) { t=p; p=q; q=t; } cout<<a<<setw(5)<<b<<endl; cout<<*p<<setw(5)<<*q<<endl; } 输入测试数据,分析运行结果。 2、将若干字符串按英文字典由小到大排序。 提示:利用字符指针数组存放若干字符串,字符串的比较和交换。 3、有 n 个人围成一圈,从第一个人开始报数(从 1 到 3) ,凡报到 3 的人退出圈子,问最后 留下的是原来第几号的那位。 4、编写程序,当输入整数 1—12(月份号)时,输出该月的英文名称,输入其他整数时结 束程序。 例如,输入“4” ,则应输出“April” 。输入“0” ,则退出程序,要求使用指针数组处理。 5、使用动态内存分配技术设计一个计算学生平均成绩的程序,学生个数和课程门数是任意 的,使用二维数组,程序按平均成绩从大到小输出每个学生的成绩。

14

《C++程序设计》实验指导

实验七
一、实验目的

函数

1、掌握函数的定义和调用方法。 2、掌握函数实参与形参的对应关系以及 C++的三种函数参数传递机制。 3、掌握函数嵌套调用和递归调用的方法。 4、掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。

二、实验内容与步骤
1、写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。 输入以下程序并调试运行。 #include<iostream.h> #include<math.h> #include<string.h> int prime(int number) { int flag=1, n; for ( n=2; n<= int(sqrt(number)) && flag == 1; n++) if (number%n ==0) flag = 0; return flag; } void main ( ) { int number; cout<<"请输入一个正整数:"; cin>>number; if (prime(number)) cout<<number<<"是素数."<<endl; else cout<<number<<"不是素数."<<endl; }

判断素数的算法,在以前学习循环的时候已经学过了,在这里只是把这个算法 用函数的形式表示出来 。这里要注意函数的定义 声明的方法和格式。 2、分析程序的运行结果 输入下列程序,运行它,分析得到的结果。 #include<iostream.h> int n=0;
15

《C++程序设计》实验指导

int func( int x=10 ); void main() { int a, b; a=5; b=func(a); cout<<‖\nlocal a=‖<<a<<endl<<‖local b=‖<<b<<endl <<‖global n=‖<<n<<endl; a++; b=func(a); cout<<‖\nlocal a=‖<<a<<endl<<‖local b=‖<<b<<endl <<‖global n=‖<<n<<endl; func(); } int func( int x ) { int a=1; static int b=10; a++; b++; x++; n++; cout<<‖\nlocal a=‖<<a<<endl<<‖local b=‖<<b<<endl <<‖parameter x=‖<<x<<endl; return a+b; }
运行该程序,得到执行结果。分析得到的结果,说明为什么得到这样的结果。

3、递归函数与非递归函数。 编写一个函数,求从 n 个不同的数中取 r 个数的所有选择的个数。其个数值为: n! r C n= r!*(n-r) ! 其中:n!=n*(n-1)*(n-2)*……..*1。 要求: (1) 分别用递归和非递归两种方式完成程序设计; (2) 主程序中设计一个循环,不断从输入接收 n 和 r 的值,计算结果并 输出,当用户输入 0 0 时,程序结束; (3) 能检查输入数据的合法性,要求 n>=1 并且 n>=r; (4) 注意整数能存放的数据范围有限,如何解决? 提示: (1) 可以用 double 数据类型来存放函数的计算结果。 (2) 递归结束条件:
16

《C++程序设计》实验指导

如果 r=0,则 C(n,r)=1; 如果 r=1, 则 C(n,r)=n。 测试数据: 输入:5 3 输出:10 输入:10 20 输出:Iput Invalid1 输入:50 3 输出:1.#IND 输入:0 0 Iput Invalid1 程序结束 思考问题: (1) 对各种数据类型的字长是否有了新的认识? (2) 递归函数的书写要点是什么? (3) 递归和非递归函数各有哪些好处?

5、 求两个整数的最大公约数和最小公倍数, 用一个函数求最大公约数, 用另一个函 数求最小公倍数。 (提示:可以用下面的方法求:
一、利用辗除法或其它方法求得最大公约数; 二、 最小公倍数等于两数之积除以最大公约数。 )

要求: 两个整数在主函数中输入,并传送给函数 1,求出的最大公约数返回主函数, 然后再和两个整数一起作为实参传递给函数 2,以求出最小公倍数,再返回到主 函数输出最大公约数和最小公倍数。

17

《C++程序设计》实验指导

实验八
一、实验目的

结构和联合

1、 掌握结构体类型变量的定义和使用。 2、 掌握结构数组的概念和使用。 3、 掌握链表的概念,初步学会对链表进行操作。 4、 掌握联合体的概念与应用。

二、试验内容与步骤
1、输入和运行以下程序。 #include<iostream.h> union data { short int s[2]; float a; int b; char c[4]; }u; void main() { cin>>u.s[0]>>u.s[1]; cout<<"s[0]="<<u.s[0]<<" s[1]="<<u.s[1]<<endl <<"a="<<u.a<<" b="<<u.b<<endl <<"c[0]="<<u.c[0]<<" c[1]="<<u.c[1]<<endl <<"c[2]="<<u.c[2]<<" c[3]="<<u.c[3]<<endl; } 输入两个整数 10000、20000 给 u.s[0]和 u.s[1],分析运行结果。 然后将 cin 语句改为: cin>>u.b;输入 60000 给 b,分析运行结果。 2、打印学生成绩单,内容包括学号、姓名、三门课(数学 MT、英语 EN、计算机 COMPU)的 成绩。计算每个学生三门课程的总分 SUM 和平均分 AVER。若三门课成绩都在 90 分以上 者,输出“Y”;否则输出“N” ,并打印学生成绩单,格式如下: NUM NAME MT EN COMP SUM AVER >=90 9501 Liufan 95 98 96.5 289.5 96.5 Y 9502 Zhanghua 95 82 86.5 263.5 87.8333 N 9503 Liming 68 89 85 242 80.6667 N 输入以下程序并调试运行。 #include <iomanip.h>

18

《C++程序设计》实验指导

struct student { int num; char name[15]; float score[3]; float sum; float aver; char ch; }; void main() { student stu[3]; int i,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<<"NUM NAME MT EN COMP SUM AVER >=90"<<endl; for (i=0;i<3;i++) { cout<<stu[i].num<<setw(8)<<stu[i].name<< setw(8)<<stu[i].score[0] <<setw(8)<<stu[i].score[1]<<setw(8)<<stu[i].score[2] <<setw(8)<<stu[i].sum<<setw(8)<<stu[i].aver << setw(5)<<stu[i].ch<<endl; } } 3、设计一个单向链表。从标准输入读取若干整数,建立链表,每次读入的数放入链表结尾。 当用户输入 0 时,结束链表的建立工作。然后从前往后依次输出链表结点中的内容。

19

《C++程序设计》实验指导

提示: (1) 链表结点空间动态申请。 (2) 因为每次新结点插入在表尾,所以应设一个指针总是指向当前的表尾。 (3) 处理申请不到空间的情况。 测试数据: 程序输出:请输入若干整数建立链表(输入 0 结束) : 用户输入:1 2 3 4 5 6 7 0 程序输出:1 2 3 4 5 6 7 思考问题: 如果是双向链表,程序要做哪些改动? 4、有 10 个学生,每个学生的数据包括学号、姓名、3 门课的成绩,从键盘输入 10 个学生 数据,要求打印出 3 门课的平均成绩,以及最高分学生的数据(包括学号、姓名、3 门 课的成绩、平均分数) 。 要求: 用 input 函数输入 10 个学生的数据;用 average 函数求平均分;用 max 函数找出 最高分的学生数据;平均分和最高分学生的数据都在主函数中输出。 5、建立一个链表,每个结点包括:学号、姓名、性别、年龄、 。输入一个年龄,如果链表中 的结点所包含的年龄等于此年龄,则将此结点删去。

20

《C++程序设计》实验指导

实验九
一、实验目的
1、 掌握类和对象的定义和使用。 2、 理解构造函数和析构函数的作用。 3、 学习使用静态成员和内联成员函数。 4、 掌握从现有类派生出新类的方式。 5、 了解基类成员在派生类中的访问控制。 6、 了解虚函数对多态性的支持。

类与对象

二、实验内容与步骤
1、构造函数和析构函数的调用。 输入和运行以下程序。 #include<iostream.h> class A{ int *a; public: A(int x) { a=new int(x); cout<< ‖Constructor: ‖<<*a<<endl; } ~A() { cout<<‖Destructor: ‖ <<*a <<endl; delete a; } }; void main() { A x(3),*p; p=new A(5); delete p; } 2、派生类构造函数和析构函数的调用。 输入以下程序并调试运行。 #include<iostream.h> class A{ int a; public: A(int aa=0):a(aa) { cout<<‖Constructor A: ‖<<a<<endl; } ~A(){ cout<<‖Destructor A: ‖<<a<<endl; }
21

《C++程序设计》实验指导

}; class B:public A{ int b; public: B(int aa,int bb):A(aa),b(bb) { cout<<‖Constructor B: ‖<<b<<endl; } ~B(){ cout<<‖Destructor B: ‖<<b<<endl; } }; void main() { B x(2,3),y(4,5); } 3、多态性的实现。 (1)输入以下程序并调试运行,分析其执行结果。 #include<iostream.h> // 类 Point 的定义 class Point { public: Point( double i=0, double j=0 ) { x=i, y=j; } double area() // 返回点的面积 (0.0) { return 0.0; } private: double x,y; // 点的坐标 }; // 类 Circle 的定义 const double pi=3.14159; class Circle : public Point{ public: Circle( double i=0, double j=0, double r=1 ) : Point( i,j ) { radius=r; } double area() //返回圆的面积 { return pi*radius*radius; } double getRadius() { return radius; } private: double radius; }; void main() { Point p; cout<<"点的面积为: "<<p.area()<<endl; Circle c( 1, 1, 10 ); cout<<"半径为 "<<c.getRadius()<<" 的圆的面积为: "<<c.area()<<endl; Point *pp;

22

《C++程序设计》实验指导

pp=&c; //基类指针指向派生类的对象 cout<<"半径为 "<<c.getRadius()<<" 的圆的面积为: "<<pp->area()<<endl; } (2)改写上面的程序,将成员函数 area()定义为虚函数,分析其执行结果。 思考:如何正确使用虚函数实现运行时的多态性? 4、静态成员的使用。 某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时均以重量为单位,各箱 的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现要求用 C++语言把商店 货物购进和卖出的情况模拟出来。 提示: (1) 应将这类货物用一个类(Goods)来描述,而每箱货物作为这个类的对象。每箱 货物有重量,因此应有一个数据成员来表示这箱货物的重量,而总重量用一个 静态数据成员来记录。 (2) 在货物类的构造函数和析构函数中分别修改总重量。 要求: (1) 提供静态成员函数 GetTotalWeight,用来返回当前货物的总重量。 (2) 下面是测试所设计类的主程序: #include<iostream.h> #include"goods.h" // 货物类的定义文件 void main( ) { cout<<"开始时货物的总重量: "<<Goods::GetTotalWeight( )<<endl; int w; cout<<"输入这箱货物的重量:"; cin>>w; Goods *g1=new Goods(w); // 购进一箱货物 cout<<"库存货物的总重量: "<<Goods::GetTotalWeight( )<<endl; cout<<"输入这箱货物的重量:"; cin>>w; Goods *g2=new Goods(w); // 购进一箱货物 cout<<"库存货物的总重量: "<<Goods::GetTotalWeight( )<<endl; delete g1; // 卖出一箱货物 cout<<"库存货物的总重量: "<<Goods::GetTotalWeight( )<<endl; } 输入测试数据,写出起执行结果。 思考: (1) 在什么地方初始化类的静态数据成员? (2) 非静态成员函数能否访问静态数据成员? 5、要求计算正方体、球和圆柱 3 个几何体的表面积和体积,请用 C++语言定义类等级。 提示: 可以抽象出一个公共的基类 Base,把它作为抽象类,在该类内定义求表面积和体积 的纯虚函数(抽象类本身是没有表面积和体积可言的) 。由这个抽象类派生出描述球、正 方体和圆柱的 3 个具体类,在这 3 个类中都有计算表面积和体积的函数的自己版本。
23

《C++程序设计》实验指导

实验十
一、实验目的

综合实验

综合运用前面所学的各种知识,编写两个较复杂的程序。

二、实验内容与步骤
1、设计一个学生信息管理系统,用于实现学生信息的录入、查询、排序、输出等功能。学 生信息包括:学号(整型) 、姓名(字符串) 、性别(布尔型) 、出生日期(结构体) 、各 科成绩(10 门) 、平均成绩等,用函数实现各功能模块。 2、利用面向对象编程方法为某公司设计一个人员信息管理系统。 要求: (1) 首先定义一个公司职员类,用来描述公司所有人员的共同信息(姓名、个人编 号、级别、月薪总额) ; (2) 然后通过继承定义兼职技术人员类、兼职推销员类、经理类和销售经理类,分 别为每个类定义计算月薪函数和显示人员信息函数。月薪计算方法为: 兼职技术人员类:月薪=每小时酬金*本月的工作时数 兼职推销员类:月薪=销售提成 经理类:月薪=固定月薪 销售经理类:月薪=固定月薪+销售提成 提示: 将公司职员类定义为抽象基类,将计算月薪函数和显示人员信息函数定义为虚函 数。 参考程序: class employee { protected: char*name; int individualEmpNo; int grade; double accumPay; static int employeeNo; public: employee(); ~employee(); virtual void pay()=0; void promote(int); virtual void displayStatus()=0; };

//姓名 //个人编号 //级别 //月薪总额 //本公司职员编号目前最大值 //构造函数 //析构函数 //计算月薪函数 //升级函数 //显示人员信息

24

《C++程序设计》实验指导

class technician:public employee { private: float hourlyRate; int workHours; public: technician(); void pay(); void displayStatus(); };

//兼职技术人员类 //每小时酬金 //当月工作时数 //构造函数 //计算月薪函数 //显示人员信息

class salesman: virtual public employee { //兼职推销员类 protected: double CommRate; //按销售额提取酬金的百分比 double sales; //当月销售额 public: salesman(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class manager:virtual public employee { //经理类 protected: float monthlyPay; //固定月薪数 public: manager(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class salesmanager:public manager,public salesman { //销售经理类 public: salesmanager(); //构造函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; #include <iostream.h> #include<string.h> int employee::employeeNo=1000;

//员工编号基数为 1000

employee::employee() { char namestr[20]; //输入雇员姓名时首先临时存放在 namestr 中 cout<<"请输入本雇员的姓名:";
25

《C++程序设计》实验指导

cin>> namestr; name=new char [strlen(namestr)+1]; //动态申请用于存放姓名的内存空间 strcpy(name,namestr); //将临时存放的姓名复制到 name individualEmpNo=employeeNo++ ; //新输入的员工,编号为目前最大编号加 1 grade=1; accumPay=0.0; } employee::~employee() { delete []name; } //级别初值为 1 //月薪总额初值为 0

//在析构函数中删除为存放姓名动态分配的内存空间

void employee::promote(int increment) { grade+=increment; //升级,提升的级数由 increment 指定 } technician::technician() { hourlyRate=100; }

//每小时酬金 100 元

void technician::pay() { cout<<"请输入"<<name<<"本月的工作时数:"; cin>>workHours; //计算月薪,按小时计酬 accumPay=hourlyRate*workHours; cout<<"兼职技术人员"<<name<<"编号"<<individualEmpNo <<"本月工资"<<accumPay<<endl; } void technician::displayStatus() { cout<<"兼职技术人员"<<name<<"编号"<<individualEmpNo <<"级别为"<<grade<<"级,已付本月工资"<<accumPay<<endl; } salesman::salesman() { CommRate=0.04; }

//销售提成比例 4%

26

《C++程序设计》实验指导

void salesman::pay() { cout<<"请输入"<<name<<"本月的销售额:"; cin>>sales; accumPay=sales*CommRate; //月薪=销售提成 cout<<"推销员"<<name<<"编号"<<individualEmpNo <<"本月工资"<<accumPay<<endl; } void salesman::displayStatus() { cout<<"推销员" <<name<<"编号"<<individualEmpNo <<"级别为"<<grade<<"级,已付本月工资"<<accumPay<<endl; } manager::manager() { monthlyPay=8000; //固定月薪 8000 元 } void manager::pay( ) { accumPay = monthlyPay; //月薪总额即固定月薪数 cout<<"经理"<< name << "编号 " << individualEmpNo <<"本月工资" << accumPay <<endl; } void manager::displayStatus( ) { cout<<"经理"<< name << "编号 " << individualEmpNo <<"级别为" << grade <<"级,已付本月工资" << accumPay <<endl; } salesmanager ::salesmanager( ) { monthlyPay =5000; CommRate = 0.005; } void salesmanager :: pay( ) { cout<<"请输入"<< employee :: name << "所管辖部门本月的总额:" ; cin>>sales; accumPay = monthlyPay + CommRate * sales ; //月薪=固定月薪+销售提成 cout<<"销售经理"<< name <<"编号"<< individualEmpNo
27

《C++程序设计》实验指导

<<"本月工资" << accumPay<<endl; } void salesmanager::displayStatus( ) { cout<<"销售经理"<< name << "编号 "<< individualEmpNo <<"级别为" << grade <<"级,已付本月工资" << accumPay <<endl; } #include<iostream.h> void main() { cout<<"这是一个经理:"; manager m1; m1. promote(3 ); m1 .pay( ); m1 .displayStatus( );

//经理提升3级

cout<<"\n 这是一个兼职技术人员:"; technician t1; t1.promote(2); //t1 提升 2 级 t1 .pay( ); t1 .displayStatus( ); cout<<"\n 这是一个销售经理:"; salesmanager sm1; sm1. promote(2); // sm1 提升 2 级 sm1 .pay( ); sm1 .displayStatus( ); cout<<"\n 这是一个兼职推销员:"; salesman s1; s1 .pay( ); s1 .displayStatus( ); }

撰稿人:
2009-9-26

28


更多相关文档:

《C++程序设计》实验指导书(2)

C++程序设计 实验指导书 东北大学软件学院 2014 年 9 月 实验要求《C++程序设计》课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实 验,使学生加深了解...

C++程序设计实验指导书

三、实验步骤 1.建立一个控制台应用程序项目 lab2_1,向其中添加一个 C++源文件,输入 2-7 的代 7 《C++程序设计实验指导书》 码,调试并运行。 2.另建立一...

(完整版)C++程序设计实验报告

C++程序设计 实验报告 学姓班号: 名:王晨光 级: 指导老师:谢从华 实验一、字符和格式的输出实验 一,实验目的 1、 重点把握各种内部数据类型、 数值和逻辑运算,...

C++程序设计实验指导书

科学与工程系 2010 年 12 月 C/C++语言程序设计实验指导书 前言 本指导书是本科课程《C/C++程序设计》实验指导书,也可以使用它作为学习 C++语 言的上机指导...

C++面向对象程序设计实验指导书(谭浩强)

C++面向对象程序设计实验指导书(谭浩强)_教育学_高等教育_教育专区。C++面向对象...理论教材蓝本为 《C++面向对象程序设计教程》 (第 2 版)陈维兴 林小茶编著,清华...

C++程序设计实验指导书实验3循环结构的详细答案!

实验3 循环结构程序设计 3页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 C++程序设计实验指导书实验3循环结构...

C++程序设计实验指导书(第四版)

C++程序设计实验指导书(第四版)C++程序设计实验指导书(第四版)隐藏>> 目录 实验一 实验二 实验三 实验四 实验五 实验六 实验七 实验八 实验九 实验十 熟悉 ...

C++程序设计实验指导书

C程序设计实验指导书-2 3页 免费 Visual_C++程序设计实验指... 6页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行...

C++程序设计实验指导

C++程序设计实验指导_城乡/园林规划_工程科技_专业资料 暂无评价|0人阅读|0次下载C++程序设计实验指导_城乡/园林规划_工程科技_专业资料。《C++程序设计》实验指导 ...

《c++程序设计》谭浩强版

《c++程序设计》谭浩强版_工学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 《c++程序设计》谭浩强版_工学_高等教育_教育专区。第一章 1.5 题 #...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com