求C语言大神给我讲解下下图中的c=(a-=a-5),(a=b,b+3); 的运算过程以及中间逗号的意思

作者&投稿:谏古 (若有异议请与网页底部的电邮联系)
当a=-2,b=3,c=-7,d=-5时,求各值 (1)a+b+c+d; (2)-a-b-c-d?~

当a=-2,b=3,c=-7,d=-5时,求各值
(1)a+b+c+d;=-2+3-7-5=-11
(2)-a-b-c-d?=2-3+7+5=11

c=abc(a,b) 中abc()是一个处理函数,a,b是传递参数,就是把a,b两个输传入abc()函数进行处理计算,u是最后的处理结果,通过return u,可以返回u的值,返回给main函数中的c,有什么问题可以追问~

首先,请搞明白一种表达式叫逗号表达式,就是将一组语句连着写出来,中间用逗号分隔;表达式的取值是最后一个语句的取值。

c=(a-=a-5),(a=b,b+3); 这个语句是一个逗号表达式,前面的语句是c=(a-=a-5);后面的语句是(a=b,b+3);后面的语句也是个逗号表达式,整个表达式的值没有处理,所以不关心。

计算:

a-=a-5;即a-=-5;即a+=5;结果a=5

c=(a-=a-5)结果c=5,a=5

a=b结果a=0

b+3运算了等于3但没有保存结果,对a,b,c的值不产生影响

(a=b,b+3)的值是3,即b+3的结果,但这个结果也没有保存,对a,b,c的值不产生影响

最终:a=0,b=0,c=5



逗号运算符:

在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。

逗号运算:

在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。

例如:

int a1,a2,b=2,c=7,d=5;

a1=(++b,c--,d+3);

a2=++b,c--,d+3;

对于给a1赋值的代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是(d+3)的值,为8,所以a1的值为8。

对于给a2赋值的代码,也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=4(第2行代码运算完时,b=3,即第3行代码运行时,b的值为4)。

注意事项:

逗号运算的结合性是从左至右,完毕之后整个表达式的值是最后一个表达式的值。
例子:int a[2],x=2,y=5;

a[0]=(x+3,y++,x++);那么最终结果是:a[0]=2 x=3 y=6;

为何a[0]=2:因为(x++)是运算之后再自加

a[1]=(x++,x+3,x+7);那么最终结果是:a[1]=11 ,x=4

第一反应,我以为a[1]=10,就是3+7;其实是错的。

计算a[0]的时候,x++了一次,此时x=3;计算a[1]的时候,又x++一次,此时x=4,因此a[1]=4+7=11

不信你改成a[1]=(x++,x+7,x+3);调试一下,逗号表达试结果是7,就是4+3,说明经过一个逗号,x已经自加变成4了。[1]

再来一个关于结合性的例子:

int i=24;

i=(i++,i++,i++,i++);//i=27

因为逗号运算符的结合性是自左向右,所以四个i++会依次运行,但是最后一个i++在赋值之后才进行运算,所以最终返回27

中间的逗号起到分隔作用,逗号是一个双目运算符
(A,B)返回的是B的值,同时逗号是从左往右算,所以先算A
(a-=a-5)   中,先算a-5还是  -= ?要看运算符优先级,-比-=高,所以先算a-5 =-5
然后a-=-5,此时a仍未0,所以该表达式为5
第二个同理
(a=b,b+3)返回的是b+3

 值得一提的是,由于逗号比赋值优先级低,所以c=(A,B),(C,D)实际上是

c=(A,B),返回的是B



这是逗号运算符  ,你可以百度一下 运算符的优先级  ,可以看到所有的运算符,然后看下逗号运算符的使用。
这有两个表达式 c=(a-=a-5) (a=b,b+3) 这个表达式里面又有2个表达式 
=优先级别会高于逗号,c=5, a=0 b=0 整个表达式的值会是3,

a=0;b=0;c=5


各位大神帮帮忙,谁能给我具体讲解一下,c语言返回值,就是return,这个我...
这个原材料就是传说中函数参数,给你的门就是返回值!所以函数调用就是你将你的原始数据托付给一个现有的函数(你自己定义的希望按照你的规则处理,别人写好的,或者标准库里的)并将处理的结果给你。但是在C语言中,你必须声明你将给子函数提供的参数的类型,并声明返回值的类型。举例:int add(int ...

求C语言的大神帮我解释下这个程序吧,最好每句标注下。谢谢~~
是自适应滤波器算法的C语言程序,在DSP芯片VC5509上,用CCS

求大神讲解一个比较难得C语言程序
要么干脆抛弃拿出来的那一个,直接从剩下的 n - 1 个东西中选出 k 个东西。第一种方法共有 C ( n - 1, k - 1 ) 种拿法,而第二种方法共有 C ( n - 1, k ) 种拿法,二者相加就是全部的拿法 C ( n, k )。理解了这个法则后,这段代码就比较容易看了。我把注释写在了下面:i...

会C语言的大神们给我讲讲啊,这道题输出结果为什么是7!!!
因为++这个操作符放在变量后边的话是“先用后加”的顺序,于是while(x++<=5)这句代码循环了7次。当x=5的时候,这句语句的判断还是true,判断完之后x就是6了,但是while(x++<=5)这句代码依然需要再执行一次,然后才会判断6大于5而跳出循环,然后6自加1,于是x的最终值是7。

C语言 我是刚入门的小白 求大神讲解
这个叫作前置声明。编译器在看到声明的语句后,就会去自己寻找函数的实现部分,最后编译的结果其实是一样的。

c语言大神求教
p++——先取p指向的值,再让p指向下一个元素,即相当于*p,p++;或*p;p++;;(++p)——先让p指向下一个元素,然后取这个元素之值;++p——同*(++p);++(*p)——先取p指向的元素之值,再给这个取出来的值+1并存储;(*p)++——独立应用时与++(*p)效果相同,在表达式中用+1前的值,而...

哪位大神能给我讲解这几个c语言语句
time_t 是时间变量类型 一般time_t是unsigned long类型,单位是秒 struct tm 是日期结构,一般这么定义的 struct tm { int tm_sec; \/* 秒–取值区间为[0,59] *\/ int tm_min; \/* 分 - 取值区间为[0,59] *\/ int tm_hour; \/* 时 - 取值区间为[0,23] *\/ int tm_mday; \/* 一...

求大神解释c语言程序,最好每句都解释下,急,在线等。谢了。
char s[1000],s1[1000],s2[1000];\/\/定义了3个字串数组,根据下面的可以知道s数组用来存取你读入的字串,s1用来存取前面的函数名称,s2用来存取后面的数字 double a;int c=0;int j=0;printf("输入格式如下:反三角函数:arctan30;三角函数:tan30(采用的是弧度制);\\n");scanf("%s",&s);...

请擅长C语言的大神帮我解答一道关于字符串的计算题!请把每一部计算步 ...
include<stdio.h>main(){char s[]="123456789",*p=s;\/\/p指向s的第一个字符 int i=0;while(*p)\/\/循环判断字符 { if(i%2==0) *p=' *';\/\/i%2==0 123456789(010101010)所以改变的是偶数位置的数 p++;\/\/p本来指向第一个字符1,加1,指向第二个字符,以此类推 i++;}printf("%...

求大神用通俗的语言帮我解释一下C语言,而且那个C是什么意思?
4、初学者,建议学习C语言,不求精深,水平达到能过计算机等级考试就行。重在入门。可速成。5、然后选择高级语言来学习,深入学习。因为目前大部分公司都在采用高级语言编程。现在一般学Java,或C#。6、C++,我给它列在中级语言,但是它同样具有高级语言的特征,是个异类,神一样的语言。学好C++,所有...

武义县13073542260: C语言中==的用法求大神解答 -
伯洋积大: 举个例子:x=5的意思是把5赋值给x,而x==5的意思是把变量x的值与5相比较.前者是一个赋值语句,而后者是一个判断条件,通常在if(x==5),while(x==5)等语句中出现,用于判断条件.

武义县13073542260: C语言?求高手解释下以下一条代码? while((c=getchar())!='\n') { -
伯洋积大: while((c=getchar())!='\n') { if((c>='a'&&c<='z')||(c<='A'&&c<='Z')) { c=c+4; if(c>'Z'&&c<='Z'+4||c>'z') c=c-26; } printf("%c",c); } 输入字符串并以回车结束.字符串中每个字符输入后,如果是字母,则顺次后推4个并打印输出(例:输入为A,输出为E.输入为Y,输出为C),如果不是字母则输出原字符.另外,感觉原程序少了一点..if(c>'Z'&&c<='Z'+4||c>'z')这句写成if(c>'Z'&&c<='Z'+4||(c>'z'&&c<='z'+4))可能更符合它的意思..不然这个程序的意思太别扭了

武义县13073542260: C语言 求大神解释一下c的结果是如何等于到99的 -
伯洋积大: 你的代码结果应该问题,把代码写好抄看一点,该换行的要换行和缩进袭,这样便于看懂2113自己写的程序,也增加了程序的可读性.相关5261代码解读如下:第一个条件不满4102足,执行 a=c; c=t;语句,第二个条件满足执行 t=b; b=a; a=t;所以c 的值1653最终为99

武义县13073542260: 求c语言大神帮我分析下下面这个程序
伯洋积大: 应该对你有帮助的!这个函数遇到输入$才能打印一个$出来,否则就会继续调用自己,还是要判断$,所以直到出现美元符号,函数才能结束.c=getchar()这个函数每次只能取一个字符.也就是说你虽然输入了ABC$DEF这么多,如果只有一个c=getchar()的话,c里面只能存第一个字符,就是A.你自己画一画,没调用一次fun()就有一个字符被取走,直到美元符号.再把之前的用printf()就打印出来了结果就是$CBA

武义县13073542260: C语言求值 -
伯洋积大: int **a,*b,c=100;核心是这段代码 定义了abc3个变量,c是1个int型的值为2000.b是1个指向int变量的指针,a是1个指向int指针的指针,b中存放的是1个int数值的地址,a存放的是1个int指针的地址.b=&c,a=...

武义县13073542260: 谁给我解释一下以下c语言代码!ps:新手,求大神指教 -
伯洋积大: #include <stdio.h> main() {char string[81]; //分配保存字符串的空间int i,num=0,word=0;char c;gets(string); //获取键盘输入的字符串for(i=0;(c=string[i])!='\0';i++){ //一个个取出字符,直到字符串结束if(c==' ')word=0; //如果碰到空格,表明...

武义县13073542260: c语言的问题...求大神讲解 -
伯洋积大: 因为c是char型的,当char转化为int型时会把它转化成对应的ASCLL值(就是把字符"1"转化为它的ASCLL码值49)所以x+y等于49+1=50.

武义县13073542260: c语言里面, 写出下面个逻辑表达式的值,设a=3,b=4,c=5. a+b>c&&b==c 求给位大神帮忙做一下啊!!!!!! -
伯洋积大: a+b>c&&b==c 首先分两段 a+b>c,3+4>5,7>5,所以为true b==c,4==5,为false&&是与操作符,一个true一个false最后为false,也就是0

武义县13073542260: 关于C语言的一个题目,求解释,如下图,谢谢 -
伯洋积大: void main(){ char chrstr[64]; gets(chrstr);//从终端输入一个字符串,长度在63个字符以内; d = strlen(chrstr);//获取字符串的长度...

武义县13073542260: 求解释下如图c语言题目. -
伯洋积大: 第2题选A,定义变量名只能以字母、数字和下划线组成,以字母或下划线开头,且不能定义和C语言关键字一样的变量名.第3题选A,以0开头的是八进制数,由0至7组成,而078有数字8,显然不正确.第4题选B,(x=10)||(y=20),先计算x=10...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网