forever love you图片:简单的C语言计算问题

来源:百度文库 编辑:高考问答 时间:2024/05/03 02:47:26
a=1;b=2;c=a>b&&a++;
printf("a=%d,c=%d\n",a,c);
结果是a=1 c=0
为什么?
我刚开始学习C语言,一点不懂,请详细一些,还有就是应该像看哪些方面的知识才能解决这样的问题

a=1不用说了吧,因为前面给a赋了值等于1,~~~c=a>b&&a++在这个表达式中,a++的运算优先级最高,也就是说系统最先处理这一步~~然后是a>b,然后是&&这一步,最后才是赋值表达式C=。。。这个式子系统运算时分解如下:
c=a>b&&a++
第一步:a++,此时A=2;
第二步:a>b,前面的结果,a=2,那么a当然不大于b了,这个式子的值就等于0。因为它是逻辑运算,非就是0.
第三步,&&,这又是一个逻辑运算,叫做逻辑与,就是说这个符号"&&"两边的同时为真时才为真,其余全为假,现在看看前两步它的两边的式子的值,左边,是0,所以,逻辑与运算结果肯定为假,就是说这个式子的值为0,
第四步,把这个逻辑与运算结果赋给C,C 当然为0了,呵呵,~~~

这一部分,你看一下C语言里运算符的优先级别~~~~还有就是好好看一下那些运算符号~~~刚开始学C,不要着急,现在不懂的以后过段时间就懂了~~~呵呵~~~

这个知道不,教材上没有这个定义.

宏定义
在C语言源程序中允许用一个标识符来表示一个字符串, 称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换, 这称为“宏代换”或“宏展开”。

一本教材(推荐谭浩强的C语言

a=1;b=2;
c=a>b&&a++;(这个意思是,a>b的结果是0,即为false,此式结果自然为0)
所以打印出a=1,c=0
注意,在C中,true=1,false=0

将a赋值为1,将b赋值为2,如果a>b的话,给a加1并且c赋值为1,否则c赋值为0

然后打印变量,变量的值在%d的地方被打印出来,后面依次按%d的数量和排列顺序添写变量名

此时a=1,b=2,由于a小于b,所以c为0

昏迷~~~
建议多去CSDN去逛逛
a=1:把1的值放在内存变量a中;
c=a>b&&a++
按运算规则先算a>b 返回bool值 0
对于&&(与)只要一个为0整个表达式就为0(离散数学)
然后把0存放在内存变量c中

国内一般都是看谭浩强的
国外就看Brian W. Kernighan, Dennis Ritchie (C语言之父)的
The C Programming Language

在c语言中,逻辑语句级别高于赋值语句。c=a>b&&a++; 先计算逻辑语句a>b&&a++其返回值只有1或0。当且仅当&&前后语句全为真时返回才为1。又因为a++是先赋值后计算,所以在a>b&&a++表达式计算时a 值仍为1,所以a>b为假,a>b&&a++返回值为0赋给c。又因为a>b已经为假,所以&&后的语句不再计算,即a仍为1,这是c语言的默认规定。