c语言------高分,50分

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:14:49
lude "Stdio.h"
#include "Conio.h"

int main(void)
{
/* 此处添加你自己的代码 */
float x=2.5;
float y=4.7;
int a=7;
float ans;
ans=x+a%3*(int)(x+y)%2/4;

printf("THE answer is %f",ans);
return 0;
}
请问运行结果是?请说明原因。

运行的结果为2.500000
主要看ans=x+a%3*(int)(x+y)%2/4,由于()的优先级最高,所以先算(x+y),接着(int)强制类型转换的优先级高于%,所以算(int)得7,表达式变为ans=x+a%3*7%2/4,从左到右看,+的优先级低于%,所以先算%;因为%,*,/的优先级相同,所以a%3*7%2/4按顺序算,即结果为0,在加上x就是ans的值了!再由于精度的原因,使得得到上述结果。

a%3=2
x+y=7.100000000000
(int)(x+y)=7;
2*7=14
14%2=0
0/4=0
x + 0 = x
结果是2.500000000000000000000

在VC下,运行结果是THE answer is 2.500000,表达式ans=xa%3*(int)(x+y)%2/4,a%3等于1,后再类型转换:(int)(x+y),即将x+y的值转换成int型的7 ,再1*7等于7,再7%2/4,7%2等于1,1/4等于0.所以ans=x.
而%f的精度是6位,所以就是2.500000

THE answer is 2.500000