C语言中关于float与double的问题!
见程序#include<stdio.h>intmain(void){inti,x;doubler,p,ca,sa,v;scanf("%f",&r);//输入半径for(i...
见程序
#include<stdio.h>
int main(void)
{
int i,x;
double r,p,ca,sa,v;
scanf("%f",&r);//输入半径
for(i=0;i<10000;i++)
{
printf("Choose an option:\n1 computer and display the circle perimeter.----------\n");
scanf("%d",&x);
if(x==0)
break;
switch(x){
case 1:p=2*r*3.14;printf("%f\n",p);break;//算 圆的周长
case 2:ca=3.14*r*r;printf("%lf\n",ca);break;//算圆的面积
case 3:sa=4*3.14*r*r;printf("%lf\n",sa);break;//算球的面积
case 4:v=4/3*3.14*r*r*r;printf("%lf\n",v);break;//算球的体积
}
}
}
当把里面的变量定义为double时,结果全是0,把double改为float就有了正确的结果。。
这是为什么?双精度的double不行反而单精度的float行。希望大神给个答案。 展开
#include<stdio.h>
int main(void)
{
int i,x;
double r,p,ca,sa,v;
scanf("%f",&r);//输入半径
for(i=0;i<10000;i++)
{
printf("Choose an option:\n1 computer and display the circle perimeter.----------\n");
scanf("%d",&x);
if(x==0)
break;
switch(x){
case 1:p=2*r*3.14;printf("%f\n",p);break;//算 圆的周长
case 2:ca=3.14*r*r;printf("%lf\n",ca);break;//算圆的面积
case 3:sa=4*3.14*r*r;printf("%lf\n",sa);break;//算球的面积
case 4:v=4/3*3.14*r*r*r;printf("%lf\n",v);break;//算球的体积
}
}
}
当把里面的变量定义为double时,结果全是0,把double改为float就有了正确的结果。。
这是为什么?双精度的double不行反而单精度的float行。希望大神给个答案。 展开
4个回答
展开全部
因为格式化输入scanf要求数据类型和输入格式对应,你只要把scanf里面的%f改为%lf,double不用改,就正常了。
还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。
还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-06-28 · 知道合伙人软件行家
关注
展开全部
//
// main.m
// Double与Float
//
// Created by dushengduan on 15/6/28.
// Copyright (c) 2015年 dushengduan. All rights reserved.
//
#include<stdio.h>
int main(void)
{
int i,x;
double r,p,ca,sa,v;
//你输入的时候,接受的就是float,改成double的输入就好啦
//scanf("%f",&r);
scanf("%lf",&r);//输入半径
for(i=0;i<10000;i++)
{
printf("Choose an option:\n1 computer and display the circle perimeter.----------\n");
scanf("%d",&x);
if(x==0)
break;
switch(x){
case 1:p=2*r*3.14;printf("%f\n",p);break;//算 圆的周长
case 2:ca=3.14*r*r;printf("%lf\n",ca);break;//算圆的面积
case 3:sa=4*3.14*r*r;printf("%lf\n",sa);break;//算球的面积
case 4:v=4/3*3.14*r*r*r;printf("%lf\n",v);break;//算球的体积
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%f",&r);//输入半径 // 读入double类型变量的值应该用%lf,%f用于float类型。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%lf",&r);//double对应%lf,在scanf中尤其注意
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询