LHL PTA 实验11 运算符重载、模板

题目1
6-1 学生成绩的输入和输出(运算符重载) (25分)
现在需要输入一组学生的姓名和成绩,然后输出这些学生的姓名和等级。
输入时,首先要输入学生数(正整数)N。接着输入N组学生成绩,每组成绩包括两项:第一项是学生姓名,第二项是学生的成绩(整数)。
输出时,依次输出各个学生的序号(从1开始顺序编号),学生姓名,成绩等级(不小于60为PASS,否则为FAIL)
函数接口定义:
面向Student类对象的流插入和流提取运算符
裁判测试程序样例:
#include
#include
using namespace std;

/* 请在这里填写答案 */

int main(){
int i, repeat;
Student st;
cin>>repeat;
for(i=0;i cin>>st;
cout< }
return 0;
}

static int cnt=0;
class Student
{
public:
string name;
int grade;
Student(string n=" ",int g=1)
{
name=n;
grade=g;
}

};
ostream&operator<<(ostream& out,const Student &s)
{
out< if(s.grade>=60)
out<<“PASS”;
else
out<<“FAIL”;

}
istream&operator>>(istream& in,Student &s)
{
in>>s.name>>s.grade;
cnt++;

}运行结果截图

题目2
6-2 日期类的设计与实现 (25分)
使用重载运算符(++,+=,<<等)实现日期类的操作。功能包括: 1)设置日期,如果日期设置不符合实际,则设置为默认日期(1900年1月1日) 2)在日期对象中向日期添加1或者加若干天(加入日期值后根据实际的日期进行月份、年份的变化) 3)重载流插入运算符进行日期的输出,其中月份要用名称表示
定义类MyDate:
class MyDate
主测试程序样例:
#include
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
int m,d,y;
MyDate d1,d2,d3;
cin>>m>>d>>y;
d1.setDate(m,d,y);

cin>>m>>d>>y;
d2.setDate(m,d,y);

cin>>m>>d>>y;
d3.setDate(m,d,y);

cout << "d1 is " << d1 << "\nd2 is " << d2;
cout << "\n\nd1 += 7 is " << ( d1 += 7 );
cout << "\n\n d2 is " << d2;
cout << "\n++d2 is " << ++d2;
cout << "\n\nTesting the prefix increment operator:\n"<< " d3 is " << d3 << endl;
cout << "++d3 is " << ++d3 << endl;
cout << " d3 is " << d3;
cout << "\n\nTesting the postfix increment operator:\n"<< " d3 is " << d3 << endl;
cout << "d3++ is " << d3++ << endl;
cout << " d3 is " << d3 <

}

输入样例:
在这里给出一组输入。例如:
13 38 100
12 31 2009
2 28 2000
输出样例:
在这里给出相应的输出。例如:
d1 is January 1, 1900
d2 is December 31, 2009

d1 += 7 is January 8, 1900

d2 is December 31, 2009
++d2 is January 1, 2010

Testing the prefix increment operator:
d3 is February 28, 2000
++d3 is February 29, 2000
d3 is February 29, 2000

Testing the postfix increment operator:
d3 is February 29, 2000
d3++ is February 29, 2000
d3 is March 1, 2000
作者
范鹏程
单位
内蒙古师范大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码清单:
class MyDate
{
public:
int year,day,month;
void setDate(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
MyDate operator +=(const int n)
{
MyDate my;
my.day=my.day+n;
return my;

}
const MyDate operator ++()
{
	this->year+=1;
	return *this;

}
const MyDate operator ++(int)
{
	this->month+=1;
	return *this;

}

};
ostream & operator <<(ostream & out,MyDate my)
{
if(my.month1) out<<"January ";
if(my.month
2) out<<"February ";
if(my.month3) out<<"March ";
if(my.month
4) out<<"April ";
if(my.month5) out<<"May ";
if(my.month
6) out<<"June ";
if(my.month7) out<<"July ";
if(my.month
8) out<<"August ";
if(my.month9) out<<"September ";
if(my.month
10) out<<"October ";
if(my.month11) out<<"November ";
if(my.month
12) out<<"December ";
out<

}}运行结果截图

题目3
6-3 有序数组(类模板) (25分)
实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。
每行输入的第一个数字为0,1,2或3:为0时表示输入结束; 为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。
如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。
从每行第三个输入开始,依次输入指定类型的数据。
类模板:
template
class MyArray
裁判测试程序样例:
#include
using namespace std;

/* 请在这里填写答案 */

template
MyArray::~MyArray(){ delete[] data;}

template
bool MyArray::check(){
int i;
for(i=0;i if(data[i]>data[i+1]) { cout<<“ERROR!”< return true;
}
int main( )
{
MyArray *pI;
MyArray *pF;
MyArray *pC;
int ty, size;
cin>>ty;
while(ty>0){
cin>>size;
switch(ty){
case 1: pI = new MyArray(size); pI->sort(); pI->check(); pI->display(); delete pI; break;
case 2: pF = new MyArray(size); pF->sort(); pF->check(); pF->display(); delete pF; break;
case 3: pC = new MyArray(size); pC->sort(); pC->check(); pC->display(); delete pC; break;
}
cin>>ty;
}
return 0;
}

输入样例:
1 3 2 3 1
2 4 1.5 2.6 3.7 0.5
3 2 A a
0
输出样例:
1 2 3
0.5 1.5 2.6 3.7
A a
代码清单:
template
class MyArray
{
public:
T * data;
int size;
bool check();
MyArray(int siz)
{
size=siz;
data=new T[size];
}
~MyArray();

void sort()
{
	int i,j,n;
	T t;
	for(i=0;i>data[i];
	
	for(i=0;idata[j+1])
		{
			t=data[j];
			data[j]=data[j+1];
			data[j+1]=t;
		}	
	}
}
void display()
{
	int i;
	for(i=0;i

};运行结果截图

题目4
6-4 vector (25分)
本题要求实现一个Vector类模板,能实现数据的存储和访问。通过[]运算符访问时只能访问已经存在的元素,而通过add()方法访问时可以自动扩展内部存储空间。
注意,这个Vector的行为和std::vector是不同的
函数接口定义:
template
class Vector {

裁判测试程序样例:
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
Vector vint;
int n,m;
cin >> n >> m;
for ( int i=0; i // add() can inflate the vector automatically
vint.add(i);
}
// get_size() returns the number of elements stored in the vector
cout << vint.get_size() << endl;
cout << vint[m] << endl;
// remove() removes the element at the index which begins from zero
vint.remove(m);
cout << vint.add(-1) << endl;
cout << vint[m] << endl;
Vector vv = vint;
cout << vv[vv.get_size()-1] << endl;
vv.add(m);
cout << vint.get_size() << endl;
}

输入样例:
100 50
输出样例:
100
50
99
51
-1
100

#include
#include
#include
#include
#include
using namespace std;
class question1
{
public:
int x,y;
question1(int x1,int y1)
{
x=x1;
y=y1;

}
void add()
{
	cout<

};
class question2
{
public:
int x,y;
question2(int x1,int y1)
{
x=x1;
y=y1;

}//91-79
void add()
{
	cout<0 && y%100==0 && y%10>0)cout<

};
class question3
{
public:
int x,y;
question3(int x1,int y1)
{
x=x1;
y=y1;

}//91-79
void add(){
	int b,a,c,d;
	b=x-10*(x/10);
	a=y-10*(y/10);
	c=x-10*(x/100);
	d=y-10*(y/100);
	if( b0 && y%100==0 && y%10>0)cout<0 && y%100==0 && y%10>0)cout<

};
#include
using namespace std;

/* 请在这里填写答案 */

int main()
{
Vector vint;
int n,m;
cin >> n >> m;
for ( int i=0; i // add() can inflate the vector automatically
vint.add(i);
}
// get_size() returns the number of elements stored in the vector
cout << vint.get_size() << endl;
cout << vint[m] << endl;
// remove() removes the element at the index which begins from zero
vint.remove(m);
cout << vint.add(-1) << endl;
cout << vint[m] << endl;
Vector vv = vint;
cout << vv[vv.get_size()-1] << endl;
vv.add(m);
cout << vint.get_size() << endl;
}

实验心得和体会
第一题:
这一题最重要的是重构<<和>>运算符,<

Student,要输入姓名和成绩,计数器加一,最后返回>>
第二题:
这一题很长,很多结构,需要花一定的时间,是一个个简单的知识点拼凑出来的,其中年,需要判断是否为闰年,月份,需要判断大小月,日期需要判断是否在合理的范围内,否则,都改为默认值,1900-1-1。前置++,与后置++的重构,区别在于括号里是否有0或int,有则为后置++,其中月份如果等于12,则年加一,月与日,重置为1-1,这一题也有重构<<和>>运算符,<>data,需要输入月份,日期,以及年份,两者都要返回特定的符号
第三题:
这题需要用到类模板,MyArray就是需要新建一个特定长度的数组,sort就是字面意思,排序,可以用最简单的冒泡法,选择法,也可以用二分法,斐波拉西二分法,归并排序,但是这里也有输入数据的成分,display字面意思,展示一下,遍历输出,注意最后没有空格
第四题:
这题是数据结构中线性表的应用,需要重构[]返回,date[],如果异常则退出程序,
Add为扩容,申请一个2*size的数组,把元素拷贝进去,然后删除原来的数据,remove是删除数组中的元素,需要从前往后删除,填上原来的空位,最后大小-1,

你可能感兴趣的:(LHL'PTA)