小弟有3个问题请教分析
1)
i=n/100;
j=n/10%n;
k=n%10;
如果n=146的话
那 i , j ,k 各等于i=1, j=4 ,k=6对吗
为什么啊???
2)单精度float和双精度double有什么区别吗,能否拿几个数值说明下
3)条件表达式,如何判断真假
比如 int a=2; float b=5.2;
则 !a?2*b:b 的结果为什么是返回b,而不是2*b
!a怎么判断真和假啊???
[此贴子已经被作者于2007-1-29 22:12:55编辑过]
----------------解决方案--------------------------------------------------------
i=1,j=14,k=6
代码如下:
#include<stdio.h>
void main()
{
int n=146,i,j,k;
i=n/100;
j=n/10%n;
k=n%10;
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
我现在跟你解释下吧
n=146=140+6(你能看明白是什么意思吗?)
i=n/100=1.46
由于我在定义的时候i是整形变量,所以i就只取小数点前的一位数字
j=n/10%n=(n/10)%n
n/10=14.6
然后取模预算结果就是j=14.6,但是j定义的时候是整形变量(同上)
k=n%10
这里k=(140+6)%10=140%10+6%10
因为140能被10整除,所以取模结果就是0
而6不能被10整除,所以取模结果就是6
----------------解决方案--------------------------------------------------------
"j=n/10%n=(n/10)%n
n/10=14.6
然后取模预算结果就是j=14.6,但是j定义的时候是整形变量(同上)"
n/10=14.6
然后(n/10)%n=???
好象不应该是14.6了吧,
如果是14.6的话,那这里的模好象没有意义的啊
我要的效果是j去的是十位是的数
是不是应该改成j=n/10%10 就好了啊?
[此贴子已经被作者于2007-1-29 22:19:19编辑过]
----------------解决方案--------------------------------------------------------
float的比特位数是32,有效数字是6-7,数值范围是 -3.4*10^(-38)――3.4*10^38
double的比特位数是64,有效数字是15―16,数值范围是 -1.7*10^(-308)――1.7*10^(308)
long double的比特位数是128,有效数字是18-19,数值范围是 -1.2*10^(-4932)――1.2*10^(4932)
----------------解决方案--------------------------------------------------------
"j=n/10%n=(n/10)%n
n/10=14.6
然后取模预算结果就是j=14.6,但是j定义的时候是整形变量(同上)"
n/10=14.6
然后(n/10)%n=???
好象不应该是14.6了吧,
如果是14.6的话,那这里的模好象没有意义的啊
我要的效果是j去的是十位是的数
是不是应该改成j=n/10%10 就好了啊?
取模只是取小数点前的模
和小数点后的数字没有关系
这和数学有点不一样
你可以自己上机试下就知道了
[此贴子已经被作者于2007-1-29 22:25:06编辑过]
----------------解决方案--------------------------------------------------------
哦
[QUOTE]取模只是取小数点前的模
和小数点后的数字没有关系[/QUOTE]
n=146;
n%10=6;这个很好理解
但
n/10%n是什么意思啊???
是不是(n/10)=14.6 再14.6%n是不是就是14.6%146啊???
[此贴子已经被作者于2007-1-29 22:29:22编辑过]
----------------解决方案--------------------------------------------------------
3)条件表达式,如何判断真假
比如 int a=2; float b=5.2;
则 !a?2*b:b 的结果为什么是返回b,而不是2*b
!a怎么判断真和假啊???
这个就更简单了
a=2,那么!a=0
!a?2*b:b
如果问号前的表达式是非0的话,那表达式就为真,就执行红色部分
如果问号前的表达式是0的话,就表达式就为假,就执行问号后的黑色部分
----------------解决方案--------------------------------------------------------
[QUOTE]如果问号前的表达式是非0的话,那表达式就为真,就执行红色部分
如果问号前的表达式是0的话,就表达式就为假,就执行问号后的黑色部分[/QUOTE]
这个我了解,我不清楚的是,为什么a=2的话 !a=0???
!是非的意思吧
----------------解决方案--------------------------------------------------------
哦
和小数点后的数字没有关系
n=146;
n%10=6;这个很好理解
但
n/10%n是什么意思啊???
是不是(n/10)=14.6 再14.6%n是不是就是14.6%146啊???
因为它们都是算术运算,所以它们的优先级是一样的
所以运算的时候是从左到右边
我用括号,是为了让你看明白
也就是说先执行n/10,再执行取模运算
----------------解决方案--------------------------------------------------------
如果问号前的表达式是0的话,就表达式就为假,就执行问号后的黑色部分
这个我了解,我不清楚的是,为什么a=2的话 !a=0???
!是非的意思吧
!是非的意思
在C语言中
任何 非0 的数字,执行‘!’运算的时候,就都变成了0
----------------解决方案--------------------------------------------------------