// Complex.cpp #include "StdAfx.h" #include "Complex.h" #include <iostream> using namespace std; Complex::Complex(double r, double i) { real = r; imaginary = i; } Complex::~Complex(void) { } void Complex::Add(Complex &c) { real += c.real; imaginary += c.imaginary; } void Complex::Subtract(Complex &c) { real -= c.real; imaginary -= c.imaginary; } void Complex::Multiply(Complex &c) { real = real * c.real - imaginary * c.imaginary; imaginary = real * c.imaginary + imaginary * c.real; } void Complex::Divide(Complex &c) { if ( c.real != 0 || c.imaginary != 0) { double fenmu = c.real * c.real + c.imaginary * c.imaginary; real = real * c.real + imaginary * c.imaginary; real /= fenmu; imaginary = imaginary * c.real - real * c.imaginary; imaginary / fenmu; } else { cout << "Cannot divide a number by zero.\n"; } } void Complex::OutputValue() { if (real == 0 && imaginary == 0) cout << "0\n"; else if (real == 0) { if (imaginary > 0) cout << imaginary << "*i\n"; else cout << -imaginary << "*i\n"; } else if (imaginary == 0) cout << real << "\n"; else { if (imaginary > 0) cout << real << " + " << imaginary << "*i\n"; else cout << real << " - " << -imaginary << "*i\n"; } }
//Complex.h #pragma once class Complex { public: Complex(double = 0, double = 0); ~Complex(void); void Add(Complex &); void Subtract(Complex &); void Multiply(Complex &); void Divide(Complex &); void OutputValue(); private: float real; float imaginary; };
// main.cpp : // #include "stdafx.h" #include <stdlib.h> #include "Complex.h" #include <iostream> #include <ctype.h> #define size 12 using namespace std; bool IsDouble(char a[]) { int i; int pointsNum = 0; if ( !isdigit(a[0]) && a[0] != '-' && a[0] != '.') return false; if (a[0] == '.') pointsNum = 1; for (i = 1; i < size, a[i] != '\0' ; i ++ ) { if ( !isdigit(a[i]) && a[i] != '.') return false; else if (a[i] == '.') pointsNum ++; } if (pointsNum <= 1 && i < 12) return true; } int _tmain(int argc, _TCHAR* argv[]) { char rr[size], ii[size]; double r, i; cout << "Enter complex number c1.\n"; cout << "real part: "; cin >> rr; while (!IsDouble(rr)) { cout << "Sorry, please input a real number"; cin >> rr; } r = atof(rr); cout << "imaginary part: "; cin >> ii; while (!IsDouble(ii)) { cout << "Sorry, please input a real number"; cin >> ii; } i = atof(ii); Complex c1(r, i); ////////// cout << "Enter complex number c2.\n"; cout << "real part: "; cin >> rr; while (!IsDouble(rr)) { cout << "Sorry, please input a real number"; cin >> rr; } r = atof(rr); cout << "imaginary part: "; cin >> ii; while (!IsDouble(ii)) { cout << "Sorry, please input a real number"; cin >> ii; } i = atof(ii); Complex c2(r, i); /////// Complex tempc1, tempc2; tempc1 = c1; tempc2 = c2; cout << "\nThe value c1 + c2 is :"; c1.Add(c2); c1.OutputValue(); ///////// c1 = tempc1; c2 = tempc2; cout << "\nThe value c1 - c2 is :"; c1.Subtract(c2); c1.OutputValue(); ///////// c1 = tempc1; c2 = tempc2; cout << "\nThe value c1 * c2 is :"; c1.Multiply(c2); c1.OutputValue(); ///////// c1 = tempc1; c2 = tempc2; cout << "\nThe value c1 / c2 is :"; c1.Divide(c2); c1.OutputValue(); ///////// c1 = tempc1; c2 = tempc2; system("pause"); return 0; }
This comment has been removed by the author.
ReplyDelete另外stdafx.h是
ReplyDelete#pragma once
#include "targetver.h"
#include
#include
stdafx.cpp是
#include "stdafx.h"
targetver.h是
#pragma once
// 下列巨集會定義最低平台需求。最低平台需求是指各種版本的Windows、Internet Explorer 中,具備執行應用程式所需功能的最早版本。巨集的作用,是在指定或更新版本的平台上啟用所有可用的功能。
// 如果您有必須優先選取的平台,請修改下列定義。
參考 MSDN 取得不同平台對應值的最新資訊。
#ifndef _WIN32_WINNT // 指定最低平台需求為 Windows Vista。
#define _WIN32_WINNT 0x0600 // 將它變更為針對 Windows 其他版本的適當值。
#endif