为什么c语言中定义一个变量f=123.456,printf("%f",f)时结果是123.456001,我认为是123.456000,望高手解答

作者&投稿:其荷 (若有异议请与网页底部的电邮联系)
float f=123.456; printf("%f%10.2f|n",f) 输出为什么是的123.456001 我刚学的~

%f是输出实行(带小数点的)默认为小数点后6位。后面的001是系统添上去的。

main()
{
int a=15;
float b=123.1234567;
double c=12345678.1234567;
char d='p';
printf("a=%d,%5d,%o,%x
",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e
",b,b,b,b);
printf("c=%lf,%f,%8.4lf
",c,c,c);
printf("d=%c,%8c
",d,d);
}

本例第七行中以四种格式输出整型变量a的值,其中“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。 第八行中以四种格式输出实型量b的值。其中“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。第九行输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。第十行输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格。

float float,浮动的。:D

人类社会使用十进制,所以输入,输出都是按十进制来的。
而计算机中采用二进制,所以,你输入的数要转化为二进制存储。

十进制表面上的123.456,用二进制远不能用23个二进制比特位的尾码精确存储,只能四舍五入的转化为二进制存储。当取出时就不能还原原本的十进制123.456,这样就出现了浮点数的精确度问题。

编译的时候有一个警告:
warning C4305: 'initializing' : truncation from 'const double' to 'float'意思是:不能将const double类型的值直接赋予float类型变量。对于这个问题您首先要搞清楚float型与double型的区别与联系了,float是单精度浮点型,而double是双精度浮点型,一般情况下,float是占4个字节,double占8个字节。你把f改为double型的,即double f=123.456;;就OK了,给您个小建议:以后用到小数类型的变量都把他们定义成double型的!这样不容易出错。希望对您有所帮助!

可能你把它定义成float类型的,系统默认它是double型

难道你定义的变量有问题? 按理不会出现这种情况,浮点是精确到小数点后6位,访问到未初始化内存了?

你在什么环境下编写的程序?我在LINUX下打印的结果和你预想的是一样的


c语言输入10个整数,定义一个函数求平均分数
在上述代码中,首先定义了一个名为calculateAverage的函数,该函数接受一个整数数组和数组的长度作为参数。函数使用循环将数组中的所有元素相加,然后除以数组长度得到平均值。最后,calculateAverage函数返回计算得到的平均值。在main函数中,我们声明一个长度为10的整数数组numbers,并通过scanf函数从用户处获取...

C语言 定义一个5X10的二维字符数组,输入任意5个字符串, 输出其中最短...
include <stdio.h> include <string.h> int GetShortStr(const char (*PStr)[10]){ int MinLen=0;for(int i=0;i<5-1;i++){ for(int j=i+1;j<5;j++){ if(strlen(PStr[MinLen])>strlen(PStr[j])){ MinLen=j;} } } return MinLen;} int main(void){ char Str[5][10]={...

我在C语言CPP中定义了一个全局变量,但不能在中定义头文件中使用,怎么解 ...
有两个方法你可以试验一下:1。把这个变量的定义挪到.h里。2。变量的定义还在cpp里不动,在.h里声明外部引用。比如说你在cpp里的定义是这样的:int value;那么前面加extern即可,在.h里的声明是这样:extern int value;

C语言定义一个函数,判断字符串中是否包含另一个子串!!!急
调用strstr()函数就可以实现#include <string.h>#include <stdio.h>int main(){char s[]="12345678";char s1[]="135";char s2[]="567";if ( strstr(s,s1) ){printf("ok\\n");}else{printf("no\\n");}\/\/--以上显示noif ( strstr(s,s2) ){printf("ok\\n");}else{printf("no\\...

C语言:只定义一个递归函数,求Fibonacci数列前35项的和;主函数中只用一...
代码文本:include "stdio.h"int Sum_Fib(int n,int a=1,int b=1){ return n>1 ? b+Sum_Fib(n-1,b,a+b) : 1;} int main(int argc,char *argv[]){ printf("SUMF(35) = %d\\n",Sum_Fib(35));return 0;}

亲,C语言中指针的定义和引用以及赋值时候“*”都表示什么含义啊
在C语言中,定义一个普通的变量(如整型数),我们这样做:int i; 而定义一个指针变量(指针)我们需要这样做:int *p ; 还记得吗,一个矩形中的值是有类型的,可能是整型,可能是字符型……,它们原本是“清白”的,无类型的,是我们通过一些手段使它们有了类型。当我们做出int i; 这样一个...

define在c语言中是什么意思
define在c语言中是一个宏定义的关键字,有定义、解释的意思。在C语言中的用法是“#define 变量名 值”,这句代码是使用在程序开头的,这样整个程序中对应的变量名就会在预编译的时候用后面的值替换。define在c语言中的作用就是方便程序段的定义和修改,可以将一个变量强制定义为你想要的值。在程序...

【c语言】定义一个使用指针的函数,实现交换数组a和数组b中的元素
你原代码函数那样写是实现不了数组交换的,我用你的代码小做修改。你看下吧。说明:^=只是利用异或来实现2个地址的数值交换,和你定义一个变量做交换是一个效果。include <stdio.h>#include <stdlib.h>void change(int *p1,int *p2,int len){ while(len--) *p1^=*p2,*p2^=*p1,*p...

c语言定义一个结构体变量(包括年、月、日),输入一个日期,计算该日在本...
if (a.M < 1 || a.M > 12) {printf("err Month\\n"); exit(0); };if ( (a.M==2) && (a.D==29) ) { if ( (a.Y%4==0)&&(a.Y%100!=0)||(a.Y%400==0)) {goto Lab;} else {printf("err Day\\n"); exit(0); };} if (a.D < 1 || a.D > ...

C语言怎么定义一个二进制数
C语言中没有 “二进制数”这种类型,所以没办法直接定义;但可以直接定义16进制数。例:int main(){ int a;scanf("%p",&a);\/\/16进制数输入%p是输入一个十六进制的数scanf("%llx",&a);也可以输入十六进制并且比较正规 printf("%d",a);\/\/十进制输出%d是输出一个十进制的数 printf("0x%x",...

朔城区17281273081: 为什么c语言中定义一个变量f=123.456,printf("%f",f)时结果是123.456001,我认为是123.456000,望高手解答 -
种迫美士: float float,浮动的.:D 人类社会使用十进制,所以输入,输出都是按十进制来的.而计算机中采用二进制,所以,你输入的数要转化为二进制存储.十进制表面上的123.456,用二进制远不能用23个二进制比特位的尾码精确存储,只能四舍五入的转化为二进制存储.当取出时就不能还原原本的十进制123.456,这样就出现了浮点数的精确度问题.

朔城区17281273081: C语言 变量定义的位置 -
种迫美士: C++中,变量定义可以在函数中的任意位置. 比如函数中任意位置出现的For循环中: for(int i = 0; i< len; i++) {/*do something;*/ }变量i就可以在使用到的地方才给定义; 然而在C语言中,变量的定义一定要在函数体的最开始处; 否则在使用到变量的地方才定义,编译的时候会报不认识此变量.

朔城区17281273081: c语言中变量的定义 -
种迫美士: 1、可以因为a是全局变量. 2、b的值为2,因为你读取完后,又对b进行了b=2的赋值操作,b的值已经发生改变. 如果还有什么疑问可以给我留言或直接Hi我.

朔城区17281273081: c语言中 我定义一个float变量a,平且a=1/2,为什么a=0.000000,而改成1.0/2 -
种迫美士: 因为把1/2看做一个表达式,然后把表达式的值赋给a1/2是整数除法,结果为整数.1.0/2或者1/2.0都是符点数,结果为符点数 强制类型转换就可以解决不用加“.0”就直接出来的是0.500000这个问题 比如a=(float)1/2; 如果满意请采纳,谢谢

朔城区17281273081: C语言中,说明一个变量和定义一个变量有什么区别? -
种迫美士: 说明一个变量意味着向编译程序描述变量的类型,但并不为变量分配存储空间.定义一个变量意味着在说明变量的同时还要为变量分配存储空间.在定义一个变量的同时还可以对变量进行初始化.下例说明了一个变量和一个结构,定义了两个变...

朔城区17281273081: C语言的常量与变量的关系? -
种迫美士: 常量就是在运行过程中不能改变的值!例如单个数字就是常量(例:12); 变量就是在运行过程中能改变的值!!这样定义变量:int i;char c;

朔城区17281273081: C语言中为什么变量和变量结果同时定义? -
种迫美士: 为什么变量和变量结果同时定义? 如:int a,b,s; s=a+b这里你将s=a+b理解成定义了?其实如果换个方式理解,会更好 这里你可以把s=a+b理解成定义完以后让计算机进行的计算,不是会更好么?而底下的程序 #include "stdio.h" void main() ...

朔城区17281273081: c语言if语句问题... -
种迫美士: int a=10,b=0;if(a=12) // 关键在这里,if(a=12)就是 if(12),非零即为true{a=a+1; b=b+1;} else{a=a+4;b=b+4;}printf("%d;%d\n",a,b);

朔城区17281273081: 计算机二级C语言程序的一个题目,不知道答案怎么来的.求解析 -
种迫美士: 初值就是你在定义变量的同时就可以给他赋一个初始值 比如 int i=0; 就是定义一个变量,并赋予初值0一般是为了防止程序中误操作导致直接使用未赋值的变量进行计算变量变量,之所以叫变量就是他的值是可以改变的,所以即使有初值也可...

朔城区17281273081: C语言中如何定义全局变量 -
种迫美士: 1、首先,我们可以在函数外面定义变量,就是全局变量. 2、局部变量可以与全局变量同样命名. 3、但是优先级是局部变量优先. 4、但是局部变量的生命周期是整个结构内. 5、全局变量是整个程序结束,才释放. 6、我们也可以为变量加上修饰符.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网