資源簡介
·問題描述
表達式2*(9+6/3-5)+4,稱為中綴表達式,表示成2 9 6 3 / + 5 - * 4 +稱為后綴表達式,表示成+ * 2 - + 9 / 6 3 5 4稱為前綴表達式。
·基本要求
將中綴表達式,轉換為后綴表達式和前綴表達式,再分別計算轉換后的表達式值,比較兩個計算結果,判斷轉換正確性和計算正確性。
·編程
(1)讀入中綴表達式,表達式的數據可以是實型、整型;
(2)轉換為后綴表達式,輸出和保存;
(3)轉換為前綴表達式,輸出和保存;
(4)完成后綴和前綴表達式的計算,輸出和比較計算結果,判斷處理的正確性;
·輸出要求與格式
按字符串格式輸入中綴表達式,如2.85*(9.3+6.4/2-5.13)+4.412
·輸出要求與格式
輸出轉換后的后綴、前綴表達式;
完成計算,輸出計算結果,和比較結論;

代碼片段和文件信息
#include?
#include?
#include
#include
#include
#define?MAX?100
typedef?struct
{
????char?sign;//運算符
????double?num;//運算數
????int?flag;//flag=0時表示為運算符、flag=1時表示為運算數
}?Exp;
typedef?struct
{
????char?sign[MAX];
????double?num[MAX];
????int?top;
}?Stack;//運算符棧&運算數棧
void?IniteStack(Stack*?s);//對棧進行初始化
void?Pushc(Stack*?schar?c);//運算符進棧操作
void?Pushn(Stack*?sfloat?n);//運算數進棧操作
void?Pop(Stack*?s);//彈棧
void?Output(Exp?expression[]int?length);//輸出表達式
int?Compare_pre(char?c1char?c2);//前綴表達式運算符優先級比較(大于等于)
int?Compare_post(char?c1char?c2);//后綴表達式運算符優先級比較(大于)
void?PostfixExp(Stack*?s_signExp?mid[]Exp?later[]int?mid_lengthint*?later_length);//中綴表達式轉后綴表達式
void?Instead(Stack*?s_numfloat?n);//代替函數
void?Calculate_post(Stack*?s_numExp?later[]int?later_length);//根據后綴表達式求值
void?Reverse(Exp?front[]int?front_length);//將求得的前綴表達式反轉
void?PrefixExp(Stack*?s_signExp?mid[]Exp?front[]int?mid_lengthint*?front_length);//中綴表達式轉前綴表達式
void?Calculate_pre(Stack*?s_numExp??front[]int?later_length);//根據前綴表達式求值
int?main()
{
????Stack*?s_sign=(Stack*)malloc(sizeof(Stack));
????Stack*?s_num=(Stack*)malloc(sizeof(Stack));
????Exp?front[MAX]later[MAX]mid[MAX];
????char??input[MAX];
????char?sign[MAX];
????int?length_inputij;
????int?mid_lengthlater_lengthfront_length;//記錄轉換后的表達式的長度
????int?num_length;//記錄轉換過程中所計算的數的長度
????double?num;//記錄轉換過程中所計算數值
????int?temp;
????float?post_numpre_num;
????int?minus_flag;
????IniteStack(s_num);
????IniteStack(s_sign);
????printf(“任務36:表達式的輸入、轉換與計算\n“);
????printf(“表達式輸入格式要求:\n\t1、當輸入負數時,請用()將負數括起來(表達式第一位為負號除外)例如:-1+2、2+(-1);\n\t2、輸入數值不得超過五位小數;\n\t3、輸入的運算符必須為英文且僅限加減乘除運算(+、-、*、/);\n\t4、回車鍵完成表達式的輸入“);
????printf(“\n\n請輸入符合格式要求的原中綴表達式:\n“);
????scanf(“%s“input);
????length_input=strlen(input);
????mid_length=0;
????for(i=0;?i ????{
????????if((input[0]<48||input[0]>57)&&input[0]!=45&&input[0]!=40)
????????{
????????????printf(“表達式輸入格式有誤,程序停止。\n“);
????????????exit(0);
????????}
????????if((input[i]>47&&input[i]<58)||(i!=0&&input[i-1]==‘(‘&&input[i]==45)||(i==0&&input[i]==45))//輸入為運算數
????????{
????????????if(input[i]==45)//此時-為單目運算符,負號
????????????{
????????????????minus_flag=-1;
????????????????i++;
????????????}
????????????else?minus_flag=1;
????????????num_length=0;
????????????num=0.0;
????????????while(input[i]<=57&&input[i]>=48)
????????????{
????????????????num_length++;
????????????????i++;
????????????}
????????????while(num_length)//計算整數部分
????????????{
????????????????num+=(double)(input[i-num_length]-48)*pow(10num_length-1);
????????????????num_length--;
????????????}
????????????if(input[i]==46)//小數
????????????{
????????????????i++;
????????????????num_length=0;
????????????????temp=0;
????????????????while(input[i]<=57&&input[i]>=48)
????????????????{
????????????????????num_length++;
????????????????????i++;
???????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-17?11:23??中綴表達式的轉換(前綴&后綴)\
?????文件???????55808??2018-09-06?11:15??中綴表達式的轉換(前綴&后綴)\~WRL0005.tmp
?????文件??????938496??2018-09-06?20:53??中綴表達式的轉換(前綴&后綴)\~WRL3981.tmp
?????文件???????78848??2018-09-07?10:29??中綴表達式的轉換(前綴&后綴)\中綴表達式的轉換.vsd
?????文件???????65024??2018-09-07?10:37??中綴表達式的轉換(前綴&后綴)\表達式求值.vsd
?????目錄???????????0??2018-11-17?11:22??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\
?????文件???????13350??2018-09-10?15:00??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\main.c
?????文件???????36854??2018-09-10?15:01??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\main.exe
?????文件????????8098??2018-09-10?15:01??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\main.o
?????文件????????1248??2018-09-04?15:25??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\表達式輸入、轉換與計算.cbp
?????文件?????????358??2018-09-04?16:23??中綴表達式的轉換(前綴&后綴)\表達式輸入、轉換與計算\表達式輸入、轉換與計算.layout
?????文件????????1131??2018-09-04?13:49??中綴表達式的轉換(前綴&后綴)\題目.txt
評論
共有 條評論