C语言求值表达式的顺序问题?

程序说明:a为6,动态输入b(值为3),c=a÷b,求c,为何调换一下表达式的位置,结果会不同。
正确程序如下:
float a=6;
float b;
float c;
printf("Enter b:");
scanf("%f",&b);
c=a/b;
printf("\nc=%f",c);

调换表达式c=a/b顺序后无法得出正确结果的程序如下
float a=6;
float b;
float c;
c=a/b;
printf("Enter b:");
scanf("%f",&b);
printf("\nc=%f",c);
我想知道为什么把c=a/b调到scanf函数前面,就无法计算出正确结果?希望能从具体过程详细说明,先谢过每位回答者。

因为你放在前面的时候b你没有给值诶
仍然是一个内存中的随机数
所以语句放在最前面的时候c=a/b这里的b不是你输入的值而是一个随机数
如果放在后面的话编译器就会将你输入的数字代替内存中的那个随机数
运算就可以正常进行了
及时采纳~不懂再问
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-28
所有的运算的前提是,参与该语句的所有变量都已经赋值或者都有有效值

c语言赋值运算中哪种优先级最高?
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。优先级与求值顺序无关。如a+b && b...

C语言中算术运算符优先级的问题
&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 && b; &&运算符的左边位0,则右边表达式b就不再判断。在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。赋值表达式则规定先对右边的表达式求值...

c语言中,计算的顺序是从哪向哪?
在C语言中,表达式的计算顺序是由运算符的优先级和结合性决定的。以下是C语言中一些常用运算符的优先级(从高到低):后缀运算符:++、-- 一元运算符:++、--、+、-、*、\/、%、&、|、^、~、!乘性运算符:*、\/ 加性运算符:+、- 移位运算符:<<、>> 关系运算符:<、>、<=、>= 相等...

C语言逻辑表达式问题
由于||和&&具有短路求值的特点,所以计算顺序是:1. 先算a,如果a非0,则后面的表达式不用算了,整个表达式直接为1 2. a为0,则仍需计算后面的表达式,先计算b+c 3. 如果b+c为0,则后面的b-c不用计算了,整个表达式直接为0 4.b+c不为0,再计算b-c。

c语言表达式的顺序怎样?
4、计算 0 + c,结果为 5 5、计算 5 -1,结果为 4。6、计算 b + 2 或者 b + 2.5,结果为 6 或者 6.5。7、计算 4 && 6 后者 4 && 6.5,因为两边都为非零值,所以结果为 1,或者true。这里主要是一个运算符优先级的问题,在本表达多中。小括号的优先级最高,所以最先计算...

C语言 表达式求值
a+=a-=a*=a 从右往左看 a *= a ; \/\/即 a = 3*3 此时a 的值为9 a -= (a*=a) ; \/\/即 a -= a ,即 a = 9 - 9 ,此时a的值为0 a += (a-=a*=a) ;\/\/ 即 a =+ a ,即 a = 0+0 ,此时a的值还是0 ...

关于c语言表达式
序列表达式(z=0, (x=2)||(z=1), z)求值时,顺序计算z=0、(x=2)||(z=1)、z三个子表达式(操作数),值等于最后一个子表达式的值。表达式z=0计算后,z的值为0。表达式z=0的值为0。表达式(x=2)||(z=1)计算时,先计算子表达式x=2。由于作为||运算符的左操作数,x=2的值为2而...

C语言题目,求解运算顺序
1、printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是,从右边开始处理的 2、逗号运算符:在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。3、++,--运算符:放在...

C语言 实参数求值问题
表达式的值是从左向右的,但是是把所有的表达式都计算完了以后才传值的。当 f(i, i++) 时,因为 ++ 是后缀运算,所以程序先把两个 i 值传入函数,然后 i 再自增就和 f 函数没有什么关系了。当 f(i, ++i) 时,因为 ++ 是前缀运算,所以程序先计算自增,虽然在计算左边参数的 i 时,i...

C语言中表达式1 | | (表达式2) &&表达式3 为什么先执行表达式1?
按照C语言优先级, A || B && C相当于A || (B && C), 所以你可能默认了先执行B && C.但是需要注意C语言的标准采用逻辑表达式短路求值: 对于d=X||Y, 如果X成立则不执行Y而直接得到d=1; 对于d=X&&Y若X不成立同样跳过Y直接得到d=0.在你的例子里 A || (B && C) 先得到了A成立, ...

相似回答
大家正在搜