int a=1,b=3,c=3;float d=4;能正确表示a/[(b+c)d]的是
来源:百度知道 编辑:UC知道 时间:2024/09/24 04:42:32
是一道练习题,原题是这样的:
已有定义语句int a=1,b=3,c=3;float d=4;
以下能正确表示数学式子a/[(b+c)d]的C语言表达式是:
a/(b+c)*d
a/(b+c)*1/d
a/(b+c)/d
a/d/(b+c)
有一答案说题目中“以下能正确表示数学式子”印错了,应该是“以下不能正确表示数学式子”,答案是第一个选项。
可是我想不对吧,由于类型问题,先算哪个后算哪个结果是不同的,请问一下各位高手,能告诉我标准答案吗?非常感谢!
已有定义语句int a=1,b=3,c=3;float d=4;
以下能正确表示数学式子a/[(b+c)d]的C语言表达式是:
a/(b+c)*d
a/(b+c)*1/d
a/(b+c)/d
a/d/(b+c)
有一答案说题目中“以下能正确表示数学式子”印错了,应该是“以下不能正确表示数学式子”,答案是第一个选项。
可是我想不对吧,由于类型问题,先算哪个后算哪个结果是不同的,请问一下各位高手,能告诉我标准答案吗?非常感谢!
选a/d/(b+c)
首先,从数学意义上考虑,a/(b+c)*1/d,a/(b+c)/d和a/d/(b+c)这3个表达式和a/[(b+c)d]是等价的
其次,考虑到C语言中/运算的性质,a/(b+c)*1/d和a/(b+c)/d这2个式子a/(b+c)这步运算a和b+c的商如果是小数的话,小数部分会被截断,这个例子中a/(b+c)=1/6=0,因此结果是不对的
但是a/d/(b+c),因为a/d是int/float,运算的时候会先把a转换成float,所以相当于1.0/4.0=0.25,由于a/d结果是一个float,所以计算0.25/(b+c)的时候,也会把b+c的结果6转换成float,也就是0.25/6.0,所以最后结果是和数学表达式a/[(b+c)d]相等的
标准答案是 D
B和C在数学里是一样的。
但是C语言有个整除的问题。
a/(b+c) = 0
就是说,遇到分子分母都是整数,就会按整数除法得到 0
不信自己编程试试。
所以要算1/7 必须写 (double)1/7
考查“优先级”的顺序和“/”是不是整除:
乘法和除法是同一等级,所以从左到右依次计算;
当“/“的两边都是整数时,是整除,而有一个为实数时则进行实数除法;
以下能正确表示数学式子a/[(b+c)d]的C语言表达式是(D)
(A)a/(b+c)*d=0
(B)a/(b+c)*1/d=0
(C)a/(b+c)/d=0
(D)a/d/(b+c)=0.04167
第四个是正确的
其他的a/*之后结果为0
因为都是int型
明白吗?
int a=3,b=4,b=5; !(++c-1&&b+c/2)等于什么?为什么?谢谢
unsigned int a=2;int b = -3;
已知int a=1;int b;b=(++a)+(++a)+(++a);为什么b=10?
执行语句int a,b,c; a=(b=c=3, c++, b+=c);则a的值是?请说明理由
int a=2,b=3,c=4;a*=10+(b++)-(++c);执行完语句后a的值是多少?
设a = 5,b = 10,则执行 c = Int((b - a) * Rnd + a) + 1,结果为多少
int a[3],b[3];a={1,2,3};b=a;有什么问题?为什么不能赋值?
void a(int a,int b=0)的含义?
C语言执行一下程序K的结果是多少?int k=0,a=1,b=2,c-3;k=ac ? c:k;
如果int a=1,b=2,c=3,d=4;则条件表达式a<b?a:c<d?c:d的值为?