c语言-用C语言编写能进行四则运算的程序

问题描述

用C语言编写能进行四则运算的程序
我想用C语言编一个能进行简单的四则运算的程序,应该怎么写,请详细解释一下输入和计算部分

解决方案

实现四则运算是比较简单的,你可以使用两个栈,一个栈用来存贮操作的数字(0~n),一个栈用来存储操作符(+-等).
你先把四则运算表达式存为一个字符串,然后遍历各个字符,如果是数字,那就存起来,如果是操作符,那就与前一个操作符比较,看看优先级是不是比前一个大,如果是,那就存起来,如果不是,那就把数字栈里的前两个数按照前一个操作符进行运算。结果用一个变量保存起来。
下面是以前学栈时的一个代码,是关于四则运算的,虽然是用C++写的,但是希望对你能有帮助。
#include""stdafx.h""
#include""targetver.h""
#include
#include
#include
#include
using namespace std;
class list{
public:
int weight;
string str;
};
class node{
public:
string s;
node* next;
public:
node(){
next=nullptr;
}
};
class Stack{
public:
node* top;
int length;
public:
Stack(){
top=new node();
}
node getTop(){
return top->next;
}
void push(string str){//cout<<str<<endl;
node
n=new node();
n->s=str;
n->next=top->next;
top->next=n;
}
void pop(){
node* n=top->next;
if(n!=nullptr){
top->next=n->next;
delete n;
}else{
cout<<""UnderFlow!""< }
}
bool isEmpty(){
if(top->next==nullptr){
return true;
}else{
return false;
}
}
};
string remove(string s);
float calc(string ostring s1string s2);
string FloatToString(float f);
int main(){
string strstr_c;
cin>>str;str_c=str;
Stack* n_stack=new Stack();
Stack* o_stack=new Stack();
list* lis=new list[4];
lis[0].str=""+"";lis[0].weight=1;
lis[1].str=""-"";lis[1].weight=1;
lis[2].str=""*"";lis[2].weight=2;
lis[3].str=""/"";lis[3].weight=2;
float sum=0;
for(int i=0;i if(str.at(i)=='('){
string s="""";
for(;str.at(i)!=')';){
s=s+str.at(0);
}
}else if(str.at(i)>='0'&&str.at(i)<='9'){
string s="""";
for(;i='0'&&str.at(i)<='9';i++){
s=s+str.at(i);
}i--;
n_stack->push(s);
}else{
string s="""";
s=str.at(i)+s;
if(!o_stack->isEmpty()){
list curOperate;
list lastOperate;
for(int i=0;i if(o_stack->top->next->s==lis[i].str){
lastOperate=lis[i];
}
if(s==lis[i].str){
curOperate=lis[i];
}
}
if(curOperate.weight>lastOperate.weight){
o_stack->push(s);
}else{
float f=calc(lastOperate.strn_stack->top->next->next->sn_stack->top->next->s);
s=FloatToString(f);
n_stack->pop();
n_stack->pop();
o_stack->pop();
n_stack->push(s);
o_stack->push(curOperate.str);
}
}else{
o_stack->push(s);
}

    }}cout<<o_stack->top->next->s<<""--""<<n_stack->top->next->next->s<<""--""<<n_stack->top->next->s<<endl;sum=sum+calc(o_stack->top->next->sn_stack->top->next->next->sn_stack->top->next->s);cout<<endl<<""the o_stack is followed:""<<endl;for(node* p=o_stack->top->next;p!=nullptr;p=p->next){    cout<<p->s;}cout<<endl<<""the n_stack is followed:""<<endl;for(node* p=n_stack->top->next;p!=nullptr;p=p->next){    cout<<p->s;}cout<<endl<<sum<<endl;int a;cin>>a;return 0;

}
string FloatToString(float f){
string s="""";int a=f;
for(;a!=0;){
int c=a%10;
a=a/10;
s=(char)(c+'0')+s;
}
return s;
}
float calc(string ostring s1string s2){
int m=0n=0;
for(int i=0;i m=m+(s1.at(i)-'0')*pow(10s1.length()-i-1);
}
for(int i=0;i n=n+(s2.at(i)-'0')*pow(10s2.length()-i-1);
}
if(o==""+""){
return m+n;
}else if(o==""-""){
return m-n;
}else if(o==""*""){
return m*n;
}else if(o==""/""){
return (m*1.0)/n;
}
return -1;
}
string remove(string s){
string s1="""";
if(s.length()>2){
return s.substr(1s.length()-1);
}else if(s.length()==2){
return s.at(1)+s1;
}else{
return """";
}
}

解决方案二:
编写C语言进行读目录程序
使用C语言编写通用shellcode的程序
使用vim在Linux下编写C语言程序

解决方案三:
试试用字符串替换,逻辑简单,只要一层层的把优先级高的计算成答案替换原字符串中的算式。涉及到一些正则匹配问题,代码也就几十行而已

时间: 2024-12-21 02:41:39

c语言-用C语言编写能进行四则运算的程序的相关文章

c语言-用vc6.0编写一个整人的小程序(我想要详细的做法和解除的方法)

问题描述 用vc6.0编写一个整人的小程序(我想要详细的做法和解除的方法) 通过QQ等发给别人,在对面没有编辑环境的情况下也能整到他(比如让他骂自己不然就重启电脑:让他夸我不然锁住计算机屏幕等等!顺便告诉我怎么发给他,在对方打开时候就执行!) 解决方案 编译完之后的exe就可以直接发了吧 解决方案二: 你可以网上找一个相关的批处理文件,比如说隔一段时间把他的电脑的声音关掉等等,然后设置成开机运行就好 解决方案三: 改变VC6.0程序方法.

中文字符-如何用C语言编写一个简单的输入法程序,要求可以输入汉字。

问题描述 如何用C语言编写一个简单的输入法程序,要求可以输入汉字. 不太清楚汉字在计算机中是如何存储的,想知道例如微软的智能ABC以及搜狗输入法是怎样实现拼音拼写下的汉字输入. 解决方案 首先要有一个汉字的编码库,比如GB2312编写的是拼音输入法的话,还要建立一个拼音与汉字对应的数据库然后根据用户输入的拼音,提示出对应的汉字(汉字的优先顺序由数据库决定,同时还可以学习该用户的使用习惯)如果输入法还支持智能联想输入的话,还要加入词库(也有优先级),这样可以根据前一个字来推断出下一个可能的字 解决

求帮助啊 急用啊-用c语言编写剔除粗大误差的程序和相应的流程图

问题描述 用c语言编写剔除粗大误差的程序和相应的流程图 用c语言编写剔除粗大误差的程序以及流程图,用那种方法都行,只要正确就行 解决方案 什么叫最大误差?给个定义好么?没有定义怎么解决你的问题 解决方案二: 您可能没看清题,是粗大误差不是最大误差,有答案请尽快回答,急急急

directx-使用什么语言和开发工具编写能对3D模型变换的软件

问题描述 使用什么语言和开发工具编写能对3D模型变换的软件 我想要做一个应用程序,能够显示3D人体模型的,并能输入参数对模型进行变换的. 比如,选择男性,得到一个男性的标准模型,然后用户输入该男性的身高.腿长等,然后模型进行相应的变换. 那么,请问: 1.用什么开发环境和语言?unity和directX或java3D行吗? 2.该用什么方法进行模型的变换呢?有没有一个成熟的方法? 如果您知道该怎么办,恳请您回答一下,万分感谢,因为周围没有什么老师和同学可以指导的,只能求助于此,给点指导. 解决方

安卓软件-c语言问题能不能编写一个app

问题描述 c语言问题能不能编写一个app 大神们,利用c语言能不能编写一个安卓手机app,目前只掌握了c语言和数据结构知识 解决方案 JAVA也不难,随便弄本书看看基本语法,然后弄个Android的书,只用C写APP,这个还真没见过 解决方案二: 可以的-可以用oc编写也可以c++结合oc编写 解决方案三: 那 什么是oc呢? 解决方案四: 理论上可以用c写,但是用oc是没办法编写android 手机应用的吧 解决方案五: 只用C要写个Android程序肯定是不靠谱的,虽然Android里边可以

c语言-我的C语言基础入门时编写一个代码,出现问题,希望得到求解。

问题描述 我的C语言基础入门时编写一个代码,出现问题,希望得到求解. 它提示我说的 --------------------Configuration: one - Win32 Debug-------------------- Compiling... one.c D:C语言MSDev98MyProjectsoneone.c(12) : error C2065: 'FebSold' : undeclared identifier D:C语言MSDev98MyProjectsoneone.c(1

Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序

Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framework或者底层打交道,还有就是混合编程之类的,以及新语言,新特性,各种牛人研究的黑科技,应接不暇,技术更新迭代太快了,我们要赶紧加快步伐了,今天就开始来入坑了--JNI,这个坑是必须要进的,啥也不说了,老司机,带我! 一.什么是JNI? Java Native Interface(java本地接口)

c语言-编写的polar码译码程序为什么运行速度这么慢呢?怎么解决呢

问题描述 编写的polar码译码程序为什么运行速度这么慢呢?怎么解决呢 以下是C程序,只是译码程序,y是接收的加噪声的信息序列,p是位置矩阵,sigma是标准差,uyima是译码后序列,为什么运行速度这么慢呢 解决方案 #include #include #include #include #define pi 3.1415926 #define BITS 10 #define N (1< #define K 512//信息比特长度 #define L 1 #define log_L 0 int

C#语言与Java语言程序的比较

迈入二十一世纪以来,信息行业飞速壮大,其中在软件开发中Java语言与C#语言都独当一面,得到了逐步完善和广泛的应用,Java语言和C#语言都是一种面向对象的语言,但Java程序和C#程序还是有一定的区别. 下面分别是两种语言的程序的例子. 1.Java语言的基本程序: Import java.util.*; Package HelloJava{ Public class Message{ Public static void main(String [] args){ System.out.pr