关于%d %f的疑问,望大神指点,该怎么处理

关于%d %f的疑问,望大神指点
/* 练习4_5:编程,令该程序中故意包含下列错误:
 * 用%d显示一个浮点数
 * 用%f显示一个整数
 * 用%d显示一个字符
 */



#include<stdio.h>
 
int main()
{
  int i=1;
  float f=1.0000;
  char c='c';
  printf("%d\n",f); //程序显示为0
   
  printf("%f\n",i); //程序显示为0.000000


  printf("%d\n",c); //程序显示为99(ASCII码)
  return 0;
}

以上为我的c程序源码及结果(注释中),%d及%f的结果我很是费解,难道不是%d取整应该为1,而%f取浮点1.000000

------解决方案--------------------
那些格式符是不会帮你做转型的,直接用该类型的缺省值代替非该类型的数值。
------解决方案--------------------
你需要理解float与double在内存中的存放形式! 它们跟int是不一样的,搞清它们的存放形式之后再理解就很随意了!加油。青年!
------解决方案--------------------
上面的发错了

int
0000 0000
0000 0000
0000 0000
0000 0001

float 在内存中
0011 1111 
1000 0000
0000 0000 
0000 0000
------解决方案--------------------
C/C++ code

    int i=1;
    float f=1.0000f;
    char c='c';

    int *a = (int*)&f;
    float *b = (float*)i;

    printf("%d\n",*a); //程序显示为1065353216
    printf("%f\n",b); //程序显示为0.000000
    printf("%d\n",c); //程序显示为99(ASCII码)*/