10月26日实验报告

1.创建一个对象数组,数组的元素是学生对象,学生的信息包括学号、姓名和成绩(一门课成绩),在main函数中将数组元素按学生成绩从小到大的顺序排序并显示出来。(学生对象不得少于5个,显示定义构造函数和析构函数,并在里面加上测试语句)

#include<iostream>
#include<string>
using namespace std;
class student{
	private:
		string xuehao;
		string xingming;
		double fenshu;//三个数据成员 ,学号和姓名都做成字符串类型 
	public:
		student(string xh=" ",string xm=" ",double fs=0)
        //构造函数,学号名字和成绩,且都设置了默认值
		//设置默认值的好处就是在创建对象时可以实现形式多元
        //即在调用(创建对象)的时候形式可以有多种 
		//此处给了三个默认值,可以做无参使用,也可以给一个给两个值 
		{
		xuehao=xh;
		xingming=xm;//创建对象的时候会调用一个构造函数来对它做初始化
		//此时就是将xm赋值给姓名完成初始化 
		fenshu=fs;
		cout<<xingming<<"的析构函数被调用!"<<endl;}//提示某一个函数被调用了
		//此时输出的就是哪一个名字的对象的构造函数被调用了 
		//比如输出:张三的析构函数被调用 
void show()//构造函数show,显示三个数据成员,依次按照以下格式的字符串进行显示 
{
	cout <<"学号"<<xuehao
<<"姓名"<<xingming
<<"分数"<<fenshu<<endl; 
}
double get_fenshu(){//为了支持私有成员的分数的访问
//因为fenshu是私有成员在类的外部,无法通过对象.的方式这种操作来进行访问
//所以要加一个公有接口get_fenshu来返回当前fenshu的值 
	return fenshu;
}
Student(){//此处的Student是一个包含在类里面的成员函数
//函数名不能和类的命名相同,最好以不同命名来以示区分 
	cout <<xingming<<"的析构函数被调用!"<<endl;//析构函数,作用一个输出 
}
};

int main(){
    student stemp;//放此处属于main函数,属于一个局部变量,也是一个无参对象
	//由于在类定义最开始的时候设置了三个默认值,所以是支持无参函数的初始化的 
	student st[5]={//创建一个对象数组,此处的student调用的是定义的类的那个student 
    //创建的时候用构造函数, 结束的时候用析构函数,可以参考出栈和入栈 
	student("180001","张三",78),
	student("180002","李四",89),
	student("180003","小王",92),
	student("180004","小李",58),
	student("180005","小白",66)//完成数组的初始化,注意不能只写数据信息
    //此处看起来像构造函数的调用 
	};//对象数组创建好了 
	cout<<"原始信息如下:"<<endl;//输出没排序之前的信息 
	for (int i=0;i<5;i++)//用循环对数组的五个元素进行输出 
	{
		st[i].show();//输出st[i]这个数组元素不能直接使用cout
		//cout<<st[i]的写法是错的,c++不认可这个,没有提前预设这种类型的输出方式
		//所以需要调用这个对象自身的输出的成员函数 来完成对它自身的一个输出 
	}
	
	for(int j=0;j<4;j++) //冒泡排序:外循环n-1,所以说j<4,而不是j<5,n是看有多少个元素 
	{
		for(int i=0;i<4-j;i++)//内循环n-1-i所以此处是i<4-j,由i<5-1-j演变而来 
		if(st[i].get_fenshu()>=st[i+1].get_fenshu()){//里面的循环体是两两比较小靠前 
		//此处是st[i]和st[i+1]作比较,升序的话就是小的在前面 
			//student stemp;创建一个stemp临时对象作为交换,放到此处属于一个块变量,
			//只属于它所处的这个大括号所在的这一小部分, 
			stemp=st[i];
			st[i]=st[i+1];
			st[i+1]=stemp;	
		}//用循环对数组的五个元素进行输出 
		}
		cout<<"按成绩从低到高排列如下:"<<endl;
		for(int i=0;i<5;i++)
		{
			st[i].show();
		 	 } 
	return 0;
	}
	

运行结果:

注:运行结果中的“的析构函数被调用”其实就是stemp的调用,因为它在设置的时候就是无参的 

2.使用C++的string类,将5个字符串按逆转后的顺序展示出来。测试数据,键盘输入: Germany Japan America Britain France ,控制台显示:France Britain America Japan Germany;

#include<iostream>
#include<string>
using namespace std;
void zhuanhuan(string s[],int n)//完成反向的转置,
//用数组可以利用循环,更方便 
{
	for (int i=0;i<n/2;i++)//此时n为5,5/2是2,i<2说明i只能取0和1 
	{
		string stemp;
		stemp=s[i];
		s[i]=s[n-1-i];//当i为0时,第一个位置的字符串会在5-1-0=4的位置出现,
		//即实现0和4的交换,i为1时就是1和3的交换 
	    s[n-1-i]=stemp;
	}
}
int main()
{
	const int shuchu =5;//const只能对len进行读操作不能进行改写操作 
	string str[shuchu];//长度为5的一个数组存储字符串 
	cout<<"从键盘输入"<<shuchu<<"个字符串:"<<endl;
	for(int i=0;i<shuchu;i++)//做循环 
	cin>>str[i];//循环了五次送到数组str[i]当中 
	cout<<"将5个字符串逆转输出:"<<endl;
	zhuanhuan(str,shuchu);//逆转要用到zhuanhuan这个方法
	//该方法将数组的首地址str和数组元素shuchu的个数传过去 
	for(int i=0;i<shuchu;i++)
	cout<<str[i]<<endl; //输出 

return 0;	
}

 运行结果:

3.设计个用来表示直角坐标系的Location类,在主函数中新建两个对象A、B,要求A在第3象限,B在第2象限,用成员函数计算2个坐标之间的距离。

#include<iostream>
#include<cmath>
using namespace std;
class Location//题目要算两点之间的距离,一个Location只能描述一个点的距离 

{	private:
		double x,y;//坐标,可以写出第一象限和第二象限 
	public:
	Location(int a=0,int b=0):x(a),y(b){}//构造函数,考虑到无参的构造情况,先做好初始化
	//冒号:后面的内容是用的初始化列表的方式 
	//x用a做初始化,y用b做初始化 
	
	double dist(const Location &t){
	//返回值用double,用引用类型,不用调用析构函数和构造函数
	//利用const让值只读不写 
	//一个点为(x,y),另一个点t为(t.x,t.y) 
double d;
d=sqrt((x-t.x)*(x-t.x)+(y-t.y)*(y-t.y));//求两点间距离公式 
return d;
}
};
int main (){
	Location A(-2,-2),B(-2,2);//创建Location的对象, 
	double b;//两点间的距离 
	b=A.dist(B);//写B.dist(A);也是可以的,这种方式才叫做用成员函数做
	//dist这个函数需要两个点,有一个点已经给出来了
	//即对象调用它,那么它就作为其中的一个点,另外一个点以参数的形式交给dist,
    //然后把它放参数里,即()里 
	cout <<"b="<<b<<endl;
	return 0;
}

 运行结果:

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值