main() { int a=5,b=4; float c,d; c=a++⼀--b; printf("%f,%d尀n",c,a%4); 为什么 c=1??? 谢谢

2025-06-21 14:10:32
推荐回答(3个)
回答1:

c=a++/--b
看一下你的这句话编译器是如何执行的:
1.
编译器现执行=右边的
a++/--b
把这个式子的返回值赋给c
2
执行a++/--b
类似于执行
int
operator/(
const
int
lhs,
const
rhs
)
的一个过程,首先压栈两个参数
a是后++也就是先压栈后++,所以进入operator/的lhs
是5不是6,压第二个参数--b是前--所以压入的rhs是3,然后执行5/3
又因为int/int是返回int而且是只舍不入的int,所以opertaor/返回1
注意这个1还是int型的,然后
float
c
=
1;
即把int的1转为float然后赋值给c
所以最后c为1.0000

回答2:

你要直到在C语言中,当除数和被除数都是int型是,/
运算符在运算时会直接取整
列如:3/2
在C语言中的值是1,并不是1.5
如果要得到正确值,应该除数和被除数是浮点型才可以。即c=(double)a++/--b;就可以了。

回答3:

先帮你把代码弄齐,你继续追问,我再回答吧
#include

int
adds(int
x,int
y)
{
static
int
m=0,n=3;
n*=++m;
m=n%x+y++;
return(m);
}
void
main()
{
int
a=5,b=-1,c;
c=adds(a,b);
printf("%d",c);
c=adds(a,b);
printf("%d\n",c);
}
过会就吃饭了,速度帮你回答吧
static变量是不变的,第一次调用返回2,n,m的值也变成了3,2;
对于++运算符,++在前面就先加1,再运算;在后面就先运算,在加1;