码迷,mamicode.com
首页 > 编程语言 > 详细

c++ primer plus 习题答案(4)

时间:2015-05-25 12:59:56      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

p375.5

  1 //头文件
  2 #include<iostream>
  3 
  4 #ifndef _STONEWT_H
  5 #define _STONEWT_H
  6 class Stonewt{
  7 private:
  8     static const int lbs_per_stn = 14;
  9     int stone;
 10     double pds_left;
 11     double pounds;
 12     char mode;
 13 public:
 14     Stonewt();
 15     Stonewt(double, char ch=P);
 16     Stonewt(int, double, char ch=P);
 17     ~Stonewt();
 18     void set(Stonewt &);
 19     void mode_invert(char);
 20     Stonewt operator+(const Stonewt & a)const 
 21     {return Stonewt(pounds + a.pounds); }
 22     friend Stonewt operator-(const Stonewt &, const Stonewt &);
 23     friend Stonewt operator*(double n, const Stonewt &);
 24     friend std::ostream & operator<<(std::ostream &, const Stonewt &);
 25 };
 26 
 27 #endif
 28 
 29 //方法
 30 #include<iostream>
 31 #include"stack.h"
 32 using std::cout;
 33 using std::cin;
 34 using std::endl;
 35 
 36 Stonewt::Stonewt(){
 37     pds_left = pounds = stone = 0;
 38     mode = P;
 39 }
 40 
 41 Stonewt::Stonewt(double a, char ch){
 42     pounds = a;
 43     stone = int(a / lbs_per_stn);
 44     pds_left = pounds - stone*lbs_per_stn;
 45     mode = ch;
 46 }
 47 
 48 Stonewt::Stonewt(int a, double b, char ch){
 49     pounds = a*lbs_per_stn + b;
 50     stone = a + int(b / lbs_per_stn);
 51     pds_left = pounds - stone*lbs_per_stn;
 52     mode = ch;
 53 }
 54 
 55 void Stonewt::set(Stonewt &a){
 56     cout << "enter stone\n";
 57     cin >> a.stone;
 58     cout << "enter pounds\n";
 59     cin >> a.pds_left;
 60     a.pounds = a.stone*lbs_per_stn + a.pds_left;
 61     cout << "enter a mode that you want to choice\n";
 62     cin >> a.mode;
 63 }
 64 
 65 
 66 Stonewt::~Stonewt(){
 67 
 68 }
 69 
 70 Stonewt operator-(const Stonewt &a, const Stonewt &b){
 71     Stonewt sum;
 72     sum = a + b;
 73     return sum;
 74 }
 75 
 76 Stonewt operator*(double n, const Stonewt &a){
 77     return Stonewt(n*a.pounds);
 78 }
 79 
 80 std::ostream & operator<<(std::ostream &os, const Stonewt &t){
 81     if (t.mode == P)
 82         cout << "pounds is " << t.pounds;
 83     else if (t.mode == S)
 84         cout << "stone is " << t.stone << " pds_left is " << t.pds_left << endl;
 85     else cout << "wrong choices\n";
 86     return os;
 87 }
 88 
 89 //驱动
 90 #include<iostream>
 91 #include<cstdlib>
 92 #include"stack.h"
 93 using std::cout;
 94 using std::endl;
 95 
 96 int main(){
 97     Stonewt ct(54.6, S);
 98     Stonewt bt(23, 56.3, P);
 99     Stonewt at;
100     Stonewt dt = bt + ct;
101     Stonewt ft = bt - ct;
102     int n = 4;
103     Stonewt gt = n*bt;
104     cout << ct << endl << bt << endl
105         << dt << endl << ft << endl
106         << gt << endl<<at;
107 
108     system("pause");
109     return 0;
110 }

p375.7

  1 //头文件
  2 #include<iostream>
  3 
  4 #ifndef _COMPLEX_H
  5 #define _COMPLEX_H
  6 
  7 using std::ostream;
  8 using std::istream;
  9 
 10 namespace COMPLEX{
 11     class Complex{
 12     private:
 13         double real;
 14         double imaginary;
 15     public:
 16         Complex();
 17         Complex(double, double);
 18         Complex operator+(const Complex &);
 19         Complex operator-(const Complex &);
 20         friend Complex operator*(const Complex &, const Complex &);
 21         friend Complex operator*(const Complex &, const double);
 22         friend Complex operator~(const Complex &);
 23         friend ostream & operator<<(ostream &, const Complex &);
 24         friend istream & operator>>(istream &, Complex &);
 25     };
 26 }
 27 
 28 #endif
 29 
 30 //方法
 31 #include<iostream>
 32 using namespace std;
 33 #include"stack.h"
 34 
 35 namespace COMPLEX{
 36     Complex::Complex(){
 37         real = imaginary = 0;
 38     }
 39 
 40     Complex::Complex(double a, double b){
 41         real = a;
 42         imaginary = b;
 43     }
 44 
 45     Complex Complex::operator+(const Complex &a){
 46         return Complex(real + a.real, imaginary + a.imaginary);
 47     }
 48 
 49     Complex Complex::operator-(const Complex &a){
 50         return Complex(real - a.real, imaginary - a.imaginary);
 51     }
 52 
 53     Complex operator*(const Complex &a, const Complex &b){
 54         return Complex(a.real*b.real - a.imaginary*b.imaginary, a.real*b.imaginary + a.imaginary*b.real);
 55     }
 56 
 57     Complex operator*(const Complex &a, const double b){
 58         return Complex(a.real*b, a.imaginary*b);
 59     }
 60 
 61     Complex operator~(const Complex &a){
 62         return Complex(a.real, -a.imaginary);
 63     }
 64 
 65     ostream & operator<<(ostream &os, const Complex &b){
 66         cout << "(" << b.real << ", " << b.imaginary << "i)";
 67         return os;
 68     }
 69 
 70     istream & operator>>(istream &is, Complex &a){
 71         if (is >> a.real){
 72             is >> a.imaginary;
 73             cout << "real: " << a.real << endl;
 74             cout << "imaginary: " << a.imaginary << endl;
 75         }
 76         return is;
 77     }
 78 }
 79 
 80 //驱动
 81 #include<iostream>
 82 using namespace std;
 83 #include"stack.h"
 84 using namespace COMPLEX;
 85 
 86 int main(){
 87     Complex a(3.0, 4.0);
 88     Complex c;
 89     cout << "enter a complex number(q to quit)\n";
 90     while (cin>>c){
 91         cout << "c is " << c << endl;
 92         cout << "complex conjugate is " << ~c << endl;
 93         cout << "a is " << a << endl;
 94         cout << "a+c  is " << a + c << endl;
 95         cout << "a-c is " << a - c << endl;
 96         cout << "a*c is " << a*c << endl;
 97         cout << "2*c is " << c*2 << endl;
 98         cout << "enter a complex number(q to quit)\n";
 99     }
100     cout << "Done!\n";
101     system("pause");
102     return 0;
103 }

c++ primer plus 习题答案(4)

标签:

原文地址:http://www.cnblogs.com/coding-time/p/4527555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!