1. c语言计算表达式的值
逗号运算符
左至右计算
取
表达式
值作
整
语句
值
先算a=3,
a赋值
3
算b=4,
b赋值
4
计算c=a+b
实际
c=3+4
c
值
7
终整条语句
值
c
值7.
2. C语言关于表达式求值
c语言有丰富的表达式,这是它的特点之一,表达式主要有4类,算术表达式,赋值表达式,逗号表达式,关系表达式
1.算术表达式就是包含算术运算符(如+
-
/
*
%等)的表达式(不是语句,后面没有分号),如:a+b
,a%b,a+b-c*d,3+5等,算术表达式的值就是最后算出的结果,如3+5这个表达式的值就是8
2.赋值表达式,就是含有赋值运算符=的表达式,如a=5,b=3,c='a'等,=左边的a,b,c称为左值,必须为变量,=右边的5,3,'a'称为右值,必须为常量,赋值表达式的值为右值,如a=3的值为3,c='a'的值为字母a的ascii码65(当然也可以认为它的值就是字母a)
3.逗号表达式就是含有逗号的表达式,形式:表达式1,表达式2,表达式3.......如a,b,c
3,5,7
a=3,b=4,c=6
3,a=5,b=6等
逗号表达式的值为,最右边的表达式的值,如3,4,5的值就是5,表达式a=3,b=4,c=6的值就是表达式b=6的值,由上述分析知,表达式b=6的值就是6,所以表达式a=3,b=4,c=6的值就是6
4.关系表达式,指含有关系运算符(如>
<
>=
==
=<等)的表达式(其实也是算术表达式的一种)如a>b,a>6,6>5,3<2,4==6等,如果表达式的关系是正确的,那么表达式的值为1,否则为0
如6>5正确,表达式的值为1,3<2,和4==6错误,表达式的值为0
当然可以细分为很多种表达式,不过主要也就是这几种的变型,希望对你有所帮助
3. C语言(a=2,b=5,b++,a+b)这个括号表达式的值怎么算
(a=2,b=5,b++,a+b)这个叫逗号表达式,其值为最后一个表达式a+b的值8。
4. 用c语言写带括号表达式求值的程序
//参考代码
#include<stdio.h>
#include<string.h>
typedefintSElemType; //栈的元素类型
#defineSTACK_INIT_SIZE10 //存储空间初始分配量
#defineSTACKINCREMENT2 //存储空间分配增量
/*
*顺序栈的结构体
**/
typedefstructSqStack
{
SElemType*base; //在栈构造之前和销毁之后,base的值为NULL
SElemType*top; //栈顶指针
intstacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
/*
*构造一个栈
**/
intInitStack(SqStack*S)
{
//为栈底分配一个指定大小的存储空间
(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(0); //存储分配失败
(*S).top=(*S).base; //栈底与栈顶相同表示一个空栈
(*S).stacksize=STACK_INIT_SIZE;
return1;
}
/*
*获取栈顶元素
**/
intGetTop(SqStackS,SElemType*e)
{
if(S.top>S.base)
{
*e=*(S.top-1); //栈顶指针的下一个位置为栈顶元素
return1;
}
else
return0;
}
/*
*入栈(压栈)
**/
intPush(SqStack*S,SElemTypee)
{
if((*S).top-(*S).base>=(*S).stacksize) //栈满,追加存储空间
{
(*S).base=(SElemType*)realloc((*S).base,
((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(0);//存储分配失败
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
//这个等式的++*优先级相同,但是它们的运算方式,是自右向左
return1;
}
/*
*出栈
**/
intPop(SqStack*S,SElemType*e)
{
if((*S).top==(*S).base)
return0;
*e=*--(*S).top;
//这个等式的++*优先级相同,但是它们的运算方式,是自右向左
return1;
}
/*
*判断优先级
**/
SElemTypePrecede(SElemTypet1,SElemTypet2)
{
SElemTypef;
switch(t2)
{
case'+':
case'-':
if(t1=='('||t1=='#')
f='<';
else
f='>';
break;
case'*':
case'/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else
f='<';
break;
case'(':
if(t1==')')
{
printf(ERROR1
);
exit(0);
}
else
f='<';
break;
case')':
switch(t1)
{
case'(':
f='=';
break;
case'#':
printf(ERROR2
);
exit(0);
default:
f='>';
}
break;
case'#':
switch(t1)
{
case'#':
f='=';
break;
case'(':
printf(ERROR3
);
exit(0);
default:
f='>';
}
}
returnf;
}
/*
*搜索运算符
**/
intIn(SElemTypec)
{
switch(c)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'#':return1;
default:return0;
}
}
/*
*运算
**/
SElemTypeOperate(SElemTypea,SElemTypetheta,SElemTypeb)
{
SElemTypec;
a=a-48; //ASCII值转化为对应的十进制值
b=b-48; //ASCII值转化为对应的十进制值
switch(theta)
{
case'+':
c=a+b+48;
break;
case'-':
c=a-b+48;
break;
case'*':
c=a*b+48;
break;
case'/':c=a/b+48;
}
returnc;
}
/*
*比较运算符优先级
**/
SElemTypeEvaluateExpression()
{
SqStackOPTR,OPND;
SElemTypea,b,c,x,theta;
InitStack(&OPTR);
Push(&OPTR,'#');
InitStack(&OPND);
c=getchar();
GetTop(OPTR,&x);
while(c!='#'||x!='#')
{
if(In(c))//是7种运算符之一
switch(Precede(x,c))
{
case'<':
Push(&OPTR,c);//栈顶元素优先权低
c=getchar();
break;
case'=':
Pop(&OPTR,&x);//脱括号并接收下一字符
c=getchar();
break;
case'>':
Pop(&OPTR,&theta);//退栈并将运算结果入栈
Pop(&OPND,&b);
Pop(&OPND,&a);
Push(&OPND,Operate(a,theta,b));
break;
}
elseif(c>='0'&&c<='9')//c是操作数
{
Push(&OPND,c);
c=getchar();
}
else //c是非法字符
{
printf(非法字符!!
);
exit(0);
}
GetTop(OPTR,&x);
}
GetTop(OPND,&x);
returnx;
}
intmain()
{
printf(请输入算术表达式,并以#结束);
printf("%d",EvaluateExpression());
return0;
}
5. 求编程大侠解答!一个C语言逗号表达式和括号的问题
逗号很好办,逗号就是单纯分隔两个式子,括号的主要作用是将括号内的运算式子作为一个整体,也有优先运算的含义(这个含义和数学上是一样的)
对于你的这段程序,首先说b,原式是(b=4*5, b*2), b+6
首先计算b=4*5,此时b=20,然后算逗号后的式子就是b*2,注意这里没有说把结果赋值给b,所以b还是等于20,最后的b+6同理,只是计算了一个式子,并没有保存结果,所以b最后的输出为20;
再说a,输出的式子是一个括号,这是一个整体,式子里面首先计算a=3*5,所以a=15,然后计算a*4,同样没有被保存,a还是15,最后计算a+5,这个时候还是没有赋值,所以a=15。但是由于在同一个括号里有2个逗号分开了3个式子,所以括号这个整体的值由最后一个式子决定,最后一个式子的值是a+5,也就是15+5,所以括号这个整体的值是20,输入为20。
6. C语言中的括号运算
理论上来说
增加括号只会增加编译的时间 并且对运行的时间是没有差别的
也就是增加了把你从c/c++代码变成exe的时间,但是不会影响exe运行的时间
而且 增加一两个括号 对于计算机编译时间的影响是微乎其微的
计算机一秒计算数量以亿算 怎么会差这一个括号呢
关于代码运行效率 更应该注意的是算法,而不是这些语句 那个才能从本质上提高程序运行效率
多行的代码 运行效率就不一定比单行的要低
作为源代码重要的一是算法 二是可读性 增加括号和增加有必要的换行不但不会降低运行效率,反而会使代码更加容易理解 减少歧义的产生
7. c语言 圆括号用法 赋值 a=(1,2);printf(“%d”,a);什么意思
圆括号有较高的优先级,一般先执行圆括号内的代码
(1,2)是一个逗号表达式,逗号表达式的值=最后一个值,前面的操作按顺序执行
a=(1,2)显然a=2
8. C语言(a=2,b=5,b++,a+b)这个括号表达式的值怎么算
(a=2,b=5,b++,a+b)这个叫逗号表达式,其值为最后一个表达式a+b的值8.
9. C语言中括号运算符的问题
哈哈,你这是一个逗号表达式。
它将以逗号为界,从左到右依次计算每个表达式的值,最后返回最右边的表达式的值。
阿明白??
10. c语言中的括号表达式
括号表达式计算顺序是从左到右,然后整个表达式返回的是最右边表达式的值,如第一个表达式,先算最内层的括号表达式的最左边的值,再把其最右边的值返回并赋值给b,所以b在此次运算之后变为3,之后b+2=5(但5只是一个临时值,b值还是3),之后15+b=18,并且这个值由于是最右的表达式会作为整个大括号表达式的返回值,即b再一次被赋值为18,然后现计算b+=18得到36;
如此第二个就是-30吧,对了,赋值表达式是从右到左赋值的