日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么用c語言實(shí)現(xiàn)表達(dá)式求值

在C語言中,實(shí)現(xiàn)表達(dá)式求值可以通過以下步驟完成:

為連城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及連城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、連城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

1、詞法分析:將輸入的字符串分解成一個個的標(biāo)記(token),這些標(biāo)記可以是數(shù)字、運(yùn)算符、括號等。

2、語法分析:根據(jù)預(yù)先定義的語法規(guī)則,將這些標(biāo)記組合成一個抽象語法樹(AST)。

3、語義分析:遍歷這個抽象語法樹,檢查其是否符合語義規(guī)則,檢查除數(shù)是否為零,檢查括號是否正確配對等。

4、計(jì)算:遍歷這個抽象語法樹,進(jìn)行實(shí)際的計(jì)算。

以下是一個簡單的實(shí)現(xiàn),只支持加減乘除和括號,沒有考慮錯誤處理和優(yōu)化。

#include 
#include 
#include 
typedef struct Node {
    char op;
    struct Node* left;
    struct Node* right;
} Node;
Node* newNode(char op) {
    Node* node = (Node*)malloc(sizeof(Node));
    node>op = op;
    node>left = NULL;
    node>right = NULL;
    return node;
}
int evaluate(Node* root) {
    if (root == NULL) return 0;
    if (root>op == '+') return evaluate(root>left) + evaluate(root>right);
    if (root>op == '') return evaluate(root>left) evaluate(root>right);
    if (root>op == '*') return evaluate(root>left) * evaluate(root>right);
    if (root>op == '/') return evaluate(root>left) / evaluate(root>right);
    return atoi(&root>op);
}
Node* constructTree(char* postfix) {
    Node* stack[strlen(postfix)];
    int top = 1;
    for (int i = 0; i < strlen(postfix); i++) {
        if (isdigit(postfix[i])) {
            stack[++top] = newNode(postfix[i]);
        } else {
            Node* t = newNode(postfix[i]);
            t>right = stack[top];
            t>left = stack[top];
            stack[++top] = t;
        }
    }
    return stack[top];
}
void inorder(Node* root) {
    if (root != NULL) {
        inorder(root>left);
        printf("%c ", root>op);
        inorder(root>right);
    }
}
int main() {
    char postfix[] = "231*+9";
    Node* root = constructTree(postfix);
    printf("Infix expression isn");
    inorder(root);
    printf("nEvaluation of expression is %d", evaluate(root));
    return 0;
}

這個程序首先將后綴表達(dá)式轉(zhuǎn)換為抽象語法樹,然后遍歷這個樹進(jìn)行計(jì)算,注意,這個程序假設(shè)輸入的后綴表達(dá)式是有效的,沒有進(jìn)行錯誤檢查。


文章名稱:怎么用c語言實(shí)現(xiàn)表達(dá)式求值
標(biāo)題URL:http://www.dlmjj.cn/article/cojddeo.html