




免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北大学C+实验题目和参考答案实验一 在小范围内用C+增强C的功能1.实验目的和要求:目的:快速掌握C+语言编程的方法,在小范围内增强C+的功能,主要内容有:(1)输入流、输出流的使用;(2)函数原型;(3)new和delete运算符分配内存。2实验内容:(1)编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如: 23+123=146。程序源码:#include using namespace std;int main()float a,b;cout请输入第一个数a;cout请输入第二个数b; couta+b=a+bendl; couta-b=a-bendl; couta*b=a*bendl; couta/b=a/bendl; return 0;运行结果:(2)用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。程序源码:#include iostream.h#include stdio.hvoid main()int (*a)3;int i,j;int min(int (*a)3);int max(int (*a)3);int sum(int (*a)3);a=new int33;for(i=0;i3;i+)for(j=0;jaij;cout您输入的数组为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutaijt;coutendl;cout数组各元素之和为:sum(a)endl;cout数组中最大值为:max(a)endl;cout数组中最小值为:min(a)endl;delete a;int sum(int (*a)3)int sum=0,i,j;for(i=0;i3;i+)for(j=0;j3;j+)sum=sum+aij;return sum;int max(int (*a)3)int max=a00,i,j;for(i=0;i3;i+)for(j=0;jmax) max=aij;return max;int min(int (*a)3)int min=a00,i,j;for(i=0;i3;i+)for(j=0;j3;j+)if(aijmin) min=aij;return min;运行结果:(3)编写C+风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?527程序源码:#include using namespace std;int main()int a,b,c,d10003,i=0;for(a=0;a=100;a+)for(b=0;b=50;b+) for(c=0;c=20;c+)if(a*0.01)+(b*0.02)+(c*0.05)=1.0) di1=a;di2=b;di3=c;i+;int j=0;for(j=0;ji;j+)cout一分的dj1张和;cout二分的dj2张和; cout五分的dj3张等于一元endlendl; cout共i种凑法; return 0;运行结果(4)仿照教材中的例题,用引用的方法给包含十个元素的一维数组赋值,其值分别为9,8,7,6,5,4,3,2,1。程序源码:#include #define N 10void main()void chr(int & a,int & b);int aN=9,8,7,6,5,4,3,2,1,0;int i,bN;cout原数列为:;for(i=0;iN;i+)coutai ;coutendl;for(i=0;iN;i+)bi=ai;for(i=0;iN;i+)chr(ai,bN-1-i);cout转换后为:;for(i=0;iN;i+)coutai ;coutendl;void chr(int & a,int & b)int t;t=a;a=b;b=t;结果(5)假设我们班有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.096,如果有100个同学,不相重的概率为3.072510-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。 学生的生日可以用随机数产生,rand()产生032767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(long int *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子, 以上函数需要包含头文件 stdlib.h 程序源码:#include#include#include double fun(int n,int times);bool fun2(int n,int *a);void main() int i,j;coutHow many students?j;coutHow many times do you want to try?i;coutRate is:fun(j,i)endl;bool fun2(int n,int *a)int i,j;for(i=0;in;i+)ai=rand()%365;/不考虑闰年for(i=0;in;i+)for(j=i+1;jn;j+) if(ai=aj) return false;return true;double fun(int n,int times)int i,right=0;int *a=new intn;srand(time(NULL);for(i=0;itimes;i+)if(fun2(n,a) right+;return right*1.0/times; 运行结果三、实验总结1、函数调用时是将函数的实参表达式的结果值传递给对应的形式参数,即先对实参表达式进行计算。传递的是表达式的结果值,而不是表达式整体。而带参数的宏执行时,是将实参表达式本身简单地替换了宏体中对应的变量名而已,替换之前没有计算过程。2、函数定义时对形式参数和函数本身的返回值要指定数据类型(包括空类);定义宏时不存在类型问题,宏名无类型,宏的参数也无类型,宏的参数仅仅只是一个符号而已。但要注意有参数的宏在替换时可能引起的与宏定义时的本意不相符合的”副作用”。如上述例中宏定义的本意是求x乘以y的结果值,但结果不正确。解决办法:将宏体和宏体中的参数均用小括号()括起来。实验二 实验题目1、实验目的和要求掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。2、实验内容(1)定义一个时间类Time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时间。原程序代码:#include using namespace std;class Timeprivate:int hour;int minute;int second;public:void print()couth:m:sendl;void change(int h,int m,int s)hour=h;minute=m;second=s; void main() Time t1; t1.change(11,20,38); t1.print(); 运行结果: 11:20:38(2)编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员函数的值。原程序代码:#include using namespace std;class a private : int i,j; public :int number(int i) i=i+1; return i; int number1(int j) j=j-1; return j;void show() coutiendl; void show1() coutjendl; ;void main() a t1; a t2; t1.number(0);t2.number1(0); t1.show();t2.show1();运行结果: 858993460 -858993460(3)定义一个类包含一个整型数的指针变量,在构造函数中用new分配10各整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出函数#include using namespace std;class aint *p;a() p = new int10;a() delete p; p = NULL;void input(int data10) for(int i = 0; i10; i+) *(p+i) = datai; void output() for(int i = 0; i 10; i+) cout*(p+i); coutendl;运行结果:0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 3、实验总结(收获、有什么要注意的地方、启发等)C+类的定义与C的不同,而这看起来一点点地不同,即可以在class(struct)中添加函数成员,让C+有了面向对象特征,而C只能是结构化编程。实验3 this指针、静态数据成员和友元函数的使用1、实验目的和要求(1)掌握显式使用this指针的方法(2)掌握静态数据成员的意义及使用方法(3)掌握友元函数的使用方法2、实验内容(1)(1)有如下类的定义。其中类成员函数copy() 用于实现两个对象间的拷贝。请用两种方法完成该函数的实现:1、隐式使用this 指针;2、显式使用this 指针,同时保证在copy()函数的定义中(包括参数),都不直接使用对象名;include class Myclass public: Myclass (int a,int b) x=a;y=b; void copy(Myclass t1)x=t1.x;y=t1.y;void print() cout“x=”xendl; cout”y=”yendl; private:int x,y;void main() Myclass my(10,20),t(30,40); my.print();my.copy(t); my.print(); include class Myclass public: Myclass (int a,int b) x=a;y=b; void copy(Myclass *t1)this-x=t1-x;this-y=t1-y;void print() cout“x=”xendl; cout”y=”yendl; private:int x,y;void main() Myclass my(10,20),t(30,40); my.print();my.copy(&t); my.print();运行结果:x=10 y=20 x=30 y=40(2)商店经销一种货物,该货物成箱购进,成箱卖出,购进和卖出时按每箱的重量计价。商店需要记录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。#include class carlofloat price; float weight; static float total_price; static float total_weight; static float total_boxes; public: carlo(float p,float w) cout”c”endl; price=p;weight=w; total_price=total_price+p; total_weight=total_weight+w; total_boxes+;carlo()cout”endl; total_price=total_price-p; total_weight=total_weight-w; total_boxes-;static void put_boxes()cout”the total_boxes is”total_boxesendl;static void put_allweight()cout” the total_boxes is”total_weightendl; static void put_allprice()cout”the total_price is”total_priceendl; friend ostream &operator(ostream &scout,carlo.goods) scout”price=”goods.priceendl; scout”weight=”goods.weightendl;return scout;float carlo:total_price=0; float carlo:total_weight=0; int carlo:total_boxes=0; void main() carlo goods1(10.5,21),goods2(15.0,30); carlo:put_boxes(); carlo:put_allweight(); carlo:put_allprice();运行结果:the total_boxes is 2 the total_boxes is 25.5 the total_price is 51 (3) 类Intcase和类Floatcase分别为整型数集合类和实型数集合数类。将以下程序中缺少的内容补齐,并完成其后要求。class Intcase private:int num3;public:Intcase ( int x,int y, int z) num0=x; num1=y; num2=z;void print( ) coutnum0endl;coutnum1endl;coutnum2endl; ;Void main()Floatcase(1,2,3); print(); Intcase(4,5,6) print(); #include using namespace std; class Floatcase private:float num3;public:Floatcase ( float x,float y, float z)num0=x; num1=y; num2=z;void print() coutnum0endl;coutnum1endl;coutnum2endl;; class Floatcase private:float num3;public:Floatcase ( float x,float y, float z)num0=x; num1=y; num2=z;friend void print(const Floatcase &obj)coutobj.num0endl;coutobj.num1endl;coutobj.num2endl;;class Intcase private:int num3;public:Intcase ( int x,int y, int z)num0=x; num1=y; num2=z;friend void print(const Inttcase &obj) coutobj.num0endl;coutobj.num1endl;coutobj.num2endl; ;void main()Floatcase(1,2,3); print(); Intcase(4,5,6) print();运行结果:1 4 2 5 3 63、实验总结这一节实验主要学会了显示使用this指针和隐式使用this指针,构造函数和析构函数可以实现自动计数以及友元函数可以访问任何成员。实验5 派生与继承1、实验目的和要求此实验用两个单元的时间完成,是一个综合性的实验,要求编写的程序涉及到C+的许多知识点,如类的定义,动态分配内存、构造函数、派生、虚基类等。实验内容给出的是一个完整的程序,4个题目实际是在建立4个类等级。同学也可以在此基础上发挥增加新的内容。2、实验内容(1)定义一个基类MyArray,该基类的作用是可以存放一个任意长度的一维数组。class Myarray int *alist; int length;public: Myarray( int leng); Myarray(); void input(); void display();编写构造函数,析构函数及其它函数,实现动态分配内存、释放内存和数据输入输出等功能。并进行调试。(2)定义一个类Averarray继承自Myarray,在类中求数组的平均值,并输出。进行调试。(3)定义一个类Revarray继承自 Myarray, 使数组按反序存放,并输出。进行调试。(4定义一个类Nawarray继承自Averarray和Revarray。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中请先尝试下如果不用虚基类所带来的问题。#include class Myarrayprotected: 程序源码int *alist; int length;public: Myarray(int len) alist=new intlen;length=len; Myarray() delete(alist);coutx.endl; void input() int i; for(i=0;ilength;i+) cout输入数组的i+1个元素:alisti; int getlen()return length; void display() for(int i=0;ilength;i+) couta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF 2312-2025FDR自动土壤水分观测仪校准规范
- 2025贵州台江县民族中医院第二次招聘备案制专业技术人员考前自测高频考点模拟试题完整答案详解
- 广清市质量安全培训课件
- 2025福建福州市鼓楼区拟任命人民陪审员模拟试卷及答案详解(名师系列)
- 安全培训教师介绍词简短课件
- 2025江苏泰州学院招聘专职辅导员和专任教师17人考前自测高频考点模拟试题及1套参考答案详解
- 2025年第十三届贵州人才博览会省委金融办所属事业单位人才引进1人模拟试卷及答案详解(名师系列)
- 2025年非金属矿物制品:耐火项目建议书
- 2025国网冀北电力有限公司第二批高校毕业生录用人选的模拟试卷及完整答案详解1套
- 2025江苏连云港市金灌投资发展集团有限公司、灌南城市发展集团有限公司等招聘34人模拟试卷及参考答案详解
- 23G409先张法预应力混凝土管桩
- BA系统原理培训课件
- 上海交通大学学生生存手册
- 民航安全检查员(四级)理论考试题库(浓缩500题)
- 热力管网监理实施细则
- FMEA-潜在失效模式分析
- 统编版高中语文选择性必修上册第一单元测试卷【含答案】
- 保健食品注册与备案管理办法课件
- 钢筋锈蚀原理及应对措施案例分析(54页图文丰富)
- 第二讲水轮机结构
- K2FastWave中文操作手册
评论
0/150
提交评论