运算顺序

有以下程序

#include <stdio.h>
main()
{ int a=1,b=2,c=3,d=0;
if (a==1 && b++==2)

if (b!=2||c--!=3)

printf("%d,%d,%d\n",a,b,c);

else printf("%d,%d,%d\n",a,b,c);
else printf("%d,%d,%d\n",a,b,c);

}

程序运行后的输出结果是 1 3 3

else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作?而是进入第二个if语句条件判断,因为b!=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c-- !=3)c的值不变,也不再执行第一个else语句?打印a的值1,b的值3,c的值3?

时间: 2024-11-05 14:57:30

运算顺序的相关文章

java中+(加号或字符串连接)运算顺序的问题

由于java中+(加号或字符串连接)的运算顺序是从左向右的,所以一下程序的输出会得到两个不同的结果 1 public class Test { 2 public static void main(String[] args) { 3 System.out.println("ddd"+7+5); 4 System.out.println(7+5+"ddd"); 5 6 } 7 } 结果为ddd75 12ddd

运算顺序引发的一系列有趣问题

问题:采用递归方法计算给定整型数组元素之和. 以下给出几种递归算法的实现: 1 int sum1(int a[], int n) 2 { 3 if(n > 0) 4 return a[n-1] + sum1(a, n-1); 5 else 6 return 0; 7 } 8 9 int sum2(int a[], int n) 10 { 11 if(n > 0) 12 return a[n-1] + sum2(a, --n); 13 else 14 return 0; 15 } 16 17 i

值得深思的连续赋值--赋值运算符运算顺序

最近在看到以前前辈留下的文章,对于连续赋值( var a={n:1}; a.x=a={n:2}) )这个知识点,一开始也搞不清楚,但是最终还是说服了自己,谈谈自己的心得.以下代码能回答正确的可以忽略本文. 1 var a={n:1}; 2 var b=a; 3 a.x = a = {n: 2}; 4 console.log(a.x); //? 5 console.log(b.x);//? 正确答案是: a.x= undefined; b.x= {n: 2}; 疑惑:为什么a.x与b.x不相等呢?

java 运算顺序

java 运算顺序,布布扣,bubuko.com

C语言中指针和自增运算符结合时的运算顺序问题

在C语言中,当指针运算符和++或者–结合时很容易分不清运算顺序,在这里总结一下,下面一共分析6中组合: * p++,(* p)++,* (p++),++* p,++( * p), * (++p). 先看段代码以及输出: #include<stdio.h> int main() { int a[3]={1,3,5}; int *p=a; printf("----------------1----------------\n"); printf("%d\n"

js 关于运算顺序的问题

先介绍涉及到的概念 表达式:js中的短语,解释器在遇到表达式时,会将短语进行计算,然后再参与到运算中,表达式即js中的短语. j所有的s代码都是由操作符和表达式组成的,因此除了操作符,其他的都是js中的表达式. 如1 + 1 这段代码中,+是操作符,前面的1和后面的1都是表达式. 表达式的分类: 原始表达式:常量(如π).变量.直接量(数字.字符串.正则表达式).关键字 初始化表达式:初始化对象和初始化数组 函数定义表达式: 函数调用表达式: 属性访问表达式: 对象创建表达式:使用new操作符创

js运算顺序随笔

看代码看到一个js多运算符运算.自己写代码试了一下明白了. 自己示范的代码 运算顺序,先是非用算a的非为false,然后进行严格等于运算.b===false为false.再进行逻辑或运算两个都是falses所以不会进入if语句,不会弹框 原文地址:https://www.cnblogs.com/w7589/p/8274835.html

javascript:第四章 &nbsp; Number 和 parseFloat 和 parseInt &nbsp; 的运算顺序注意的!

Number 的 运算是 从整体把么个参数转成number类型 alert(Number(''));//0 //alert(Number([]));//0 alert(Number('20元')):=>NaN alert(Number(null));=>0; alert(Number(document));=>NaN; alert(Number(NaN));=>NaN; alert(Number(true));=>1; alert(Number(undefined));=&g

Python中 and or 运算顺序详解 --- 短路逻辑

核心思想 表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 . 表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算. 若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑. 详情参见:http://www.cnblogs.com/an9wer/

C语言运算符运算顺序判断实例2

#include <stdio.h> int main(void) { int i = 1, j = 1, k = 1; printf("%d\n", ++i || ++j && ++k); printf("%d %d %d\n", i, j, k); } 运行结果为: 1 2 1 1 左边算子优先计算 ++i = 2 被下一个 printf 读取,|| 符号只会储存左边的运算值,右边新计算的值被遗弃. 如果程序变为: #include