《C++程序设计案例教程全书教学实验合集(高职).docx》由会员分享,可在线阅读,更多相关《C++程序设计案例教程全书教学实验合集(高职).docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计案例教程全书教学实验合集实验1 C+概论一.实验目的1 .熟悉VC+的集成开发环境,学习运行一个C+程序的步骤。2 .了解几种运算符的使用规则。3 .掌握变量命名规则,学会变量的定义和使用。二.实验内容.上机实验题一(1)使用Visual C+6.0对一个C+程序进行编辑、编译、连接和运行。#include void main()coutvv”I am a studcntMcndl;(2)上机要求编辑、编译、连接和运行一个程序输出Hello, C+!”。(编辑调试过程见前面所述) (3)写出实验报告。1 .上机实验题二编写程序完成变量x和变量y值的交换,调试程序并观察运行结果。分析
2、要交换变量x和变量y的值,需使用临时变量z才能在进行。一个完整的参考程序如下:#include void main() int x,y,z;/Acoutx,y= cinxy;coul输入的 x=,x, y=y endl;z=x;x=y;y=z;cout输出的 x=,x, y=y endl;上机要求在键盘上分别按如下格式输入两组数据:5,3 (回车)53 (回车) 观察程序运行结果。 将程序中的x, y, z命名为aulo, break, case分析程序出错原因。只将程序A行x改为大写X,运行程序观察程序运行结果。修改程序用条件运算符输出两个数中的较大数。写出实验报告。2 .上机实验题三(x+
3、D(y-D编程序输入x、y和z的值,计算的值。X+ Z分析(X+l)(yl) 表达式的值不一定为整数,故程序中变量的类型应采用实型。 X+Z一个完整的参考程序如下:#include上机要求增加重载复数的加法和减法运算符的功能,实现两个复数的加法,一个复数与一个实数 的加法;两个复数的减法,一个复数与一个实数的减法。用成员函数实现加法运算符的重载, 用友元函数实现减法运算符的重载。自己设计主函数,完成程序的调试工作。写出实验报告。2.上机实验题二利用虚函数实现的多态性来求四种几何图形的面积之和。这四种几何图形是:三角形、 矩形、正方形和圆。几何图形的类型可以通过构造函数或通过成员函数来设置。分析
4、计算这四种几何图的面积公式分别是:三角形的边长为W,高为H时,则三角形的面积为W*H/2;矩形的边长为W,宽为H 时,则其面积为W*H;正方形的边长为S,则正方形的面积为S*S;圆的半径为R,其面 积为 3.1415926 *R*R。为设置几何图形的数据并求出几何图形的面积,需要定义一个包含两个虚函数的类: class Shapepublic:virtual float Area( void) =0;求面积virtual void Setdata(float,float =0) =0;设置图形数据);因面积的计算依赖于几何图形,故在类中只能定义一个纯虚函数Area。同理,设置几何 图形数据的函
5、数Setdata也只能定义为虚函数。把这个基类派生出其它几何图形类。如派生出的三角形类为:class Triangle:public Shape float W,H;三角形边长为W,高为Hpublic:Triangle(float v=0,float h=0) W=w; H = h; float Area( void) return W*H/2; void Setdata(float w.float h=0) W=w; H = h; );在派生类中定义了基类中两个虚函数的实现。为了实现求面积和设置数据的多态性,必 须定义一个类,该类中定义一个指向基类Shape的指针数组,其元素分别指向由基类S
6、hape 派生出的不同的几何图形类,并完成求出所有几何图形面积之和,以及设置参数的函数。一个完整的参考程序如下:#include #include class Shapepublic:virtual float Area( void) =0;虚函数virtual void Setdata(float ,float =0) =0;虚函数);class Triangle:public Shape float W,H;三角形边长为W,高为Hpublic:Triangle(float w=0,float h=0) W=w;H = h; float Area( void) return W*H/2; 定
7、义虚函数void Setdata(float w.float h=0) W=w; H = h; 定义虚函数);class Rectangle:public Shape float W,H;/矩形边长为W,高为Hpublic:Rectangle(float w=0,float h=0) W=w; H = h; 定义虚函数 w; H = h;定义虚函数/正方形边长S定义虚函数) 定义虚函数圆的半径为R3.1415926*R*R; /定义虚函数定义虚函数指向基类的指针数组给几何图形设置参数/A/B/释放动态分配的存储空间float Area( void) return W*H; void Setda
8、ta(float w,float h=0) ); class Square:public Shape float S; public:Square(float a=0) S=a; float Arca( void) return S*S/2;void Sctdata(float w,float h=0) ); class Circle:public Shape float R;public:Circle(float r=0)R=r; float Area( void) return void Setdata(float w.float h=0) 1; class Compute Shape *
9、s; public:Compute() s= new Shape *4;=new Triangle(3,4); =new Rectangle(6,8); =new Square(6.5); =new Circle(5.5);1 1 J 0 12 3 I fL II s s s sfloat SumArea(void);Compute。;void Setdata(int n, float a,float b=0) sn-Setdata(a,b); ); Compute:Compute。 for(int i= 0; i4; i+) delete si;delete s;float Compute:
10、SumArea(void ) float sum =0;for( int i =0; iArca();通过基类指针实现多态性return sum;)void main(void ) Compute a;coutv四种几何图形的面积=va.SumArea()vn;a.Sctdata(2,10);设置正方形的边长coihvv四种几何图形的面积=a.Sum Area()n,;a.Setdata(O, 10.;设置三角形的边长和高coutH 四种几何图形的面积=vva.SumArea()vvn;a.Setdata( 1,2,5);设置正方形的长和宽coutvv四种几何图形的面 ft1=a.SumArc
11、a()n;a.Setdata(3,15.5);cout四种几何图形的面 ft1=a.SumArca()n;程序中A行的Setdata函数属于函数重载,它不是虚函数。该函数中的B行通过基类指针实现多态性。三.实验要求1.写出程序,并调试程序,要给出测试数据和实验结果。1. 2.整理上机步骤,总结经验和体会。2. 3.完成实验报告和上交程序实验 11 C+ I/O一.实验目的1 .掌握文件流的打开、关闭及使用的使用方法;2 . 1.解文本文件流与二进制文件流在操作上的区别。二.实验内容1.上机实验题一设计一个管理图书目的简单程序,提供的基本功能包括:可连续将新书存入文件 “book.dat”中,新
12、书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件 “book.dat”中同书名的所有书显示出来。为简单起见,描述一本书的信息包括:书号,书名, 出版社和作者。分析可以把描述一本书的信息定义为一个Book类,它包含必要的成员函数。把加入的新书 总是加入到文件尾部,所以,以增补方式打开输出文件。从文件中查找书时,总是从文件开 始位置查找,以读方式打开文件。用一个循环语句实现可连续地将新书加入文件或从文件中 杳找指定的书名。由于是以一个Book类的实例进行文件输入输出的,所以,这文件的类型 应该是二进制文件。简化的参考程序如下:#include #include 书号 书名 出版社 作者
13、书号 书名 出版社 作者书号 书名 出版社 作者#inckide class Book long int num;char bookname40;char publicname40;char namc20J;public:Book() num=0; bookname0 =0;publicname0 =0; name0 =0; char * Getbookname(void) return bookname ; long Getnum(void ) return num; void Setdata(long , char *,char *,char *);void Show(void );Boo
14、k(long , char *,char *,char *);;void Book:Setda(a(long nu , char *bn,char *p,char *n) num = nu; strcpy(bookname,bn);strcpy(publicnanic,p); strcpy(namc,n);)void Book:Show(void)coutvv书号:vvnumvtv书名:vbooknamevf;coutvHl 版社:vvpublicnametV作者:vvnarnevvrf;)Book:Book(long nu, char * bp,char *p,char *n) Setdat
15、a(nu , bp, p, n); void main(void) Book bl,b2;书名 出版社 作者由flag控制循环long nu;char bn40;char pn40;char nal20;ifstream file 1;ofstream file3;char flag = y;while( flag=y |flag=Y,) couttt 1:按书名查找一本书!n;coutHtt 2:加入一本新书!n”;couttt 3:退出!n输入选择:int f;cinf;switch(f)case 1: coutv输入要查找的书名:cinbn;filel .open(book.dal,io
16、s:in | ios:binary);按读方式打开文件 while(!filel.eof() int n;file 1 .rcad(char *)&b 1 ,sizeof(Book); n=filel.gcount();if(n=sizeof(Book)if(strcmp(b 1 .Getbookname(),bn)=0) 显示书的信息 bl.Show(); 1 filel.close(); break;case 2: coutvv输入书号:”;cinnu;cout”输入书名:”;cinbn;coulS)入出版社:;cinpn;coulv输入作者:;cinna;b 1 .Sctdata(nu,
17、bn,pn,na);file3.open(book.dal,ios:app|ios:binary); 增补方式打开文件 file3.write(char*)&b 1 ,sizeof(b 1);file3.close();break;default: flag = n;)1上机要求修改程序增加按出版社、作者。从文件中查找书名,输出同一出版社出版的所有书名, 按列表的格式输出文件中的所有书名等。写出实验报告。2上机实验题一自定义一个描述人的基本信息的类,至少包括的数据成员:姓名,单位,出生日期。分析用友元函数重载重载提取和插入运算符,实现对象的输入和输出。上机要求编制一个完整的程序。写出实验报告。
18、3.上机实验题三(项目选做)用C+提供的集成环境或使用其它的纯文本编辑工具,把若干个实数输入到文本文件“DATA.TX中,设计一个程序对该文件中的数据进行处理:统计该文件中的实数个数、求 出这些数的平均值和均方差,按每行五个数据输出文件中的所有数据。三.实验要求1 .结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2 .整理上机步骤,总结经验和体会。3 .完成实验报告和上交程序。void main() float x,y,z,e,f ,w;cout,x,y,z= endl;cinxyz;e= (x+l)*(y-l);f=x+y;w=e/f;cout,w=wendl;/A/B /C
19、 /D上机要求输入x=5.4, y=3.1, z=2.7,观察程序运行结果。将程序中A行改为“intx,y,z,e,f,w;,输入x=5.4, y=3.1, z=2.7,观察程序运行结果。将程序中A行改为“float x,y,z,w;,B、C、D行改为“w=(x+l)*(y-l)/x+y;,观察程序运 行结果。写出实验报告。4.上机实验题四编写程序。从键盘输入一个三位正整数,输出其逆转数。例如:输入861,输出为168。分析输入的三位数为整数,变量类型按整型进行处理。可采用求余数的方法计算各位上的数, 然后逆序输出。一个完整的参考程序如下:#includevoid main() int n,i
20、,j,k;输入一个三位正整数n:;cinn;i=n%IO;n=(n-i)/10;j=n%10;n=(n-j)/10:k=n;n=i*100+j*10+k;cout逆转数为:ncndl;/i存放个位数 去掉个位数 /j存放十位数 去掉十位数 /k存放百位数上机要求修改程序使其先取百位数,再取十位数,最后取个位数。写出实验报告。5 .上机实验题五给出下列程序的运行结果分析本例测试了不同数据类型之间的数据转换。#includevoid main()int a=32,b;double c=2.7,d;char c=D,f;/Ab=a+c;d=a+c;f=a+e;coutb=bendl;coutd=de
21、ndl;coutuf=fendl;/Bcoutb+d+fcndl;/C)上机要求修改程序A行,对b的输出值四舍五入。 修改程序B行,按整型值输出f。分析C行数据的值的类型。注意:本例 A 行提示如下警告:“conversion from double1 to *int possible loss of data.”属 于正常。三.实验要求1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。1. 2.整理上机步骤,总结经验和体会。 完成实验报告和上交源程序。实验2简单数据类型及运算一.实验目的1.熟悉和理解C+语言中的类型简单数据(整型、实型、字符 型)、运算、表达式1. 2. 了
22、解基本数据类型的字节宽度和范围表示2. 3.能利用学习的数据类型,编制简单的C+程序3. 4. 理解并掌握程序的分支、循环结构4. 5.初步学习调试方法一 宓胎内容1基本数据类型的长度编写一个程序,输出基本数据类型char, short, int, long, float, double的数据类型 的长度。2.输入并运行下列程序(1) #includevoid main() int x=6, y ;coutn x= xendl;y = +x ;y =yendl;y =yendl ;y = yendl;y = ycndl;coutx= x x=6; y=x+;coutx= xn x=6;y =
23、x-;coutx=x x=6;y - -x;coutx=Hx )(2) #inckidevoid main() int a=20, b=6;a+=a; coutaendl:a=20; a-=a; coulaendl;a=20; a*=a; coutaendl;a=20; a/=b; coutacndl;a=20; a%=b; coutaendl;a=20; a=a-b; coutaendl;a=10; b=4;a+=a*=a-=a/b; coutaendl;)#inciudcvoid main() int a=3,b=4,c=5,x,y;x=(a+bc&b=c);coutxendl;x=(a|
24、b+c&b-c);coutxendl;x=!(ab&!c|l);coutxendl;x=(!(a+b)+c-l&b+c/2);coutxcndl;!(x=a)&(y=b)&0;COUtx= X y=yendl;#includevoid main() int a=3,b=4,c=5,max;max =(ab)?a:b;coutmaxcndl;max=bc?a:ac?a:b;coutmax= maxendl;)3.编写一个将华氏温度转换为摄氏温度的程序,转换公式为C= (5/9) (F-32),要求 输出华氏温度和摄氏温度的对应值。三.实验要求1 .记录系统上运行的C+编译器中每个基本数据类型的长
25、度。2 .分析和写出实验2的运行结果。3 .实验3要给出测试数据和实验结果。4 .写出上机实验体会和实验报告。实验3控制结构一.实验目的1. 1.理解并掌握程序的顺序结构程序设计2. 2.理解并掌握程序的分支结构(if语句、switch语句)程序设计3. 3.理解并掌握程序的循环结构(for语句、while语句、do-while语句)程序设计4. 4.掌握循环语句的嵌套形式5. 5.学习过程化程序设计方法6. 6.进一步学习掌握查找与修改编译错误的方法二.实验内容.编写程序任意输入一个三位,将其反向输出。如输入123,输出321。1 .有一个函数如下: x (x5)y= x+6(5=x=15)
26、输入x的值,计算出相应的y值。2 .编写一个程序,输入年、月,打印出该年份该月的天数。3 .编程按分段统计学生成绩,输入为负数时结束。要求按90100、8089、70 79、60 69、60以下五档分别统计各分数段人数(用if语句和switch语句编写程序)。4 .用do.while, while, for三种循环语句求出1+3+5+.+101的和,输出结果。5 .编程输出如下图形:*3.完成实验报告和上交源程序。实验4数组一.实验目的:1 .掌握一维数组和二维数组定义的规则;2 .掌握数组的初始化方法及数组元素的引用;3 .熟练掌握一维数组和二维数组的使用;4 .掌握字符数组与字符串的关系以
27、及字符串变量的表示;5,熟练字符串处理函数的应用。二.实验内容1.编写一个程序,将20以内的偶数赋给数组a,然后输出此数组各元素。1. 2.先定义一个含有30个整型元素的数组,依次赋予从2开始的偶数,然后按顺序每五个数的平均值放在另一个数组中,并要求按每行6个数输出结果。2. 3.定义一个二维数组存储五位学生五科考试的成绩,编写程序分别取出二维数组里的元素值,经过累加之后列出总成绩,元素值,经过累加之后列出总成绩,元素值,经过累加之后列出总成绩,元素值,经过累加之后列出总成绩,计算并输出每个同学的平均成绩,格式如下:平均分为:* 平均分为:* 平均分为:* 平均分为:* 平均分为:*第1个学生
28、的总分为:* 第2个学生的总分为:* 第3个学生的总分为:* 第4个学生的总分为:* 第5个学生的总分为:*4.输入两个字符串,比较这两个字符串是否相同,并输出比较的结果。3. 5.编写一个程序,由用户输入一个含有5个单词的英文句子,按照用户的要求输出句中的第1个单词。三.实验要求1 .结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2 .整理上机步骤,总结经验和体会。3 .完成实验报告和上交程序。实验5函数与编译处理一.实验目的1 .掌握函数声明、定义和使用的方法;2 .掌握形式参数与实在参数之间的对应关系。3 .掌握函数调用时,形参、实参之间的“值传递”和“地址传递”的区别。
29、4 .掌握函数递归调用的方法;5 .掌握全局变量、局部变量、静态变显的使用方法;6 .掌握文件包含的使用方法;二.实验内容1.定义两个函数swapl和svap2,目的是实现两个整数的次序交换,其中swapl的参 数是传递值参数,swap2的参数是传址参数,在程序中分别调用这两个函数,其输出结 果如下所示:初始值:x=l, y=2调用swapl后的结果:x=l y=2调用swap2后的结果:x=2 y=l2.编写一个函数,用来计算从键盘上输入的整数的阶乘。1. 3.编写函数判断一个数是否是素数,在主程序中实现输入、输出。2. 4.编写一个程序,设计一个函数可以计算并返回输入的4个数的平均值。3.
30、 5.给定某个年、月、日的值,例如,2005年7月11日,计算出这一天属于该年的第几 天,要求写出计算闰年的函数和计算口期的函数。三.实验要求1 .结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2 .整理上机步骤,总结经验和体会。3 .完成实验报告和上交程序。实验6指针一.实验目的1 .熟练掌握指针、地址、指针类型、void指针、空指针等概念;2 .熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式;3 .会使用数组的指针和指向的指针变量;4 .会使用字符串的指针和指向字符串的指针变量5 .学会使用指向函数的指针变量;6 . 了解指针与链表关系。二.实验
31、内容1 .用调用函数,实现从两个数为输出较大者(要求用指针变量传递参数值)。2 .编写一个函数f,将传入此函数的直角坐标值转换为极坐标值,并返回主调函数中。求 极坐标的公式是:c= v/q=arctan(y/x)若要将两值返回主调函数,有多种方式可以完成,请试之:(1)两值均以指针形参带回(2)由指针形参带I可一个值,函数值返I可另一个值(3)两值均以引用形参返回(提示:程序中可以使用C库函数sprt、pow及atan,它们的头文件为stdlib.h).使用指针变量对一字符串按照字母,空格、数字和其他字符进行分类统计。(提示读一行 字符包括空格用函数cin.gctline(ch,81)。3 .
32、用指针变量设计一通用函数,该函数查找实型数组中最大和最小元素并输出相应元素和 下标“三.实验要求1 .结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。2 .整理上机步骤,总结经验和体会。3 .完成实验报告和上交程序。实验7结构体一 .实验目的1 .掌握结构的概念和结构类型的定义;2 .掌握结构变量的定义和初始化;3 .掌握结构体类型的概念和应用;4 .掌握结构成员的访问、结构赋值的含义以及结构与指针、函数的关系。二 .实验内容1 .有5个学生,每个学生的数据包括学号、姓名、三门课成绩,从键盘输入5个学生数据, 要求打印出三门课总平均成绩,以及最高分和学生的数据(包括学号、姓名、三
33、门课成绩、平 均分)。2 .将上题按照平均分由大到小排序并按大到小排序后输出每位学生的学号、姓名、三门课成 绩和平均分。3 .建立一个链表,每个结点包括:学号、姓名和年龄。输入一个年龄,如果链表中的结点 所包含的年龄等于此年龄,则将此结点删除,否则将此结点插入在表最后。三 .实验要求结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。1. 整理上机步骤,总结经验和体会。2. 完成实验报告和上交程序。实验8类和对象一.实验目的1. 1.掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;2. 2.掌握类对象的定义;3. 3.理解类的成员的访问控制的含义,公有、私有和保
34、护成员的区别;4.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定 义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;4. 5.掌握友元函数的含义,友元函数和成员函数的区别。二.实验内容.定义一个圆类,计算圆的面积和周长。要求:分别用成员函数和友元函数来求圆的面积和周长。1 .定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。同时 编写主函数使用这个类,实现对学生数据的赋值和输出。要求:(1) (1)使用成员函数实现对输出的输入、输出(2) (2)使用构造函数和析构函数实现对数据的输入、输出。2 .定义日期类型Date。要求有以下面成员:
35、(1) (1)可以设置日期;(2) (2)日期加一天操作;(3) (3) 昆明市 输入函数,输入格式为“XXXX年XX月XX日”。三.实验要求1.写出程序,并调试程序,要给出测试数据和实验结果。1. 2.整理上机步骤,总结经验和体会。2. 3.完成实验报告和上交程序。实验9继承与派生类一.实验目的1. 1.理解继承的含义,掌握派生类的定义方法和实现;2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继 承层次中的各种类成员;3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类 成员可以访问基类的部分非公开的成员;2. 4.理解虚函数在类的继承层次中的
36、作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。二.实验内容1 .编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教 师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并 作为学生数据操作类student和教师类数据操作类teacher的基类。2 .编写一个程序计算出球、圆柱和圆锥的表面积和体积。要求:(1) (1)定义一个基类圆,至少含有一个数据成员半径;(2) (2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。(3) (3) 定义主函数,求球、圆柱、圆锥的和体积。三.实验要
37、求1.写出程序,并调试程序,要给出测试数据和实验结果。1. 2.整理上机步骤,总结经验和体会。2. 3.完成实验报告和上交程序实验10多态性一.实验目的1 .掌握用成员函数重载运算符的方法2 .掌握用友元函数重载运算符的方法3 .理解并掌握利川虚函数实现动态多态性和编写通用程序的方法二.实验内容与步骤4 .上机实验题一定义一个好数类,通过重载运算符:*, /,直接实现二个复数之间的乘除运算。编写一 个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“尸用成 员函数实现重载。分析两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac-bd )+(ad+bc) i
38、两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i亚数类及运算符重载函数可定义为:class Complex float Real, Image;public:Complex(float r=0,float i=0) Real=r;Image=i;void Show()cout Rcal=Rcal,tImage=lmagcn,;friend Complex operator *(Complex &. Complex &);Complex operator /(Complex &);重载运算符+;Complex op
39、erator *( Complex &c 1,Complex &c2) Complex t;t.Real=cl.Real * c2.Real - cl.Image * c2.Image;(.Image = c 1 .Image*c2.Real +c 1 .Real* c2.Image;return t;IComplex Complex:operator /(Complex &c) Complex t;t.Real =(Real *c.Real+ Image * c.Image)/(c.Real*c.Real+ c.Image * c.Image);(.Image = (Image *c.Real - Real * c.Image)/(c.Real*c,Real+ c.Image * c.Image);return t;*本*本*木云*木*本*木木*亭*7.输入一行字符,分别统计其中的英文大写字母,小写字母、数字字符和其他字符。三.实验要求1. 1.结合上课内容,写出程序,并调试程序,要给出测试数据和实验结 果。2. 2.整理上机步骤,总结经验和体会。