1、设计并测试一个名为Rectangle 的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。
提示:一种方法,可以定义一个矩形类,在类中定义4个数据成员,分别表示左下角和右上角两个点的x、y坐标,这时,在主函数中只需定义一个矩形类的对象即可;第二种方法,可以定义一个坐标类,在类中定义2个数据成员,分别表示x坐标和y坐标,这时,在主函数中需要定义两个坐标类对象,即左下角坐标和右上角坐标对象。
#include <iostream>
using namespace std;
class Rectangle {
private:
double x;
double y;
public:
void setxy() {
cin >> x >> y;
}
double getx() {
return x;
}
double gety() {
return y;
}
};
int main() {
Rectangle p[2];
cout << "请输入左下角坐标x,y:";
p[0].setxy();
cout << "请输入右上角坐标x,y:";
p[1].setxy();
double s = (p[1].gety() - p[0].gety()) * (p[1].getx() - p[0].getx());
cout << "该矩形的面积为:" << s << endl;
return 0;
}
2、创建一个Student类,该类中具有学生姓名,学号,性别,年龄,三科成绩、平均成绩等数据成员。在该类中定义成员函数实现相关信息的输入、输出,学生成绩的统计。实现并测试这个类。
#include <iostream>
using namespace std;
class Student {
private:
string name, sid, sex;
int age;
double a, b, c;
public:
void setname(string n) {
name = n;
}
void setsid(string id) {
sid = id;
}
void setsex(string Sex) {
sex = Sex;
}
void setage(int ag) {
age = ag;
}
void seta(double a1) {
a = a1;
}
void setb(double b1) {
b = b1;
}
void setc(double c1) {
c = c1;
}
void show() {
cout << "姓名:" << name << endl;
cout << "学号:" << sid << endl;
cout << "性别:" << sex << endl;
cout << "年龄:" << age << endl;
cout << "a科成绩:" << a << endl;
cout << "b科成绩:" << b << endl;
cout << "c科成绩:" << c << endl;
cout << "平均成绩:" << (a + b + c) / 3 << endl;
}
};
int main() {
Student st1;
string name, sid, sex;
int age;
double a, b, c;
cout << "请输入学生姓名:";
cin >> name;
st1.setname(name);
cout << "请输入学生学号:";
cin >> sid;
st1.setsid(sid);
cout << "请输入学生性别:";
cin >> sex;
st1.setsex(sex);
cout << "请输入学生年龄:";
cin >> age;
st1.setage(age);
cout << "请输入学生a科成绩:";
cin >> a;
st1.seta(a);
cout << "请输入学生b科成绩:";
cin >> b;
st1.setb(b);
cout << "请输入学生c科成绩:";
cin >> c;
st1.setc(c);
st1.show();
return 0;
}
3、定义动态整数数组,数组大小由输入值决定,对数组中的数据进行降序排序。算法结束时,回收存储空间。(注:本题不需要定义类)
#include <iostream>
using namespace std;
int main() {
int n, *p, i, j, t;
cout << "请输入数组大小n:";
cin >> n;
p = new int[n];
cout << "依次输入n个数:";
for(i = 0; i < n; i++) {
cin >> p[i];
}
for(i = 0; i < n - 1; i++) {
for(j = 0; j < n - i - 1; j++) {
if(p[j] < p[j + 1]) {
t = p[j + 1];
p[j + 1] = p[j];
p[j] = t;
}
}
}
cout << "降序后结果如下:" << endl;
for(i = 0; i < n; i++) {
cout << p[i] << " ";
}
delete []p;
return 0;
}
4、定义一个point类。
要求:
数据成员:x,y
成员函数:
设置x的值,设置y的值(建议用构造函数)
获取x的值,获取y的值,
move函数(将点移动到新的位置,新位置的坐标以形参的方式给出)
编写主函数进行测试
#include <iostream>
using namespace std;
class Point {
double x;
double y;
public:
Point();
double getx() {
return x;
}
double gety() {
return y;
}
void move(double a, double b) {
x += a;
y += b;
}
};
Point::Point() {
cin >> x >> y;
}
int main() {
cout << "请输入初始(x,y):";
Point p;
cout << "移动前坐标:(" << p.getx() << "," << p.gety() << ")" << endl;
double a, b;
cout << "请输入x,y移动的值:";
cin>>a >> b;
p.move(a, b);
cout << "移动后新坐标:(" << p.getx() << "," << p.gety() << ")" << endl;
return 0;
}
5、用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入15个整型数放入一个数组中,并计算所有元素之和,打印出最大值、最小值和平均值。 (注:本题不需要定义类)
#include <iostream>
using namespace std;
int max(int a[]) {
int M = a[0];
for(int i = 1; i < 15; i++) {
if(a[i] > M) M = a[i];
}
return M;
}
int min(int a[]) {
int m = a[0];
for(int i = 1; i < 15; i++) {
if(a[i] < m) m = a[i];
}
return m;
}
int sum(int a[]) {
int s = 0;
for(int i = 0; i < 15; i++) {
s += a[i];
}
return s;
}
double avg(int a[]) {
int s = 0;
for(int i = 0; i < 15; i++) {
s += a[i];
}
return s / 15;
}
int main() {
int *a = new int[15];
cout << "依次从键盘输入15个整数:";
for(int i = 0; i < 15; i++) {
cin >> a[i];
}
cout << "元素之和:" << sum(a) << endl;
cout << "最大值:" << max(a) << endl;
cout << "最小值:" << min(a) << endl;
cout << "平均值:" << avg(a) << endl;
delete []a;
return 0;
}
6、定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。
数据成员:bookname(书名)、price(价格)和number(存书数量)。
成员函数:display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。
在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。
#include <iostream>
using namespace std;
class Book {
string bookname;
double price;
int number;
public:
Book();
void display() {
cout << "图书的情况:" << endl;
cout << "书名:" << bookname << "\t" << "价格:" << price << "\t" << "数量:" << number << endl;
}//显示图书的情况
void borrow() { //borrow()将存书数量减1,并显示当前存书数量
cout << bookname << "已借阅,当前存书数量:" << --number << endl;
}
void restore() { //restore()将存书数量加1,并显示当前存书数量
cout << bookname << "已归还,当前存书数量:" << ++number << endl;
}
};
Book::Book() {
cout << "请依次输入书名、价格、数量:";
cin >> bookname >> price >> number;
}
int main() {
Book bk;
bk.display();
bk.borrow();
bk.restore();
return 0;
}
7、(1)改写以下程序。要求定义类student,封装三个数据成员和两个成员函数input和output,使程序得到相同的运行效果。
//待改写程序代码
#include <iostream>
using namespace std;
struct student
{ char name[20];
unsigned int id;
double score;
};
void input(student &stu)
{ cout<<"name?";
cin>>stu.name;
cout<<"id?";
cin>>stu.id;
cout<<"score?";
cin>>stu.score;
}
void output(student &stu)
{ cout<<"name: "<<stu.name<<"\tid: "<<stu.id<<"\tscore: "<<stu.score<<endl; }
int main()
{ student s={"\0", 0, 0};
input(s);
output(s);
}
//修改后:
#include <iostream>
using namespace std;
class student {
private:
char name[20];
unsigned int id;
double score;
public:
void input();
void output();
};
void student::input() {
cout << "name?";
cin >> name;
cout << "id?";
cin >> id;
cout << "score?";
cin >> score;
}
void student::output() {
cout << "name: " << name << "\tid: " << id << "\tscore: " << score << endl;
}
int main() {
student s;
s.input();
s.output();
return 0;
}
7、(2)为上述改写后程序中的student类增加一个构造函数,使得建立对象时可以完成用户指定数据的初始化。默认初始化值为:( "\0", 0, 0 )。
#include <iostream>
using namespace std;
class student {
private:
string name;
unsigned int id;
double score;
public:
student(string, unsigned int, double);
void input();
void output();
};
student::student(string n = "\0", unsigned int i = 0, double s = 0) {
name = n;
id = i;
score = s;
}
void student::input() {
cout << "name?";
cin >> name;
cout << "id?";
cin >> id;
cout << "score?";
cin >> score;
}
void student::output() {
cout << "name: " << name << "\tid: " << id << "\tscore: " << score << endl;
}
int main() {
student s1;
s1.output();
student s2("Zhangsan", 120, 85);
s2.output();
student s3;
s3.input();
s3.output();
}
8、建立一个Student类,含有私有的学号(字符型)、姓名(字符型)、年龄(整型)数据成员。用new自动为Student的对象分配内存,并将学号“0504020101”,姓名“张三”,年龄20存入内存的相应域中,把该生的信息显示出来。
提示:用new创建对象并调用的是有参构造函数的格式为:类名 *指针变量=new 类名(实参1,实参2,…);(根据自己掌握的情况,需要的话可借助课件复习此知识点)
#include <iostream>
using namespace std;
class Student {
private:
string id;
string name;
int age;
public:
Student(string, string, int);
void output();
};
Student::Student(string i = 0, string n = "\0", int a = 0) {
id = i;
name = n;
age = a;
}
void Student::output() {
cout << "name: " << name << "\tid: " << id << "\tage: " << age << endl;
}
int main() {
Student *s1;
s1 = new Student("0504020101", "张三", 20);
s1->output();
delete s1;
return 0;
}
9、定义学生类,属性包括:学生姓名、语文成绩、数学成绩。完成:置学生信息、输出学生信息、求每个学生的平均成绩、求每个学生的总分、输出每个学生的平均成绩和总分。(要求用对象数组、构造函数完成)
提示:考虑学生人数不定的情况,可用new建立动态对象数组(用new创建动态对象数组同用new创建其它数据类型的动态数组的操作相同,另外,注意,用new创建动态数组的时候不能进行初始化)。
#include <iostream>
using namespace std;
class Student {
private:
string name;
double C_grade, M_grade, E_grade;
public:
Student();
Student(string, double, double, double);
double avg() {
return (C_grade + M_grade + E_grade) / 3;
}
double sum() {
return C_grade + M_grade + E_grade;
}
void output();
};
Student::Student() {
cout << "请输入姓名、成绩1、成绩2、成绩3:";
cin >> name >> C_grade >> M_grade >> E_grade;
}
Student::Student(string n, double c, double m, double e) {
name = n;
C_grade = c;
M_grade = m;
E_grade = e;
}
void Student::output() {
cout << "name: " << name << "\t平均成绩: " << avg() << "\t总分: " << sum() << endl;
}
int main() {
int n, i;
cout << "请输入学生个数:";
cin >> n;
Student *s;
s = new Student[n];
for(i = 0; i < n; i++) {
s[i].output();
}
delete []s;
return 0;
}
文章评论