以下四个题都很基础,是最近复习C++类和对象的知识做的,其中第三题考查了类型转换构造函数,第四题考查的析构函数,都非常简单。
让我感到棘手的是第一题中如何读入一个带有空格的字符串,最后解决方案是发现了cin.getline()函数。其次是要使用一个char c来存储用于分隔的逗号。eg:输入是mao mao,18,8092,80,80,80,80 你使用cin.getline(name,20,',');cin>>age>>id;是错的,因为age和id之间有逗号,我们应该用cin>>age>>c>>id;
第二题的难点在于理解复制构造函数的调用次数。
总时间限制:
1000ms
内存限制:
1024kB
// 在此处补充你的代码
描述
实现一个学生信息处理程序,计算一个学生的四年平均成绩。
要求实现一个代表学生的类,并且类中所有成员变量都是【私有的】。
补充下列程序中的 Student 类以实现上述功能。
#include
#include
#include
#include
#include
#include
using namespace std;
class Student {
};
int main() {
Student student; // 定义类的对象
student.input(); // 输入数据
student.calculate(); // 计算平均成绩
student.output(); // 输出数据
}
输入
输入数据为一行,包括:
姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。
其中姓名为由字母和空格组成的字符串(输入保证姓名不超过20个字符,并且空格不会出现在字符串两端),年龄、学号和学年平均成绩均为非负整数。信息之间用逗号隔开。
输出
输出一行数据,包括:
姓名,年龄,学号,四年平均成绩。
信息之间用逗号隔开。
样例输入
Tom Hanks,18,7817,80,80,90,70
样例输出
Tom Hanks,18,7817,80
提示
必须用类实现,其中所有成员变量都是私有的。
输出结果中,四年平均成绩不一定为整数。
解答:
#include
#include
#include
#include
#include
#include
using namespace std;
class Student {
private:
char name[20];
int age;
int id;
char c;
float first,second,third,fouth;
float average;
public:
void input()
{
cin.getline(name,20,',');
cin>>age>>c>>id>>c;
cin>>first>>c>>second>>c>>third>>c>>fouth;
}
void calculate()
{
average=(first+second+third+fouth)/4;
}
void output()
{
cout<
其中cin.getline此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。其语法为:
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
总时间限制:
1000ms
内存限制:
65536kB
// 在此处补充你的代码
描述
程序填空,使其输出9 22 5
#include
using namespace std;
class Sample {
public:
int v;
};
void PrintAndDouble(Sample o)
{
cout << o.v;
cout << endl;
}
int main()
{
Sample a(5);
Sample b = a;
PrintAndDouble(b);
Sample c = 20;
PrintAndDouble(c);
Sample d;
d = a;
cout << d.v;
return 0;
}
输入
无
输出
9
22
5
样例输入
None
样例输出
9
22
5
解答:
#include
using namespace std;
class Sample {
public:
int v;
Sample()
{
v = 0;
}
Sample(int x)
{
v = x;
}
Sample(const Sample& s)
{
v = s.v + 2;
}
};
void PrintAndDouble(Sample o)
{
cout << o.v;
cout << endl;
}
int main()
{
Sample a(5);
Sample b = a;
PrintAndDouble(b);
Sample c = 20;
PrintAndDouble(c);
Sample d;
d = a;
cout << d.v;
return 0;
}
总时间限制:
1000ms
内存限制:
65536kB
// 在此处补充你的代码
描述
下面程序的输出是:
3+4i
5+6i
请补足Complex类的成员函数。不能加成员变量。
#include
#include
#include
using namespace std;
class Complex {
private:
double r,i;
public:
void Print() {
cout << r << "+" << i << "i" << endl;
}
};
int main() {
Complex a;
a = "3+4i"; a.Print();
a = "5+6i"; a.Print();
return 0;
}
输入
无
输出
3+4i
5+6i
样例输入
无
样例输出
3+4i
5+6i
解答:
#include
#include
#include
using namespace std;
class Complex {
private:
double r,i;
public:
void Print() {
cout << r << "+" << i << "i" << endl;
}
Complex()
{
r = 0;
i = 0;
}
Complex(char s[])
{
r = s[0]-'0';
i = s[2]-'0';
}
};
int main() {
Complex a;
a = "3+4i"; a.Print();
a = "5+6i"; a.Print();
return 0;
}
总时间限制:
1000ms
内存限制:
65536kB
// 在此处补充你的代码
描述
程序填空,输出指定结果
#include
using namespace std;
class A {
public:
int i;
A(int x) { i = x; }
};
int main()
{
A a(1);
A * pa = new A(2);
delete pa;
return 0;
}
输入
无
输出
2
1
样例输入
无
样例输出
2
1
解答:
#include
using namespace std;
class A {
public:
int i;
A(int x) { i = x; }
~A()
{
cout<