几个C语言的小程序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 23:07:29
1。int a=1,b=2,c=0;
printf("%d",a==b==c);
这个的输出为什么是0?

2。double x=25/10/2.0/2;
printf("%0.2lf",x);
这个的输出为什么是0.50?还有,printf里面可以用lf吗?

3。int x,y,i;
for(i=0;i<4;i++){
scanf("%d%d",&x,&y);
if(x<y)
break;
}
printf("%d%d%d",i,x,y);
改写一下这个程序,要求不用break和continue。
不好意思,第一题弄错了,的确得1,最近人品不好,见谅。。。

1. 应该输出为1,我在TC和VC环境下均是1。因为a==b==c 是从左向右运行,即先计算 a==b 的值,即 1==2 的值,为0,再将此值与 c 进行比较,即 0==0,为1。

2. 只有单目、条件和赋值是自右向左,其它都是自左向右的,因此,25/10 = 2,因为/前后均是整型,故此为2; 2/2.0,向最高类型转换,即为1.0,然后运算1.0/2,即为0.5。printf可以用lf。

3. 在条件里加入 x>y 就是,但是要对x和y赋初值以满足第一次循环,改后如下:
int x=2,y=1,i; // 只要满足x>=y就可以
for(i=0;i<4&&x>=y;i++)
scanf("%d%d",&x,&y);

printf("%d%d%d",i,x,y);

1。int a=1,b=2,c=0;
printf("%d",a==b==c);
这个的输出为什么是0?

输出的是a==b==c这个表达式的值,表达式的值是0或1,若a,b,c的值相等就输出1,else就输出0

2
x=25/10/2.0/2;
开始是整除 25/10=2
2/2.0=1.0转为double型
1.0/2=0.5

3.int x,y,i;
i=0;
int flag=0;
while(i<4&&flag!=1)
{
i++;
scanf("%d%d",&x,&y);
if(x<y)
{ flag=1;
}
}
printf("%d%d%d",i,x,y);

== 是关系运算符,结合方向是自左向右
先判断a==b 是否成立,不等,则结果 为 0
再判断 0==c 不等,则结果是 0

25/10 结果是 2,不是2.5 因为 / 前后