实验目的:
熟悉c++的指针、引用,运算符new和delete。
熟悉c++的类和对象。
实验步骤与内容:
1、在main函数中接受从键盘输入的3个整数,调用下面的三个函数进行排序,然后输出排序后的结果。
- 实现函数sort1(int x, int y, int z),sort2(int *px, int *py, int * pz),sort3(int &x, int &y, int &z), 分别采用传值、传指针、传引用的方式接受参数,对三个整数按照从小到大顺序排序,输出排序后的结果。
- 分析三种传递参数的方式有什么不同,在main函数中哪种方式能正确地得到排序后的结果?
#include<iostream>
using namespace std;
//传值
void sort1(int a, int b, int c){
//sort(&x,&y,&z);
int temp;
if(a>b)
{temp=a;a=b;b=temp;}
if(a>c)
{temp=a;a=c;c=temp;}
if(b>c)
{temp=b;b=c;c=temp;}
printf("这3个整数从小到大排列是:%d<%d<%d\n",a,b,c);
}
//传指针
void sort2(int *a, int *b, int *c){
int temp;
if(*a>*b)
{temp=*a;*a=*b;*b=temp;}
if(*a>*c)
{temp=*a;*a=*c;*c=temp;}
if(*b>*c)
{temp=*b;*b=*c;*c=temp;}
printf("这3个整数从小到大排列是:%d<%d<%d\n",*a,*b,*c);}
//传引用
void sort3(int &a, int &b, int &c){
int temp;
if(a>b)
{temp=a;a=b;b=temp;}
if(a>c)
{temp=a;a=c;c=temp;}
if(b>c)
{temp=b;b=c;c=temp;}
printf("这3个整数从小到大排列是:%d<%d<%d\n",a,b,c);
}
int main(){
int a,b,c;
int *x,*y,*z;
printf("请输入3个整数:");
scanf("%d %d %d",&a,&b,&c);
printf("您输入的3个整数是:%d %d %d\n",a,b,c);
x=&a;
y=&b;
z=&c;
sort1(a,b,c);
sort2(x,y,z);
sort3(a,b,c);
}
(测试结果如下:)在main函数中sort2、sort3方法可以得到正确结果,因为传指针和引用真正改变了a、b、c的值,在sort1方法中只是将值传进去作为局部变量,无法在其他域中得到改变后的值。
2、在main函数中,先接受从键盘输入的数组元素个数n,然后,用new动态创建包含n个元素的一维数组,再从键盘输入数组元素值,最后输出数组所有元素的值
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"请输入数组元素个数\n";
cin>>n;
int *arr=new int[n];
cout<<"请输入数组元素\n";
for(int i=0;i<n;i++) cin>>arr[i];
cout<<"您输入的数组为:\n";
for(int i=0;i<n;i++) cout<<arr[i]<<" ";
return 0;
}
(测试结果如下:)
3、请检查下面的程序,找出其中的错误并改正,上机调试,使之能正常运行。运行时从键盘输入时、分、秒的值,检查输出是否正确。
#include <iostream>
using namespace std;
class Time
{
private:
int hour;
int minute;
int sec;
public:
void set_time(void)
{
cin>>hour;
cin>>minute;
cin>>sec;
}
void show_time(void)
{
cout<<hour<<" : "<<minute<<" :"<<sec<<endl;
}
};
Time t;
int main()
{
t.set_time();
t.show_time();
return 0;
}
(测试结果如下:)
4、改写1中程序,要求:
- (1) 将数据成员改为私有的;
- (2) 将输入和输出功能改为由成员函数实现,在类体内定义成员函数。
#include<iostream>
using namespace std;
class Time{
private:
int hour;
int minute;
int sec;
public:
void set_time(){
cin>>this->hour;
cin>>this->minute;
cin>>this->sec;
}
void show_time(){
//时间显示个位数时大多前补零
printf("%02d:%02d:%02d",this->hour,this->minute,this->sec);
}
};
int main(){
Time t;
t.set_time();
t.show_time();
return 0;
}
(测试结果如下:)
5、需要求3个长方体的体积,请编写一个基于对象的程序。类的数据成员包括length(长)、width(宽)、 height(高),定义三个成员函数实现以下功能:
- (1) 由键盘分别输入3个长方体的长、宽、高。
- (2) 计算长方体的体积;
- (3) 输出3个长方体的体积。
请编写程序,上机调试并运行。
#include <iostream>
using namespace std;
class Cube{
int length,width,height;
public:
void getdata(){
cout<<"请输入长:";
cin>>length;
cout<<"请输入宽:";
cin>>width;
cout<<"请输入高:";
cin>>height;
}
int volume(){
return length*width*height;
}
void printV(){
printf("长%d宽%d高%d的长方体的体积为%d\n",length,width,height,volume()); }
};
int main(){
Cube c1,c2,c3;
//(1) 由键盘分别输入3个长方体的长、宽、高。
cout<<"第一个长方体:"<<endl;
c1.getdata();
cout<<"第二个长方体:"<<endl;
c2.getdata();
cout<<"第三个长方体:"<<endl;
c3.getdata();
cout<<endl;
//(2) 计算长方体的体积。
cout<<"第一个长方体体积为"<<c1.volume()<<endl;
cout<<"第二个长方体体积为"<<c2.volume()<<endl;
cout<<"第三个长方体体积为"<<c3.volume()<<endl;
cout<<endl;
//(3) 输出3个长方体的体积。
c1.printV();
c2.printV();
c3.printV();
return 0;
}
(测试结果如下:)