GIS程序设计实验报告(c++)_第1页
GIS程序设计实验报告(c++)_第2页
GIS程序设计实验报告(c++)_第3页
GIS程序设计实验报告(c++)_第4页
GIS程序设计实验报告(c++)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、合肥工业大学资源与环境工程学院GIS程序设计实验报告姓 名 学 号 专 业 地理信息系统 班 级 任课教师 实验1:在小范围内用C+增强C的功能一、 实验目的和要求 目的:快速掌握C+语言编程的方法,在小范围内增强C+的功能,主要内容有:(1)输入流、输出流的使用;(2)函数原型;(3)new和delete运算符分配内存。二、 实验代码(附注释)或解答(1) 编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。# include < iostream.h>/两数和差积商# include < stdio.h>voi

2、d main () double a,b,c,d,e,f;cout<<"输入两个数"<<endl;cin>>a>>b;c=a+b;d=a-b;e=a*b;f=a/b;cout<<"a+b="<<c<<endl;cout<<"a-b="<<d<<endl;cout<<"a*b="<<e<<endl;cout<<"a/b="<&

3、lt;f<<endl; (2) 用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入3´3整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。/使用new delete动态内存分配#include < iostream.h>#include <stdio.h> void main () int m,n,sum=0,i,j,min,max; int *a; /创建二维指针 cout<<"输入数组行数列数"cin>>m>>n; a=new int *m;/创建指针数组fo

4、r(i=0;i<m;i+) ai=new int m;/为每一行分配空间cout<<"输入数组元素"for(i=0;i<m;i+) /输入数组元素for(j=0;j<n;j+)cin>>aij;min=max=a00; for(i=0;i<m;i+) for(j=0;j<n;j+) if(min>aij) min=aij;/求最小值 if(max<aij) max=aij;/求最大值 sum=sum+aij;/求和 for(i=0;i<m;i+) delete ai;delete a;/释放动态数组 c

5、out<<"sum="<<sum<<endl;cout<<"min="<<min<<endl<<"max="<<max<<endl;(3) 用内联函数编写程序。输入圆柱的半径和高,计算圆柱的底面周长,表面积和体积。底面周长,表面积和体积的实现用内联函数实现#include <iostream.h>#define PI 3.1415926#include<stdio.h>inline double lent

6、h(double a,double b)/内联函数:求圆柱的周长 return 4*PI *a; inline double seq(double a,double b)/内联函数:求圆柱的面积 return 2* PI *a*a+2*PI*a*b; inline double vv(double a,double b)/内联函数:求圆柱的体积 return PI *a*a*b; /*/void main() double r,h; double l,s,v; cout<<"输入圆柱的半径,高:" cin>>r>>h; l= lenth

7、( r, h);/调用内联函数 s=seq(r,h); v=vv(r,h); cout<<"周长l="<<l<<endl; cout<<"面积s="<<s<<endl<<"体积v="<<v<<endl; (4) 仿照教材中的例题,用引用的方法给包含十个元素的一维数组赋值,其值分别为9,8,7,6,5,4,3,2,1。#include <iostream.h>void main() int a10,i;for(i=0;

8、i<10;i+) int &t=ai;t=10-i;cout<<"数组为:"<<endl;for(i=0;i<10;i+) cout<<ai<<endl;三、 思考题解答 (1)内联函数与无参数的宏定义和普通函数的区别是什么?使用内联函数应注意什么问题?区别:内联函数是在程序执行到该处时自动将代码植入到主程序处进行运行;宏定义是在程序开始执行前替换到程序中的宏定义的所有代码;普通函数是程序执行到该处时,调用函数,然后转到其他程序运行;(2) 分配二维数组的内存空间 如 3行4列的数组。int (*p)4;p

9、=new int34;程序不能使用c+不存在的字符集 如p f正确解答: int *p,i;*p=new int3;for(i=0;i<3;i+=) pi=new int 4;(3) 实参与形参匹配的问题: int a34; circle( a0); /或 circle( &a00)float circle( int *p) *p指向的是a00,不是他是地址,也不是指针(4)变量定义的错误for (int j=0;j<10;j+) int &a=x;- x在其他无定义四、 实验总结通过这次试验,我们练习了基本的c+操作,对这门课有了更深的认识,对第一个试验比较容易,

10、后面几个就是新的内容,所以就参考了教科书并在网上查询了一些,特别是二维数组的动态分配内存空间,可以用一维和二维的方法来完成本次试验的操作。实验2:类的定义与应用一、 实验目的和要求1 定义一个时间类Time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时间。2 定义一个计算器类,能够实现加减乘除四则运算,对有关成员函数重载,以实现不同类型数据的运算。并用构造函数和析构函数将数据成员初始化为0。3.编写一个画图的程序,定义圆,直线和矩形等基本绘图元素的类,能够实现基本的绘图功能二、 实验代码(附注释)或解答1 定义一个时间类Time,它能提供由时分秒组成的时间。要求能够修改时间和打印出时

11、间。 #include<iostream.h>class time private:int h,m,s;public:void get() cout<<"putin hour minute second"<<endl;cin>>h>>m>>s;void put() cout<<h<<" :"<<m<<" :"<<s<<endl;void main() time a;a.get();a.put(

12、);2 定义一个计算器类,能够实现加减乘除四则运算,对有关成员函数重载,以实现不同类型数据的运算。并用构造函数和析构函数将数据成员初始化为0。#include<iostream.h>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) return a-b;double mul(double a,double b) return a*b;double div(double a,double b)

13、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;cout<<"put in two integer:"cin>>a>>b;cout

14、<<a<<"+"<<b<<"="<<c.add(a,b)<<endl;cout<<a<<"-"<<b<<"="<<c.sub(a,b)<<endl;cout<<a<<"*"<<b<<"="<<c.mul(a,b)<<endl;cout<<a<&l

15、t;"/"<<b<<"="<<c.div(a,b)<<endl;cout<<"put in two real munber:"cin>>x>>y; cout<<x<<"+"<<y<<"="<<c.add(x,y)<<endl;cout<<x<<"-"<<y<<"=&

16、quot;<<c.sub(x,y)<<endl;cout<<x<<"*"<<y<<"="<<c.mul(x,y)<<endl;cout<<x<<"/"<<y<<"="<<c.div(x,y)<<endl;三、 实验总结 通过实验,学习了类的定义和函数的重载,特别注意函数重载中的问题,他是函数名称相同,但是函数功能不同,这是指其实现的方式,比如数据类型

17、不同的数的加法。重载函数的形参必须有所不同,即个数不同或类型不同。在具体使用中不要将功能不同的函数重载,比如一个是求加,另一个的求减法。实验3:类中静态数据成员和友元函数的使用一、 实验目的和要求 1:类成员函数copy用于实现两个对象的相互拷贝; 2:商店进出货物类; 3 有两个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。二、 实验代码(附注释)或解答(1)/第一题:类成员函数copy用于实现两个对象的相互拷贝void copy(Myclass & my) this->x=my.x;/ x=my.x; this->y=my.y;/ y=m

18、y.y; ; 2/第二题:商店进出货物类#include <iostream.h>class carloprivate: double oneprice, oneweight;public: static double allweight,allprice;/定义静态数据成员 carlo(double m,double n);/构造函数 void get() allweight+=oneweight; allprice+=oneprice; void sold()/求和函数 allweight-=oneweight; allprice-=oneprice; void write (

19、)/输出函数 cout<<"allwprice="<<allprice<<endl; cout<<"allweight="<<allweight<<endl; carlo() cout<<"调用析构函数"<<endl;3 有两个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。 (1)/*/ void intset:setto (set &t) t.num0=(float)num0; t.num1=(fl

20、oat)num1; t.num2=(float)num2; /*/(2)#include<iostream.h>/使用友元函数class set;class intset private: int num3;public: intset ( int x,int y, int z) /添加初始化内容 num0=x; num1=y; num2=z; void print( ) /打印数据 int i; for(i=0;i<3;i+) cout<< numi; void settofloat (set &t) ; ;class set private: floa

21、t num3;public: set ( float x,float y, float z) /添加初始化内容 num0=x; num1=y; num2=z; void print( ) /打印数据 int i; cout<<" " for(i=0;i<3;i+) cout<< numi; friend void intset:settofloat (set &);void intset:settofloat (set &t) t.num0=num0; t.num1=num1; t.num2=num2; /*/void main

22、() 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指针,因而其无法访问类中的非静态成员。友元函数可以实现在类外对类中私有成员的调用,将类外的函数或者其他的类设为该类的友元函数或

23、友元类可以实现对类中私有成员的共享。实验4:运算符重载一、 实验目的和要求1. 先读程序,预测程序的输出结果,再运行程序验证程序的输出。用友元重载方式重新编写次程序。2. 定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。 3设计一个复数类,并重载,×,/ 和 <<运算符。写完整程序并调试。二、 实验代码(附注释)或解答 1. 先读程序,预测程序的输出结果,再运行程序验证程序的输出。用友元重载方式重新编写次程序。#include <iostream.h>class Vector public:Vector()Vector(int i

24、,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

25、.x; v1.y+=v2.y; return v1;Vector operator-=(Vector v1,Vector 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) v4=v1-=v2;/v4(-2,-2) cout<<"v1=" v1.display();/v1(1,2) cout<<"v2=" v2.dis

26、play();/v2(3,4) cout<<"v3=" v3.display();/v3(4,6) cout<<"v4=" v4.display();/v4(-2,-2)2. 定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出。/定义一个有理数类,重载比较运算符.写一个完整的程序,进行数据成员的设置和输出#include<iostream.h>class rationalprivate: long denom,den;/denom为分子,den为分母public: rational(long

27、a, long b) denom=a;den=b; int operator<(rational r) ; int operator<=(rational r) ; int operator=(rational r) ; int operator!=(rational r) ; friend void compare(rational ,rational ); /这里增加赋值和读出函数 void output() cout<<denom<<"/"<<den;int rational:operator<(rational

28、t2) if(double)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;int rational:operator=(rational t2) if(double)denom/den)=(double)t2.denom/t2.den)return 1;else return 0;int ration

29、al:operator!=(rational t2) if(double)denom/den)=(double)t2.denom/t2.den)return 0;else return 1;void compare(rational t1,rational t2) if(t1<t2)=1) t1.output();cout<<"<"t2.output();cout<<endl; if(t1<=t2)=1) t1.output();cout<<"<="t2.output();cout<<

30、;endl; if(t1=t2)=1)cout<<t1.denom<<"/"<<t1.den<<"="<<t2.denom<<"/"<<t2.den<<endl; if(t1!=t2)=1)cout<<t1.denom<<"/"<<t1.den<<"!="<<t2.denom<<"/"<<t2.de

31、n<<endl; void main() rational t1(1,2),t2(2,3); compare(t1,t2);3.设计一个复数类,并重载,×,/ 和 <<运算符。写完整程序并调试#include <iostream.h>#include <math.h>class complex public:complex()real=0;imag=0;complex(double a,double b)real=a;imag=b;complex operator +(complex c2);complex operator -(com

32、plex c2);complex operator *(complex c2);complex operator /(complex c2);complex operator <<(complex c2);void display();private:double real,imag;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.rea

33、l=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.imag=imag/c2.imag;return c;complex complex:operator<<(complex c2) complex c;c.real

34、=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;cout<<"c1="c1.display(); cout<<"

35、c2="c2.display();cout<<"c1+c2="c3.display(); c3=c1-c2;cout<<"c1-c2="c3.display();c3=c1*c2;cout<<"c1*c2="c3.display();c3=c1/c2;cout<<"c1/c2="c3.display();c3=c1<<c2;cout<<"c1<<c2="c3.display(); 三、 实验总结 这个实

36、验主要是运算符的重载,分为友元重载和类成员函数和其他共3种方式,在熟悉了重载的方法的基础上,复习了关于类成员函数的使用以及友元函数的使用。试验中我们一定要注意在类定义完之后一定要加“;”,而在一般的函数之后不用“;”,这个是很重要的,同时注意“=”和“=”的区别,在使用中一定要注意。同时在操作符函数中已经自带一个参数,所以注意参数个数-1。单目运算一般用友元重载,双目一般用类成员函数。实验5:派生与继承一、 实验目的和要求1.定义一个基类MyArray,基类中可以存放一组数组。Class Myarray int *alist; int length;public: Myarray( int l

37、eng); myarray(); void input(); void display();编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。2定义一个类averarray继承自myarray,在类中求数组的平均值,并输出。进行调试。3定义一个类revarray继承自 myarray, 使数组按反序存放,并输出。进行调试。定义一个类Nawarray继承自averarray和revarray。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。二、 实验代码(附注释)或解答/编写构造函数,析构函数及其

38、它函数,实现动态分配内存,释放内存和数据输入输出等功能#include<iostream.h>class Myarrayprivate:int *alist; int length;public: Myarray( int leng); Myarray(); void input(); void display();Myarray:Myarray( int leng) length=leng;Myarray:Myarray() cout<<"调用析构函数"void Myarray:input() int i; alist=new int length

39、;/动态分配内存cout<<"输入数组元素:"for(i=0;i<length;i+)/输入数组元素 cin>>alisti;void Myarray:display()/输出 int i; for(i=0;i<length;i+) cout<<alisti<<" " delete alist;void main() int m; cout<<"输入数组元素个数:"<<endl; cin>>m; Myarray t(m); t.input(

40、); t.display();/定义一个类averarray继承自myarray,在类中求数组的平均值,并输出#include<iostream.h>class Myarrayprivate:int *alist; int length;public: Myarray( int leng); Myarray(); void input(); void display(); int getl()return length; int geta(int a)return alista;Myarray:Myarray( int leng) length=leng;Myarray:Myarray() cout<<"调用析构函数"void Myarray:input() int i; alist=new int length;/动态分配内存cout<<"输入数组元素:"for(i=0;i<length;i+)/输入数组元素 cin>>alisti;void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论