《数据结构学习与实验指导》3-7:求前缀表达式的值
来源:互联网 发布:阿里云磁盘扩容 编辑:程序博客网 时间:2024/06/03 12:13
实验内容:计算前缀表达式的值。
输入说明:输入一行不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象之间用空格分隔。
输出说明:输出前缀表达式的运算结果,精确到小数点后1位,或输出错误信息“ERROR“。
测试用例:
输入 | 输出
+ + 2 * 3 - 7 4 / 8 4 | 13.0
/ -25 + * - 2 3 4 / 8 4 | 12.5
/ 5 + * - 2 3 4 / 8 2 | ERROR
+10.23 | 10.2
#include <stdio.h>#include <stdlib.h>#define MaxSize 30typedef struct { char *arr; int size;} *PList_3_7;PList_3_7 initList_3_7();void addList_3_7(PList_3_7 list, char c);void printList_3_7(PList_3_7 list);void clearList_3_7(PList_3_7 list);void releaseList_3_7(PList_3_7 list);float doCharArr2Float_3_7(char *arr, int startIndex, int size);float doCal_3_7(char opt, float num1, float num2);int main() { float n = test_3_7_0(); if (n > -9999999) { printf("%.1f\n", n); } return 0;}float test_3_7_0() { float num = 0; PList_3_7 list = initList_3_7(); char c; while (1) { c = getchar(); if (c != ' ' && c != '\n') { addList_3_7(list, c); } else { if (list->size > 1) { if (list->arr[0] == '-' || list->arr[0] == '+') { num = doCharArr2Float_3_7(list->arr, 1, list->size); if (list->arr[0] == '-') { num *= -1; } } else { num = doCharArr2Float_3_7(list->arr, 0, list->size); } break; } else if (list->size == 1) { if (list->arr[0] >= '0' && list->arr[0] <= '9') { num = doCharArr2Float_3_7(list->arr, 0, list->size); break; } else { char opt = list->arr[0]; float num1 = test_3_7_0(); float num2 = test_3_7_0(); if (num1 <= -8999999 || num2 <= -8999999) { num = -9999999; } else { num = doCal_3_7(opt, num1, num2); } break; } } clearList_3_7(list); } if (c == '\n') { break; } } return num;}PList_3_7 initList_3_7() { PList_3_7 list = (PList_3_7) malloc(sizeof(PList_3_7)); list->arr = (char *) malloc(sizeof(char) * MaxSize); list->size = 0; return list;}void addList_3_7(PList_3_7 list, char c) { if (list->size < MaxSize) { list->arr[list->size] = c; list->size ++; }}void printList_3_7(PList_3_7 list) { for (int i = 0; i < list->size; i++) { printf("%c", list->arr[i]); } printf("\n");}void clearList_3_7(PList_3_7 list) { list->size = 0;}void releaseList_3_7(PList_3_7 list) { free(list->arr); free(list);}float doCharArr2Float_3_7(char *arr, int startIndex, int size) { int num1 = 0; float num2 = 0; int i = startIndex; while (i < size) { if (arr[i] == '.') { i++; break; } num1 = num1 * 10 + (arr[i] - '0'); i++; } float j = 10.0; while (i < size) { num2 += (arr[i] - '0') / j; j *= 10; i++; } return num1 + num2;}float doCal_3_7(char opt, float num1, float num2) { float num = 0; switch (opt) { case '+' : num = num1 + num2; break; case '-' : num = num1 - num2; break; case '*' : num = num1 * num2; break; case '/' : if (num2 > -0.000001 && num2 < 0.000001) { printf("ERROR\n"); num = -9999999; } else { num = num1 / num2; } } return num;}
阅读全文
0 0
- 《数据结构学习与实验指导》3-7:求前缀表达式的值
- 《数据结构学习与实验指导》3-7求前缀表达式的值/3-8堆栈模拟队列
- 《数据结构学习与实验指导》3-5求链式线性表的倒数第K项/3-6表达式转换
- 《数据结构学习与实验指导》3-6:表达式转换
- 《数据结构学习与实验指导》3-5:求链式线性表的倒数第K项
- [数据结构]--PTA求前缀表达式的值
- <数据结构学习与实验指导>2-5求集合数据的均方差
- 《数据结构学习与实验指导》2-5:求集合数据的均方差
- 数据结构课设 求前缀表达式的值
- 《数据结构学习与实验指导》2-7:素因子分解
- 《数据结构学习与实验指导》4-7:修理牧场
- 《数据结构学习与实验指导》3-1:一元多项式求导
- 《数据结构学习与实验指导》3-8:堆栈模拟队列
- 《数据结构学习与实验指导》4-3:朋友圈
- 《数据结构学习与实验指导》5-3:电话聊天狂人
- 《数据结构学习与实验指导》3-4:一元多项式的乘法与加法运算
- 《数据结构学习与实验指导》3-2:汉诺塔的非递归实现
- 求前缀表达式的值
- RecycleView 添加item点击事件
- HashMap和HashSet的区别,原来Hashset比HashMap查询慢一些
- Java设计模式—单例模式
- SpringMvc学习之入门篇
- 1272 小希的迷宫(并查集)
- 《数据结构学习与实验指导》3-7:求前缀表达式的值
- MyFlag Step12:后台代码编写、客户端具体功能实现与界面优化
- 1213 How Many Tables(并查集)
- listview嵌套girdview问题
- Spring Boot学习入门篇(一)--Hello World
- PL/SQL Developer查询结果中文乱码???
- 在ATM2时遇到的问题
- linux解决依赖性问题
- 开源PLog库的使用