-
大小: 849KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-08
- 語言: 其他
- 標(biāo)簽: 數(shù)據(jù)結(jié)構(gòu)??棧??
資源簡介
·問題描述
表達(dá)式2*(9+6/3-5)+4,稱為中綴表達(dá)式,表示成2 9 6 3 / + 5 - * 4 +稱為后綴表達(dá)式,表示成+ * 2 - + 9 / 6 3 5 4稱為前綴表達(dá)式。
·基本要求
將中綴表達(dá)式,轉(zhuǎn)換為后綴表達(dá)式和前綴表達(dá)式,再分別計算轉(zhuǎn)換后的表達(dá)式值,比較兩個計算結(jié)果,判斷轉(zhuǎn)換正確性和計算正確性。
·編程
(1)讀入中綴表達(dá)式,表達(dá)式的數(shù)據(jù)可以是實型、整型;
(2)轉(zhuǎn)換為后綴表達(dá)式,輸出和保存;
(3)轉(zhuǎn)換為前綴表達(dá)式,輸出和保存;
(4)完成后綴和前綴表達(dá)式的計算,輸出和比較計算結(jié)果,判斷處理的正確性;
·輸出要求與格式
按字符串格式輸入中綴表達(dá)式,如2.85*(9.3+6.4/2-5.13)+4.412
·輸出要求與格式
輸出轉(zhuǎn)換后的后綴、前綴表達(dá)式;
完成計算,輸出計算結(jié)果,和比較結(jié)論;

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