导航:首页 > 编程语言 > c语言编程求算术表达式

c语言编程求算术表达式

发布时间:2022-05-20 04:30:18

❶ C语言算术表达式

这一句printf("%f",a%3*(int)(x+y)%2/4);

/4之前的结果是1,1/4得到的结果是0,因为你是2个int型变量的运算。1/4=0,输出浮点型得到0.00000000.
如果想得到0.25,需要前面的运算结果强制转换为浮点型,后面/4写成/4.0
写成这样(float)(a%3*(int)(x+y)%2)/4.0
此外养成良好编程喜欢,善用括号,否则一个算式太长,代码可读性太差,容易出错。

❷ 求用C语言编写一个算术表达式的算法,如输入3*4+8-2键入Enter键输出18.

#include<iostream.h>
//#defineMaxLen100//存储空间
inttran(charstr[],charexpr[])//将中缀表达式转换成后缀表达式if(tran(str,expr)==0)//原来表达式,后缀表达式
{
intst[100];//转化过程使用的过度栈
charch;
inti=0,exindex=0,stindex=-1;//i是str下标,exindex是expr下标,stindex是st下标
while((ch=str[i++])!='')
{
if(ch>='0'&&ch<='9')//判断是数字
{
expr[exindex]=ch;//压栈
exindex++;//栈顶指针上移
while((ch=str[i++])!=''&&ch>='0'&&ch<='9')//其它位依次入栈
{
expr[exindex]=ch;
exindex++;
}
i--;//str原算术表达式栈向下遍历
expr[exindex]='#';//以特殊字符“#”表示结束
exindex++;
}
elseif(ch=='(')//判断为左括号
{
stindex++;
st[stindex]=ch;
}
elseif(ch==')')//判断为右括号
{
while(st[stindex]!='(')
{
expr[exindex]=st[stindex];
stindex--;//依次弹出
exindex++;
}
stindex--;//'('出栈
}
elseif(ch=='+'||ch=='-')//判断为加减号
{
while(stindex>=0&&st[stindex]!='(')
{
expr[exindex]=st[stindex];
stindex--;
exindex++;
}
stindex++;
st[stindex]=ch;
}
elseif(ch=='*'||ch=='/')//判断为乘除号
{
while(st[stindex]=='*'||st[stindex]=='/')
{
expr[exindex]=st[stindex];
stindex--;
exindex++;
}
stindex++;
st[stindex]=ch;
}
}
while(stindex>=0)//将栈中所有运算符依次弹出存入expr栈中
{
expr[exindex]=st[stindex];
exindex++;
stindex--;
}
expr[exindex]='';
return1;
}
intcompvalue(charexpr[],int*n)
{
intst[100],d;//st为数栈
charch;
intexindex=0,stindex=-1;//exindex是expr下标,stindex是st的下标
while((ch=expr[exindex++])!='')
{
if(ch>='0'&&ch<='9')//将数字字符转换成数字
{
d=0;
do
{
d=10*d+ch-'0';
}
while((ch=expr[exindex++])!='#');
stindex++;
st[stindex]=d;//数字进栈
}
else//运算符操作
{
switch(ch)
{
case'+':st[stindex-1]=st[stindex-1]+st[stindex];
break;
case'-':st[stindex-1]=st[stindex-1]-st[stindex];
break;
case'*':st[stindex-1]=st[stindex-1]*st[stindex];
break;
case'/':
if(st[stindex]!=0)
{st[stindex-1]=st[stindex-1]/st[stindex];}
elsereturn0;//除0错误!
break;
}
stindex--;
}
}
(*n)=st[stindex];
return1;
}

voidmain()
{
charstr[100];//存储原来算术表达式
charexpr[100];//存储转换成的后缀表达式
intn;
cout<<"输入算术表达式:"<<endl;
cin>>str;
if(tran(str,expr)==0)
{
cout<<"原算术表达式不正确!"<<endl;
}
else
{
cout<<"转换成后缀表达式输出:"<<endl<<expr<<endl;
if(compvalue(expr,&n)==1)
{
cout<<"表达式求值:"<<endl<<n<<endl;
}
else
{
cout<<"计算错误!"<<endl;
}

}

❸ C语言:任意算术表达式的求值

一看你就是个菜鸟!哥来回答要实现输入任意表达式求值 楼上的的确不错 但是那是数据结构的 对于你们菜鸟来说 学习那还是早了点我来编写一道简单的题目吧:#include<stdio.h>void main(){double a,b,result;//定义两个操作数char opr;//定义算法printf("please input first number:");//输入第一个数scanf("%lf",&a);printf("操作方法:");//输入符号scanf("%c",&opr);printf("please input second number:");//输入第二个数scanf("%lf",&b);if (opr=='+')result=a+b;else if(opr=='-')result=a-b;else if(opr=='/')result=a/b;else if(opr=='*')result=a*b;printf("运算结果是:%lf",result);}好了 OK 给我加分吧!

❹ C语言 算术表达式

1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.关系运算符
用于比较运算。包括大于(>)、小于(=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符
用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<>)六种。
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符
这是一个三目运算符,用于条件求值(:)。
7.逗号运算符
用于把若干表达式组合成一个表达式(,)。
8.指针运算符
用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符
有括号(),下标[],成员(→,.)等几种。

❺ 用C语言编写程序“算术表达式求值”

#include <stdio.h>
#include <math.h>
enum state
;
int ctoi( char c)
bool isNum( char a)
bool isOp(char op)
{
switch(op)
{
case '+':
return true;
break;
case '-':
return true;
break;
case '*':
return true;
break;
case '/':
return true;
break;
default:
return false;
break;
}
}
bool isDot(char dot)
int checkString( char str[], double *a, double * b, char* op, int num)
{
enum state s = BEGIN;
int a_i = 0;
int b_i = 0;

double num1 = 0;
double num2 = 0;
int pointNum = 0;
for( int i = 0; i < num; ++i)
{
if(str[i] == ' ')continue;
switch(s)
{
case BEGIN:
if(isNum(str[i]))

elses = ERROR;
break;
case P2:
if(isNum(str[i]))

else if(isDot(str[i]))
{
s = P3;
}
else if(isOp(str[i]))
{
*op = str[i];
s = P5;
}
else
s = ERROR;
break;
case P3:
if(isNum(str[i]))
{
num1 = num1 + ctoi(str[i]) * pow(0.1, ++pointNum) ;
s = P4;
}
else
s = ERROR;
break;
case P4:
if(isNum(str[i]))
{
num1 = num1 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P4;
}
else if(isOp(str[i]))
{
*op = str[i];
s = P5;
}
else
s = ERROR;
break;
case P5:
if(isNum(str[i]))
{
num2 = num2 * 10 + ctoi(str[i]);
s = P6;
}
else
s = ERROR;
break;
case P6:
pointNum = 0;
if(isNum(str[i]))
{
num2 = num2 * 10 + ctoi(str[i]);
s = P6;
}
else if(isDot(str[i]))
{
s = P7;
}
else
s = END;
break;
case P7:
if(isNum(str[i]))
{
num2 = num2 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P8;
}
else
s = END;
break;
case 8:
if(isNum(str[i]))
{
num2 = num2 + ctoi(str[i]) * pow(0.1, ++pointNum);
s = P8;
}
else if(isOp(str[i]))
{
s = END;
}
else
s = END;
break;
case ERROR:
printf("express error. \n");
break;
}
if (s == END || s == ERROR)
break;
}
if(s==END)
else
}
int main()
{
char op;
double a;
double b;

char string[128] = ;
scanf("%s", &string);
printf("the expression you input is : %s. \n", string);
getchar();

if (-1 == checkString(string, &a, &b, &op, 128))
{
printf("error occur while checking expression. Be sure no space in your expression when input\n");
getchar();
return 0;
}

double result;
switch(op)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if(b != 0)
result = a / b;
else
{
printf(" error! %d/%d", a, b);
return -1;
}
break;
default:
printf("undefined expression.\n");
break;
}

printf("%f %c %f = %f\n", a, op, b, result);
return 0;
}

❻ 用C语言求算术表达式的值

C语言中,余运算(就是%)只能在2个整数间进行。
把z=(x+a%3*(int)(x+y)%2/4);
改成:
z=(x+(int)a%3*(int)(x+y)%2/4);
就可以了。

❼ C语言中求算术表达式的值:设x=2.5,a=7,y=4.7求x+a%3*(int)(x+y)%2/4的值

()运算级最高 先做(x+y)结果为7.2 然后做(int)7.2 结果为7* / % 的优先级相同 结合方向是自左至右 即(((a%3)*7)%2)/4 得出的结果再与x运算

❽ c语言怎么进行算术运算

#include "stdio.h" void main() { int a,b,c; scanf("%d%d",&a,&b); c=a+b; printf("%d\n",c); getch(); }

具体如下:
1、简介C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
2、基本介绍
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。最近25年是使用最为广泛的编程语言。
3、运算
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。

❾ 如何用C语言数据结构的格式实现简单的算术表达式求值程序

用栈把中缀表达式(输入的式子)按优先级转为后缀表达式(逆波兰式,即运算符在前,操作数在后),再利用栈变计算边保存结果用于下一步计算,最后算出式子的答案
以下代码输入一个式子(以
=
作为输入结束标志),输出结果,负数如-3用0-3表示,支持高位运算
#include
<stdio.h>
#include
<stdlib.h>
#include
<math.h>
#include
<malloc.h>
#define
OK
1
#define
ERROR
-1
typedef
char
SElemType;
typedef
char
Status;
#define
STACK_INIT_SIZE
100000
#define
STACKINCREMENT
2
struct
SqStack
{
SElemType
*base;
SElemType
*top;
int
stacksize;
};
struct
SqStack1
{
int
*base;
int
*top;
int
stacksize;
};
SqStack
OPTR;
SqStack1
OPND;
char
Precede(char
c1,char
c2)
{
if(c1=='+'
||
c1=='-')
{
if(c2=='+'
||
c2=='-'
||
c2==')'
||
c2=='=')
return
'>';
else
return
'<';
}
else
if(c1=='*'
||
c1=='/')
{
if(c2=='(')
return
'<';
else
return
'>';
}
else
if(c1=='(')
{
if(c2==')')
return
'=';
else
return
'<';
}
else
if(c1==')')
return
'>';
else
if(c1=='=')
{
if(c2=='=')
return
'=';
else
return
'<';
}
else
return
'\0';
}
int
In(char
c)
{
if(c=='+'
||
c=='-'
||
c=='*'
||
c=='/'
||
c=='('
||
c==')'
||
c=='=')
return
1;
else
return
0;
}
int
Operrate(int
m,char
b,int
n)
{
switch(b)
{
case
'+':return
m+n;
case
'-':return
m-n;
case
'*':return
m*n;
case
'/':return
m/n;
}
return
0;
}
//操作数
int
InitStack1(SqStack1
&S)
{
S.base=(int
*)malloc(STACK_INIT_SIZE*sizeof(int));
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return
OK;
}
int
Push1(SqStack1
&S,int
e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int
*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACKINCREMENT;
}
*S.top++=e;
return
OK;
}
int
Pop1(SqStack1
&S,int
&e)
{
if(S.top==S.base)
return
ERROR;
e=*
--S.top;
return
OK;
}
int
GetTop1(SqStack1
S)
{
if(S.top==S.base)
return
ERROR;
return
*(S.top-1);
}
//算符
int
InitStack(SqStack
&S)
{
S.base=(SElemType
*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return
OK;
}
int
Push(SqStack
&S,SElemType
e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType
*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACKINCREMENT;
}
*S.top++=e;
return
OK;
}
int
Pop(SqStack
&S,SElemType
&e)
{
if(S.top==S.base)
return
ERROR;
e=*
--S.top;
return
OK;
}
Status
GetTop(SqStack
S)
{
if(S.top==S.base)
return
ERROR;
return
*(S.top-1);
}
int
Calculate()
{
char
c,theta,p;
int
a,b,i=0,ans,x;
InitStack(OPTR);
Push(OPTR,'=');
InitStack1(OPND);
c=getchar();
while(c!='='
||
GetTop(OPTR)!='=')
{
if(!In(c)
&&
c>='0'
&&
c<='9')
{
Push1(OPND,c-'0');
c=getchar();
while(c>='0'
&&
c<='9')
{
Pop1(OPND,x);
Push1(OPND,x*10+c-'0');
c=getchar();
}
}
else
if(In(c))
{
switch(Precede(GetTop(OPTR),c))
{
case
'<':
Push(OPTR,c);
c=getchar();
break;
case
'=':
Pop(OPTR,p);
c=getchar();
break;
case
'>':
Pop(OPTR,theta);
Pop1(OPND,b);
Pop1(OPND,a);
ans=Operrate(a,theta,b);
Push1(OPND,ans);
break;
}
}
else
{
c=getchar();
}
}
return
GetTop1(OPND);
}
int
main()
{
int
ans;
ans=Calculate();
printf("%d\n",ans);
return
0;
}

阅读全文

与c语言编程求算术表达式相关的资料

热点内容
移动dsn服务器地址 浏览:689
90后女性嫁给程序员 浏览:302
fcm算法原理 浏览:803
上海兴力压缩机 浏览:699
什么app可以推送小区 浏览:592
韩国解压视频网站 浏览:619
做库管用什么app 浏览:33
pdf转dwg怎么转 浏览:53
单片机微小电阻测量 浏览:136
表格25兆怎么压缩 浏览:67
java开发公司的 浏览:129
东风天锦压缩车工作指示灯不亮 浏览:983
剑侠情缘1源码 浏览:530
cad2011怎么转换成pdf格式 浏览:966
传祺gs5安卓车机如何还原车机 浏览:900
单片机和编程器互相传输数据 浏览:92
app订单怎么取消 浏览:469
程序员用双显示器有什么作用 浏览:613
网约车算法杀熟 浏览:8
卡萨帝用的什么压缩机 浏览:157