家用打碎榨汁机:C语言的一个小问题

来源:百度文库 编辑:高考问答 时间:2024/04/29 00:49:57
#include <stdio.h>
void main ()
{
int a;
float x,y,z;
scanf("%d,%f,%f",&a,&x,&y);
z=x+a%3*(int)(x+y)%2/4;
printf("z=%d\n",z);
}为什么输入a=7,x=2.5,y=4.7后Z等于0啊

z定义float类型,系统执行printf("z=%d\n",z)时,语句自定义z是int类型,因此只读其高位部分,

(int)(x+y)=7
7%2=1
1/4=0.25

高位为0,所以输出就为0了。

printf中z的格式错了,应该为float型

这个程序有点问题.
"%"号是"求余"
如:a=7,b=2
a%b=1
这里的a,b必须为int型.
如果将a,b指定为实型变量,则不允许进行"求余"运算,
在编译时会给出有关"出错信息"

详情见:谭浩强的<<c语言设计(第二版)>>第41页

printf("z=%d\n",z);这句错了

没错啊

printf("z=%d\n",z);
这一句没有错,相当于强制类型转换.
a=7
x=2.5
y=4.7

z=x+a%3*(int)(x+y)%2/4;
全部代入数据后为
z=2.5+7%3*7%2/4;
运算结果为z=2.75
我不知道为什么输出会是0.
你在输入数据时有没有输入','?