【码图】C++程序设计(2023)第8章 作业2

实现三角形类(C++)

通过课程进入题 号:137实现三角形类(C++)语言要求:C++
实现一个三角形类 Ctriangle 
该类有一个GetPerimeter方法返回三角形的周长;
GetArea方法返回三角行的面积;
该类还提供一个display方法显示三角形的三边长度;

最终在main函数中生成该类,
输入三条边的长度(不用考虑三条边不能构成三角形的情况);
展示三角形的三边长度以及周长和面积

Ctriangle类的使用如下,在你的代码中除了实现Ctriangle类还需引入一下代码。

int main(){
	double a,b,c;
	cin>>a>>b>>c;
	Ctriangle T(a,b,c);
	T.display();
	cout<<"Perimeter:"<<T.GetPerimeter()<<endl;
	cout<<"Area:"<<T.GetArea()<<endl;
	return 0;	 
}
输出格式
输入:3 4 5回车
输出:
Ctriangle:a=3,b=4,c=5回车
Perimeter:12回车
Area:6回车
#include <iostream>
#include <math.h>
using namespace std;

class Ctriangle{
private:
    double a,b,c;
public:
    Ctriangle(double aa,double bb,double cc){
        a=aa;b=bb;c=cc;
    };
    double GetPerimeter(){
        double perimeter=a+b+c;
        return perimeter;
    };
    double GetArea(){
        double area;
        double p=(a+b+c)/2;
        area=sqrt(p*(p-a)*(p-b)*(p-c));
        return area;
    };
    void display(){
        cout<<"Ctriangle:a="<<a<<",b="<<b<<",c="<<c<<endl;
        return;
    };
};

int main(){
    double a,b,c;
    cin>>a>>b>>c;
    Ctriangle T(a,b,c);
    T.display();
    cout<<"Perimeter:"<<T.GetPerimeter()<<endl;
    cout<<"Area:"<<T.GetArea()<<endl;
    return 0;
}

实现Point类(C++)

通过课程进入题 号:138实现Point类(C++)语言要求:C++
定义一个点类Point,并定义成员函数double Distance(const & Point) 求两点的距离。
输入两个点的坐标,
创建两个点, 然后调用Point类的Distance方法输出两个点的距离。

Point 类的使用方式如下:

int main(){
    double a,b,c,d;
	cin>>a>>b>>c>>d;
	Point A(a,b),B(c,d);
	cout<<A.Distance(B)<<endl;
	return 0;
}

如输入:
1 2 3 4回车
输出:
2.82843

#include <iostream>
#include <math.h>
using namespace std;

class Point {
private:
    double x,y;
public:
    Point(double a,double b){
        x=a;y=b;
    }
    double Distance(const Point c){
        double ans=pow((x-c.x),2)+pow((y-c.y),2);
        ans=sqrt(ans);
        return ans;
    }
};

int main(){
    double a,b,c,d;
    cin>>a>>b>>c>>d;
    Point A(a,b),B(c,d);
    cout<<A.Distance(B)<<endl;
    return 0;
}

实现Date类(C++)

通过课程进入题 号:139实现Date类(C++)语言要求:C++
实现日期类Date,它能正确表示年、月、日。
在代码中引入头文件 CDate.h
它的内容如下:
class Date{
 public:
       Date(int y =1996,int m=1,int d=1){};
       int days(int year,int month){};
       void NewDay();
 void display()
 {
    cout<<year<<"-"<<moth<<"-"<<day<<endl;
 }
 private:
      int year; //年
      int month; //月
      int day;  // 日
}

需要实现构成函数Date(int y =1996,int m=1,int d=1)
在构造函数内依次判断输入的月和日是否合法
即月为1~12月中的一个 如果月不合法则输出Invalid month! 然后将月置为1。
如果天数不合法,则输出Invalid day! 然后将天数置为1。
例如 Date d(1993,13,32);
输出:
Invalid month!回车
Invalid day!回车
再调用 d.display()
输出:
1993-1-1

设计一个NewDay()成员函数,将当前Date表示的日期增加一天。
例如:Date d(1991,1,1);
      d.NewDay();
      d.display();
输出:
1991-1-2

设计一个days(int year, int month)成员函数,返回指定年月有多少天。
例如 d.days(1991,1)
返回:
31

在你的代码中必须实现以上三个方法,例如:
#include "CDate.h"
Date::Date(int y=1996,int m=1 ,int d=1){
    ...
}
int  Date::days(int year,int month){
    ...
}
void Date::NewDay(){
  ...
}

#include <iostream>
using namespace std;

class Date{
public:
    Date(int y =1996,int m=1,int d=1);
    int days(int year,int month);
    void NewDay();
    void display(){
        cout<<year<<"-"<<month<<"-"<<day<<endl;
    }
private:
    int year; 
    int month; 
    int day;
};
Date::Date(int y,int m,int d){
    if(m<1||m>12){
        cout<<"Invalid month!"<<endl;
        m=1;
    }if(d<1||d>days(y,m)){
        cout<<"Invalid day!"<<endl;
        d=1;
    }year=y;month=m;day=d;
}
void Date::NewDay(){
    day++;
    if(day>days(year,month)){
        day=1;month++;
        if(month==13){
            month=1;year++;
        }
    }
}
int Date::days(int year,int month){
    int ddays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    if((year%4==0&&year%100!=0)||year%400==0){
        ddays[2]=29;
    }else{
        ddays[2]=28;
    }return ddays[month];
}
int main(){
    Date d(1993,13,32);
    d.display();
    return 0;
}

实现Student类(C++)

通过课程进入题 号:141实现Student类(C++)语言要求:C++
设计一个学生类Student,包含学生学号(最长10位)、姓名(不用支持中文最长12位)、三门课程成绩等基本信息,
计算每门课程学生的平均成绩。

需实现Student的display成员函数,依次输出学号 姓名 和三门课的成绩,每个输出以空格隔开
成员函数 average1 ,average2 ,average3 ,分别返回三门课的平均成绩。

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

int main(){
	Student *stu1,*stu2,*stu3;
	char name1[10],name2[10],name3[10];
	char num1[12],num2[12],num3[12];
	int grade1[3],grade2[3],grade3[3];
	cin>>name1>>num1>>grade1[0]>>grade1[1]>>grade1[2];
	cin>>name2>>num2>>grade2[0]>>grade2[1]>>grade2[2];
	cin>>name3>>num3>>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<<"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.3333回车
The average grade of course2:74回车
The average grade of course3:93.6667回车
#include <iostream>
#include <string.h>
using namespace std;

class Student
{

private:
    char name[20];
    char id[20];
    int grade1,grade2,grade3;
    static int tgrade1,tgrade2,tgrade3;//静态成员在类的所有对象中是共享的。

public:
    Student(char *name1,char *id,int g1,int g2,int g3);
    void display();
    static double average1(){
        double ans=tgrade1/3.0;
        return ans;
    }
    static double average2(){
        double ans=tgrade2/3.0;
        return ans;
    }
    static double average3(){
        double ans=tgrade3/3.0;
        return ans;
    }
};
int Student::tgrade1=0,Student::tgrade2=0,Student::tgrade3=0;

Student::Student(char *name1,char *id1,int g1,int g2,int g3)
{
    strcpy(name,name1);
    strcpy(id,id1);
    grade1=g1;tgrade1+=g1;
    grade2=g2;tgrade2+=g2;
    grade3=g3;tgrade3+=g3;
}

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


int main(){
    Student *stu1,*stu2,*stu3;
    char name1[10],name2[10],name3[10];
    char num1[12],num2[12],num3[12];
    int grade1[3],grade2[3],grade3[3];
    cin>>name1>>num1>>grade1[0]>>grade1[1]>>grade1[2];
    cin>>name2>>num2>>grade2[0]>>grade2[1]>>grade2[2];
    cin>>name3>>num3>>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<<"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;
}

char *strcpy(char *dest, const char *src);

该函数接收两个参数:目标字符串(dest)和源字符串(src)。

 

 完成String类(C++)

通过课程进入题 号:149完成String类(C++)语言要求:C++
引入CString.h头文件,它的内容如下:
#include <iostream>
using namespace std;
class String{
private:
	char *mystr;    //字符串
	int len;    //字符串长度
public:
	String(){
		len =0;
		mystr =NULL;
	}
	String(const char* p){
		len = strlen(p);
		mystr = new char[len+1];
		strcpy(mystr,p);
	}
	String(String &s){
		len = s.len;
		if (len !=0)
		{
			mystr = new char[len+1];
			strcpy(mystr,s.mystr);
		}
	}
	~String(){
         if (mystr != NULL)
         {
			 delete []mystr;
			 mystr =NULL;
			 len = 0;
         }
	}

	char *GetStr(){return mystr;}
	void ShowStr(){cout<<mystr;}

        bool IsSubstring(const char *str);
	bool IsSubstring(const String &str);
	int str2num();
	void toUppercase();
};

实现String类的成员方法:
bool IsSubstring(const char *str) 判定字符串str是否为当前String对象的子串,是则返回true,否则返回false。
bool IsSubstring(const String &str) 判断String对象str是否为当前String对象的子串,是则返回true,否则返回false。
int str2num() 将当前String对象转化为数字,转换时忽略出数字以外的字符,
不考虑溢出的情况,如当前字符串为1t2e3s4y5,执行str2num 返回12345。

void toUppercase()将String的字符串的字母全部转化为大写字母。

#include <string.h>
#include <iostream>
using namespace std;
class String{
private:
    char *mystr;
    int len;
public:
    String(){
        len =0;
        mystr =NULL;
    }
    String(const char* p){
        len = strlen(p);
        mystr = new char[len+1];
        strcpy(mystr,p);
    }
    String(String &s){
        len = s.len;
        if (len !=0)
        {
            mystr = new char[len+1];
            strcpy(mystr,s.mystr);
        }
    }
    ~String(){
        if (mystr != NULL)
        {
            delete []mystr;
            mystr =NULL;
            len = 0;
        }
    }

    char *GetStr(){return mystr;}
    void ShowStr(){cout<<mystr;}

    bool IsSubstring(const char *str);
    bool IsSubstring(const String &str);
    int str2num();
    void toUppercase();
};

bool String::IsSubstring(const String &str) {
    int j=0;
    for(int i=0;i<len;i++){
        if(*(mystr+i)==*(str.mystr+j)){
            if(j==str.len-1) return true;
            else j++;
        }else{
            j=0;
        }
    }
    return false;
}

bool String::IsSubstring(const char *str) {
    int j=0;
    int llen=strlen(str);
    for(int i=0;i<len;i++){
        if(*(mystr+i)==*(str+j)){
            if(j==llen-1) return true;
            else j++;
        }else{
            j=0;
        }
    }
    return false;
}

int String::str2num() {
    int ans=0;
    for(int i=0;i<len;i++){
        if(*(mystr+i)<='9'&&*(mystr+i)>='0'){
            ans=ans*10+(*(mystr+i)-'0');
        }
    }
    return ans;
}

void String::toUppercase() {
    for(int i=0;i<len;i++){
        if(*(mystr+i)<='z'&&*(mystr+i)>='a'){
            *(mystr+i)=*(mystr+i)-'a'+'A';
        }
    }return;
}

int main(){

    String a("abddddddbb");
    if(a.IsSubstring("dddc")){
        cout<<"yes";
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值