#include<stdio.h> int main() { float a=10.0f; printf("%d\n",a); } 这个程序的输出结果为什么为0?

如题所述

#include<stdio.h> 
int main()

float a=10.0f;
printf("%d\n",a);//你的输出格式是%d
printf("%f\n",a);
printf("%d\n",(int)a);//想输出10的话要强制转换
}

 

追问

我想知道printf("%d\n",a);输出为什么是0?

追答

你把10.0在内存用IEEE标准存储,float按照%d输出,会去前4个字节,你按IEEE标准写出来10.0的存储形式,去前四个字节,就知道了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-31
C/C++ 规定 输出输入格式 要与 变量类型 匹配。float 不能 用 %d 格式输出。
不管你 a=10.0, a=20.0 用 %d 输出 就是 0。没什么 道理。

用联合体可以洞悉内存字节里的内容
union U{
float a;
int b;
char c[4];
} u;
main(){
u.a = 10.0; // 用 12.0 20.0 ....
printf("c= %x %x %x %x\n",u.c[0],u.c[1],u.c[2],u.c[3]);
printf("b= 0x%x\n",u.b);
printf("b= %d\n",u.b);
printf("a=%f\n",u.a);
printf("a=%d\n",u.a); // 打印 0本回答被提问者和网友采纳
第2个回答  2013-08-30
这跟具体的数字在内存中的表示方式有关.

#include<stdio.h> int main() { float a=10.0f; printf("%d\\n",a...
include<stdio.h> int main(){ float a=10.0f;printf("%d\\n",a);\/\/你的输出格式是%dprintf("%f\\n",a);printf("%d\\n",(int)a);\/\/想输出10的话要强制转换}

#include<stdio.h> int main() { float faHeigh
float a;int b;char c[4];} u;main(){ u.a = 10.0; \/\/ 用 12.0 20.0 ...printf("c= %x %x %x %x\\n",u.c[0],u.c[1],u.c[2],u.c[3]);printf("b= 0x%x\\n",u.b);printf("b= %d\\n",u.b);printf("a=%f\\n",u.a);printf("a=%d\\n",u.a); ...

c语言#include<stdio.h> #define N 10 main() { int a[10],i,j,t...
1.在排序时,for(i=0;i<N-1;j++),不能每次j++ 否则死循环;2.if(a[j]>a[j+1]),这里的排序是递增的,但是后面的输出提示是递减的;3.printf("Minimum:a[9]=%d\\n",a[0]),不能说输出a[9]但是传参数用a[0];4.后面打印的一些输出与题意无关,并且在程序设计的思路上,直接对数...

#include<stdio.h> int main() {float a; a=-2L; printf("%ld\\n...
include<stdio.h> int main() {float a; a=-2L; printf("%f\\n",a); } 浮点数输出用%f,而不是%d

#include <stdio.h> int main( ) { float n=0.0,t=1.0; char ch; p...
循环没有终止 include <stdio.h> int main( ){ char ch[100];printf("请输入一句英文:");scanf("%s", &ch);printf("%s\\r\\n", ch);return 0;}

#include<stdio.h> int main() { int n; float a,b,c; scanf("%d\\n%f...
scanf("%d\\n%f %f %f",n,a,b,c);改为 scanf("%d\\n%f %f %f",&n,&a,&b,&c);

【c初学者】 #include<stdio.h> #include<stdlib.h> int m
【c初学者】 #include<stdio.h> #include<stdlib.h> int main() { float a,b,c; char e; printf("input a,e,b\\n"); scanf("%f%c%f",&a,&e,&b); switch(e) { case '+': c=a+b;break; case '-': c=a-b;break; case '*': c=a*b;break; case '\/': if (b==...

我编写的C程序怎么错了啊。在FLOAT那一行!
我编写的C程序怎么错了啊。在FLOAT那一行! #include<stdio.h>voidmain(){inta=3,b=4,c=5;longn=128765;unsignedintu=51274;floatx=1.2,y=2.4,z=-3.6;charc1='a',c2='b';printf("a=%db=%dc=%d\\n",a,b,c);printf("x=%f,y=%f,z=%f... #include <stdio.h>void main(){ int a=3,b...

#include<stdio.h> main() { int sum=0,a,i; float avg; for(i=0;i...
根据题目要求,我重新写了一段程序,完全能满足题目要求,并且用数组储存输入的数。include<stdio.h> define N 10 main(){ int a[N],i,sum=0;float aver;char grade;printf("input score: \\n");for(i=0;i<N;i++){ printf("a[%2d]:",i);scanf("%d",&a[i]);while(a[i]<0 |...

#include<stdio.h> #include<math.h> int main() { float x,f(x),y...
f(x)表示的是函数,而flaot f(x)表式定义一个变量,明显矛盾,所以你的编译过不了,之所以定义的哪行没有报错是因为编译器编译这一行是不考虑变脸的名字,所以你就可以过编译,以为你定义的是正确的,其实确实错的,就是这样的啦 望采纳,谢谢,不懂再问 ...

相似回答