山东大学《c++程序设计》lab3

天大地大妈咪最大 提交于 2020-01-23 03:04:20

实验目的:

熟悉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;
}

(测试结果如下:)
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!