设有定义 int a=3 b=4 c=5,求下列表达式的值,在表达式运行后,a b c的值分别是多少?(1)a%b+b/a (2)a/b+c++ (3)-b++-c (4)(a,b,c),a++,--c,C++
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 09:44:33
设有定义 int a=3 b=4 c=5,求下列表达式的值,在表达式运行后,a b c的值分别是多少?(1)a%b+b/a (2)a/b+c++ (3)-b++-c (4)(a,b,c),a++,--c,C++
设有定义 int a=3 b=4 c=5,求下列表达式的值,在表达式运行后,a b c的值分别是多少?
(1)a%b+b/a (2)a/b+c++ (3)-b++-c (4)(a,b,c),a++,--c,
C++
设有定义 int a=3 b=4 c=5,求下列表达式的值,在表达式运行后,a b c的值分别是多少?(1)a%b+b/a (2)a/b+c++ (3)-b++-c (4)(a,b,c),a++,--c,C++
(1)先算a%b=3,再算b/a=1,最后相加得结果4.a、b值不变.规则:先乘除/取模,后加减,和数学习惯一样.
(2)先算a/b=0,再加c得结果5,最后c++.a、b值不变,c=5+1=6.规则:在以上基础上,变量右边的递增/递减运算符最后算,反之,变量左边的递增/递减最先算,仅次于括号、下标等.
(3)同理,先算-b-c得结果-9,然后b++.a、c值不变,b=4+1=5.规则同上,负号优先于乘除.不过你最好加上空格,如-b++ - c,这样可以看得出第一个“-”和“++”是和b结合的单目运算符,第二个“-”是b和c之间的双目运算符.
(4)先算括号中的a,b,c,依次计算,括号内的结果是最后一个表达式c的值为5,前两个表达式结果被丢弃,其过程也没有造成任何影响;然后算--c,c的值变为4;接着算5,a,4得最终结果4;最后算a++,a的值变为4.这个比较复杂,最后a=4,b不变,c=4,结果为4.规则:括号最优先,逗号顺序运算各个表达式,得到最后一个表达式的值,其优先级最低,仅次于变量右边的递增/递减运算符,其他的上面都说过了.
需要注意的是,这里是按照ANSI C的标准进行解读的,实际上不少编译器没有真正完全按照ANSI C标准去写,情况可能有所不同.如果你不放心,可以把它们拆分开来都编译一遍做试验,一切要以你用的编译器的实际情况为准.不过个人认为最有效的办法就是编程时不要使用这种形式的表达式,将递增、递减、逗号等单独运算,对绝大多数编译器,这样不会降低效率.然而却减少了代码被编译器误读的可能性,也使你的代码更清楚易懂,可谓一举两得.