C++ 第二次上机实验(作业)
2016-03-27 18:02
393 查看
T1 定义 class Time :
代码:
T2 class 正整数类:
T3 class book 类:
T4 分数类:
代码:
#include <iostream> using namespace std; class Time { public: void setTime(); void showTime(); void add_a_sec();//增加1秒钟 void add_a_minute();//增加1分钟 void add_an_hour();//增加1小时 void add_seconds(int n);//增加n秒钟 void add_minutes(int n);//增加n分钟 void add_hours(int n);//增加n小时 private: bool isTime(int,int,int);//该为私有函数,但使用合法哦! int hour; int minute; int sec; }; void Time::setTime() { char c1,c2; cout<<"请输入时间(格式hh:mm:ss)"<<endl; while(1) { cin>>hour>>c1>>minute>>c2>>sec; if((c1!=':')||(c2!=':')) cout<<"格式不正确,请重新输入"<<endl; else if(!isTime(hour,minute,sec)) cout<<"时间非法,请重新输入"<<endl; else break; } } void Time::showTime() { cout<<hour<<":"<<minute<<":"<<sec<<endl; } bool Time::isTime(int h,int m,int s) { if(h<0||h>=24||m<0||m>=60||s<0||s>=60) return false; return true; } void Time::add_a_sec()//增加1秒钟 { cout<<"增加1秒钟后:"<<endl; sec++; if(sec>=60) { minute++; sec=00; if(minute>=60) { hour++; if(hour>=24) hour=0; minute=00; } } } void Time::add_a_minute()//增加1分钟 { cout<<"增加1分钟后:"<<endl; minute++; if(minute>=60) { hour++; if(hour>=24) hour=0; minute=00; } } void Time::add_an_hour()//增加1小时 { cout<<"增加1小时后:"<<endl; hour++; if(hour>=24) hour=0; } void Time::add_seconds(int n)//增加n秒钟 { sec=sec+n; do { if(sec>=60) { minute++; sec=sec-60; if(minute>=60) { hour++; if(hour>=24) hour=0; minute=00; } } }while(sec>=60); } void Time::add_minutes(int n)//增加n分钟 { minute+=n; do { if(minute>=60) { hour++; if(hour>=24) hour=0; minute-=60; } }while(minute>=60); } void Time::add_hours(int n)//增加n小时 { hour+=n; do { if(hour>=24) hour=hour-24; }while(hour>=24); } int main() { int N; Time t1; t1.setTime(); t1.showTime(); t1.add_a_sec();//增加1秒钟 t1.showTime(); t1.add_a_minute();//增加1分钟 t1.showTime(); t1.add_an_hour();//增加1小时 t1.showTime(); cout<<"输入增加的数字:"<<endl; cin>>N; cout<<"增加"<<N<<"秒钟后:"<<endl; t1.add_seconds(N);//增加n秒钟 t1.showTime(); cout<<"增加"<<N<<"分钟后:"<<endl; t1.add_minutes(N);//增加n分钟 t1.showTime(); cout<<"增加"<<N<<"小时后:"<<endl; t1.add_hours(N);//增加n分钟 t1.showTime(); return 0; }
T2 class 正整数类:
#include<iostream> using namespace std; class NaturalNumber { public: void setValue (int x);//置数据成员n的值,要求判断是否是正整数 int getValue(); //返回私有数据成员n的值 bool isPrime(); //判断数据成员n是否为素数,是返回true,否则返回false void printFactor(); //输出数据成员n的所有因子,包括1和n自身 bool isPerfect(); //判断数据成员n是否为完全数。若一个正整数n的所有小于n的因子之和等于n, 则称n为完全数, 如6=1+2+3是完全数。 bool isReverse(int x);//判断形式参数x是否为数据成员n的逆向数(例321是123的逆向数)。 bool isDaffodil(int x); //判断形式参数x是否是水仙花数。水仙花数的各位数字立方和等于该数,如153=1*1*1+5*5*5+3*3*3 void print_Daffodils(); //显示所有大于1,且小于数据成员n的水仙花数; private: int n; }; void NaturalNumber::setValue(int x) { if(x>0) { n=x; cout<<"输入的数为正整数"<<endl; } else cout<<" 输入的数不是正整数 "<<endl; } int NaturalNumber::getValue() { return n; } bool NaturalNumber::isPrime() { int i,j=0; for(i=2;i<n;i++) { if(n%i==0) { j=1; break; } } if(j==0) return true; else return false; } void NaturalNumber::printFactor() { int i,j=0; for(i=1;i<=n;i++) { if(n%i==0) { cout<<" "<<i; } } } bool NaturalNumber::isPerfect() { int i,s=0; for(i=1;i<n;i++) { if(n%i==0) { s+=i; } } if(s<=n) cout<<"正整数"<<n<<"是完全数"<<endl; else cout<<"正整数"<<n<<"不是完全数"<<endl; return 0; } bool NaturalNumber::isReverse(int x) { int a[10]; int t=n,i=0,y=0; while(t) { a[i]=t%10; t=t/10; i++; } for(int j=i;j<=0;j--) { y+=a[j]; y*=10; } if(x==y) { return 1; } else { return 0; } } bool isDaffodil(int x) //判断形式参数x是否是水仙花数。水仙花数的各位数字立方和等于该数,如153=1*1*1+5*5*5+3*3*3 { int b=x,s=0; while(b) { s+=(b%10)*(b%10)*(b%10); b=b/10; } if(s==x) return 1; else return 0; } void NaturalNumber::print_Daffodils()//显示所有大于1,且小于数据成员n的水仙花数; { for(int i=1;i<n;i++) { if(isDaffodil(i)) cout<<i<<" "; } cout<<endl; } void main(void) { int a; NaturalNumber nn; //定义类的一个实例(对象) nn.setValue (6); cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl; cout<<nn.getValue()<<nn.isPerfect()<<endl; nn.setValue (37); cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl; cout<<nn.getValue()<<nn.isPerfect()<<endl; cout<<nn.getValue()<<"你认为的逆向数为:"; cin>>a; while(nn.isReverse(a)!=0) { cout<<a<<"不是"<<37<<"的逆向数,请重新输入:"<<endl; cin>>a; } cout<<a<<"是"<<37<<"的逆向数."<<endl; nn.setValue (84); cout<<nn.getValue()<<"的因子有:"; nn.printFactor(); nn.setValue(1000); cout<<nn.getValue()<<"1000以下的水花仙树有:"<<endl; nn.print_Daffodils(); //随着成员函数的实现,增加代码以完成相关的测试。注意判断类的成员函数需要测试是或否两种情况…… } //请在下面定义类中的各个成员函数
T3 class book 类:
#include <iostream> #include <string> using namespace std; class Book { public: void setBook(string n,string w,string pu,string no,float pr,int num); void borrow(); void restore(); void print(); void set_NO(string t); void get_NO(); private: string name,writer,publicer,NO; float price; int number; }; void Book::setBook(string n,string w,string pu,string no,float pr,int num) { name=n; writer=w; publicer=pu; NO=no; price=pr; number=num; } void Book::borrow() { number--; } void Book::restore() { number++; } void Book::print() { cout<<"书名: "<<name<<endl; cout<<"作者: "<<writer<<" "<<"出版社: "<<publicer<<endl; cout<<"价格: "<<price<<" "<<"数量:"<<number<<endl; cout<<"书号:"<<NO<<endl; } void Book::set_NO(string t) { NO=t; } void Book::get_NO() { cout<<"书号: "<<NO<<endl; } int main() { Book book1; book1.setBook("《简.爱》","夏绿蒂.勃朗特","漓江出版社","I561.44 B936",30.5,5); book1.borrow(); book1.print(); book1.set_NO("I561.14 B462"); book1.restore(); book1.print(); cout<<endl; book1.get_NO(); return 0; } // 本次程序 头文件的 <string> 不带.h ,因为没调用到<string.h> // 引用字符串时要用 " " (双引号)
T4 分数类:
/*项目要求:完成分数类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。 实践策略: (1)不建议一次实现所有成员函数后再调试,而是实现一个,测试一个; (2)本项目的实现及测试顺序可以是:先构造函数和输出output函数(可以先只实现一种输出方式),再set函数,再input函数,等等。 参考结果*/ #include <iostream> #include <string> using namespace std; class CFraction { public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(int nu,int de); //置值,改变值时用 void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void output(int style=0); //输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 private: int nume; // 分子 int deno; // 分母 }; CFraction::CFraction(int nu,int de)//构造函数,初始化用 { nume=nu; deno=de; } void CFraction::set(int nu,int de)//置值,改变值时用 { nume=nu; deno=de; } void CFraction::input()//按照"nu/de"的格式,如"5/2"的形式输入 { cout<<"输入分数(格式为a/b):"<<endl; char a; cin>>nume>>a>>deno; } void CFraction::simplify()//化简(使分子分母没有公因子) { int a=nume,b=deno,c=nume%deno,d=0; while(c) { a=b; b=c; c=a%b; } d=b; nume/=a,deno/=a; } void CFraction::amplify(int n)//放大n倍,如2/3放大5倍为10/3 { nume*=n; } void CFraction::output(int style)//输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 { int a=nume,b=deno,c=nume%deno,d=0; double s; while(c) { a=b; b=c; c=a%b; } d=b; if(style==0) cout<<"原样:"<<nume<<"/"<<deno<<endl; if(style==1) cout<<"化简形式:"<<nume/b<<"/"<<deno/b<<endl; if(style==2) cout<<"带分数形式:"<<nume/deno<<"("<<nume%deno/b<<"/"<<deno/b<<")"<<endl; if(style==3) { s=(double)nume/deno; cout<<"小数形式:"<<s<<endl; } /*或者用 switch 结构语句; switch(style) { case 0:cout<<...<<endl;break; case 1:... ... } */ } int main() { CFraction c1,c2(10,6); cout<<"关于c1:"<<endl; c1.output(); cout<<"输入c1:"<<endl; c1.input(); c1.output(); cout<<"改变c1:"<<endl; c1.set(3,8); c1.output(); cout<<"输入c2:"<<endl; c2.input(); c2.output(); cout<<"关于c2:"<<endl; c2.output(); c2.output(1); c2.output(2); c2.output(3); c2.output(); cout<<"将c2化简:"<<endl; c2.simplify(); c2.output(); cout<<"将c2放大6倍:"<<endl; c2.amplify(6); c2.output(); c2.output(1); }
相关文章推荐
- c++第二次实验—2
- TOJ : 4014. Warm up 2
- C语言笔记(二)
- C++中的static关键字(杂谈)
- 利用命令模式模拟烤肉店点餐 C++
- 一些关于C++中static方法和static成员的个人认知
- c++上机作业-2
- 数组array和vector的比较
- C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序
- C++作业2
- 链接和作用域(extern、static、auto)
- C++之枚举
- 20160227.CCPP体系详解(0037天)
- 20160227.CCPP体系详解(0037天)
- C++作业2
- array数组容器 C++
- 20160227.CCPP体系详解(0037天)
- C语言typedef的用法
- 约瑟夫环问题——(Hdu-5643,King's Game)
- 智能指针(现代 C++)