表达式计算c语言
Ⅰ c语言中表达式是怎么计算的
z=15;
首先定义x=2;
第一个++x中x的值先自增1即x=3然后再被调用即z=3+
第二个++x中x先被调用再自增即z=3+3 当词句结束后然后x再自增即分号完了之后自增
第三个++x同第一个此时z=3+3+4
最后一个++x也同第一个此时z=3+3+4+5
Ⅱ C语言表达式计算步骤
强制转换的优先级高于运算符
剩下的就是括号和四则运算次序了
a+(int)(b/3*(int)
(a+c)/2)%4
1、(int)
(a+c)
强制转换
2、b/3*(int)
(a+c)/2
自左向右依次进行
3、(int)(b/3*(int)
(a+c)/2
强制转换
4、(int)(b/3*(int)
(a+c)/2)%4
数据取余
5、a+(int)(b/3*(int)
(a+c)/2)%4
Ⅲ C语言计算表达式的值
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 99
void translate(char str[],char exp[]) /*将算术表达式转换成后缀表达式*/
{
struct
{
char data[MaxSize];
int top; /*top为栈顶*/
}op; /*定义一个含data和top的结构体*/
char ch;
int i = 0,t = 0;
op.top = -1;
ch = str[i]; /*将str的每一个数转换成ch*/
i++;
while(ch != '\0') /*ch对应不同的符号的时候对应的转换情况*/
{
switch(ch)
{
case '(': /*当是(的时候,将此括号存入栈op*/
op.top++;op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '(') /*括号内的转换优先级最高,故先提取表达式*/
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case '+':
case '-':
while(op.top != -1&&op.data[op.top] != '(')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++; /*恢复可插入位置*/
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '/'||op.top == '*') /*优先级*/
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case ' ': /*忽略空格,排除误操作*/
break;
default:
while(ch >= '0'&&ch <= '9')
{
exp[t] = ch;t++;
ch = str[i];i++;
}
i--;
exp[t] = '#'; /*分隔操作数,为了美观,也为了以后好分隔操作数,呵呵*/
t++;
}
ch = str[i];
i++;
}
while(op.top != -1) /*得到剩下的部分*/
{
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0'; /*表达式结束*/
}
float cal_value(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st; /*操作数栈*/
float d;
char ch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;
while(ch != '\0')
{
switch(ch) /*运算主体*/
{
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{
printf("\n\t除0是错误的");
}
st.top--;
break;
default:
d=0;
while(ch >= '0'&&ch <= '9') /*从后缀表达式中获取操作数,#作用在此体现*/
{
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
return st.data[st.top];
}
int main() /*可以提到前面去*/
{
char str[MaxSize],exp[MaxSize]; /*str为算术表达式,exps为后缀表达式*/
printf("请输入一个求值表达式\n");
printf("表达式:");
gets(str); /*输入一个算术表达式*/
printf("原表达式是:%s\n",str);
translate(str,exp); /*将算术表达式转换成后追表达式*/
printf("后缀表达式:%s\n",exp);
printf("计算结果:%g\n",cal_value(exp));/*通过后缀表达式来求值*/
system("pause");
return 0;
}
Ⅳ C语言表达式怎么计算
这个就是考察运算符优先级,也就是先计算谁,后计算谁, 可以看我下面的截图,优先级从上到下从高变低, 高优先级的优先运算。
1+3>3&&5%2==1 可以等价这个((1+3)> 3)&& ((5%2)== 1)
这个上面加括号是因为括号的优先级最高, 这样不知你能理解不。
Ⅳ C语言计算表达式
#include <stdio.h>
main()
{
int i;
float s=0;
for(i = 0 ; i < 50 ; i ++)
s += 1.0 / ((2 * i + 1) * (2 * i + 3));
printf("s = %lf ",s);
}
Ⅵ c语言中表达式计算问题
这种问题十分没有意义,准确地说,此题答案不唯一,不同的系统会对这个表达式进行不同的解释,
1.
等号是右结合性操作符,所以运算过程是从右到左的,
首先计算
x-=x*x,之后整个表达式变成了
x+=-30,此时,x==6因此,最终结果是-24
2.
等号是右结合性操作符,所以运算过程是从右到左的,
首先计算
x-=x*x,之后,x=-30,然后再执行x+=x所以,结果就是x==-60
Ⅶ C语言计算并输出个表达式的值
#include<stdio.h>
int main()
{ int a=3,b=2,c=1,m;
printf("%d ",c>a+b);
printf("%d ",a>b==c);
printf("%d ",a==b>c);
printf("%d ",m=b>c);
printf("%d ",m=a>b>c);
printf("%d ",c+1>=a);
printf("%d ",c*2!=b);
printf("%d ",m=c==a%b);
return 0;
}
Ⅷ C语言计算表达式
#include<stdio.h>
int main()
{ double x;
int i,n;
scanf("%lf%d",&x,&n);
for(i=1; i<=n; i++)
x=sqrt(i+x);
printf("%f\n",x);
return 0;
}
Ⅸ C语言中表达式的值怎么算
此式即等同于 (4!=3)&&(2)&&(4+1<5)
1代表真,0代表非,则原式即 1&&1&&0 所以值为0。
例如:
-12/5 = -2 只为这个是整数运算,结果只取整数部分。
62 1*(6+7) + 7 *(6+1) = 13 +49 62
3.2 *(6+7+1) = 44.8
(9)表达式计算c语言扩展阅读:
一个表达式的赋值和算符的定义以及数值的定义域是有关联的。
两个表达式若被说是等值的,表示对于自由变量任意的定值,两个表达式都会有相同的输出,即它们代表同一个函数。
一个表达式必须是合式的。亦即,其每个算符都必须有正确的输入数量,在正确的地方。如表达式2+3便是合式的;而表达式*2+则不是合式的,至少不是算术的一般标记方式。
表达式和其赋值曾在20世纪30年代由阿隆佐·邱奇和Stephen Kleene在其λ演算中被公式化。λ演算对现代数学和电脑编程语言的发展都曾有过重大的影响。