最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器

 更新時(shí)間:2020年11月25日 13:16:31   作者:persistence_s  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)四則混合運(yùn)算計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)四則混合運(yùn)算的計(jì)算器,供大家參考,具體內(nèi)容如下

計(jì)算器是帶括號(hào)的四則運(yùn)算實(shí)際上利用的是棧后進(jìn)先出的原則

轉(zhuǎn)換思想:

#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h" 
#include"stdlib.h" 
#include"string.h" 
#define maxsize 1024
typedef struct
{
 float data[maxsize];
 int top;
}Stack1;
void Initstack1(Stack1 *S)
{
 S = (Stack1*)malloc(sizeof(Stack1));
 S->top = -1;
}
int Push1(Stack1 *S, float ch)
{
 if (S->top == maxsize - 1)
  return 0;
 else
 {
  S->top++;
  S->data[S->top] = ch;
  return 1;
 }
}//入棧Push
int Pop1(Stack1 *S, float ch)
{
 if (S->top == -1)
  printf("棧上溢出!\n");
 else
  ch = S->data[S->top];
 S->top--;
 return 1;
}//出棧
typedef struct
{
 char data[maxsize];
 int top;
}Stack2;
void Initstack2(Stack2 *S)
{
 S = (Stack2*)malloc(sizeof(Stack2));
 S->top = -1;
}
int Push2(Stack2 *S, char ch)
{
 if (S->top == maxsize - 1)
  return 0;
 else
 {
  S->top++;
  S->data[S->top] = ch;
  return 1;
 }
}//入棧Push
int Pop2(Stack2 *S, char ch)
{
 if (S->top == -1)
  printf("棧上溢出!\n");
 else
  ch = S->data[S->top];
 S->top--;
 return 1;
}//出棧
int Comop(char ch) //判斷是否是運(yùn)算符
{
 switch (ch)
 {
 case'+':
 case'-':
 case'*':
 case'/':
 case'(':
 case')':
 case'#':
  return 1;
 default:
  return 0;
 }
}//判斷ch是否為運(yùn)算符
char Prior[7][7] =
{ // 運(yùn)算符優(yōu)先級(jí)表 
   // '+' '-' '*' '/' '(' ')' '#' 
 /*'+'*/{ '>', '>', '<', '<', '<', '>', '>' },
 /*'-'*/{ '>', '>', '<', '<', '<', '>', '>' },
 /*'*'*/{ '>', '>', '>', '>', '<', '>', '>' },
 /*'/'*/{ '>', '>', '>', '>', '<', '>', '>' },
 /*'('*/{ '<', '<', '<', '<', '<', '=', '< ' },
 /*')'*/{ '>', '>', '>', '>', ' ', '>', '>' },
 /*'#'*/{ '<', '<', '<', '<', '<', '> ', '=' },
};
int Opid(char op1)
{
 switch (op1)
 {
 case'+':return 0;
 case'-':return 1;
 case'*':return 2;
 case'/':return 3;
 case'(':return 4;
 case')':return 5;
 case'#':return 6;
 default:return -123456;
 }
}
char Precede(char op1, char op2) //優(yōu)先級(jí)比較
{
 int a, b;
 a = Opid(op1); b = Opid(op2);
 return(Prior[a][b]);
}
float Operation(float a, char op, float b)
{
 switch (op)
 {
 case '+':
  return b + a;
 case '-':
  return b - a;
 case '*':
  return b * a;
 case '/':
  return b / a;
 default:
  return -123456;
 }
}
void CreateExpression(char *exp)
{

 if (exp == NULL)
 {
  exit(1);
 }
 scanf("%s", exp);
}
void TransmitExpression(char *exp, char postexp[]) //中綴表達(dá)式轉(zhuǎn)換后綴表達(dá)式
{
 Stack2 FZ;
 Initstack2(&FZ);
 int i = 0;
 char x;
 FZ.top = -1;
 Push2(&FZ, '#');
 FZ.data[FZ.top] = '#';
 while (*exp != '\0')
 {
  if (!Comop(*exp))
  {
   while (*exp >= '0'&&*exp <= '9')//讀取一個(gè)數(shù)字串
   {
    postexp[i++] = *exp;
    exp++;
   }
   postexp[i++] = '#';
  }
  else
   switch (Precede(FZ.data[FZ.top], *exp))
  {
   case'<':
    Push2(&FZ, *exp);
    exp++;
    break;
   case'=':
    x = FZ.data[FZ.top];
    Pop2(&FZ, x);
    exp++;
    break;
   case'>':
    postexp[i++] = FZ.data[FZ.top];
    x = FZ.data[FZ.top];
    Pop2(&FZ, x);
    break;
  }
 }
 while (FZ.data[FZ.top] != '#')
 {
  postexp[i++] = FZ.data[FZ.top];
  x = FZ.data[FZ.top];
  Pop2(&FZ, x);
 }
 postexp[i] = '\0';
}
float EvaluateExpression(char *postexp) //后綴表達(dá)式的計(jì)算
{
 Stack1 SZ;
 Initstack1(&SZ);
 float a, b, d;
 SZ.top = -1;
 while (*postexp != '\0')
 {
  switch (*postexp)
  {
  case'+':
  case'-':
  case'*':
  case'/':
   a = SZ.data[SZ.top];
   Pop1(&SZ, a);
   b = SZ.data[SZ.top];
   Pop1(&SZ, b);
   Push1(&SZ, Operation(a, *postexp, b));
   break;
  default:
   d = 0;
   while (*postexp >= '0'&&*postexp <= '9')
   {
    d = 10 * d + *postexp - '0';
    postexp++;
   }
   Push1(&SZ, d);
   SZ.data[SZ.top] = d;

   break;
  }
  postexp++;
 }
 return(SZ.data[SZ.top]);
}
int Error(char *exp) //錯(cuò)誤表達(dá)式判斷
{
 int i = 0;
 while (exp[i] != '\0')
 {
  if (
   ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i + 1] == ')'))
   || ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i - 1] == '('))
   || (exp[i] == ')'&&exp[i + 1] == '(')
   || (exp[i] == '('&&exp[i + 1] == ')')
   || ((exp[i] == ')') && exp[i + 1] >= '0'&&exp[i + 1] <= '9')
   || (exp[i] >= '0'&&exp[i] <= '9'&&exp[i + 1] == '(')
   || (exp[0] == '+' || exp[0] == '-' || exp[0] == '*' || exp[0] == '/' || exp[0] == ')')
   || ((exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') && (exp[i + 1] == '+' || exp[i + 1] == '-' || exp[i + 1] == '*' || exp[i + 1] == '/'))
   || (exp[i] == '/'&&exp[i + 1] == '0')
   )
   return 1;
  else
  if (exp[i] == '\0')
   return 0;
  i++;
 }
 return 0;
}
void menu()
{
 printf("\t\t--------------------------------------------\n");
 printf("\t\t|     計(jì)算器     |\n");
 printf("\t\t|    ----------------   |\n");
 printf("\t\t|    |    |   |\n");
 printf("\t\t|    ----------------   |\n");
 printf("\t\t|    1 2 3 +    |\n");
 printf("\t\t|    4 5 6 -    |\n");
 printf("\t\t|    7 8 9 *    |\n");
 printf("\t\t|    0 ( ) /    |\n");
 printf("\t\t--------------------------------------------\n");
 printf("\t\t 請(qǐng)輸入你要進(jìn)行的操作:\n");
 printf("\t\t a表達(dá)式求值 b清空 c退出\n");
}
void clear()
{
 system("cls");
 menu();
}
void Quit()
{
 system("cls");
 exit(1);
}
void main()
{
 char c;
 char exp[maxsize];
 char postexp[maxsize] = { 0 };
 menu();
 while (1)
 {
  scanf("%c", &c);
  switch (c)
  {
  case 'a':
  sr :
   printf("請(qǐng)輸入要計(jì)算的表達(dá)式:\n");
   CreateExpression(exp);
   if (!Error(exp))
   {
    TransmitExpression(exp, postexp);
    printf("后綴表達(dá)式為:%s\n", postexp);
    printf("表達(dá)式結(jié)果為:%s=", exp);
    printf("%g\n", EvaluateExpression(postexp));
    break;
   }
   else
   if (Error(exp))
   {
    printf("您輸入的表達(dá)式有誤!\n");
    goto sr;//goto語(yǔ)句在循環(huán)體里進(jìn)行跳轉(zhuǎn)
   }
  case'b':
   clear();
   break;
  case'c':
   Quit();
   break;
  }
 }
 system("pause");
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++友元函數(shù)與友元類的深入解析

    c++友元函數(shù)與友元類的深入解析

    友元函數(shù)的特點(diǎn)是能夠訪問(wèn)類中的私有成員的非成員函數(shù)。友元函數(shù)從語(yǔ)法上看,它與普通函數(shù)一樣,即在定義上和調(diào)用上與普通函數(shù)一樣
    2013-07-07
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)鏈表隊(duì)列的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++?QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息

    C++?QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息

    這篇文章主要為大家詳細(xì)介紹了如何利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫(kù),獲取當(dāng)前windows電腦下的網(wǎng)卡信息,需要的可以參考下
    2024-01-01
  • C++的友元和內(nèi)部類你了解嗎

    C++的友元和內(nèi)部類你了解嗎

    這篇文章主要為大家介紹了C++的友元和內(nèi)部類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • QT利用QPdfWriter實(shí)現(xiàn)繪制PDF(支持表單輸出)

    QT利用QPdfWriter實(shí)現(xiàn)繪制PDF(支持表單輸出)

    這篇文章主要為大家詳細(xì)介紹了QT如何利用QPdfWriter實(shí)現(xiàn)繪制PDF,并可以支持表單輸出。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01
  • C++中事件機(jī)制的簡(jiǎn)潔實(shí)現(xiàn)及需要放棄的特性

    C++中事件機(jī)制的簡(jiǎn)潔實(shí)現(xiàn)及需要放棄的特性

    事件模型是被廣泛使用的好東西,但是C++標(biāo)準(zhǔn)庫(kù)里沒(méi)有現(xiàn)成的,現(xiàn)在VC11可以用在XP下了,那么就痛快的拿起C++11提供的先進(jìn)設(shè)施組合出一個(gè)輕便的實(shí)現(xiàn)吧感興趣的朋友可以了解下,或許對(duì)你有所幫助
    2013-02-02
  • c++基礎(chǔ)語(yǔ)法:普通繼承

    c++基礎(chǔ)語(yǔ)法:普通繼承

    基類成員的private成員不但對(duì)于對(duì)象是不可見(jiàn)的,對(duì)于派生類也是不可見(jiàn)的,只能被基類成員或者友元訪問(wèn)
    2013-09-09
  • C++類與對(duì)象之運(yùn)算符重載詳解

    C++類與對(duì)象之運(yùn)算符重載詳解

    運(yùn)算符重載的方法是定義一個(gè)重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時(shí),系統(tǒng)就自動(dòng)調(diào)用該函數(shù),以實(shí)現(xiàn)相應(yīng)的運(yùn)算。也就是說(shuō),運(yùn)算符重載是通過(guò)定義函數(shù)實(shí)現(xiàn)的
    2021-10-10
  • C++中std::thread{}和std::thread()用法

    C++中std::thread{}和std::thread()用法

    std::thread{}和std::thread()在C++中都可以用于創(chuàng)建線程對(duì)象,但std::thread{}作為C++11引入的統(tǒng)一初始化,更推薦使用,因?yàn)樗踩⒏鬃x,且避免了隱式類型轉(zhuǎn)換
    2024-11-11
  • C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn)

    C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn)

    這篇文章主要介紹了C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

凤庆县| 武邑县| 周至县| 金堂县| 晋宁县| 诏安县| 南溪县| 珠海市| 游戏| 城步| 察哈| 茂名市| 腾冲县| 江陵县| 连南| 观塘区| 邵阳市| 舞阳县| 辉县市| 郸城县| 东丰县| 山阴县| 澄江县| 志丹县| 永丰县| 同德县| 城口县| 泰安市| 内乡县| 贵定县| 尉氏县| 二连浩特市| 道真| 夏津县| 东宁县| 石河子市| 呼伦贝尔市| 洛隆县| 新竹县| 清远市| 拜城县|