C.Primer.Plus(第六版)第10章 编程练习
来源:互联网 发布:全国高校网络培训中心 编辑:程序博客网 时间:2024/06/02 17:17
// 10.1
// bank.h#ifndef BANK__H__#define BANK__H__class Bank{private: enum{SIZE = 20 }; char bank_name[SIZE]; char account[SIZE]; double deposit;public: Bank(); Bank(const char* _name ,const char* _account,double _deposit = 0); ~Bank(); void showData() const; void pushDeposit(double num); void popDeposit(double num);};#endif
//Bank.cpp#include <iostream>#include <string>#include "bank.h" Bank::Bank(){ strncpy(bank_name,"no name",7); bank_name[7] = '\0'; strncpy(account,"null",4); account[4] = '\0'; deposit = 0; std::cout<<"use default constructor\n";} Bank::Bank(const char* _name,const char* _account,double _deposit) { strcpy(bank_name,_name); strcpy(account,_account); deposit = _deposit; std::cout<<"use no_default constructor\n"; } Bank::~Bank() { std::cout<<"Bye, "<<bank_name<<std::endl; } void Bank::showData() const { std::cout<<"The user bank_name is: "<<bank_name<<std::endl; std::cout<<"The user account is: "<<account<<std::endl; std::cout<<"The user deposit is: "<<deposit<<std::endl; } void Bank::pushDeposit(double num) { if(num>DBL_MAX) std::cout<<"can't enter extra large number.\n"; else deposit += num; } void Bank::popDeposit(double num) { if(num>deposit) std::cout<<"the num more than the deposit.\n"; else deposit -= num; }
//main.cpp#include <iostream>#include "bank.h"int main(){ using namespace std; Bank user_one = Bank("luopeng","mmdnxh",2000); Bank user_two; user_two.showData(); user_one.showData(); user_one.popDeposit(3000); user_one.showData(); user_one.popDeposit(1999); user_one.showData(); user_one.pushDeposit(200); user_one.showData();}
//10.2
//person.h#ifndef PERSON__H__#define PERSON__H__class Person{private: static const int LIMIT = 25; std::string lname; char fname[LIMIT];public: Person(){lname = "",fname[0]= '\0';} Person(const std::string & ln,const char* fn = "Heyyou"); void show() const; void FormalShow() const;};#endif
//person.cpp#include <iostream>#include <string>#include "person.h"using std::cout;using std::cin;using std::endl;using std::string;Person::Person(const string & ln,const char* fn){ lname = ln; strncpy(fname,fn,24); fname[24]='\0';}void Person::show() const{ cout<<"the man firstname is:"<<fname<<" ,and the lastname is"<<lname<<endl;}void Person::FormalShow() const{ cout<<"the man lastname is:"<<lname<<" ,and the firstname is"<<fname<<endl;}
//main.cpp#include <iostream>#include "person.h"#include <string>int main(){ using namespace std; Person one; Person two("Smythecraft"); Person three("Dimwiddy","Sam"); one.show(); one.FormalShow(); two.show(); three.show();}
//10.3
//golf.h#ifndef GOLF__H__#define GOLF__H__class Golf{private: static const int LEN = 40; char fullname[LEN]; int handicap;public: Golf(); Golf(const char* name,int hc); void setGolf(const char* name,int hc); void newHandicap(int hc); void showGolf() const;};#endif
//golf.cpp#include <iostream>#include "golf.h"#include <string>Golf::Golf(){ strncpy(fullname,"null",4); fullname[4]='\0'; handicap = 0;}Golf::Golf(const char* name,int hc){ strncpy(fullname,name,39); fullname[39]='\0'; handicap = hc;}void Golf::setGolf(const char* name,int hc){ *this=Golf::Golf(name,hc);//将产生的临时对象赋给调用这个方法的对象}void Golf::newHandicap(int hc){ handicap = hc;}void Golf::showGolf() const { std::cout<<"The fullname is: "<<fullname<<" , and the handicap is : "<<handicap<<std::endl;}
//main.cpp#include <iostream>#include "golf.h"#include <string>int main(){ using namespace std; Golf golf_one; golf_one.showGolf(); Golf golf_two = Golf("mmdnxh",20); golf_two.newHandicap(10); golf_two.showGolf(); golf_two.setGolf("xiaoming",10); golf_two.showGolf();}
//10.4
//sale.h#include <iostream>#ifndef __SALE__H__#define __SALE__H__namespace SALES{ class Sales { private: static const int QUARTERS = 4; double sales[QUARTERS]; double average; double max; double min; public: Sales(const double ar[],int n); Sales(); void showSales() const; };}#endif
//sale.cpp#include <iostream>#include "sale.h"using std::cin;using std::cout;using std::endl;using std::string;namespace SALES{ static double calcAverage(double arr[], int arrsize) { double sum = 0; for(int i = 0;i<arrsize;i++) sum+=arr[i]; return (sum/arrsize); } static double calcMax(double arr[], int arrsize) { int idMax = 0; for(int i =1;i<arrsize;i++) { if(arr[i]>arr[idMax]) idMax = i; } return arr[idMax]; } static double calcMin(double arr[], int arrsize) { int idMin = 0; for(int i =1;i<arrsize;i++) { if(arr[i]<arr[idMin]) idMin = i; } return arr[idMin]; }Sales::Sales(const double ar[],int n) { int times = n<QUARTERS?n:QUARTERS; for(int i = 0;i<times;i++) (*this).sales[i]=ar[i]; for(int i =times;i<QUARTERS;i++) this->sales[i] = 0; this->average = calcAverage(this->sales, times); this->max = calcMax(this->sales, times); this->min = calcMin(this->sales, times); }Sales::Sales() { cout << "Please enter " << QUARTERS << " sale record:"; int times = QUARTERS; double arr[QUARTERS] = {0}; for (int i = 0;i < QUARTERS; i++) { cin >> arr[i]; if (!cin) { times = i; //表示输入异常 break; } } *this = Sales::Sales(arr, QUARTERS); //先得到初始数据在进行操作 this->average = calcAverage(this->sales, times); this->max = calcMax(this->sales, times); this->min = calcMin(this->sales, times); } void Sales::showSales() const { cout << "sales: "; for(int i = 0;i<QUARTERS;i++) cout<<this->sales[i]<<" "; cout << endl; cout << "average: " <<this->average << endl; cout << "max: " << this->max << endl; cout << "min: " << this->min << endl; }}
//main.cpp#include <iostream> #include "sale.h" using namespace std;int main () { using namespace SALES; const double salesList[] = {2.24,234,53,23.6,6.4}; Sales salesCar(salesList, (sizeof(salesList)/sizeof(salesList[0]))); ; salesCar.showSales(); Sales salesBus; salesBus.showSales(); }
//10.5
//stack.h// class definition for the stack ADT#ifndef STACK__H__#define STACK__H__struct customer { char fullname[35]; double payment; };typedef customer Item;class Stack{private: enum{MAX = 10}; Item items[MAX]; int top;public: Stack(); bool isempty() const; bool isfull() const; bool push(); bool pop();};#endif
//stack.cpp// stack.cpp Stack member functions#include "stack.h"#include <iostream>#include <string>Stack::Stack(){ top = 0;}bool Stack::isempty() const{ return top == 0;}bool Stack::isfull() const{ return top == MAX;}bool Stack::push(){ if((*this).top<MAX) { std::cout<<"Please enter the fullname:"; std::string str; std::cin>>str; strncpy((*this).items[top].fullname,str.c_str(),sizeof(str)>34?34:sizeof(str)); (*this).items[top].fullname[34]='\0'; std::cout<<"Please enter the payment:"; while(!(std::cin>>(*this).items[top].payment))//判断是否输入数字 { std::cin.clear();//将标志位从fail(1)改为0,再次打开输出检测 std::cout<<"Please enter the type of matching data:"; //while (std::cin.get() != '\n')//读取第一个字符后的多余的字符。检测到\n表示读取完毕,输入流为空。 // continue; std::cin.sync();//将输入流清空,与上面等价 } top++; return true; } else return false;}bool Stack::pop() { static double payment = 0.0; if(top>0) { //*(this->items) = items[--top]; payment += (*this).items[--top].payment; std::cout<<"the total quantity is "<<payment<<std::endl; return true; } else return false;}
//main.cpp//stacker.cpp -- testing the Stack class#include <iostream>#include "stack.h"int main(){ using namespace std; Stack st; char ch; cout<<"Please enter A to add a purchase order.\n" <<"P to process a PO , or Q to quit\n"; while(cin>>ch &&toupper(ch)!='Q') { while (cin.get() != '\n')//读取第一个字符后的多余的字符。检测到\n表示读取完毕,输入流为空。 continue; if(!isalpha(ch))//判断第一个字符的合理性 { cout<<'\a'; continue; } switch(ch) { case 'a': case 'A': if(st.isfull()) cout<<"stack already full\n"; else { cout<<"Enter a sturct member to add.\n "; st.push(); cout<<"Add success!\n"; } break; case 'p': case 'P': if(st.isempty()) cout<<"stack already empty\n"; else{ st.pop(); } break;//没有使用default } cout<<"Please enter A to add a purchase order.\n" <<"P to process a PO , or Q to quit\n"; } cout<<"Bye!\n"; return 0;}
//10.6
//move.h#ifndef MOVE__H__#define MOVE__H__class Move{private: double x; double y;public: Move(double a = 0,double b = 0); void showmove() const; Move add(const Move & m) const; void reset(double a = 0,double b =0);};#endif
//move.cpp#include <iostream>#include "move.h"Move::Move(double a,double b){ this->x = a; this->y = b;}void Move::showmove() const{ std::cout<<"the x is "<<x<<" ,and the y is: "<<y<<std::endl;}Move Move::add(const Move & m) const{ return Move::Move(m.x,m.y);}void Move::reset(double a , double b){ this->x = a; this->y = b;}
//main.cpp#include <iostream>#include "move.h"int main(){ using namespace std; Move move_one(12,11); move_one.showmove(); Move move_two(110.1,312); Move move_three = move_one.add(move_two); move_three.showmove(); move_three.reset(); move_three.showmove(); move_three.reset(123,121); move_three.showmove();}
//10.7
//plorg.h#ifndef PLORG__H__#define PLORG__H__class Plorg{private: char fullname[20]; int ci;public: Plorg(const char* name ="Plorga",int _ci =50); void resetCi(int _ci); void showPlorg();};#endif
//plorg.cpp#include <iostream>#include "plorg.h"#include <string>Plorg::Plorg(const char* name ,int _ci){ int len =(strlen(name)>19?19:strlen(name)); strncpy((*this).fullname,name,len); (*this).fullname[len] = '\0'; (*this).ci = _ci;}void Plorg::resetCi(int _ci){ (*this).ci = _ci;}void Plorg::showPlorg(){ std::cout<<"the fullname is: "<<(*this).fullname<<" ,and the ci is : "<<ci<<std::endl;}
//main.cpp#include <iostream>#include "plorg.h"#include <string>int main(){ Plorg plorg_one = Plorg(); Plorg plorg_two = Plorg("mmdnxh",20); plorg_one.showPlorg(); plorg_two.showPlorg(); plorg_two.resetCi(12); plorg_two.showPlorg();}
//10.8
//list.h#ifndef LIST__H__#define LIST__H__#include<iostream>typedef double Item;void showList(Item & l);class List{private: enum{MAX = 10}; Item items; int top;public: List(); bool isempty() const; bool isfull() const; bool push(); void visit(void (*pf)(Item &));};#endif
list.cpp// stack.cpp Stack member functions#include "list.h"#include <iostream>#include <string>void showList(Item & l) { std::cout<<"The list payment is:"<<l<<std::endl;}List::List(){ top = 0;}bool List::isempty() const{ return top == 0;}bool List::isfull() const{ return top == MAX;}bool List::push(){ if((*this).top<MAX) { std::cout<<"Please enter the payment:"; while(!(std::cin>>items))//判断是否输入数字 { std::cin.clear();//将标志位从fail(1)改为0,再次打开输出检测 std::cout<<"Please enter the type of matching data:"; //while (std::cin.get() != '\n')//读取第一个字符后的多余的字符。检测到\n表示读取完毕,输入流为空。 // continue; std::cin.sync();//将输入流清空,与上面等价 } top++; return true; } else return false;}void List::visit(void (*pf)(Item &)){ pf((*this).items);}
//main.cpp//stacker.cpp -- testing the Stack class#include <iostream>#include "list.h"int main(){ using namespace std; List list; char ch; cout<<"Please enter A to add a purchase order.\n" <<"v to show a PO , or Q to quit\n"; while(cin>>ch &&toupper(ch)!='Q') { while (cin.get() != '\n')//读取第一个字符后的多余的字符。检测到\n表示读取完毕,输入流为空。 continue; if(!isalpha(ch))//判断第一个字符的合理性 { cout<<'\a'; continue; } switch(ch) { case 'a': case 'A': if(list.isfull()) cout<<"list already full\n"; else { cout<<"Enter a sturct member to add.\n "; list.push(); cout<<"Add success!\n"; } break; case 'v': case 'V': if(list.isempty()) cout<<"list already empty\n"; else{ double x = 20; //pf = showList; list.visit(showList); } break;//没有使用default } cout<<"Please enter A to add a purchase order.\n" <<"v to show a PO , or Q to quit\n"; } cout<<"Bye!\n"; return 0;}
阅读全文
0 0
- C.Primer.Plus(第六版)第10章 编程练习
- C.Primer.Plus(第六版)第11章 编程练习
- C.Primer.Plus(第六版)第12章 编程练习
- C.Primer.Plus(第六版)第13章 编程练习
- C.Primer.Plus(第六版)第14章 编程练习
- C.Primer.Plus(第六版)第15章 编程练习
- C.Primer.Plus(第六版)第16章 编程练习
- C.Primer.Plus(第六版)第17章 编程练习
- C.Primer.Plus(第六版)第六章编程练习
- C ++ Primer Plus 第六版 第六章编程练习答案
- C++primer plus第六章编程练习
- 【C++】学习笔记十四——C++ primer plus第六版第4章编程练习
- c++primer plus 第六版 第2章 编程练习之路
- C primer plus(第五版)编程练习第六章
- c++.primer.plus第五版第六章编程练习答案
- C.Primer.Plus(第六版)第五章编程练习
- C.Primer.Plus(第六版)第七章 编程练习
- C.Primer.Plus(第六版)第八章 编程练习
- The Future of Real-Time SLAM and “Deep Learning vs SLAM”
- 小甲鱼课程学习028-040
- java 实例方法和类方法比较
- Android 实现简单的登陆注册功能(SharedPreferences和SQLite)
- Mac系统查看端口占用和杀死进程
- C.Primer.Plus(第六版)第10章 编程练习
- ArrayList原理解析
- Android Build
- Linux下压缩、解压缩及归档命令
- windows快捷操作
- 变分自编码器(VAE)的代码理解
- C#初4类型转换
- BP神经网络
- @RequestBody注解