C.Primer.Plus(第六版)第11章 编程练习
来源:互联网 发布:添加网络打印机步骤xp 编辑:程序博客网 时间:2024/05/16 10:29
//11.1
//vector.h -- Vector class with << mode state#ifndef VECTOR__H__#define VECTOR__H__#include <iostream>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; //RECT to rectangular,POL for Polar modes private: double x;//horizontal value double y;// vertical value double mag;//length of vector double ang;//direction if vector in degrees Mode mode; //private methods for setting values void set_mag(); void set_ang(); void set_x(); void set_y(); public: Vector(); Vector(double n1,double n2,Mode form = RECT); void reset(double n1,double n2,Mode form = RECT); ~Vector(); double xval() const {return x;}//类定义自动转换为内联函数 double yval() const {return y;} double magval() const {return mag;} double angval() const {return ang;} void polar_mode();//set mode to POL void rect_mode();//set mode to RECT //operator overloading Vector operator+(const Vector & b) const; Vector operator-(const Vector & b) const; Vector operator*(double n) const; Vector operator-() const; //friends friend Vector operator*(double n,const Vector & a); friend std::ostream & operator<<(std::ostream & os,const Vector & v);//返回类型为cout、cerr等标准输出对象 };}//end namespace VECTOR #endif
//vector.cpp --methods for the Vector class#include <cmath>#include "vector.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;using std::cin;namespace VECTOR{ //computer degrees in one radian const double Rad_to_deg = 45.0/atan(1.0); //should be about 57.2957795130823 //private methods //calcualtes magnitude from x and y void Vector::set_mag() { mag = sqrt(x*x+y*y); } void Vector::set_ang() { if(x == 0 && y == 0) ang =0.0; else ang = atan2(y,x); } void Vector::set_x() { x = mag * cos(ang); } void Vector::set_y() { y = mag * sin(ang); } //public methods Vector::Vector() { x = y =mag = ang = 0.0; mode = RECT; } Vector::Vector(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; set_ang(); set_mag(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } //reset vector from rectangular coordinates if form is //RECT (the default) or else from polar coordinates if from is POL void Vector::reset(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; set_mag(); set_ang(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } Vector::~Vector() //destructor { } void Vector::polar_mode() //set to polar mode { mode = POL; } void Vector::rect_mode()//set to rectangular mode { mode = RECT; } //operator overloading //add two Vectors Vector Vector::operator+(const Vector & b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector & b) const { return Vector(x-b.x,y-b.y); } //reverse sign of Vector Vector Vector::operator-() const { return Vector(-x,-y); } //multiply vector by n Vector Vector::operator*(double n) const { return Vector(n*x,n*y); } //friend methods //multiply n by Vector a Vector operator*(double n,const Vector & a) { return a*n; } //display rectangular coordinates if mode is RECT, //else display polar coordinates if mode is POL std::ostream & operator<<(std::ostream & os, const Vector & v) { if(v.mode == Vector::RECT) { os<<"(x,y) =("<<v.x<<","<<v.y<<")"; } else if(v.mode == Vector::POL) { os<<"(m,a) = ("<<v.mag<<" ," <<v.ang * Rad_to_deg<<")"; } else os<<"Vector object mode is invalid."; return os; }}//end namespace VECTOR
//randwalk.cpp -- using the Vector class#include <iostream>#include "vector.h"#include <cstdlib>#include <ctime>#include <fstream>//int main(){ using namespace std; using VECTOR::Vector; srand(time(0)); double direction; Vector step; Vector result(0.0,0.0); unsigned long steps = 0; double target; double dstep; ofstream fout;// fout.open("test.txt");// cout<<"Enter target distanee(q to quit):"; while(cin>>target) { cout<<"Enter step length:"; if(!(cin>>dstep)) break; fout<<"Target Distance: "<<target<<" , Step Size: "<<dstep<<endl;// while(result.magval()<target) { fout<<steps<<":"<<result<<endl;// direction = rand() % 360; step.reset(dstep,direction,Vector::POL); result = result + step; steps++; } fout<<steps<<":"<<result<<endl;// cout<<"After "<<steps<<" steps,the subject " "has the folling location:\n"; fout<<"After "<<steps<<" steps,the subject " "has the folling location:\n";// cout<<result<<endl; fout<<result<<endl; result.polar_mode(); cout<<" or \n"<<result<<endl; fout<<" or \n"<<result<<endl; cout<<"Average outward distance per step = " <<result.magval()/steps<<endl; fout<<"Average outward distance per step = " <<result.magval()/steps<<endl; } cout<<"Bye!\n"; cin.clear(); cin.sync(); return 0 ;}
//11.2
//vector.h -- Vector class with << mode state#ifndef VECTOR__H__#define VECTOR__H__#include <iostream>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; //RECT to rectangular,POL for Polar modes private: double x;//horizontal value double y;// vertical value double mag;//length of vector double ang;//direction if vector in degrees Mode mode; //private methods for setting values //void set_mag(); //void set_ang(); double set_mag(); double set_ang(); void set_x(); void set_y(); public: Vector(); Vector(double n1,double n2,Mode form = RECT); void reset(double n1,double n2,Mode form = RECT); ~Vector(); double xval() const {return x;}//类定义自动转换为内联函数 double yval() const {return y;} //double magval() const {return mag;} //double angval() const {return ang;} double magval(); double angval(); void polar_mode();//set mode to POL void rect_mode();//set mode to RECT //operator overloading Vector operator+(const Vector & b) const; Vector operator-(const Vector & b) const; Vector operator*(double n) const; Vector operator-() const; //friends friend Vector operator*(double n,const Vector & a); friend std::ostream & operator<<(std::ostream & os,const Vector & v);//返回类型为cout、cerr等标准输出对象 };}//end namespace VECTOR #endif
//vector.cpp --methods for the Vector class#include <cmath>#include "vector.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;using std::cin;namespace VECTOR{ //computer degrees in one radian const double Rad_to_deg = 45.0/atan(1.0); //should be about 57.2957795130823 //private methods //calcualtes magnitude from x and y /* void Vector::set_mag() { mag = sqrt(x*x+y*y); } void Vector::set_ang() { if(x == 0 && y == 0) ang =0.0; else ang = atan2(y,x); } void Vector::set_x() { x = mag * cos(ang); } */ double Vector::set_mag() { mag = sqrt(x*x+y*y); return mag; } double Vector::set_ang() { if(x == 0 && y == 0) ang =0.0; else ang = atan2(y,x); return ang; } double Vector::magval() { return set_mag(); } double Vector::angval() { return set_ang(); } void Vector::set_x() { x = mag * cos(ang); } void Vector::set_y() { y = mag * sin(ang); } //public methods Vector::Vector() { x = y =mag = ang = 0.0; mode = RECT; } Vector::Vector(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; magval(); angval(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } //reset vector from rectangular coordinates if form is //RECT (the default) or else from polar coordinates if from is POL void Vector::reset(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; magval(); angval(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } Vector::~Vector() //destructor { } void Vector::polar_mode() //set to polar mode { mode = POL; } void Vector::rect_mode()//set to rectangular mode { mode = RECT; } //operator overloading //add two Vectors Vector Vector::operator+(const Vector & b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector & b) const { return Vector(x-b.x,y-b.y); } //reverse sign of Vector Vector Vector::operator-() const { return Vector(-x,-y); } //multiply vector by n Vector Vector::operator*(double n) const { return Vector(n*x,n*y); } //friend methods //multiply n by Vector a Vector operator*(double n,const Vector & a) { return a*n; } //display rectangular coordinates if mode is RECT, //else display polar coordinates if mode is POL std::ostream & operator<<(std::ostream & os, const Vector & v) { if(v.mode == Vector::RECT) { os<<"(x,y) =("<<v.x<<","<<v.y<<")"; } else if(v.mode == Vector::POL) { os<<"(m,a) = ("<<v.mag<<" ," <<v.ang * Rad_to_deg<<")"; } else os<<"Vector object mode is invalid."; return os; }}//end namespace VECTOR
//randwalk.cpp -- using the Vector class#include <iostream>#include "vector.h"#include <cstdlib>#include <ctime>int main(){ using namespace std; using VECTOR::Vector; srand(time(0)); double direction; Vector step; Vector result(0.0,0.0); unsigned long steps = 0; double target; double dstep; cout<<"Enter target distanee(q to quit):"; while(cin>>target) { cout<<"Enter step length:"; if(!(cin>>dstep)) break; while(result.magval()<target) { direction = rand() % 360; step.reset(dstep,direction,Vector::POL); result = result + step; steps++; } cout<<"After "<<steps<<" steps,the subject " "has the folling location:\n"; cout<<result<<endl; result.polar_mode(); cout<<" or \n"<<result<<endl; cout<<"Average outward distance per step = " <<result.magval()/steps<<endl; } cout<<"Bye!\n"; cin.clear(); cin.sync(); return 0 ;}
//11.3
//vector.h -- Vector class with << mode state#ifndef VECTOR__H__#define VECTOR__H__#include <iostream>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; //RECT to rectangular,POL for Polar modes private: double x;//horizontal value double y;// vertical value double mag;//length of vector double ang;//direction if vector in degrees Mode mode; //private methods for setting values void set_mag(); void set_ang(); void set_x(); void set_y(); public: Vector(); Vector(double n1,double n2,Mode form = RECT); void reset(double n1,double n2,Mode form = RECT); ~Vector(); double xval() const {return x;}//类定义自动转换为内联函数 double yval() const {return y;} double magval() const {return mag;} double angval() const {return ang;} void polar_mode();//set mode to POL void rect_mode();//set mode to RECT //operator overloading Vector operator+(const Vector & b) const; Vector operator-(const Vector & b) const; Vector operator*(double n) const; Vector operator-() const; //friends friend Vector operator*(double n,const Vector & a); friend std::ostream & operator<<(std::ostream & os,const Vector & v);//返回类型为cout、cerr等标准输出对象 };}//end namespace VECTOR #endif
//vector.cpp --methods for the Vector class#include <cmath>#include "vector.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;using std::cin;namespace VECTOR{ //computer degrees in one radian const double Rad_to_deg = 45.0/atan(1.0); //should be about 57.2957795130823 //private methods //calcualtes magnitude from x and y void Vector::set_mag() { mag = sqrt(x*x+y*y); } void Vector::set_ang() { if(x == 0 && y == 0) ang =0.0; else ang = atan2(y,x); } void Vector::set_x() { x = mag * cos(ang); } void Vector::set_y() { y = mag * sin(ang); } //public methods Vector::Vector() { x = y =mag = ang = 0.0; mode = RECT; } Vector::Vector(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; set_ang(); set_mag(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } //reset vector from rectangular coordinates if form is //RECT (the default) or else from polar coordinates if from is POL void Vector::reset(double n1,double n2,Mode form) { mode = form; if(form == RECT) { x = n1; y = n2; set_mag(); set_ang(); } else if(form == POL) { mag = n1; ang = n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector()"; cout<<",vector set to 0.\n"; x = y = mag = ang =0.0; mode = RECT; } } Vector::~Vector() //destructor { } void Vector::polar_mode() //set to polar mode { mode = POL; } void Vector::rect_mode()//set to rectangular mode { mode = RECT; } //operator overloading //add two Vectors Vector Vector::operator+(const Vector & b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector & b) const { return Vector(x-b.x,y-b.y); } //reverse sign of Vector Vector Vector::operator-() const { return Vector(-x,-y); } //multiply vector by n Vector Vector::operator*(double n) const { return Vector(n*x,n*y); } //friend methods //multiply n by Vector a Vector operator*(double n,const Vector & a) { return a*n; } //display rectangular coordinates if mode is RECT, //else display polar coordinates if mode is POL std::ostream & operator<<(std::ostream & os, const Vector & v) { if(v.mode == Vector::RECT) { os<<"(x,y) =("<<v.x<<","<<v.y<<")"; } else if(v.mode == Vector::POL) { os<<"(m,a) = ("<<v.mag<<" ," <<v.ang * Rad_to_deg<<")"; } else os<<"Vector object mode is invalid."; return os; }}//end namespace VECTOR
//randwalk.cpp -- using the Vector class#include <iostream>#include "vector.h"#include <cstdlib>#include <ctime>#include <fstream>//int main(){ using namespace std; using VECTOR::Vector; srand(time(0)); double direction; Vector step; Vector result(0.0,0.0); unsigned long steps = 0; double target; double dstep; int testsize; double maxtep = 0; double mintep = 0; static double avertep = 0; ofstream fout;// fout.open("test.txt");// cout<<"Enter testsize(q to quit):"; while(!(cin>>testsize)) { cout<<"Enter the true genre(q to quit):"; cin.clear(); cin.sync(); } int n = testsize; while(n--) { cout<<"Enter target distanee(q to quit):"; while(!(cin>>target)) { cout<<"Enter the true genre(q to quit):"; cin.clear(); cin.sync(); } cout<<"Enter step length:"; while(!(cin>>dstep)) { cout<<"Enter the true genre(q to quit):"; cin.clear(); cin.sync(); } while(result.magval()<target) { direction = rand() % 360; step.reset(dstep,direction,Vector::POL); result = result + step; steps++; } cout<<"After "<<steps<<" steps,the subject " "has the folling location:\n"; if(avertep == 0) mintep = steps; if(steps>maxtep) maxtep = steps; if(steps<mintep) mintep = steps; avertep += steps; } cout<<"In total "<<testsize<<" mesurement,the maxtep is "<<maxtep<<" ,the mintep is "<<mintep<<" and the avertep is "<<(avertep/testsize)<<endl; return 0 ;}
//11.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(); }
//11.5
//stonewt.h -- definition for the Stonewt class#ifndef STONEWT__H__#define STONEWT__H__class Stonewt{public: enum Sort{POUNDS,FRAC_POUND};private: static const int Lbs_per_stn = 14; int stone; //whole stones double pds_left;//fractional pounds double pounds;//entire weight in pounds Sort sort;public: Stonewt(int stn,double lbs,Sort form); Stonewt(); ~Stonewt(); friend Stonewt operator+(Stonewt & s1,Stonewt & s2); friend Stonewt operator-(Stonewt & s1,Stonewt & s2); friend Stonewt operator*(Stonewt & s1,Stonewt & s2); friend std::ostream & operator<<(std::ostream & os, const Stonewt & s1);};#endif
//stonewt.cpp#include <iostream>using std::cout;#include "stonewt.h"Stonewt::Stonewt(int stn,double lbs,Sort form){ if(form == POUNDS) { stone = int(lbs)/Lbs_per_stn + stn; pds_left = int(lbs) % Lbs_per_stn + lbs -int(lbs); pounds = lbs+ stn * Lbs_per_stn; sort = form; } else if(form == FRAC_POUND) { stone = int(lbs)/Lbs_per_stn + stn; pds_left = int(lbs) % Lbs_per_stn + lbs -int(lbs); pounds = lbs+ stn * Lbs_per_stn; sort = form; } else { cout<<"data form don't matching."; stone = pds_left = pounds = 0; form = FRAC_POUND; }}Stonewt::Stonewt(){ stone = pounds = pds_left = 0; sort = FRAC_POUND;}Stonewt::~Stonewt(){}Stonewt operator+(Stonewt & s1,Stonewt & s2){ Stonewt s; s.pounds = s1.pounds + s2.pounds; s.stone = s.pounds/Stonewt::Lbs_per_stn; s.pds_left = int(s.pounds) % Stonewt::Lbs_per_stn + s.pounds - int(s.pounds); return s;}Stonewt operator-(Stonewt & s1,Stonewt & s2){ Stonewt s; s.pounds = s1.pounds - s2.pounds; s.stone = s.pounds/Stonewt::Lbs_per_stn; s.pds_left = int(s.pounds) % Stonewt::Lbs_per_stn + s.pounds - int(s.pounds); return s;}Stonewt operator*(Stonewt & s1,Stonewt & s2){ Stonewt s; s.pounds = s1.pounds * s2.pounds; s.stone = s.pounds/Stonewt::Lbs_per_stn; s.pds_left = int(s.pounds) % Stonewt::Lbs_per_stn + s.pounds - int(s.pounds); return s;}std::ostream & operator<<(std::ostream & os, const Stonewt & s1){ if(s1.sort == Stonewt::FRAC_POUND) os<<"The stone is "<<s1.stone<<" and the pounds is "<<s1.pds_left<<std::endl; else os<<"The pounds is "<<s1.pounds<<std::endl; return os;}
//main.cpp -- user-defined conversion#include <iostream>#include "stonewt.h"using std::cout;using std::cin;using std::endl;int main(){ Stonewt stone_one(120,102.2,Stonewt::FRAC_POUND); Stonewt stone_two(22,187.8,Stonewt::POUNDS); cout<<stone_one; cout<<stone_two; Stonewt stone_three = stone_one + stone_two; cout<<stone_three; stone_three = stone_one - stone_two; cout<<stone_three; stone_three = stone_one * stone_two; cout<<stone_three;}
//11.6
//stonewt.h -- definition for the Stonewt class#ifndef STONEWT__H__#define STONEWT__H__class Stonewt{private: static const int Lbs_per_stn = 14; int stone; //whole stones double pds_left;//fractional pounds double pounds;//entire weight in poundspublic: Stonewt(int stn,double lbs); Stonewt(double _pounds); Stonewt(); ~Stonewt(); friend bool operator<(Stonewt & s1,Stonewt & s2); friend bool operator<=(Stonewt & s1,Stonewt & s2); friend bool operator>(Stonewt & s1,Stonewt & s2); friend bool operator>=(Stonewt & s1,Stonewt & s2); friend bool operator==(Stonewt & s1,Stonewt & s2); friend bool operator!=(Stonewt & s1,Stonewt & s2); friend std::ostream & operator<<(std::ostream & os, const Stonewt & s1);};#endif
//stonewt.cpp#include <iostream>using std::cout;#include "stonewt.h"Stonewt::Stonewt(int stn,double lbs){ stone = int(lbs)/Lbs_per_stn + stn; pds_left = int(lbs) % Lbs_per_stn + lbs -int(lbs); pounds = lbs+ stn * Lbs_per_stn;}Stonewt::Stonewt(){ stone = pounds = pds_left = 0;}Stonewt::Stonewt(double _pounds){ stone = pds_left = 0; pounds = _pounds;}Stonewt::~Stonewt(){}bool operator>(Stonewt & s1,Stonewt & s2){ return s1.pounds > s2.pounds;}bool operator>=(Stonewt & s1,Stonewt & s2){ return s1.pounds >= s2.pounds;}bool operator<(Stonewt & s1,Stonewt & s2){ return s1.pounds < s2.pounds;}std::ostream & operator<<(std::ostream & os, const Stonewt & s1){ os<<s1.pounds; return os;}bool operator<=(Stonewt & s1,Stonewt & s2){ return s1.pounds <= s2.pounds;}bool operator==(Stonewt & s1,Stonewt & s2){ return s1.pounds == s2.pounds;}bool operator!=(Stonewt & s1,Stonewt & s2){ return s1.pounds != s2.pounds;}
//main.cpp -- user-defined conversion#include <iostream>#include "stonewt.h"using std::cout;using std::cin;using std::endl;int main(){ const int N = 6; Stonewt stonewt[N]= { Stonewt(12),Stonewt(4),Stonewt(7), }; for(int i = 3;i<6;i++) { cout<<"Please enter the Initialization data:"; double s_stone; cin>>s_stone; cin.get(); stonewt[i] = Stonewt(s_stone); } Stonewt s_example(11); static int max = 0; static int min = 0; static int count = 0; for(int i=0;i<N-1;i++) { max = stonewt[max]>stonewt[i+1]?max:i+1; min = stonewt[min]<stonewt[i+1]?min:i+1; } for(int i=0;i<N;i++) { if(stonewt[i]>=s_example) count++; } cout<<"The max element is "<<stonewt[max]<<", the min element is "<<stonewt[min]<<" and the number of elements greater than 11 is:"<<count<<endl;}
//11.7
//comlpex0.h#ifndef COMPLEX0__H__#define COMPLEX0__H__#include <iostream>class Complex{private: double real; double imaginary;public: Complex(); Complex(double _real,double _imaginary); Complex operator+(const Complex & c1); Complex operator-(const Complex & c1); Complex operator*(const Complex & c1); Complex operator*(double x); friend Complex operator*(double x,Complex & c1){return c1 * x;} Complex operator~(); friend std::istream & operator>>(std::istream & is,Complex & c1); friend std::ostream & operator<<(std::ostream & os,const Complex & c1);};#endif
//complex0.cpp#include "complex0.h"Complex::Complex(){ real = imaginary = 0;}Complex::Complex(double _real,double _imaginary){ real = _real; imaginary = _imaginary;}Complex Complex::operator+(const Complex & c1){ Complex c; c.real = real + c1.real; c.imaginary = imaginary + c1.imaginary; return c;}Complex Complex::operator-(const Complex & c1){ Complex c; c.real = real - c1.real; c.imaginary = imaginary - c1.imaginary; return c;}Complex Complex::operator*(const Complex & c1){ Complex c; c.real = real * c1.real - imaginary * c1.imaginary; c.imaginary = real * c1.imaginary + imaginary * c1.real; return c;}Complex Complex::operator*(double x){ Complex c; c.real = real * x; c.imaginary = imaginary * x; return c;}Complex Complex::operator~(){ Complex c; c.imaginary = - (*this).imaginary; c.real = (*this).real; return c;}std::istream & operator>>(std::istream & is,Complex & c1){ std::cout<<"real: "; if(is >> c1.real) { std::cout<<"imaginary: "; is >> c1.imaginary; } return is;}std::ostream & operator<<(std::ostream & os,const Complex & c1){ os<<"("<<c1.real<<","<<c1.imaginary<<"i)"<<std::endl; return os;}
//main.cpp#include <iostream>#include "complex0.h"using namespace std;int main(){ Complex a(3.0,4.0); Complex c; cout<<"Enter a complex number(q to quit):\n"; while(cin>>c) { cout<<"c is "<<c<<endl; cout<<"complex conjugate is "<<~c<<'\n'; cout<<"a is"<<a<<endl; cout<<"a + c is "<<a + c<<endl; cout<<"a - c is "<<a - c<<endl; cout<<"a * c is "<<a * c<<endl; cout<<"2 * c is "<<2 * c<<endl; cout<<"c * 2 is "<<c * 2<<endl; cout<<"Enter a complex number (q to quit):\n"; } cout<<"Done!\n"; return 0;}
阅读全文
0 0
- C.Primer.Plus(第六版)第11章 编程练习
- C.Primer.Plus(第六版)第10章 编程练习
- 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(第六版)第八章 编程练习
- CSDN-markdown编辑器参考
- 敏捷之MDE认知
- 监听浏览器后退事件,使其转向指定URL,控制某些页面不能返回
- 深度学习环境搭建:linux下 Ubuntu16.04+cuda8.0+cudnn+anaconda+tensorflow并配置远程访问jupyter notebook
- 算法概论课本第八章习题作业 8.8
- C.Primer.Plus(第六版)第11章 编程练习
- MediaPlayer.prepare() throws IllegalStateException
- hadoop集群环境的搭建
- HiveTSI和API编程
- MMU内存管理单元(3)-系统控制协处理器CP15
- matlab支持向量机
- Linux-视频监控系统(4)-摄像头子系统实现
- Java 并发工具包 java.util.concurrent 用户指南
- 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了