实验报告一C++基础实验
班级__2010XXX__ 学号__2010XXXX__ 姓名__HoogLe__ 专业___XXXX____ 一、 实验目的:
(1) 掌握类与对象的基本知识点 (2) 掌握引用、指针的应用
(3) 掌握函数模板、类模板的应用
(4) 利用time函数实现算法评价的事后统计方法 (5) 熟悉抽象数据类型的表示和实现方法 二、 实验内容:
1、利用函数模板,实现输入三个数(可以是三个整形或浮点数等),并按由大到小的进行排序后输出。
#include _using namespace std__;_template__ swap1(_Type_ *p1,_Type_ *p2) {_Type_ p; p=*p1; *p1=*p2; *p2=p; }
void main() {_int_ n1,n2,n3;
cout<<\"请输入三个整数:\\n\"; cin>>n1>>n2>>n3;
if (n1cout<<\"排序后为:\"<cout<<\"请输入三个浮点数:\\n\"; cin>>e1>>e2>>e3;_if(e1cout<<\"排序后为:\"<请粘贴出运行测试结果:2、 实现利用选择排序对存储10个数值的动态数组进行排序的通用模板。 #include using namespace std;_template_void sort(_Type_ *a, int n) /*选择法排序,从小到大*/ {int i,j; __Type_ p; for (i=0;ia[j]) { p=*(a+i); //*(a+i)等价于a[i]; a[i]=a[j]____; _*(a+j)___=p; } } }试分析sort的时间复杂度:O(); void main()
{ int n; //数组大小变量 cout<<\"请输入动态数组的大小:\"; _cin>>n_; _int *p=new int[n]__________; //申请动态数组存储空间 cout<<\"\\n请输入数组中的\"<>p[i]___;//从键盘读入数据 _sort(p,n)___________; //对数组中的数据进行排序 cout<<\"排序后数组中的数据:\\n\"; for(int j=0;j__delete [ ] p_____________ ; //释放所申请的存储空间 }粘贴测试数据及运行结果:
3. 算法事后统计分析方法,利用函数库time中clock_t类进行测试。 实例:统计5,000,000,00次空的for循环的时间,单位是秒。 这个头部定义了与时间有关的三种类型Clock_t,time_t,tm。),利用此方法,可对同一问题的不同算法加以性能测试。 #include #include using namespace std; void main() { volatile long unsigned t;//volatile 可变的 //方法一: time_t start; start=time(NULL);//设置起始时间 for(t=0;t<500000000;t++); cout<<\"loop used \" <cout<<\"loop used \" <<(clock()-ti)/(CLK_TCK*1.0)<<\" seconds.\\n\";//精度更高 }粘贴测试结果:
4.[问题描述]:设计一个复数类,其抽象数据类型描述如下。 [复数抽象数据类型描述]:
ADT complex is Date
实部。 虚部。 Operation
Complex构造函数
输入:要初始化实部的值realval与虚部的值imgval。 动作:确定实部与虚部。 GetReal 获得实部 输入:无 前置条件:无
动作:获得复数的实部 输出:返回该复数的实部。 后置条件:无 GetImag 获得虚部 输入:无 前置条件:无
动作:获得复数的虚部 输出:返回该复数的虚部。 后置条件:无
Operate + 重载加法运算符,实现两个复数相加 输入:另一个所要相加复数对象 前置条件:无
动作:将两个复数的实部与虚部分别相加 输出:返回相加后的复数对象。 后置条件:无
Operate - 重载减法运算符,实现两个复数相减 输入:要减的复数对象 前置条件:无
动作:将两个复数的实部与虚部分别相减 输出:返回相减后的复数对象。 后置条件:无 Display 输出复数 输入:无 前置条件:无
动作:将复数的实部和虚部按一定格式输出 输出:无 后置条件:无 end ADT complex
[利用类模板加以实现,使实部、虚部可以为int或float或double] 头文件complex.h实现类声明代码如下: #include template class complex {private: T realval,imgval; public: complex(){ realval=imgval=0;}; complex(T real=0,T img=0){ realval=real; imgval=img; }~complex(){}; T GetReal(); T GetImag();
complex operator+(complex& c); complex operator-(complex& c); friend ostream& operator<<(ostream& out,complex& d); friend istream& operator>>(istream& in,complex& d); void display(); };在complex..cpp文件中实现complex类中成员函数,实现代码如下: templateT complex::GetReal(){ return realval; }templateT complex::GetImag(){ return imgval; }templatecomplex complex::operator+(complex& c){ realval+=c.realval; imgval+=c.imgval; return *this; }templatecomplex complex::operator-(complex& c){ realval-=c.realval; imgval-=c.imgval; return *this; }templateostream& operator<<(ostream&out,complex& d) { if(d.realval!=0&&d.imgval!=0){out<templateistream& operator>>(istream&in,complex& d) { in>>d.real>>d.imag; return in; }templatevoid complex::display(){ if(realval!=0&&imgval!=0){cout<主程序代码如下: #include #include\"complex.h\" void main(){complex com11(0,0),com12(0,0); complex com21(4,0),com22(0,3); complex com31(3,1.5),com32(8,-1.5); complex com41(-4,3.4),com42(-6,-8.1); complex com51(-5.4,1.2),com52(5.4,3.2); cout<<\"输入测试\"< z1(com11.GetImag(),com11.GetReal()); cout<[测试数据](1)Z1=0,Z2=0; (2)Z1=4,Z2=3i;
(3)Z1=3+1.5i,Z2=8-1.5i; (4)Z1=-4+3.4i,Z2=-6-8.1i; (5)Z1=-5.4+1.2i,Z2=5.4+3.2i; (6)Z1的共轭复数:
[粘贴测试结果]
三、 心得体会:(含上机中所遇问题的解决办法,所使用到的编程技巧、创新点及编程的
心得)