6-3 2017final点的个数
幼儿园小班的小朋友开始学画画了,小明喜欢在白纸上画点点,请你帮他统计一下点的个数。请定义一个Point类,内有数据成员x,y表示点的坐标,还有一个静态数据成员count用于统计点的个数。并有若干成员函数,如构造函数、显示点的个数的函数showCount()等。
裁判测试程序样例:
#include<iostream>
using namespace std;
/*你的代码将被嵌入在这里*/
int main()
{
int x,y;
cin>>x>>y;
Point::showCount();
Point a(x,y);
cout<<"Point A: "<<a.getX()<<","<<a.getY()<<endl;
Point::showCount();
Point b(a);
cout<<"Point B: "<<b.getX()<<","<<b.getY()<<endl;
Point::showCount();
Point c;
cout<<"Point C: "<<c.getX()<<","<<c.getY()<<endl;
Point::showCount();
Point d(x);
cout<<"Point D: "<<d.getX()<<","<<d.getY()<<endl;
Point::showCount();
return 0;
}
输入样例:
4 5
输出样例:
0
Point A: 4,5
1
Point B: 4,5
2
Point C: 0,0
3
Point D: 4,0
4
class Point
{
private:
int m_x;
int m_y;
public:
static int count;
static int showCount()
{
cout << count << endl;;
return count;
}
int getX()
{
return m_x;
}
int getY()
{
return m_y;
}
Point(int x , int y)
{
m_x = x;
m_y = y;
count++;
}
Point(Point &a)
{
m_x = a.getX();
m_y = a.getY();
count++;
}
Point()
{
m_x = 0;
m_y = 0;
count++;
}
Point(int x)
{
m_x = x;
m_y = 0;
count++;
}
};
int Point::count = 0;
6-5 体育俱乐部I(构造函数)
一个俱乐部需要保存它的简要信息,包括四项:名称(字符串),成立年份(整数),教练姓名(字符串)和教练胜率(0-100之间的整数)。用键盘输入这些信息后,把它们分两行输出:第一行输出名称和成立年份,第二行输出教练姓名和胜率。
裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
class Coach{
string name;
int winRate;
public:
Coach(string n, int wr){
name=n; winRate=wr;
}
void show();
};
class Club{
string name;
Coach c;
int year;
public:
Club(string n1, int y, string n2, int wr);
void show();
};
int main(){
string n1, n2;
int year, winRate;
cin>>n1>>year>>n2>>winRate;
Club c(n1,year, n2, winRate);
c.show();
return 0;
}
/* 请在这里填写答案 */
输入样例:
Guanzhou 2006 Tom 92
输出样例:
Guanzhou 2006
Tom 92%
void Coach::show()
{
cout<<name<<" "<<winRate<<"%";
}
void Club::show()
{
cout<<name<<" "<<year<<endl;
c.show();
}
//初始化列表的方法对Coach类定义的c进行初始化
//而不能对其在函数体内进行赋值
Club::Club(string n1, int y, string n2, int wr):c(n2,wr)
{
year=y;
name=n1;
}
6-6 学生成绩的快速录入(构造函数)
现在需要录入一批学生的成绩(学号,成绩)。其中学号是正整数,并且录入时,后录入学生的学号会比前面的学号大;成绩分两等,通过(Pass,录入时用1代表),不通过(Fail,录入时用0代表)。
由于很多学号都是相邻的,并且学号相邻的学生成绩常常相同。所以在录入时,适当地加了速。如果当前学生的学号比前面的学号大1,且成绩与前面的成绩相同,则只输入0即可。
类定义:
完成Student类
裁判测试程序样例:
#include<iostream>
using namespace std;
/* 请在这里填写答案 */
int main(){
const int size=100;
int i, N, no, score;
Student *st[size];
cin>>N;
for(i=0; i<N; i++){
cin>>no;
if(no>0){
cin>>score;
st[i]=new Student(no, score);
}
else
st[i]=new Student(*st[i-1]);
}
cout<<Student::count<<" Students"<<endl;
for(i=0;i<N;i++) st[i]->display();
for(i=0;i<N;i++) delete st[i];
return 0;
}
输入样例:
5
3 0
0
7 1
0
12 1
输出样例:
5 Students
3 Fail
4 Fail
7 Pass
8 Pass
12 Pass
class Student
{
private:
int num,score;
public:
static int count;
Student(int n,int s)
{
num = n;
score = s;
count++;
}
Student(Student &s)
{
num = s.num+1;
score=s.score;
count++;
}
void display()
{
cout<<num<<" ";
if(score)
cout<<"Pass"<<endl;
else
cout<<"Fail"<<endl;
}
};
int Student::count=0;
6-7 学生平均分计算
定义一学生类,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。
定义一学生类,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分
裁判测试程序样例:
利用学生类进行对象定义并输出结果的例子如下:
/* 请在这里填写答案 */
int Stud::sum=0;
int Stud::num=0;
int main()
{
Stud s1(1,"Li",89),s2(2,"Chert",78),s3(3,"zheng",94);
s1.disp();
s2.disp();
s3.disp();
cout<<"avg="<<Stud::avg()<<endl;
return 0;
}
输入:
无
输出样例:
1,Li,89
2,Chert,78
3,zheng,94
avg=87
class Stud
{
public:
int no,score;
string name;
static int num;
static int sum;
Stud(int a,string b,int c)
{
no = a;
name = b;
score = c;
sum += c;
num++;
}
void disp()
{
cout<<no<<','<<name<<','<<score<<endl;
}
static double avg()
{
return sum = sum*1.0/num;
}
};
6-8 学生类的构造与析构
类定义:
定义一个学生类Student,使得main()函数能够得到指定的输出结果
main()函数如下:
/* 请在这里填写答案 */
int main()
{Student stud1(10010,"Wang_li",'f');
stud1.display();
Student stud2(10011,"Zhang_fun",'m');
stud2.display();
return 0;
}
输入样例:
无
输出样例:
在这里给出相应的输出。例如:
Constructor called.
num:10010
name:Wang_li
sex:f
Constructor called.
num:10011
name:Zhang_fun
sex:m
Destructor called.
Destructor called.
class Student
{
private:
int num;
string name;
char sex;
public:
Student(int a,string b,char c)
{
num = a;
name = b;
sex = c;
}
void display()
{
cout<<"Constructor called."<<endl;
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
cout<<endl;
}
~Student()
{
cout<<"Destructor called."<<endl;
}
};
6-9 输出最大值
根据给定的程序,写成相关的成员函数,完成指定功能。
函数接口定义:
定义max函数,实现输出最高成绩对应的学号以及最高成绩值。
裁判测试程序样例:
#include <iostream>
using namespace std;
class Student
{public:
Student(int n,float s):num(n),score(s){}
int num;
float score;
};
int main()
{Student stud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
void max(Student* );
Student *p=&stud[0];
max(p);
return 0;
}
/* 请在这里填写答案 */
输入样例:
无
输出样例:
104 100
void max(Student *arr)
{
float max_score=arr[0].score;
int k=0;
for(int i = 1;i < 5;i++)
if(arr[i].score > max_score)
{
max_score = arr[i].score;
k=i;
}
cout<<arr[k].num<<" "<<max_score<<endl;
}
6-11 自定义的学生类
本题要求定义一个简单的学生类,数据成员仅需要定义学号和姓名,函数成员的原型见给出的代码,请给出函数成员的类外完整实现。
函数接口定义:
class Student
{
private:
int m_id;
char m_name[10];
public:
Student(int id=0,char *name="");
~Student();
void print();
};
其中m_id
和m_name
分别表示学生的学号和姓名,类型已经定义好。类内声明了3个成员函数,分别表示构造函数、析构函数和用于输出学生信息的函数。
构造函数要完成两个数据成员的初始赋值,并做一行输出,形如:“Hi!学号 姓名”。
析构函数要求输出一行,形如:“Bye!学号 姓名”。
print函数要求在一行中输出学生信息,形如:“学号 姓名”。
注:学号和姓名之间用一个空格分开。
裁判测试程序样例:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
Student stu_array[3]={Student(1,"Zhang"),Student(2,"Wang")};
return 0;
}
/* 请在这里填写答案 */
Student::Student(int id,char *name)
{
m_id=id;
strcpy(m_name ,name);
cout<<"Hi!"<<m_id<<" "<<m_name<<endl;
}
Student::~Student()
{
cout<<"Bye!"<<m_id<<" "<<m_name<<endl;
}
void Student::print()
{
cout<<m_id<<" "<<m_name<<endl;
}
6-4 2018Final静态成员(黑名单)
怡山小学生物组是公认的熊孩子天堂,他们每天都在做各种尝试,如: 强迫蚕宝宝吃各种不同的菜叶,把小狗和小白鼠关进一个笼子里,重复输入流浪狗记录等等。忍无可忍的黄老师决定往成员信息里添加一项黑名单,限制黑名单中同学的单独活动,以保证生物组的日常管理秩序。
黑名单的增加来自两个时刻,一个是在增加新成员时,根据班主任的建议,直接将同学拉入黑名单,另一个是根据同学在组内的行为,由黄老师将其拉入。
黑名单的减小也有两个时刻,一个是黄老师将某位同学拉出,还有一个是黑名单已经满了,且需要拉入新的人员,此时,在黑名单中时间最长的成员,自动地被拉出黑名单。
输入:
输入时,先输入当前任务类型:
任务类型为1时,将加入新的学生记录;此时将输入学生的学号(假定新加入的学生肯定没有加入过),如果该学生应加入黑名单,则接着会多输入一个"999";
任务类型为2时,将某已有学生加入黑名单;此时将直接输入学生学号(假定不会将黑名单中已有的学生,再次加入黑名单);
任务类型为3时,将某些学生移出黑名单;此时将直接输入学生学号(假定这个学号肯定在黑名单中)。
任务类型为0时,结束输入。
输出:
在执行类型2和3任务时,将输出当前的黑名单中的学生学号,用空格间隔,输出顺序为学生被加入黑名单的顺序,先加入者在前。如果黑名单为空,输出"NULL BLACKLIST!".
函数接口定义:
请补全类Group
裁判测试程序样例:
#include <iostream>
using namespace std;
const int N=3;
class Group{
private:
int num;
static int blackList[N];
static int size;
public:
Group();
Group(int num, bool bSign);
static void addToList(int num);
static void removeFromList(int num);
static void displayList();
};
void Group::displayList(){
if(size==0) cout<<"NULL BLACKLIST!"<<endl;
else{
for(int i=0;i<size-1;i++) cout<<blackList[i]<<' ';
cout<<blackList[size-1]<<endl;
}
}
/* 请在这里填写答案 */
int main(){
int i, j, k, num, task, count=0;
Group g[100];
cin>>task;
while(task!=0){
switch(task){
case 1: cin>>num>>k;
if(k==999) {
g[count++]=Group(num, true);
cin>>task;
}else{
g[count++]=Group(num, false);
task = k;
}
break;
case 2: cin>>num;
Group::addToList(num);
Group::displayList();
cin>>task;
break;
case 3: cin>>num;
Group::removeFromList(num);
Group::displayList();
cin>>task;
break;
}
}
return 0;
}
输入样例:
1 102
1 345 999
1 123
2 102
1 333
2 333
2 123
3 102
3 123
3 333
0
输出样例:
345 102
345 102 333
102 333 123
333 123
333
NULL BLACKLIST!
int Group::size=0;
int Group::blackList[N]={0};
Group::Group(){}
Group::Group(int num,bool bSign)
{
this->num=num;
if(bSign==true)
Group::addToList(num);
}
void Group::addToList(int num)
{
if(size==N)
{
removeFromList(blackList[0]);
}
blackList[size++]=num;
}
void Group::removeFromList(int num)
{
int bj = 0;
for(bj = 0;bj < size;bj++)
if(blackList[bj] == num)
break;
for(int i = bj;i < size-1;i++)
blackList[i]=blackList[i+1];
size--;
}