重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、金华网络推广、成都小程序开发、金华网络营销、金华企业策划、金华品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供金华建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
void
main()
{
float
f;
double
c;
//结果最好定义为double型,运算时最后的结果可能会转为double型
printf("输入华氏温度:");
scanf("%f",f);
//用于接受键盘输入的数
c=(f-32)/1.8;
//计算
printf("c=%lf",c);//输出结果
}
//如果要循环输入可用循环嵌套起来,并使用条件当你输入特定值时退出
#include "stdio.h"int len_decimal(float f) //定义函数取小数位数(),可判断任意真小数
{ int count;
if( n0 n1) //n是纯小数
while(f)
{
f-=int(f); //取小数部分
f*=10 ; //右移小数点1位
count++; //记次
}
return(count);
}int main(){ float num; scanf("%f",num); printf("小数%f共%d位",num,len_decimal(num));}
你写这个程序,最好去理解下 float的存储方式了:
float 在存储的时候,占32位,最高位是符号位,第30-23位为指数位,剩余是尾数位占24。
举个例子:
假设:float a=3.21;
print("%f",a);和printf("%10f",a);
输出结果肯定不相同的,因此,你想要得到精准的位数,除非要制定长度了,否则,你只能按剩余24位来计算了,注意,要去掉10进制的位数了,
这个要看小数按什么格式输入。
如果按%s输入,也就是按字符串格式输入,先找到小数点的位置,然后统计下小数点后数字的长度。
具体实现可参考:
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc, char* argv[])
{
char a[128];
while(scanf("%s",a)!=EOF)
{
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
如果按%f(对应float类型小数)或者%lf(double类型的小数)方式读入,则需要先去掉整数部分,然后看小数部分一直乘10减去整数部分,知道等于0,统计,乘了几次10,但是由于浮点数在计算机中存的并不是准确值,这个往往得不到正确的结果。可以使用sprintf(str,"%g",f);,然后由于f毕竟不是准确值,还是会出现有些问题,源码如下:
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc, char* argv[])
{
char a[128];
float f;
while(scanf("%f",f)!=EOF)
{
sprintf(a,"%g",f);
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
这是最后一个已经出现错误,所以遇到要精确判断小数点的位数,最好直接按字符串读入,这和图灵机的工作原理暗暗相合。