C语言问题求大神解答

若执行语句:int b, a=12, n=5; 则表达式a%=(b=2,n%=b)+4的结果是? 写一下运算的方法,谢谢

楼主你好。

(b=2,n%=b)其实就是两条语句,第一条语句将b赋值为2,第二条语句将n对b取余并将结果存到n中,(也就是5%2的结果为1,把1赋值给n)。

然后上面这条语句的返回值就是第二条语句的返回值,也就是1,因此a%=(b=2,n%=b)+4就相当于a%=1+4即a%=5。

而12%5的值为2,将2的结果赋给a,如此一来,a的值为2。

测试代码:

#include <stdio.h>

int main()

{

int b, a=12, n=5;

printf("(b=2,n%=b)=%d\n",(b=2,n%=b));

a=12, n=5;

a%=(b=2,n%=b)+4;

printf("a=%d\n",a);

}


运行结果:

追问

如果先算b=2
之后n%=b就是n=n%b=5%2 = 1
之后计算1 + 4 = 5
那表达式不就变成了a%=b=2,n=5
那之后是如何算出2的?

追答

#include <stdio.h>

int main()

{

int b, a=12, n=5;

printf("(b=2,n%%=b)=%d\n",(b=2,n%=b));

a=12, n=5;

a%=(b=2,n%=b)+4;

printf("a=%d\n",a);

}



小小地修改了一下输出。

“那表达式不就变成了a%=b=2,n=5”不是啊,a%=(b=2,n%=b)+4其中(b=2,n%=b)的返回值参与表达式的运算,(b=2,n%=b)的返回值是1,因此a%=(b=2,n%=b)+4相当于a%=1+4。

不是n+4,是整个(b=2,n%=b)表达式的返回值+4对a做取余运算。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-30
a%=(b=2,n%=b)+4
1 计算()里面的,b=2, n=n%b=5%2=1, 逗号表达式返回最后一个表达式的值(赋值表达式的值就是被赋给的值,即1),所以括号里面结果为1
2 计算a%=1+4,先计算等号右边的值(5),则a%=5,等价于a=a%5=12%5=2本回答被提问者采纳
第2个回答  2012-12-30
2 先计算括号里的逗号表达式结果为1,再计算 a%=5 结果为2

C语言问题求大神详细解析
a错 因为调用在定义之前但是没有声明 b错 函数定义的时候返回值类型为void,却欲图使用函数的返回值。c错 函数的声明返回值为int,定义返回值为void 不相符 d正确

c语言问题求解!!!谢谢!!!
问题一箩筐,还得歪着头看,挺佩服自己。根据你的问题一一做解答:1、a += a -= a*a ; \/\/这个语句的核心是要明白不同运算符的优先级,以及结合性。 +=,-= 是赋值运算符,优先级仅比‘,’高,是明显低于算术运算符‘*’的,而且赋值运算符的结合性是“从右往左”(也就是把右值赋给左...

求大神C语言编程,题目要求在下面
问题一:关键在输入字符和字符串要避开回车及空格分隔符。这里可以用getchar解决。问题二:就是让你函数调用。问题三:依然是函数调用,但需要函数1返回值或传递地址。至于数字字符转整型,大小写转换,都利用ascii码的差值来转换。下面是我的代码,三个函数分别对应三个问题。include<stdio.h> define MLE...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
答案就是 A) 1

C语言入门题目,求详细易懂的解答过程。
答案为第一行:Tony。解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是...

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下。
^是按位异或运算符,需要把a和b的值化为二进制数后进行按位异或就能得到答案。题中,a=3 ,二进制为:0011;b=6,二进制值为:0110。所以(a^b)按位异或后的值为0101也就是5,左移两位后值(二进制)为:010100 也就是 :20

C语言问题,求解析,谢谢
第二个考察点是两个整数相除仍然是整数,即舍掉小数点后面的部分,第三个也是最重要的一个考察点是逻辑的运算,即在C语言里,非0的数我们认为它的逻辑值是1,就是它是真的,而整数0的逻辑值是0,就是它是假的,所以本题左边是1 ,右边也是1,逻辑或有一边是1就得1,所以选D。

C语言作业,急急急求解答
这个问题可能是由于软件代码中存在大量的冗余、重复计算或者低效算法等因素导致的。另外,如果软件需要加载大量的数据或者进行网络连接,则也会影响其启动速度。解决方案:为了解决这个问题,我们可以从以下几个方面入手:1.优化程序代码:检查程序中是否存在冗余、重复计算或者低效算法等因素,对代码进行优化和...

学生来看这8道C语言谜题你能答对几个
C语言8个语言谜题答对几个 1、下面的程序并不见得会输出"hello-std-out"你知道为什么吗? 参考答案:stdout和stderr是不同设备描述符。stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入:遇到回车; 缓冲区满;flush被调用。而stderr则不会。 2、下面的程序看起来是正常的,使用了一个逗号...

c语言输出问题,37题,求大神详细解答一下*的作用,以及最后输出结果是怎么...
1 printf函数称为格式输出函数,其关键字最末一个字母f即为“格式”(format)之意。其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上 2 printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。printf 函数不要求必须包含stdio.h文件。3 printf函数调用的一般形式为: printf(...

相似回答