本实例与上例的区别在于表达式中有括号。其实每个括号中的内容都可以看作是一个单独的表达式(也可能又带括号),考虑到这一点,我们可以把程序写为递归调用的方式,遇到括号则调用自己计算括号中表达式的值。相应的程序代码如下:
#include "stdio.h"
#include "stdlib.h"
float get_num(char **);
float calculate(char **);
int main()
{char a[80];
float result;
char *p;
clrscr();
gets(a);
p = a;
result = calculate(&p);
printf("%f\n", result);
getch();
return 0;
}
float calculate(char **p)
{float result = 0;
int sign = 1;
if(**p == '-') {
sign = -1;
(*p)++;
}
while(**p != 0 && **p != ')' ) {
float m;
if(**p == '(' ) {
(*p)++;
m = sign*calculate(p); //遇到括号调用自己计算括号中的值
}
else
m = sign*get_num(p);
while(**p == '*' || **p == '/') {
if(**p == '*') {
(*p)++;
if(**p == '(') {
(*p)++;
m *= calculate(p); //遇到括号调用自己计算括号中的值
}
else
m *= get_num(p);
}
else {
int div;
(*p)++;
if(**p == '(') {
(*p)++;
div = calculate(p); //遇到括号调用自己计算括号中的值
}
else
div = get_num(p);
if(div == 0) {
printf("diveide by 0!\n");
exit(1);
}
else
m /= div;
}
}
if(**p != '+' && **p != '-' && **p != 0 && **p != ')'){
printf("illege character: %c\n",**p);
exit(0);
}
result += m;
if(**p == '+') {
sign = 1;
(*p)++;
}
else
if(**p == '-' ) {
sign = -1;
(*p)++;
}
else
if(**p == ')' ) { //遇到右括号,跳过并退出循环返回结果
(*p)++;
break;
}
else
break;
}
return result;
}
float get_num(char **p)
{float n = 0, m = 10;
if(**p != '.' && (**p <'0' || **p >'9')) {
printf("get num error!\n");
exit(1);
}
while(**p >= '0' && **p <= '9') {
n = n*10 + **p - 48;
(*p)++;
}
if(**p == '.') {
(*p)++;
while(**p >= '0' && **p <= '9') {
n += (**p - 48)/m;
(*p)++;
m *= 10;
}
}
return n;
}
分享到:
相关推荐
新能源车行业报告:特斯拉Q1财报抢眼,吹响行业进击号角-0507-国海证券-21页.pdf
策略问道产业系列之云计算产业:5G科技周期下半场,进击云计算-1122-华泰证券-41页.pdf
策略问道产业系列之云计算产业:5G科技周期下半场,进击云计算-20191122-华泰证券-41页.pdf
标题中的“主要消费产业行业研究日本便利店启示录不断进击的-29页.pdf.zip”表明这是一份关于日本便利店行业的深度研究报告,包含了29页的内容,并被压缩在一个ZIP文件中。这份报告可能探讨了日本便利店业的发展模式...
西式咖啡与中式茶饮作为两大饮品文化,在全球范围内都具有深远的影响力和庞大的市场。国信证券的这篇研究报告深入分析了从西式咖啡到中式茶饮的发展趋势、行业特征以及未来投资前景。 首先,报告指出全球咖啡赛道...
电气设备行业:从消费电池看国内电池龙头竞争力,新市场,老对手;中国芯,再进击-0602-长江证券-30页.pdf
QT-计算器,类似手机计算器
c语言带括号的计算器,栈的初始化自实现,计算器实现逻辑
FullSpeed-Python-进击的Python-中文版.pdf
影视动漫行业:漫谈·国产电影的进击之路-20180427-华创证券-18页.pdf
20210603-国泰君安-通信设备及服务行业全球进击系列之二:光模块全球进击.pdf
天风证券:摩托车行业深度-大排量强势进击-“品牌出海”迈向全球市场
C 语言控制台计算器是一个简单但很实用的程序,它允许用户在命令行界面中输入算术表达式,并计算出结果。该程序通常包括以下几个主要部分: 1. **输入处理**:程序需要从控制台读取用户输入的表达式字符串。可以使用 C ...
由C语言实现的基础库,提供的功能有: 基础库 co_vec 向量数组 co_dict 字典(哈希表),内部有一个链表用于遍历,使用它可以实现lrucache co_set 集合,内部由红黑树实现。 co_list 双向链表 co_queue 循环队列 co_...
根据提供的文件内容,以下是详细的IT知识点: 1. 药明生物概述: 药明生物是一家专注于生物药研发生产外包服务的公司,成立于2010年。该公司早期主要提供生物药研发外包服务,随着2015年从药明康德剥离以及2017年...
rabbitmq安装教程图片版本,主要介绍了erlang语言环境安装、rabbitmq server安装,rabbit 插件安装
这份中泰证券的研究报告对中国的奶粉龙头企业中国飞鹤进行了深入分析,其内容不仅涵盖了行业现状、公司战略以及财务预测,同时也对股票进行了评级。以下是从该文件中提取的详细知识点: 1. 行业背景分析: ...
20210228-中信建投-万孚生物-300482-借力新冠,进击全球.pdf
二、星巴克的成功之路 星巴克是全球咖啡市场中的一个典型案例。它通过积极打造第三空间的概念,实现了品牌定位和运营效率的统一。星巴克的单店模型效率高,资本助力了其规模化扩张。星巴克的成功还得益于数字化和...
贝泰妮公司专注于敏感肌护肤领域,通过其核心品牌薇诺娜,在这一细分市场中取得了显著的市场占有率,并逐渐成为该领域的领先品牌。贝泰妮的市场策略、产品开发和运营能力构成了其核心竞争优势。...