就一点错误:scanf("%f",&r); 改成:scanf("%lf",&r); 注意double双精度型数值的输入必须用%lf,而它的输出则和float单精度型数值一样用%f,%e均可。
首先,这个程序的语法是以前C的语法,现在人们比较少这么写程序了,建议你换本参考书。其次,三个变量都是double类型,而%f是匹配float的,应该使用%lf。