#include <stdioh>
#include <stdlibh>
int main()
{
int a,b,c;
float d=15,e,f;
a=35%7;///0 35除以7 余数是0
b=15/10;//int类型计算结果舍弃小数部分 结果是 1
c=b++;// 先使用b的值b在+1 c=1 b=2
e=15/10;// 1000,因为15 和 10 都是int类型 计算结果是int 类型1 再把int 1变成 float 100000
f=d/10;///15,因为d是float类型, 因此 d/10 是float 类型150000
printf("%d ,%d ,%d ,%f ,%f ,%f",a,b,c,d,e,f);
return 0;
}
主要是范围不一样,也就是精度不一样。精度过大,运算时间就长。所以能用float,就不用double,如果数值不多的话,就无所谓了,用哪个都行。\x0d\类型 比特数 有效数字 数值范围 \x0d\float 32 6-7 -3410(-38)~3410(38) \x0d\double 64 15-16 -1710(-308)~1710(308) \x0d\long double 128 18-19 -1210(-4932)~1210(4932)\x0d\简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++60平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位。
首先,你的语句就编程规范而言书写是有误的。
正确的写法应该是:float
d=10/30+10/30+10/30;
“1”在
win32
中默认的是
int
类型;
“10”表示的是float
/
double类型。
此时再判断
d
==
10
就是正确的了。
程序中有个错误,改正了,如下:
#include
"stdioh"
void
main()
{
float
d,
f;
long
k;
int
i;
i=f=k=d=20/3;
printf("%3d
%3ld
%52f
%52f",i,k,f,d);
}
程序的输出是:6
6
600
600
分析如下:
这个程序涉及到连续赋值和数据类型的自动转换两个问题。关键在于
i=f=k=d=20/3;这里,20/3,除号的两侧都是整数,是取整除法,所以,他的结果是6(如果是20/30就会有小数了)。然后赋值。这种连续赋值时从右向左的,就是先赋值给d,d定义为float,所以要从int类型转换为浮点型,就是600这样的;然后再复制给k,k是长整型,还是整型,所以又从600转换为6;f和i的赋值同理。到输出的时候,一次输出,而且对于浮点型要求2位小数,所以就是前面的输出了。
一二楼已经说得很明白了
%d 十进制,%f浮点型,%u无符号整型
用于输入输出,显示保存的形式。
例子int i声明i是十进制,float i 声明浮点数 unsigned i声明无符号整形。
由于C语言底层都是以二进制形式表示的,也就是说C语言将在编译时就变成汇编语言形式让机器运行,所以学习计算机开始都是讲述二进制先。因此机器(计算机)都以二进制形式表现的。例如,十进制3进入计算机后就以二级制形式保存,即11(二进制),所以无论八进制还是十进制或十六进制其结果都一样只是显示出来的东西不同而已。如十进制11,保存下来1011二进制数。
16进制就以B表示,8进制就以13表示。如果输入的结果也一样,只是将他们转换成二进制在显示。
上面说明数据都是二进制保存形式,声明其实就是为变量余留多少位二进制给变量,例如一般int为二进制的16位,就是十进制65536(正负各占一般),如果变量数值超过65536就会溢出。float就是32为二进制数,其中至少有6为有效值(小数)。float就是浮点数也就是小数如333数
%d,%f,%u还是提一下。这些控制符号一般用于输出输入中,如printf,scanf函数中。用于给程序说明你的数据以什么形式显示,%u,%d显示结果是一样的,%f浮点显示就是用于显示333这个数。输入时是制定以什么形式将数据保存下来,就是上面的为数据留多少位二进制。
以上就是关于C语言:写出程序运行结果并解释为什么全部的内容,包括:C语言:写出程序运行结果并解释为什么、C#中“float”与“double”的区别是什么、c语言中 float d=1/3.+1.0/3+1.0/3 等于1.0为什么错了。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)