#include<stdio.h>
int main()
{
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i,
i++;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
return 0;
}
在这段代码中x+=i后面是逗号而不是分号,这样做会有什么影响
逗号相当于x+=i, i++;
也就是不加上花括号,而同时写了2条语句
这种写法不值得提倡。
这里有一个历史渊源,就是在80年代的时候,计算机的内存不足1MB(千分之一GB),是现在计算机内存的万分之一
所以人们拼命压榨代码的长度,哪怕让代码晦涩难懂也在所不惜。这就和一些老人极度节约甚至到了没有理性的程度是一个道理。
现在完全没有必要这么做,特别是把代码写得人都看不懂。
那个很懂很会的人是什么情况,懂的都懂
没影响。加了逗号之后是逗号运算符。逗号运算符从左往右依次计算。但取最后一个值作为整个表达式的值。
x+=i 后面是, 表示这句代码还没结束,直到遇到C语言的语句分隔符;语句才结束
【以下回答由 GPT 生成】
在这段代码中,x += i,
的逗号是一个运算符,而不是一个分号。逗号运算符会顺序执行表达式,并返回最后一个表达式的值。因此,在这段代码中,逗号的作用是将i
的值加到x
上,并将i++
的值作为逗号运算符的结果。代码实际上相当于以下两行代码的合并:
x += i;
i++;
因此,这两行代码的效果等同于x += i++;
。
下面是经过修改的代码:
#include<stdio.h>
int main()
{
int i, x, y;
i = x = y = 0;
do {
++i;
if (i % 2)
x += i++;
y += i++;
} while (i <= 7);
printf("%d %d %d", i, x, y);
return 0;
}
输出结果将为8 12 49
,因为循环会执行7次,i
最后的值是8,x
会累加所有奇数(1,3,5,7),所以最后的值是12,y
会累加所有偶数(2,4,6,8),所以最后的值是49。
【相关推荐】
参考gpt:
结合自己分析给你如下建议:
在这段代码中,x+=i后面是逗号而不是分号,这样做的影响是:
逗号运算符会将x+=i和i++两个表达式连接起来,先计算x+=i,然后计算i++,整个逗号表达式的值是i++的值。
由于逗号运算符的优先级低于if语句的条件判断,所以逗号表达式会作为if语句的整体条件,而不是只有x+=i作为条件。
这样会导致if语句的条件判断结果与预期不符,因为逗号表达式的值可能为0(假)或非0(真),而不是只有x+=i的值。
例如,当i为1时,x+=i会将x的值设为1,然后i++会将i的值设为2,逗号表达式的值为1(真),所以if语句的条件成立,执行下一条语句。但如果只有x+=i作为条件,那么条件判断结果应该是假,因为x的值为0。
这样会影响到程序的逻辑和输出结果,因为x和y的值会受到逗号表达式的影响而改变。
在C语言中,逗号操作符会依次计算它的每个操作数,并返回最后一个操作数的值。在这段代码中,x+=i后面的逗号将使得i的值在x+=i语句执行完后增加1,而不是在下一次循环开始时增加1。这样会导致最后输出的结果与预期不符。
x+=i 后面是, 表示这句代码还没结束,直到遇到C语言的语句分隔符;语句才结束
#include<stdio.h>
int main()
{
int i, x, y;
i = x = y = 0;
do {
++i;
if (i % 2)
x += i++;
y += i++;
} while (i <= 7);
printf("%d %d %d", i, x, y);
return 0;
}
你这个问题提交重了
这个是大括号的作用域问题
在您的代码中,x+=i, i++; 是一个错误。在C语言中,逗号操作符用于组合多个操作,每个操作之间用逗号分隔。然而,逗号操作符并不适用于这种场合。
在您的代码中,x+=i, i++; 被误解为 x += (i, i++);。在这里,逗号操作符首先评估 i,然后是 i++。因此,实际上 x 增加的是 i 的原始值,而不是增加后的值。正确的应该是 x += i; i++;。
修改后的代码如下:
#include<stdio.h>
int main()
{
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 != 0 )
x+=i;
i++;
y +=i;
i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
return 0;
}
这样修改后,每次循环时,如果 i 是奇数,x 就会增加 i 的值,然后 i 自增1;如果 i 是偶数,则只增加 y 的值,然后 i 自增1。所以 x 的值是所有奇数的和,而 y 的值是所有数的和。
逗号表示语句还没有结束,用逗号2条语句都在if判断中,而用分号只有x+=i++;在if判断中
结合GPT给出回答如下请题主参考
此段代码中有一处错误。在if ( i%2 )
中,应该加上一个语句,表示x
的值要进行修改,例如 x++;
或者 x+=2;
,否则此处代码执行不会有任何意义,是无效的语句。
结果是没有影响得。你把分号当句号看,就可以区分了
在这段代码中,x+=i后面使用的是逗号而不是分号,这样做会导致x的值不会被更新为i的值
题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。
C语言中的逗号和分号是两种不同的标点符号,它们的作用不同。
逗号(,)在C语言中主要有以下两种用法:
在表达式中使用逗号符号作为运算符,可以用来连接多个表达式,它的运算顺序是从左到右。例如:a = b + c, d = e + f, 这里使用了逗号运算符连接了两个赋值表达式。
在声明多个变量时,可以使用逗号分隔多个变量的声明。例如:int a, b, c;
分号(;)在C语言中主要有以下两种用法:
在语句末尾使用分号表示该语句结束,是语法上的一种要求。例如:printf("hello world"); 语句末尾要加上分号。
在C语言中使用分号作为空语句,表示不执行任何操作。例如:for(int i=0; i<10; i++); 这里的分号表示该循环没有执行任何语句。
总的来说,逗号和分号在C语言中有不同的用法和作用范围,需要根据具体情况进行正确的使用。
c语言中以分号表示表达式语句结束,如果是逗号表示后面接着表达式执行,就你目前的代码逻辑来说不影响结果。但建议还是以分号来写。
在这段代码中,x+=i后面使用的是逗号而不是分号。这样做会导致x的值不会被更新,因为逗号操作符会忽略前面的表达式的结果,只返回最后一个表达式的结果
好多人说没有影响,其实差别大着呢,大家看看下面两段程序有没有影响?
#include<stdio.h>
int main(){
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i++,
i+=2;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
return 0;
}
结果是 9 1 18
改成分号就是:
#include<stdio.h>
int main(){
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i++;
i+=2;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
return 0;
}
结果就是9 1 12
其实是:如果是逗号,满足条件就执行{x+=i,i++;},如果是分号就执行{x+=i;} i++;