刚学C语言,有两个表达式要请教大家

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
帮忙求一下下面两个C语言表达式的值

1 x+a%3*(int)(x+y)%2/4
int(x+y)=7 强制转换
% / *是同一优先级自左向右结合
a%3=1,1*7,7%2=1,1/4=0.
所以值为2.5

2 (float)(a+b)/2+(int)x%(int)y
(float)(a+b)=5.0 (int)x%(int)y=1
所以值为3.5
(类型)优先级大于% / *

表达式的值是3
条件表达式?表达1 :表达式2

条件表达的值为真时 为表达式1的值否则为表达2的值

则:1>2 为假所以 取表达式2 ++b

所以为3

a=5+c+d=a+5
赋值号左边只能是左值表达式 a=5+c+d是右值表达式
只有左值表达式 才能赋值
a=5+c,d=a+5两个语句之间应用分号隔开

====================
a=5+c+d=a+5
首先只有左值表达式 才能赋值
其次由于优先级的原因,先执行左边的等号。可以改为
a=5+c+(d=a+5)
这样就是你说的情况了。是正确的。

逗号表达式是在两个括号里的

=========================

左值表达式的概念你可以看看书,一般变量都是左值表达式,还有好像i++和++i也是;就是说可以放在等号左边的都是左值表达式,其余的是右值表达式,也就是不能给它赋值的都是右值表达式

===============
因为a=5+c+d的结果是返回a最后的值,是一个数值,数值是不能赋值的,就好像不能执行5=6一样。只有返回结果是分配了内存的变量时才能赋值

===============
a=5+c+d=a+5首先执行a=5+c+d,假设结果是15,那么就是15=a+5了,主要是后边不对

====================
赋值方式从右往左,但是两个等号优先级相同,所以先执行左边那个

a+5是赋值给c还是d,还是c+d,程序无法确认,当然错了。

a=5+c,d=a+5这个像最后加个;号看看会不会错?如果错的话将,号改为;号.

a=5+c,d=a+5
是可以作为逗号表达式看待的

a=5+c+d=a+5中的C和D 是否都已经赋值了呢,如果没有那就错,还有提醒你,如果是语句的话就应该有分号哦,要不然运行的时候会出错。

a=5+c+d=a+5
赋值号左边只能是左值表达式 a=5+c+d是右值表达式
只有左值表达式 才能赋值
a=5+c,d=a+5 语句之间应用分号隔开

a=5+c+d=a+5
这看上去像一个赋值表达式,不能把一个表达式赋给一个表达式,只能把表达式赋给一个变量。
a=5+c,d=a+5这个什么都不是,如果要是的话,必须是这样a=5+c;d=a+5;
因为C语言里面一个语句必须是要分号的,不然什么都不是

  • 刚学C语言,有两个表达式要请教大家
    答:a=5+c+d=a+5 赋值号左边只能是左值表达式 a=5+c+d是右值表达式 只有左值表达式 才能赋值 a=5+c,d=a+5两个语句之间应用分号隔开 === a=5+c+d=a+5 首先只有左值表达式 才能赋值 其次由于优先级的原因,先执行左边的等号。可以改为 a=5+c+(d=a+5)这样就是你说的情况了。是正确的。
  • 初学者请教简单的C语言问题。。。
    答:1、if(*p!='\0')应该是==。一个=是附值;2、for(;*q==' ';q--);q没初始化;
  • c语言的表达式求解,求助
    答:InitStack(StackR);Push(StackR,'$');InitStack(StackD);c=getc();while(c!='$'||GetTop(StackR)!='$'){ if(!In(c,OP)){Push(StackD,c);c=getchar();} /*不是运算符则进栈*/ else switch(Proceed(GetTop(StackR),c)){ case'<': /*栈顶元素优先*/ Push(StackR,c);...
  • c语言while,if表达式的问题,请教高手!
    答:1.布尔变量与零值比较 不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。假设布尔变量名字为flag,它与零值比较的标准if 语句如下:if (flag) // 表示flag 为真 if (!flag) // 表示flag 为假 其它的用法都属于不良风格,例如:if (flag == TRUE)if (flag == 1 )if (flag == FALSE)...
  • C语言表达式
    答:a=0,b=2,c=3;a||b++||++c的值是1,b值是3,c值是3。因为逻辑“||”表示关系或,a为0,不知道整个表达式的值,需要继续计算,当计算到b当||左表达式(因为是“副作用”点,++被执行,b变成3),知道了整个表达式值为1,终止计算。所以a||b++||++c的值是1,b值是3,c值是3。最后一个...
  • 刚刚学习C语言,请教4个问题
    答:1 include<stdio.h> void main(){ int i;for(i = 21;i<=84;i++)if(i%21 == 0 ) printf("%d\n",i);} 2 include <stdio.h> void main(){ long a,i=2;float s;printf("输入第1位员工的额\n");scanf("%d",&a);while(a!=-1){ s=400.00;if(a>=5000) printf("...
  • C语言初学者请教大家
    答:a==10,y==0 a==12,y==12 a==14,a==16,y==y+a==28 a==14,a==16,y==y+a==44 a==14,a==16,y==y+a==60 这时,y大于了50,循环终止 你的程序和下面程序等价 include <stdio.h> main(){ int a,y;a=10;y=0;do { a+=2;y+=a;a=14;if(y>50)break;}while(...
  • 我是C语言初学者,有许多不懂的问题想请教大家,我在编“输入a,b,c三个...
    答:首先scanf(%d,%d,%d,&a,&b,&c);改成 scanf("%d,%d,%d",&a,&b,&c);其次:int max(int x,int y,int u){ int z;if(x>y){ if(x>u)z=x;elsez=u} else {if(y>u)z=y;elsez=u;} return(z);}
  • 急!急!小弟才学C语言,有小问题请教各位大师。
    答:(p+1)=i+1;笔误把,把1改称i就行了 (p+i)=i+1;
  • c语言初学者请教一下各位 请问一下 哪错了
    答:你的是错的 例如 a = 8 b = 8-a = 0 但是题目有要求 : a的最小“合发数”也必须是正整数,即其值至少是1;因此 a = 8 b = 80 才行