版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 合肥工业大学资源与环境工程学院gis 程序设计实验报告姓名学号专业地理信息系统班级任课教师2 实验 1:在小范围内用c+ 增强 c的功能一、实验目的和要求目的:快速掌握c+语言编程的方法, 在小范围内增强c+的功能, 主要内容有:( 1)输入流、输出流的使用;(2)函数原型; (3)new 和 delete 运算符分配内存。二、实验代码(附注释)或解答(1) 编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。# include / 两数和差积商# include void main () double a,b,c,d,e,f; co
2、ut 输入两个数 ab; c=a+b; d=a-b; e=a*b; f=a/b; couta+b=cendl; couta-b=dendl; couta*b=eendl; couta/b=fendl; 3 (2)用 new 和 delete 运算符动态分配内存空间的方法编写程序。从键盘输入3 3 整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。/使用 new delete 动态内存分配#include #include void main () int m,n,sum=0,i,j,min,max; int *a; /创建二维指针coutmn; a=new int *m;/ 创建指针
3、数组for(i=0;im;i+) ai=new int m;/ 为每一行分配空间 cout 输入数组元素; for(i=0;im;i+) /输入数组元素for(j=0;jaij; min=max=a00; for(i=0;im;i+) for(j=0;jaij) min=aij;/ 求最小值if(maxaij) max=aij;/ 求最大值sum=sum+aij;/ 求和 for(i=0;im;i+) 4 delete ai; delete a;/释放动态数组coutsum=sumendl; coutmin=minendlmax=maxendl; (3)用内联函数编写程序。输入圆柱的半径和高,
4、计算圆柱的底面周长,表面积和体积。底面周长,表面积和体积的实现用内联函数实现#include #define pi 3.1415926 #include inline double lenth(double a,double b)/ 内联函数:求圆柱的周长 return 4*pi *a; inline double seq(double a,double b)/ 内联函数:求圆柱的面积 return 2* pi *a*a+2*pi*a*b; 5 inline double vv(double a,double b)/ 内联函数:求圆柱的体积 return pi *a*a*b; /*/ void
5、 main() double r,h; double l,s,v; coutrh; l= lenth ( r, h);/ 调用内联函数s=seq(r,h); v=vv(r,h); cout周长 l=lendl; cout面积 s=sendl 体积 v=vendl; (4) 仿照教材中的例题,用引用的方法给包含十个元素的一维数组赋值,其值分别为9,8, 7,6,5,4, 3,2,1。#include void main() 6 int a10,i; for(i=0;i10;i+) int &t=ai; t=10-i; cout 数组为 :endl; for(i=0;i10;i+) cou
6、taiendl; 三、思考题解答(1)内联函数与无参数的宏定义和普通函数的区别是什么?使用内联函数应注意什么问题?区别:内联函数是在程序执行到该处时自动将代码植入到主程序处进行运行;宏定义是在程序开始执行前替换到程序中的宏定义的所有代码;普通函数是程序执行到该处时,调用函数,然后转到其他程序运行;(2) 分配二维数组的内存空间如 3 行 4 列的数组。int (*p)4; p=new int34; 7 程序不能使用c+不存在的字符集如正确解答:int *p,i;*p=new int3; for(i=0;i3;i+=) pi=new int 4; (3) 实参与形参匹配的问题:int a34;
7、circle( a0); /或 circle( &a00) float circle( int *p) *p 指向的是 a00, 不是他是地址,也不是指针(4)变量定义的错误for (int j=0;j10;j+) int &a=x;- x 在其他无定义四、实验总结通过这次试验,我们练习了基本的c+操作,对这门课有了更深的认识,对第一个试验比较容易,后面几个就是新的内容,所以就参考了教科书并在网上查询了一些,特别是二维数组的动态分配内存空间,可以用一维和二维的方法来完成本次试验的操作。实验 2:类的定义与应用一、实验目的和要求1定义一个时间类time,它能提供由时分秒组成的时间
8、。要求能够修改时间和打印出时间。2 定义一个计算器类,能够实现加减乘除四则运算,对有关成员函数重载,以实现不同类型数据的运算。并用构造函数和析构函数将数据成员初始化为0。3.编写一个画图的程序,定义圆,直线和矩形等基本绘图元素的类,能够实现基本的绘图功能二、实验代码(附注释)或解答1 定义一个时间类time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时间。#include class time 8 private: int h,m,s; public: void get() coutputin hour minute secondhms; void put() couth :m :s
9、endl; ; void main() time a; a.get(); a.put(); 2 定义一个计算器类,能够实现加减乘除四则运算,对有关成员函数重载,以实现不同类型数据的运算。并用构造函数和析构函数将数据成员初始化为0。#include class acc private: int a,b; public: acc( ) a=0;b=0; double add(double a,double b) return a+b; ; double sub(double a,double b) 9 return a-b; ; double mul(double a,double b) retu
10、rn a*b; ; double div(double a,double b) return a/b; ; /*/ int add(int a,int b) return a+b; ; int sub(int a,int b) return a-b; ; int mul(int a,int b) return a*b; ; int div(int a,int b) return a/b; ; acc() cout 调用析构函数endl; ; void main () int a,b; double x,y; acc c; coutab; couta+b=c.add(a,b)endl; cout
11、a-b=c.sub(a,b)endl; couta*b=c.mul(a,b)endl; couta/b=c.div(a,b)endl; coutxy; coutx+y=c.add(x,y)endl; coutx-y=c.sub(x,y)endl; coutx*y=c.mul(x,y)endl; coutx/y=c.div(x,y)x=my.x;/ x=my.x; this-y=my.y;/ y=my.y; 11 ; 2/第二题:商店进出货物类#include class carlo private: double oneprice, oneweight; public: static doub
12、le allweight,allprice;/ 定义静态数据成员carlo(double m,double n);/ 构造函数void get() allweight+=oneweight; allprice+=oneprice; void sold()/ 求和函数 allweight-=oneweight; allprice-=oneprice; 12 void write ()/ 输出函数 coutallwprice=allpriceendl; coutallweight=allweightendl; carlo() cout 调用析构函数 endl; ; 3 有两个类分别为整型数集合类和
13、实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。(1)/*/ void intset:setto (set &t) t.num0=(float)num0; t.num1=(float)num1; t.num2=(float)num2; /*/ (2)#include/ 使用友元函数class set; class intset 13 private: int num3; public: intset ( int x,int y, int z) / 添加初始化内容num0=x; num1=y; num2=z; void print( ) / 打印数据int i; for(i=0;
14、i3;i+) cout numi; void settofloat (set &t) ; ; class set private: float num3; public: set ( float x,float y, float z) / 添加初始化内容num0=x; num1=y; num2=z; void print( ) / 打印数据int i; cout ; for(i=0;i3;i+) cout numi; friend void intset:settofloat (set &); ; void intset:settofloat (set &t) t.nu
15、m0=num0; 14 t.num1=num1; t.num2=num2; /*/ void main() intset t1(1,2,3); set t2(2.0,3.0,4.0); t1.print(); t2.print(); t1.settofloat(t2); t1.print(); t2.print(); 三、实验总结通过实验,学了静态数据数据和友元函数的使用。在类中定义的成员,在没有具体的对象之前是不分配内存单元的,而静态数据成员是分配内存单元的,而且直到程序结束时才释放,而且静态成员可以被所有对象之间调用,且其初始化只能在类外进行。静态函数没有this 指针,因而其无法访问类中
16、的非静态成员。友元函数可以实现在类外对类中私有成员的调用,将类外的函数或者其他的类设为该类的友元函数或友元类可以实现对类中私有成员的共享。实验 4:运算符重载一、实验目的和要求1.先读程序,预测程序的输出结果,再运行程序验证程序的输出。用友元重载方式重新编写次程序。2. 定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。3设计一个复数类,并重载,/ 和 运算符。写完整程序并调试。15 二、实验代码(附注释)或解答1. 先读程序, 预测程序的输出结果,再运行程序验证程序的输出。用友元重载方式重新编写次程序。#include class vector public: v
17、ector() vector(int i,int j) x=i;y=j; friend vector operator+=(vector v1,vector v2);/用友元重载方式friend vector operator-=(vector v1,vector v2);/ 用友元重载方式void display() cout(x,y)endl; private: int x,y; ; vector operator+=(vector v1,vector v2) v1.x+=v2.x; v1.y+=v2.y; return v1; vector operator-=(vector v1,ve
18、ctor v2) vector temp; temp.x=v1.x-v2.x; temp.y=v1.y-v2.y; return temp; void main() vector v1(1,2),v2(3,4),v3,v4; v3=v1+=v2;/v1(1,2) v3(4,6) 16 v4=v1-=v2;/v4(-2,-2) coutv1=; v1.display();/v1(1,2) coutv2=; v2.display();/v2(3,4) coutv3=; v3.display();/v3(4,6) coutv4=; v4.display();/v4(-2,-2) 2.定义一个有理数类
19、,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。/定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出#include class rational private: long denom,den;/denom 为分子 ,den 为分母public: rational(long a, long b) denom=a;den=b; int operator(rational r) ; 17 int operator=(rational r) ; int operator=(rational r) ; int operator!=(rational r) ;
20、friend void compare(rational ,rational ); /这里增加赋值和读出函数void output() coutdenom/den; ; int rational:operator(rational t2) if(double)denom/den)(double)t2.denom/t2.den)return 1; else return 0; int rational:operator(double)t2.denom/t2.den) return 0;else return 1; int rational:operator=(rational t2) if(do
21、uble)denom/den)=(double)t2.denom/t2.den) return 1; else return 0; int rational:operator!=(rational t2) if(double)denom/den)=(double)t2.denom/t2.den)return 0; else return 1; void compare(rational t1,rational t2) if(t1t2)=1) 18 t1.output();cout;t2.output();coutendl; if(t1=t2)=1) t1.output();cout=;t2.o
22、utput();coutendl; if(t1=t2)=1) coutt1.denom/t1.den=t2.denom/t2.denendl; if(t1!=t2)=1) coutt1.denom/t1.den!=t2.denom/t2.denendl; void main() rational t1(1,2),t2(2,3); compare(t1,t2); 3.设计一个复数类,并重载,/ 和 运算符。写完整程序并调试#include #include class complex public: complex()real=0;imag=0; complex(double a,double
23、b)real=a;imag=b; complex operator +(complex c2); complex operator -(complex c2); complex operator *(complex c2); complex operator /(complex c2); complex operator (complex c2); 19 void display(); private: double real,imag; ; complex complex:operator+(complex c2) complex c; c.real=real+c2.real; c.imag
24、=imag+c2.imag; return c; complex complex:operator-(complex c2) complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return c; complex complex:operator*(complex c2) complex c; c.real=real*c2.real; c.imag=imag*c2.imag; return c; complex complex:operator/(complex c2) complex c; c.real=real/c2.real; c.i
25、mag=imag/c2.imag; return c; complex complex:operator(complex c2) complex c; 20 c.real=real* (pow (10,c2.real); c.imag=imag* (pow (10,c2.imag); return c; void complex:display() cout(real,imag)endl; void main() complex c1(1,1),c2(2,2),c3; c3=c1+c2; coutc1=;c1.display(); coutc2=;c2.display(); coutc1+c2
26、=;c3.display(); c3=c1-c2;coutc1-c2=;c3.display(); c3=c1*c2;coutc1*c2=;c3.display(); c3=c1/c2;coutc1/c2=;c3.display(); c3=c1c2;coutc1c2=;c3.display(); 三、实验总结这个实验主要是运算符的重载,分为友元重载和类成员函数和其他共3 种方式, 在熟悉了重载的方法的基础上,复习了关于类成员函数的使用以及友元函数的使用。试21 验中我们一定要注意在类定义完之后一定要加“;” ,而在一般的函数之后不用“;” ,这个是很重要的,同时注意“=”和“ =”的区别,在
27、使用中一定要注意。同时在操作符函数中已经自带一个参数,所以注意参数个数-1。单目运算一般用友元重载,双目一般用类成员函数。实验 5:派生与继承一、实验目的和要求1.定义一个基类myarray, 基类中可以存放一组数组。class myarray int *alist; int length; public: myarray( int leng); myarray(); void input(); void display(); ; 编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。2定义一个类averarray 继承自 myarray,在类中求数组的
28、平均值,并输出。进行调试。3定义一个类revarray 继承自myarray, 使数组按反序存放,并输出。进行调试。定义一个类nawarray 继承自 averarray 和 revarray。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。二、实验代码(附注释)或解答/编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能#include class myarray private:int *alist; int length; 22 public: myarray( int leng); myarray();
29、 void input(); void display(); ; myarray:myarray( int leng) length=leng; myarray:myarray() cout 调用析构函数 ; void myarray:input() int i; alist=new int length;/ 动态分配内存cout 输入数组元素 :; for(i=0;ialisti; void myarray:display()/输出 int i; for(i=0;ilength;i+) coutalisti ; delete alist; 23 void main() int m; cout
30、输入数组元素个数:m; myarray t(m); t.input(); t.display(); /定义一个类averarray 继承自 myarray,在类中求数组的平均值,并输出#include class myarray private:int *alist; int length; public: myarray( int leng); myarray(); void input(); void display(); int getl()return length; int geta(int a)return alista; ; 24 myarray:myarray( int leng) length=leng; myarray:myarray() cout 调用析构函数 ; void myarray:input() int i; alist=new int length;/ 动态分配内存cout 输入数组元素 :; for(i=0;ialisti; void myarray:display()/输出 int i; for(i=0;ilength;i+) coutalisti ; delete alist; class averarray:public myarray public: aver
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年检验技术师历年押题宝典试题含答案详解(培优A卷)
- 2026年一级注册建筑师《建筑经济、施工与设计业务管理》基础试题库附完整答案详解(有一套)
- 2026年理财规划师之二级理财规划师综合提升测试卷附答案详解【轻巧夺冠】
- 2026年防火防爆押题练习试卷含答案详解【模拟题】
- 2026年基建安全质量培训(线路)考试历年机考真题集及答案详解(网校专用)
- 【低空经济】低空应急管理体系和能力现代化建设方案
- 2025-2026 学年八年级下学期历史3 月期中模拟卷二(含答案)
- 2026年幼儿园用电 课件
- 2026年幼儿园常规绘本
- 2026及未来5年中国CL四方无边蜡烛杯市场数据分析及竞争策略研究报告
- 2025年空军军队文职技能岗考试采购员练习题及答案
- 涉毒违法犯罪警示教育课件大纲
- 甜点草莓少司课件
- 高校大创项目申报书撰写指南
- 2024-2025学年辽宁省丹东市第十九中学七年级下学期期中考试数学试题
- 幼儿园中班数学课《认识数字1-10》课件
- 2024广东海洋大学教师招聘考试真题及答案
- 劳技课编手链课件
- 2025年人教版七年级数学下册期中复习题(基础版)(范围:相交线与平行线、实数、平面直角坐标系)解析版
- 武侯祠历史讲解
- 推进信息化建设“十五五”规划-(2025-2025年)-根据学校十五五
评论
0/150
提交评论