c语言中%f的的输入输出问题

作者&投稿:娄艺 (若有异议请与网页底部的电邮联系)
请教各位高手一个问题:在C语言中,整型数据以“%f”格式输出时,不对的根本原因是?~

对数据的解释不对 在计算机中说有的数据都是0和1 那么怎么解释这些0和1就靠操作符来说明了
粗略的意思下 虽然不很精确 但是应该足够让你明白意思了
假设数据是11111111111111111111111111111111
%d是将这32个1据视作一个2进制数 其值是2^32
%f是将这组数据前部分视作数据 后部分视作指数 从几开始我也忘了 呵呵 当然会出错啦

不对应格式输出全部都不可以!理由依然是数据解释不对
比如说你要输出'A' 但是用了%d的控制符 那么就会输出65 因为A在ASCII表中的大小事65 也就是说数据0100 0001 你用%c输出 就表示字符'A' 用%d输出就表示65 明白了否?

这是我帮你改好的程序,你的问题主要在于声明的是float型变量,却试图用"%d”对其输入数值,当然是不行的。
#include
#include
int main()
{
float a,b,c,p,s;
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c && b+c>a && c+a>b)
{
if(a==b&&a==c&&b==c)
printf("是等边三角形");
else if(a==b||b==c||c==a)
printf("是等腰三角形");
else printf("是三角形");
p=(a+b+c)/2.0;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%f",s);
}
else printf("不是三角形");
return 1;
}

计算机内部用2进制。输入17.8,计算机内化为2进制时化不净,所以自动丢去尾数,从而引入了“截断误差”,输出时,再化回10进制,就看出“截断误差”。
printf("%.4f\n",a); // 考虑精度,输出有限小数位,就好了。
printf("%g\n",a); // 改用 %g 格式也可以。

浮点数保存的是一个近似值,实际上微积分告诉我们17.79 9循环等于17.8~
你可以指定小数点位数:
#include<stdio.h>
main()
{
float a;
scanf("%f",&a);
printf("%.1f\n",a);//这里改动
}

-----------------------
D:\>gcc fudian.c

D:\>a
17.9
17.9

D:\>a
17.8
17.8

D:\>

可以使用double型变量

莫太纠结这个问题了 有时候计算机不同 结果就不同 正常的

简单的说:no,计算机会用一串二进制无线逼近你这个数,有时候会差那么一点点,其实这一点点也不存在,因为就是相等!

vc语言中的%f在输出的时候是小数点后面需要写几个0啊
答:一般如果不作设定,会输出小数点后6位。不需要规定写几个零。可以自定义输出小数点后几位格式如下:include <stdio.h> void main(){ float value = 1.2222222222f;printf("%.2f\n",value); /*输出小数点2位。*/ printf("%f",value); /*输出小数点6位。*/ } 结果:1.22 1.222222 ...

C语言中以单精度浮点型输入,输出格式为%d或%c,为什么显示的数不对?谢谢...
答:肯定不对啊!你输入的时候是单精度浮点数类型,c语言中变量就是float类型,输入使用的格式是%f。不同的变量类型在内存中的储存方式也完全不同,当你用整型格式(int)去读一个浮点格式(float)的数字时,不可能读出正确的结果。所以,你必须用跟输入时相同的格式(%f)输出(另外,还必须跟变量的类型...

关于c语言中scanf的问题?
答:scanf后面的%f格式,必须与输入格式相一致 按您的输入,中间用逗号,与scanf中%f之间格式不符,结果只接收了第1个变量,后面没接收,因而是零(有的编译器会是随机数),正确写法:(1)如果:scanf中%f之间用空格,即:scanf("%f %f %f",&a,&b,&c);应该输入1 2 3(中间有空格)(2)如果:...

c语言%f输出float型数据的四舍五入问题
答:需要注意,%f如果没有规定长度或小数位数的话,就是输出6位小数 不论对应的数是什么类型,都输出6位小数 因为你的x是4位小数,少于6位 所以会在后面加两位小数补齐,至于那两位数是什么,要看后面的内存单元中存的是什么 (C语言会出现意外的内存访问,这点很不好)也就是说 这不是什么四舍五入,...

C语言问题%f和%lf的区别
答:由于精度的原因,输出%lf和%f的数据不同,可能会造成错误。主要有一下四点区别:1、代表的数据类型不同 f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)。2、有效数字位数不同 单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。3、所能表示数的...

c语言中输出格式问题 %1.0f/%1.0f 1.0什么意思
答:1、%1.0f表示:打印1位有效数字(若超出,则按该类型实际有效位显示),其中小数数位为。2、%m.nf表示输出m位浮点型数,其中,m为域宽(整数位数+小数位数+小数点),n为小数位数(自动对n位后小数进行四舍五入)或n个字符;若输出数本身的长度小于m,则左边补空格,即为右对齐的方式。例如用%...

c程序编写时,整型1整么无法用%f输出?
答:整型和浮点型数据占据的字节数是不一样的。比如一个整型数据占4个字节,浮点型占8个。如果用%f输出,就是按照浮点型的8个字节来读取,自然结果会不一样。有时候会不确定值,有时候就是0或者0.00000

C语言里,实型变量double和float 的输出占位符,%lf和%f为什么在printf输 ...
答:double精度更高,是指它存储的小数位数更多,但是输出默认都是6位小数,如果你想输出更多小数,可以自己控制,比如 “%.10lf” 就输出10位小数,望采纳

C语言 以下程序SCANF输出%f格式的为什么会出错?
答:参见: http://msdn2.microsoft.com/en-us/library/k1x26e0x(VS.71).aspx 怀疑这是编译器的bug - 我用的编译器是VC自带的cl 14.00.50727.42 因为编译器没有识别出来有浮点操作, 而浮点相关库是lazy loaded, 于是浮点相关的库没有被链接进来.解决方法很简单: 随便弄个浮点数, 赋值一次就好了 ...

c语言问题:为什么把整数以%f格式输出是0.000?
答:1073741824恰好是‭0x40000000‬。如果硬解读为浮点数,那么它的尾数为零,自然对应的数值就是0。参考:浮点数存储格式 http://blog.chinaunix.net/uid-23204219-id-1761337.html