程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 簡略完成C++單數盤算器

簡略完成C++單數盤算器

編輯:關於C++

簡略完成C++單數盤算器。本站提示廣大學習愛好者:(簡略完成C++單數盤算器)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略完成C++單數盤算器正文


本文實例為年夜家分享了簡略完成C++單數盤算器的詳細代碼,供年夜家參考,詳細內容以下

1.有關盤算器的功效
 A,完成多個單數(包含實數)的加減乘除,年夜小比擬, 
 B.完成十進制實數的進制轉換,可以轉換隨意率性進制 

2.有關設計的道理
 A.單數盤算的部門,采取運算符的重載,停止單數的加減乘除和年夜小比擬
 關於輸出輸入,(>>和<<),加減乘除運算停止重載。
 輸出的重載,完成a+bi情勢的單數的輸出。
 輸入的重載,完成實數的輸入(完成特別的只輸入實部虛部之類的)。
 加減乘除的重載,完成有關單數的運算。
 B.進制轉換的部門,采取進制轉換的辦法,完成10進制的隨意率性進制轉換。展轉相除,記載每次的余數,存儲在數組中來記載轉換獲得的數字 

3.有關設計的特色
 A.采取函數對所完成功效停止封裝。
 B.采取運算符的重載,使單數運算加倍便利
 C.斟酌一切的輸出輸入情形,對選擇的操作,輸出單數的類型等停止斷定與響應的處置
 D.法式在完成今後,接收年夜家建議,標准代碼格局,本身在制造進程有所收成也有所進修。

上面是有關代碼的完成:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <ctime>

#define EPS 1e-5    //界說精度常數

using namespace std;   //應用尺度空間定名std

namespace NameCCom   //界說定名空間NameCCom
{
 class CCom    //界說一個CCom類
 {
 public:
  double Real,Image;//實部和虛部
 CCom(double real=0,double image=0)   //結構函數
 {
  Real=real;
  Image=image;
 }
  friend istream & operator>>(istream &is,CCom &com);  //重載輸出
  friend ostream & operator<<(ostream &os,CCom &com);  //重載輸入
  CCom operator+(CCom &com);        //加法重載
  CCom operator-(CCom &com);        //減法重載
  CCom operator*(CCom &com);        //乘法重載
  CCom operator/(CCom &com);        //除法重載
  CCom operator+=(CCom &com);        //加法賦值重載
  CCom operator-=(CCom &com);        //減法賦值重載
  CCom operator*=(CCom &com);       //乘法賦值重載
  CCom operator/=(CCom &com);       //除法賦值重載
 };

 struct User   //界說用戶構造體類型
 {
 char szName[20];  //用戶名
 }user;     //界說全局變量


 int CCom::operator>(CCom &com) //重載運算符">",比擬模的年夜小
 {
 if(mod()>com.mod())
  return 1; //若年夜,則前往1
 else
  return 0; //不然,則前往0
 }
 int CCom::operator<(CCom &com) //重載運算符"<",比擬模的年夜小
 {
 if(mod()<com.mod())
  return 1;   //若小,則前往1
 else
  return 0;   //不然,則前往0
 }
 int CCom::operator!=(CCom &com) //重載運算符"!=",分離斷定單數的實部和虛部
 {
 if(*this==com)
  return 0;   //若相等,則前往0
 else
  return 1;   //不然,則前往1
 }

 istream & operator>>(istream &is,CCom &com) //重載輸出,可以輸出a+bi的情勢
 {
 cout<<"請輸出單數:";
 char s[80];
 is>>s;     //用字符串的情勢接收單數
 int len=strlen(s);  //求出字符串的長度
 int n=0,sign=1; //n為以後從字符串中提掏出來的數字,初始化為0;sign是標志符號,初始化為正
 com.Image=com.Real=0;
 for(int k=0;k<len;k++) //斷定接收的字符串能否正當
 {
  if((s[k]<'0' || s[k]> '9') && (s[k]!='+' && s[k]!='-' && s[k]!='i'))
  {
  cout<<"error"<<endl;
  return is;   //毛病,輸入失足信息並前往
  }
 }
 for(int k=0;k<len;)  //次序辨認字符串中各字符
 {
  if(n!=0 &&(s[k]=='-'||s[k]=='+')) //以後字符能否是符號位
  {
  com.Real=sign*n; //sign是符號位,且n!=0,即n已被賦值,注解以後讀取的是虛部的符號
  n=0;    //將原n*sign值賦給實部,將n清零,預備接收虛部的值
  }
  if(s[k]=='-') //以後字符為負號
  {
  sign=-1;k++;  //給符號標記賦值
  }
  if(s[k]=='+') //以後字符為正號
  {
  sign=1;k++;  //給符號標記賦值
  }
  if(s[k]=='i') //以後字符為'i'
  {
  if(k!=len-1)  //斷定字符'i'能否為字符串中作後一個字符
   cout<<"error\n"; //假如不是,解釋單數數據格局毛病
  else
   com.Image=sign*n; //假如是最初一個字符,單數對象已接收完,用sign*n為虛部賦值
  break;
  }
  while(s[k]>='0' && s[k]<='9') //假如以後字符在0~9之間,將數字字符轉換成數字數值
  {
  n=n*10+s[k]-'0';
  k++;
  }
 }
 if(s[len-1]!='i' && n!=0)  //假如最初一個字符不是'i',表現單數對象內只要實部,沒有虛部
 {
  com.Real=n*sign;
 }
 return is;
 }

 ostream & operator<<(ostream &os,CCom &com) //重載輸出
 {
 if(fabs(com.Image)<EPS)  // 假如虛部為0
  os<<com.Real;   //只輸入實部
 else if((fabs(com.Real)<EPS)) //假如實部為0
   os<<com.Image<<"i"; //只輸入虛部
   else if(com.Image>0)
    os<<com.Real<<"+"<<com.Image<<"i";
    else
    os<<com.Real<<com.Image<<"i"; //虛部為正
 return os;
 }

 CCom CCom::operator+(CCom &com) //加法重載
 {
 CCom sum;
 sum.Real=Real+com.Real;  //實部相加
 sum.Image=Image+com.Image; //虛部相加
 return sum;
 }
 CCom CCom::operator-(CCom &com) //減法重載
 {
 CCom sub;
 sub.Real=Real-com.Real;  //實部相減
 sub.Image=Image-com.Image;  //虛部相減
 return sub;
 }
 CCom CCom::operator*(CCom &com) //乘法重載
 {
 CCom multi;
 multi.Real=Real*com.Real-Image*com.Image; //實部乘積
 multi.Image=Real*com.Image+Image*com.Real; //虛部乘積
 return multi;
 }
 CCom CCom::operator/(CCom &com) //除法重載
 {
 CCom div;
 div.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //實部除積
 div.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虛部除積
 return div;
 }
 CCom CCom::operator+=(CCom &com) //重載加法賦值
 {
 Real=Real+com.Real;    //實部相加
 Image=Image+com.Image;   //虛部相加
 return *this;
 }
 CCom CCom::operator-=(CCom &com) //重載減法賦值
 {
 Real=Real-com.Real;   //實部相減
 Image=Image-com.Image;   //虛部相減
 return *this;
 }
 CCom CCom::operator*=(CCom &com) //重載乘法賦值
 {
 double nReal=Real*com.Real-Image*com.Image; //實部乘積
 double nImage=Real*com.Image+Image*com.Real; //虛部乘積
 Real=nReal;
 Image=nImage;
 return *this;
 }
 CCom CCom::operator/=(CCom &com) //重載除法賦值
 {
 double nReal=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image);  //實部除積
 double nImage=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image);  //虛部除積
 Real=nReal;
 Image=nImage;
 return *this;
 }
 int CCom::operator==(CCom &com)  //重載等於
 {
 if(Real==com.Real && Image==com.Image)
  return 1;
 else
  return 0;
 }

void Add()    //單數加法運算函數
{
  CCom num1,num2,sum,Zero(0,0);
  cout<<"加法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n";
  cout<<"第一個單數:";
  cin>>num1;
  cout<<"第二個單數:";
  cin>>num2;
  sum=num1+num2;
  cout<<"第三個單數:";
  cin>>num1;
  int i=4;
  while(!(num1==Zero))
  {
  sum=sum+num1;
  cout<<"第"<<i<<"個單數:";
  cin>>num1;
  i++;
  }
  cout<<"加法成果是:"<<sum<<endl;
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void Sub()   //單數減法運算函數
{
  CCom num1,num2,sub,Zero(0,0);
  cout<<"起碼輸出兩個單數,而且以0停止\n";
  cout<<"第1個單數:";
  cin>>num1;
  cout<<"第2個單數:";
  cin>>num2;
  sub=num1-num2;
  cout<<"第3個單數:";
  cin>>num1;
  int i=4;
  while(!(num1==Zero))
  {
   sub=sub-num1;
   cout<<"第"<<i<<"個單數:";
   cin>>num1;
   i++;
  }
  cout<<"減法成果是:"<<sub<<endl;
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void Mul()      //單數乘法運算函數
{
  CCom num1,num2,mul,Zero(0,0);
  cout<<"乘法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n";
  cout<<"第一個單數:";
  cin>>num1;
  cout<<"第二個單數:";
  cin>>num2;
  mul=num1*num2;
  cout<<"第三個單數:";
  cin>>num1;
  int i=4;
  while(!(num1==Zero))
  {
   mul*=num1;
   cout<<"第"<<i<<"個單數:";
   cin>>num1;
   i++;
  }
  cout<<"乘法成果是:"<<mul<<endl;
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void Div()      //單數除法運算函數
{
  CCom num1,num2,div,Zero(0,0);
  cout<<"除法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n";
  cout<<"第一個單數:";
  cin>>num1;
  cout<<"第二個單數:";
  cin>>num2;
  div=num1/num2;
  cout<<"第三個單數:";
  cin>>num1;
  int i=4;
  while(!(num1==Zero))
  {
  div/=num1;
  cout<<"第"<<i<<"個單數:";
  cin>>num1;
  i++;
  }
  cout<<"除法成果是:"<<div<<endl;
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void Compare()    //兩單數比擬函數
{
  CCom num1,num2;
  cout<<"請輸出兩個單數\n";
  cout<<"第一個單數:";
  cin>>num1;
  cout<<"第二個單數\n";
  cin>>num2;
  if(num1==num2)
  cout<<"這兩個單數相等\n";
  else if(num1>num2)
  cout<<num1<<"的模年夜於"<<num2<<"的模\n";
  else if(num1<num2)
  cout<<num2<<"的模年夜於"<<num1<<"的模\n";
  else
  cout<<"這兩個單數的模相等\n";
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void Jinzhi()    //完成進制轉換
{
  long n;
  int p,c,m=0,s[100];
  cout<<"輸出要轉換的數字:\n";
  cin>>n;
  cout<<"輸出要轉換的進制:\n";
  cin>>p;
  cout<<"("<<n<<")10="<<"(";

  while (n!=0)//數制轉換,成果存入數組s[m]
  {
  c=n%p;
  n=n/p;
  m++;s[m]=c; //將余數按次序存入數組s[m]中
  }
  for(int k=m;k>=1;k--)//輸入轉換後的序列
  {
  if(s[k]>=10) //若為十六進制等則輸入絕對應的字母
 cout<<(char)(s[k]+55);
  else   //不然直接輸入數字
 cout<<s[k];
  }
  cout<<")"<<p<<endl;
  cout<<"請按隨意率性鍵持續\n";
  cin.get();
  cin.get();
}

void outpt()
{
 char szName[20];
 cout<<"請輸出您的姓名:";
 cin>>szName;
 system("cls");
 do
 {
  system("cls");
  cout<<"\t這是一個盤算器,可完成以下功效,請按對應的按鍵(0-6)\n\n\n";
  cout<<"\t*----------Hpioneer小盤算器菜單---------*\n";
  cout<<"\t|  1:多個單數加法,以0停止   |\n";
  cout<<"\t|  2:多個單數減法,以0停止   |\n";
  cout<<"\t|  3:多個單數乘法,以0停止   |\n";
  cout<<"\t|  4:多個單數除法,以0停止   |\n";
  cout<<"\t|  5:單數比擬      |\n";
  cout<<"\t|  6:進制轉換      |\n";
  cout<<"\t|  0:加入法式      |\n";
  cout<<"\t|  請您選擇:      |\n";
  cout<<"\t*---------------------------------------*\n";
}

}

using namespace NameCCom;

int main(void) //主函數開端,void可以不寫
{
 int h;
 output();
 cin>>h;//每步操作
 if(h==1)  //用戶選1則挪用Add()函數
  Add();
 else if(h==2) //用戶選2則挪用Sub()函數
  Sub();
 else if(h==3) //用戶選3則挪用Mul()函數
  Mul();
 else if(h==4) //用戶選4則挪用Di

  v()函數
  Div();
 else if(h==5)  //用戶選6則挪用Compare()函數
  Compare();
 else if(h==6) //用戶選7則挪用函數Jinzhi()函數
  Jinzhi();
 else if(h==0)
  cout<<"異常感激您的應用\n";
 else
  break;
 }
 return 0;
}

以上就是本文的全體內容,願望對年夜家進修C++法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved