当前位置: 代码迷 >> C语言 >> "%"模的应用,请教
  详细解决方案

"%"模的应用,请教

热度:135   发布时间:2007-01-29 21:48:07.0
"%"模的应用,请教

小弟有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编辑过]

搜索更多相关的解决方案: 应用  float  单精度  col  

----------------解决方案--------------------------------------------------------
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)
----------------解决方案--------------------------------------------------------
以下是引用lhj2005在2007-1-29 22:16:38的发言:

"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???


!是非的意思吧


----------------解决方案--------------------------------------------------------
以下是引用lhj2005在2007-1-29 22:28:40的发言:

取模只是取小数点前的模

和小数点后的数字没有关系



n=146;
n%10=6;这个很好理解


n/10%n是什么意思啊???

是不是(n/10)=14.6 再14.6%n是不是就是14.6%146啊???



因为它们都是算术运算,所以它们的优先级是一样的

所以运算的时候是从左到右边

我用括号,是为了让你看明白

也就是说先执行n/10,再执行取模运算
----------------解决方案--------------------------------------------------------

以下是引用lhj2005在2007-1-29 22:31:05的发言:

如果问号前的表达式是非0的话,那表达式就为真,就执行红色部分

如果问号前的表达式是0的话,就表达式就为假,就执行问号后的黑色部分



这个我了解,我不清楚的是,为什么a=2的话 !a=0???


!是非的意思吧

!是非的意思

在C语言中

任何 非0 的数字,执行‘!’运算的时候,就都变成了0


----------------解决方案--------------------------------------------------------
  相关解决方案