社区
C++ 语言
帖子详情
在线等,VC中,高分求解:表达式计算的源程序(含三角函数)
cbc
2005-05-30 12:09:19
高分求解:表达式计算的源程序(含三角函数)
输入:一个字符串(CString类型):sinx-x*x/4;一个实数x(double类型):1.57
输出:计算后的结果:0.38377
求函数
double Compute(CString str,double x)
...全文
213
5
打赏
收藏
在线等,VC中,高分求解:表达式计算的源程序(含三角函数)
高分求解:表达式计算的源程序(含三角函数) 输入:一个字符串(CString类型):sinx-x*x/4;一个实数x(double类型):1.57 输出:计算后的结果:0.38377 求函数 double Compute(CString str,double x)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mostideal
2005-05-31
打赏
举报
回复
学习。。
nasi00
2005-05-31
打赏
举报
回复
我有可以算表达式的程序,你拿回去改改咯
#include <iostream>
using namespace std;
#include <stack>
#include <string>
#include <cstdlib>
void init(string& s)
{
getline(cin,s);
s+="@";
}
bool is_optr(char c)
{
string optr_list("+-*/()@");
for(int i=0;i<optr_list.size();i++)
if(c==optr_list[i])
return true;
return false;
}
char first(char op1, char op2)
{
string tab[7];
tab[0]=">><<<>>";
tab[1]=">><<<>>";
tab[2]=">>>><>>";
tab[3]=">>>><>>";
tab[4]="<<<<<=E";
tab[5]=">>>>E>>";
tab[6]="<<<<<E=";
string optr_list("+-*/()@");
int op1_loc, op2_loc;
for(op1_loc=0;op1_loc<optr_list.size();op1_loc++)
if(optr_list[op1_loc]==op1)
break;
for(op2_loc=0;op2_loc<optr_list.size();op2_loc++)
if(optr_list[op2_loc]==op2)
break;
return tab[op1_loc][op2_loc];
}
double operate(double x, char op, double y)
{
switch(op) {
case '+':
return x+y;
break;
case '-':
return x-y;
break;
case '*':
return x*y;
break;
case '/':
return x/y;
break;
}
return -1;
}
double calc(string& s)
{
stack<char> optr;
optr.push('@');
stack<double> opnd;
char c=s[0];
s.erase(0,1);
while( c!='@' || optr.top()!='@' ) {
if( !is_optr(c) ) {
string num;
num.insert(num.begin(), c);
int loc=0;
while( !is_optr(s[loc]) )
loc++;
string num2(s,0,loc);
num+=num2;
s.erase(0,loc);
double x=atof(num.c_str());
opnd.push(x);
c=s[0];
s.erase(0,1);
}
else {
switch( first(optr.top(), c) ) {
case '<':
optr.push(c);
c=s[0];
s.erase(0,1);
break;
case '=':
optr.pop();
c=s[0];
s.erase(0,1);
break;
case '>':
char op;
op=optr.top();
optr.pop();
double a,b;
a=opnd.top();
opnd.pop();
b=opnd.top();
opnd.pop();
double res;
res=operate(b,op,a);
opnd.push(res);
break;
}
}
}
return opnd.top();
}
int main()
{
string exp;
double ans;
init(exp);
ans=calc(exp);
cout<<ans<<endl;
return 0;
}
useresu
2005-05-30
打赏
举报
回复
有点难度
觉的最好是换成前缀或后缀表达式,
然后压栈,
不是很懂,
mark!!!
foochow
2005-05-30
打赏
举报
回复
mark!!!
积木
2005-05-30
打赏
举报
回复
如果楼主比较清楚没有函数调用的后缀表达式转换方法,那就很简单了,实际上这个也不难,在处理表达式为后缀表达的时候直接计算sinx就可以了,至于一般的表达式求法,每一本数据结构书上都有,呵呵。
FVM in CFD 学习笔记_第12章_
高分
辨率格式
将介绍发展HR格式的归一化变量公式(NVF)和总变差衰减(TVD)框架,分别展示了在NVF和TVD
中
用于使HR格式更具形象化的归一化变量图和Sweby图。针对NVF和TVD,具体给出了一些HR格式的函数关系。还有上一章讲到的延迟...
统考
计算
机
数据结构答案:B3、
计算
机
中
,完成程序指令指定的基于二进制数的算术运算或逻辑运算的部分是______。A.内存储器B.输入输出设备C.外存储器D.运算器答案:D4、
计算
机内部用于处理数据和指令的编码是______。A.十进制码...
CSDN回帖得分大全(近两年)
√vs2005调用dll的时候Initialize()函数返回错误 [
VC
/MFC ... [
VC
/MFC 界面] 40 chencheng8095 05-23 00:2911 xianglitian06-10 11:51管理√CFileFind::FindFile 支持通配符么? [
VC
/MFC 基础类] 100 wysbk002 05-22
【Python】LabVIEW 调用 Python 函数
字符串处理: Python拥有强大而灵活的内置字符串处理能力和强大的正则
表达式
库(re),使其在解析仪器返回的文本信息、处理配置文件、生成报告等方面得心应手。 网络编程: Python的标准库
中
包
含
了丰富的网络协议支持...
51c大模型~合集42
我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244「草莓」即将上线,OpenAI新旗舰大模型曝光,代号「猎户座」本月...据科技媒体 The Information 报道,传说
中
的「草莓」真的要来了!两位参与该项目的人士表
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章