【PTA數據結構 | C語言版】后綴表達式求值

本專欄持續輸出數據結構題目集,歡迎訂閱。

文章目錄

    • 題目
    • 代碼

題目

請編寫程序,求給定的后綴表達式的值。

輸入格式:
輸入在一行中給出一個非空后綴表達式,其中操作數為 int 型整數,操作符包括加、減、乘、除、取模。各項之間以空格分隔。表達式字符串(包括空格)長度小于 1000。題目保證正確計算的過程中不會產生溢出。

輸出格式:
在一行中輸出后綴表達式的值。注意全部計算都是整數運算,結果僅取整數。
以下情況需要輸出錯誤信息:

計算除法時發現分母為 0,輸出 錯誤:除法操作分母為零。;
計算取模時發現除數為 0,輸出 錯誤:取模操作除數為零。;
發現表達式錯誤時,輸出 錯誤:表達式不規范。;
無法正確計算出結果時,輸出 10^9。

輸入樣例 1:
23 16 18 2 * 11 / 117 5 % + - +

輸出樣例 1:
34

輸入樣例 2:
23 0 %

輸出樣例 2:
錯誤:取模操作除數為零。
1000000000

代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>#define MAX_STACK_SIZE 1000
#define ERROR_VALUE 1000000000typedef struct {int data[MAX_STACK_SIZE];int top;
} Stack;void initStack(Stack *s) {s->top = -1;
}int isEmpty(Stack *s) {return s->top == -1;
}void push(Stack *s, int value) {s->data[++(s->top)] = value;
}int pop(Stack *s) {return s->data[(s->top)--];
}int peek(Stack *s) {return s->data[s->top];
}int main() {Stack stack;initStack(&stack);char token[1000];int error = 0;// 讀取輸入直到行尾while (scanf("%s", token) != EOF) {// 判斷是否為操作數if (isdigit(token[0]) || (token[0] == '-' && isdigit(token[1]))) {int num = atoi(token);push(&stack, num);} // 判斷是否為操作符else if (strlen(token) == 1) {char op = token[0];if (op == '+' || op == '-' || op == '*' || op == '/' || op == '%') {if (stack.top < 1) {error = 1;break;}int b = pop(&stack);int a = pop(&stack);int result;switch (op) {case '+':result = a + b;break;case '-':result = a - b;break;case '*':result = a * b;break;case '/':if (b == 0) {printf("錯誤:除法操作分母為零。\n");printf("%d\n", ERROR_VALUE);return 0;}result = a / b;break;case '%':if (b == 0) {printf("錯誤:取模操作除數為零。\n");printf("%d\n", ERROR_VALUE);return 0;}result = a % b;break;default:error = 1;break;}if (error) break;push(&stack, result);} else {error = 1;break;}} else {error = 1;break;}}// 檢查表達式是否規范if (error || stack.top != 0) {printf("錯誤:表達式不規范。\n");printf("%d\n", ERROR_VALUE);return 0;}// 輸出結果printf("%d\n", pop(&stack));return 0;
}    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88612.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

裝配式建筑4.0:當房子像汽車一樣被“智造”

傳統建筑方式&#xff0c;如同手工打造藝術品一般&#xff0c;大部分工作依賴現場施工&#xff0c;工人在建筑工地進行混凝土澆筑、磚塊堆砌、鋼筋綁扎等繁雜工作。這種方式受天氣、工人技術水平等因素影響極大&#xff0c;不僅施工周期漫長&#xff0c;質量也參差不齊。據統計…

Go語言生態成熟度分析:為何Go還無法像Java那樣實現注解式框架?

近年來&#xff0c;Go語言因其性能高效、部署簡單、并發模型優秀等特性&#xff0c;成為云原生與微服務架構中的熱門語言。然而&#xff0c;在實際的企業級項目開發中&#xff0c;開發者普遍會發現一個現象&#xff1a;Go的開發效率&#xff0c;尤其在快速構建中大型業務系統時…

oc分類和swift擴展有哪些區別

目錄1. 語言環境2. 主要目的3. 核心能力對比4. 關鍵差異詳解4.1. 屬性支持4.2. Swift 擴展4.3. 初始化器4.4. 方法沖突與覆蓋4.5. 關聯類型與泛型5. 設計哲學6. 總結表在 Objective-C 和 Swift 中&#xff0c;分類&#xff08;Category&#xff09;和擴展&#xff08;Extension…

go.work

一般學習一個小東西時&#xff0c;無非兩點&#xff0c;1、怎么用&#xff1f; 2、為啥用&#xff1f;在寫一個小的項目demo時&#xff0c;忽然看到一個奇怪的東西“go.work”&#xff1f;這是啥&#xff1f;好奇&#x1f62f;&#xff0c;想知道。我是這么問AI的&#xff1a;g…

Kimi K2萬億參數開源模型原理介紹

Kimi K2 技術全解&#xff1a;1T MoE 大模型如何煉成開放智能體 文章目錄Kimi K2 技術全解&#xff1a;1T MoE 大模型如何煉成開放智能體1. 模型架構與特點&#xff1a;1 T MoE 的「大」與「省」2. 主要創新點&#xff1a;MuonClip、Agentic RL 與工具調用2.1 MuonClip 優化器&…

【CMake】CMake構建項目入門

一、CMake介紹 CMake 是一個跨平臺的自動化構建工具&#xff0c;用于管理軟件項目的編譯過程。它通過簡單的配置文件&#xff08;CMakeLists.txt&#xff09;生成特定平臺的構建文件&#xff08;如 Makefile、Visual Studio 項目&#xff09;&#xff0c;讓開發者可以專注于代…

貪心算法題解——劃分字母區間【LeetCode】

763. 劃分字母區間 本題目&#xff0c;“同一字母最多出現在一個片段中”&#xff0c;因為這句話&#xff0c;所以本質上 這道題目屬于合并區間 一、算法邏輯&#xff08;逐步思路&#xff09; ? 目標&#xff1a; 將字符串 s 劃分成盡可能多的片段&#xff0c;要求&#xf…

Python----目標檢測(使用YOLOV8網絡訓練人臉)

一、Ultralytics安裝 網址&#xff1a;主頁 -Ultralytics YOLO 文檔 Ultralytics提供了各種安裝方法&#xff0c;包括pip、conda和Docker。通過 ultralytics pip包安裝最新穩定版本的YOLOv8&#xff0c;或克隆Ultralytics GitHub 存儲庫以獲取最新版本。可以使用Docker在隔離的…

Filament引擎(三) ——引擎渲染流程

通過Filament引擎(二) ——引擎的調用及接口層核心對象的介紹我們知道&#xff0c;要在項目中使用filament&#xff0c;首先我們需要構建出filament的Engine的對象&#xff0c;然后通過filament::Engine對象實例&#xff0c;來構建其他對象&#xff0c;組裝渲染場景&#xff0c…

Oracle存儲過程導出數據到Excel:全面實現方案詳解

技術背景與需求分析 數據導出是企業級應用的核心功能,Oracle存儲過程因其高性能執行(減少網絡傳輸)、代碼復用性(封裝業務邏輯)和事務安全性(ACID保障)成為理想載體。Excel作為使用率$ \geq 95% $的辦公工具,其兼容性需求尤為突出。典型場景包括: 財務報表自動生成物…

解決el-table右下角被擋住部分

一部分展示不全&#xff0c;被遮擋&#xff0c;因為 最右邊加了fixed"right"<el-table-column fixed"right" label"操作" width"120">解決&#xff1a;1、去除fixed"right"或2、設置樣式單頁面<style lang"sc…

Waiting for server response 和 Content Download

在瀏覽器網絡調試&#xff08;如 Chrome DevTools 的 Network 面板&#xff09;中&#xff0c;Timing 選項卡下的 Waiting for server response 和 Content Download 是兩個關鍵性能指標&#xff0c;它們分別代表了 HTTP 請求生命周期的不同階段。以下是詳細解釋和優化方案&…

《Java Web程序設計》實驗報告五 Java Script學習匯報

目 錄 一、實驗目的 二、實驗環境 三、實驗步驟和內容 1、小組成員分工&#xff08;共計4人&#xff09; 2、實驗方案 3、實驗結果與分析 Ⅰ、簡述JavaScript的產生過程與Java的關系 Ⅱ、簡述JavaScript的特點有哪些 Ⅲ、簡述ECMAScript的歷史 Ⅳ、簡述ECMAScript與J…

C#與FX5U進行Socket通信

實現效果實現步驟&#xff1a;注意&#xff1a;詳細的參數這里就不說明了&#xff0c;自己網上搜即可&#xff1b;打開GX Works3 創建FX5U項目系統參數設置PLC的具體型號&#xff08;我有實物PLC&#xff09;設置IP及組態參數添加通訊設備&#xff08;這里PLC做客戶端&#xff…

ubuntu20.04基于tensorRT和c++跑yolo11

設備 系統&#xff1a;Ubuntu 20.04 顯卡&#xff1a;NVIDIA GeForce RTX 3050 顯卡驅動&#xff1a; Driver Version: 535.183.01 CUDA Version: 12.2 關鍵軟件版本總結 Cmake: 3.28.6 Cuda&#xff1a; 12.2.2 Cudnn: 8.9.7 TensorRT: 10.8.0.43 Python&#xff1a;3.10.1…

玖玖NFT數字藏品源碼(源碼下載)

玖玖NFT數字藏品源碼 這套還是很不錯的&#xff0c;前端uniapp&#xff0c;后端FastAdmin&#xff0c;對接匯元支付&#xff0c;富友支付&#xff0c;對接avata鏈&#xff0c;感興趣的自行下載研究 源碼下載&#xff1a;https://download.csdn.net/download/m0_66047725/9133…

【Redis-05】高可用方案-主從哨兵

1 概述 高可用&#xff08;High Availability&#xff09;指系統在部分節點故障時仍能持續提供服務的能力。Redis 作為核心緩存組件&#xff0c;主流的高可用方案有主從復制、哨兵模式、集群模式三種。本文介紹主從復制、哨兵模式兩種高可用方案。 2 主從復制 通過 “一主多從”…

焊接機器人智能節氣裝置

工業焊接作為現代制造業的重要組成部分&#xff0c;廣泛應用于汽車、航空航天、建筑、船舶等多個領域。隨著自動化技術的快速發展&#xff0c;焊接機器人已成為提升焊接效率和質量的關鍵裝備。在傳統焊接及部分自動化焊接過程中&#xff0c;氣體流失問題仍然普遍存在&#xff0…

【6.1.0 漫畫數據庫技術選型】

漫畫數據庫技術選型 &#x1f3af; 學習目標&#xff1a;掌握架構師核心技能——數據庫技術選型&#xff0c;針對不同業務場景選擇最合適的數據庫方案 &#x1f3db;? 第一章&#xff1a;關系型數據庫對比選型 &#x1f914; MySQL vs PostgreSQL vs TiDB 想象數據庫就像不同…

CVE-2022-4262/CVE-2022-3038

CVE-2022-4262&#xff08;Linux內核UAF漏洞&#xff09;漏洞原理CVE-2022-4262是Linux內核中RDS&#xff08;Reliable Datagram Sockets&#xff09;協議實現的一個UAF&#xff08;Use-After-Free&#xff0c;釋放后使用&#xff09;漏洞。具體來說&#xff1a;在rds_rdma_ext…