C语言数据类型float和double的有关问题

C语言数据类型float和double的问题
有如下程序:
#include "stdio.h"
#include "math.h"
void main()
{
int j,k;
double a[2],b[3];
double x0,y0,x,y;
printf("\t求点Q(a,b)与直线Ax+By+C=0的对称点P.\n");
printf("形如:Q(a,b):\n");
for(j=97,k=0;j<99;j++,k++)
{
printf("请输入%c\n",j);
scanf("%f",&a[k]);
}
printf("形如:Ax+By+C=0:\n");
for(j=65,k=0;j<68;j++,k++)
{
printf("请输入%c\n",j);
scanf("%f",&b[k]);
}
printf("%f\n%f\n%f\n%f\n%f\n",a[0],a[1],b[0],b[1],b[2]);
}

这个程序运行出来的结果是:
C语言数据类型float和double的有关问题

但是将double a[2],b[3];改为float a[2],b[3];就会输出正确:
C语言数据类型float和double的有关问题

求解释!

------解决方案--------------------
对于scanf %f输入,C标准只允许float型,不能将%f用于double型输入
而对于printf,在vc中%f却用于float,double均可
设计上确实很容易让人迷惑
------解决方案--------------------

scanf("%f",&a);  a的类型是float
scanf("%lf",&a); a的类型是double