慕课编程作业:第八章 类与对象

由于本节作业主要是写类,主函数题目已经给出,故解答不再重复给出。

1  完成point类

定义一个点类Point,并定义成员函数double Distance( Point p)实现 求该点到参数p点的两点间的距离(欧几里得距离)。

编程实现: 输入两个点的坐标,创建两个点,调用Point类的Distance方法输出两个点的距离。

在你的代码中除了实现Point类以外,还需一如下main函数:

int main(){

    double a,b,c,d;

   cin>>a>>b>>c>>d;

   Point A(a,b),B(c,d);

   cout<<setprecision(3)<<A.Distance(B)<<endl;

   return 0;
}

如输入:

1 2 3 4回车

输出:

2.83

解:

#include<cmath>

class Point
{
private:
	double x, y;
public:
	Point(double x = 0, double y = 0);
	double Distance(Point p);
};

Point::Point(double x, double y) {
	this->x = x;
	this->y = y;
}

double Point::Distance(Point p){
	return sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));
}

2 实现User类

实现User类的构造函数和AddUser方法添加新用户,

实现int login(char *name,char * pass)方法,该方法接受用户名和密码,

判断用户名对应的密码是否正确,如果正确返回用户的编号,如果不正确返回-1。

User类的使用示意如下所示,在你的代码中除了实现User类以外,还需一如下main函数

int main(){

	 char name[10],name1[10],name2[10],pass[10],pass1[10],pass2[10];	
	 cin>>name>>pass>>name1>>pass1>>name2>>pass2;	
	 User user(name,pass);	
	 user.AddUser(name1,pass1);	
	 if (user.login(name2,pass2) >=0)	
	 {	
	  cout<<"Success Login!"<<endl;	
	 }	
	 else{	
	  cout<<"Login failed!"<<endl;	
	 }
   	 return 0;
}

解:

#include <cstring>

class User
{
private:
	char* name[10];
	char* pass[10];
public:
	User(char* name, char* pass);
	void Add(char* name, char* pass);
	int login(char* name, char* pass);
};

int num=1;
User::User(char* name, char* pass) {
	for (int i = 0; i < 10; i++) {
		this->name[i] = new char[10];
		this->pass[i] = new char[10];
	}
	strcpy(this->name[0],name);
	strcpy(this->pass[0],pass);

}

void User::Add(char* name, char* pass) {
	int i = 0;
	strcpy(this->name[num], name);
	strcpy(this->pass[num], pass);
	num++;
}

int User::login(char* name, char* pass) {
	for (int i = 0; i <= num; i++) {
		if (strcmp(this->name[i], name) == 0 && strcmp(this->pass[i], pass) == 0)
			return i;
	}
	return -1;
}

3 实现Student类

这个作业我一开始写不出来,后来看了后面的静态变量,想出了一个较为合适的方法。

 

设计一个学生类Student,包含学生学号(最长10位字符)、

姓名(不用支持中文,最长12个字符)、

三门课程成绩(成绩是单精度实数类型)等基本信息.

计算每门课程学生的平均成绩,成员函数 average1 ,average2 ,average3 ,分别返回三门课的平均成绩。

需实现Student的display成员函数,依次输出学号 姓名 和三门课的成绩,每个输出以空格隔开.

Student类的使用方法如下所示,在你的代码中除了实现Student类,还需引入以下代码:

int main(){

     Student *stu1,*stu2,*stu3;

     char name1[11],name2[11],name3[11];

     char num1[13],num2[13],num3[13];

     float grade1[3],grade2[3],grade3[3];

     cin>>num1>>name1>>grade1[0]>>grade1[1]>>grade1[2];

     cin>>num2>>name2>>grade2[0]>>grade2[1]>>grade2[2];

     cin>>num3>>name3>>grade3[0]>>grade3[1]>>grade3[2];

     stu1 = new Student(name1,num1,grade1[0],grade1[1],grade1[2]);

     stu2 = new Student(name2,num2,grade2[0],grade2[1],grade2[2]);

     stu3 = new Student(name3,num3,grade3[0],grade3[1],grade3[2]);

    

     stu1->display();

     stu2->display();

     stu3->display();

    

     cout<<setprecision(4);

     cout<<"The average grade of course1:"<<stu2->average1()<<endl;

     cout<<"The average grade of course2:"<<stu2->average2()<<endl;

     cout<<"The average grade of course3:"<<stu2->average3()<<endl;

       return 0;

}

 

上述代码执行时

输入:

200906294 LiWeiwei 88 75 91 200902164 ChenHanfu 86 78 93 200908079 ZhanGaolin 94 69 97

输出:

200906294 LiWeiwei 88 75 91回车

200902164 ChenHanfu 86 78 93回车

200908079 ZhanGaolin 94 69 97回车

The average grade of course1:89.33回车

The average grade of course2:74回车

The average grade of course3:93.67回车

解:

#include<iostream>
#include<cstring>
using namespace std;

class Student {
private:
	float grade1, grade2, grade3;//个人分
	char *name, *id;//姓名和编号
	static float s_grade1, s_grade2, s_grade3;//总分
	static int count;//人数
public:
	Student(char* name, char* id, float grade1, float grade2, float grade3);//构造函数
	~Student();//析构函数
	float average1();
	float average2();
	float average3();
	void display();
};


//初始化静态成员变量
float Student::s_grade1 = 0, Student::s_grade2 = 0, Student::s_grade3 = 0;
int Student::count = 0;

//实现构造函数
Student::Student(char* n, char* i, float c1, float c2, float c3) {
	name = new char[10];
	id = new char[12];
	strcpy(name, n);
	strcpy(id, i);
	grade1 = c1;
	grade2 = c2;
	grade3 = c3;
	//添加总分
	s_grade1 += c1;
	s_grade2 += c2;
	s_grade3 += c3;
	count++;//增加人数
}

float Student::average1() {
	return s_grade1 / count;
}

float Student::average2() {
	return s_grade2 / count;
}

float Student::average3() {
	return s_grade3 / count;
}

void Student::display() {
	cout << id << ' ' << name << ' ' << grade1 << ' ' << grade2 << ' ' << grade3 << endl;
}

Student::~Student() {
	delete name, id;
	s_grade1 -= grade1;
	s_grade2 -= grade2;
	s_grade3 -= grade3;
}

我认为这里体现了一个思想,即静态变量属于类,而不属于类成员。

总分是所有学生“共有”的属性,而不属于任何单独一个学生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第六章 软件测试 1. 软件测试的目的是什么? 答:软件测试的目的是发现软件中存在的错误,并确保软件按照规格说明书的要求运行。 2. 什么是测试用例? 答:测试用例是测试计划的一部分,它是一组输入、执行条件和预期结果的集合,用于测试软件系统的功能、性能和可靠性等方面。 3. 什么是黑盒测试? 答:黑盒测试是一种测试方法,它只考虑软件系统的输入和输出,而不考虑系统内部的结构和实现细节。黑盒测试的目的是检测系统是否按照规格说明书的要求工作。 4. 什么是白盒测试? 答:白盒测试是一种测试方法,它考虑软件系统的内部结构和实现细节,以确保软件系统的每个组件都按照设计要求运行。 5. 什么是软件测试覆盖率? 答:软件测试覆盖率是指测试用例中执行的代码行数、分支数或路径数占总代码行数、分支数或路径数的百分比。 6. 什么是回归测试? 答:回归测试是指在对软件系统进行修改或更新后,重新运行以前运行过的测试用例,以确保修改或更新后的软件系统仍然符合规格说明书的要求。 7. 什么是性能测试? 答:性能测试是指测试软件系统在不同负荷条件下的性能,以确定软件系统的响应时间、吞吐量、并发性等性能指标是否符合规格说明书的要求。 8. 什么是安全测试? 答:安全测试是指测试软件系统的安全性,以确定软件系统是否容易受到恶意攻击或破坏。 9. 什么是自动化测试? 答:自动化测试是指使用测试工具或脚本自动运行测试用例的测试方法,以提高测试效率和测试质量。 10. 软件测试的局限性有哪些? 答:软件测试的局限性包括:无法完全覆盖所有情况、测试过程中可能存在误差、测试成本较高、测试结果可能受到测试环境和测试数据的影响等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值