C++ DLUT 上机作业(一)
声明:不同老师有不同要求,仅供参考,不喜勿喷
另外,所有代码在Dev C++可运行
1、/*定义一个分数类如下,要求实现分数的初始化与设置、四则运算及约分以及输出等功能,并在主函数中测试。
class Rational{
int m; // 分母
int n; // 分子
public:
Rational(int nn=1,int mm=1); //构造
bool setM( int ); // 设置分母,注意不能为零
void setN( int ); //设置分子
Rational R_add( const Rational& A); //加法操作, 返回和对象
void R_sub(Rational & A, Rational &B); //减法操作A-B
Rational R_mul(Rational & A); //乘法操作,返回乘积对象
void R_div(Rational & A, Rational &B); //除 A/B
void simple( ); //约分
void print(); //以分数形式显示,注意约分和符号
};
编写一个驱动程序,对该类进行测试*/
#include<iostream>
using namespace std;
class Rational{
private:
int m; // 分母
int n; // 分子
public:
Rational(int nn=1,int mm=1);
bool setM(int); // 设置分母,注意不能为零
void setN(int); //设置分子
Rational R_add( const Rational& A); //加法操作, 返回和对象
void R_sub(Rational & A, Rational &B); //减法操作A-B
Rational R_mul(Rational & A); //乘法操作,返回乘积对象
void R_div(Rational & A, Rational &B); //除 A/B
void simple(); //约分
void print(); //以分数形式显示,注意约分和符号
};
int flag=0;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
Rational::Rational(int nn,int mm)
{
setN(nn);
flag=setM(mm);
}
bool Rational::setM(int mm)
{
if(mm!=0)
{
m=mm;
return 1;
}
cout<<"错误"<<endl;
return 0;
}
void Rational::setN(int nn)
{
n=nn;
}
Rational Rational::R_add(const Rational& A)
{
Rational C;
C.m=A.m*m;
//通分相加
C.n=C.m/A.m*A.n+C.m/m*n;
return C;
}
void Rational::R_sub(Rational &A, Rational &B)
{
//通分相减
n=A.n*B.m-B.n*A.m;
m=A.m*B.m;
}
Rational Rational::R_mul(Rational &A)
{
Rational C;
C.m=m*A.m;
C.n=n*A.n;
return C;
}
void Rational::R_div(Rational &A, Rational &B)
{
m=A.m*B.n;
n=A.n*B.m;
}
void Rational::simple()
{
int GCD=gcd(m,n);
m/=GCD;
n/=GCD;
}
void Rational::print()
{
cout<<"The result is:"<<endl;
if(m==0)
{
cout<<"除数不能为0!"<<endl;
flag=0;
}
else if(n!=0)
{
if(n%m==0)
{
cout<<n/m<<endl;
}
else
{
cout<<n<<"/"<<m<<endl;
}
}
else
{
cout<<"0"<<endl;
}
}
int main()
{
while(!flag)
{
int am,an,bm,bn;
cout<<"请输入A,B的分子分母:"<<endl;
cin>>an>>am>>bn>>bm;
Rational a(an,am),b(bn,bm);
if(flag)
{
int n;
if(am==0||bm==0)
{
cout<<"分母不能为零"<<endl;
break;
}
cout<<"分数加法:1 ; 分数减法:2 ; 分数乘法:3 ; 分数除法:4."<<endl;
cin>>n;
switch(n)
{
case 1:
a=a.R_add(b);break;
case 2:
a.R_sub(a,b);break;
case 3:
a=a.R_mul(b);break;
case 4:
a.R_div(a,b);break;
}
a.simple();
a.print();
return 0;
}
}
return 0;
}
2、/*定义并测试日期类 Date ,类包括私有数据成员 year, month, day; 公有成员函数实现以下功能:
1)各种构造函数,有参数与默认构造函数
2)设置时间bool set( int y, int m, int d),并对该时间的有效性进行检测
3)输出时间,按国际日期方式打印 mm/ dd / yyyy
4)判断该日期是一年的第几天
5)判断该日期是的有效性*/
#include<iostream>
using namespace std;
class Date
{
private:
int year,month,day;
public:
Date();
Date(int y,int m,int d);
void get();
int theDay();
int monthdays();
void display(bool flag);
bool set(int y,int m,int d);
};
Date::Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
Date::Date()
{
year=2021;
month=1;
day=1;
}
int Date::monthdays()
{
switch(month)
{
case 2:
if(year%4==0&&year%100!=0||year%400==0)
return 29;
else
return 28;
case 4: case 6: case 9: case 11:
return 30;
default:
return 31;
}
}
int Date::theDay()
{
int s;
switch(month)
{
case 1:
s=day;
break;
case 2:
s=31+day;
break;
case 3:
s=59+day;
break;
case 4:
s=90+day;
break;
case 5:
s=120+day;
break;
case 6:
s=151+day;
break;
case 7:
s=181+day;
break;
case 8:
s=212+day;
break;
case 9:
s=243+day;
break;
case 10:
s=273+day;
break;
case 11:
s=304+day;
break;
case 12:
s=334+day;
break;
}
if(year%4==0&&year%100!=0||year%400==0)
{
if(month>2)
s+=1;
}
return s;
}
bool Date::set(int y,int m,int d)
{
int days=monthdays();
if(y>=0)
{
if(m>0&&m<=12)
{
if(d>0&&d<=days)
{
return true;
}
}
}
return false;
}
void Date::display(bool flag)
{
if(flag)
{
int days=theDay();
cout<<"该日期正确"<<endl;
cout<<"当前时间:"<<month<<"/"<<day<<"/"<<year<<endl;
cout<<"该日期是该年的第"<<days<<"天"<<endl;
}
else
{
cout<<"该日期错误,请重新运行"<<endl;
}
}
void Date::get()
{
int y,m,d;
int t=2;
cout<<"输入1:可自定义日期;输入2:可获取默认时间"<<endl;
cin>>t;
if(t==1)
{
cout<<"请输入日期:";
cin>>y>>m>>d;
year=y;
month=m;
day=d;
display(set(y,m,d));
}
if(t==2)
{
display(set(year,month,day));
}
}
int main()
{
Date date;
date.get();
return 0;
}
3、/*设计描述学生类,私有数据成员包括学号和姓名int id; char name[20]; 公有成员函数实现以下功能:
-
定义各种构造函数,实现对成员的初始化,学生对象的默认名字是“ssdut”
2)显示学生相关信息的show(), 按清晰格式输出学生的所有信息
3)设置学生姓名的setName( char* n);
请给出完整的学生类定义,并对其在main()中进行测试*/
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
private:
int id;
char name[20];
public:
Student();
Student(int num,const char* n);
Student(int num);
void setName(char* m);
void show();
};
Student::Student()
{
id=0;
strcpy(name,"ssdut");
}
Student::Student(int num)
{
id=num;
strcpy(name,"ssdut");
}
Student::Student(int num,const char* n)
{
id=num;
strcpy(name,n);
}
void Student::setName(char *m)
{
strcpy(name,m);
}
void Student::show()
{
cout<<"学号:"<<id<<endl;
cout<<"姓名:"<<name<<endl;
}
int main()
{
char name[20];
cin>>name;
Student s(4,name);
s.show();
Student s0,s1(1),s2(2,"haha");
s0.show();
s1.show();
s2.show();
return 0;
}