扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这个要看小数按什么格式输入。
创新互联公司于2013年开始,是专业互联网技术服务公司,拥有项目网站制作、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元东坡做网站,已为上家服务,为东坡各地企业和个人服务,联系电话:18980820575
如果按%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;
}
这是最后一个已经出现错误,所以遇到要精确判断小数点的位数,最好直接按字符串读入,这和图灵机的工作原理暗暗相合。
说句实话,如果是我,我绝对不会使用这种方式来计算。
因为float精确到小数点后6位。
我建议你通过这样的方式来计算:
不定义浮点数,而是定义字符串,然后从小数点开始计算后面的长度即可。
最主要的是假设你输入一个1.123456789123456789除了使用字符串的方式你无法通过正常的浮点数数据类型来精确计算。
100.25432是十进制数,存入float要先化成2进制float格式,十进制化二进制,通常化不净,于是就引入了截断误差,以至于,只有6-7位有效数字精度了。你可以用字符串来输入和存放。chars[30]="100.25432";intL,k,i,n;L=strlen(s);//计算字符串长度,得9for(i=0;iL;i++)if(s[i]=='.'){k=i;break;};//找出小数点在哪里,得3n=L-k-1;//小数点后的位数,得5-----如果输入,前面添输入语句:printf("pleaseinput100.25432\n");scanf("%s",s);//读入100.25432接下来同样计算L,k,n就可以了。
/*泰勒公式求sin(x)*/
#include stdio.h
int main() {
double x,s1,e,s=0;
int n=1;
e=0.000001; /*误差上限位六位小数*/
printf("求sin(x)\n请输入x(弧度):");
scanf("%lf",x);
s1=x;
do {
s+=s1; /*s1为中间变量*/
s1=-s1*x*x/(n+1)/(n+2);
n+=2;
} while (fabs(s1)=e); /*fabs为对实数求绝对值的函数*/
printf("x=%lf\nsin(x)=%lf\n",x,s);
}
运行结果
可以在输出时,指定小数点后的有效位数,实现精确到若干位的效果。
要精确到小数点后若干位,则数据类型为浮点型,可能为单精度(float)或双精度(double)。
在C语言中,使用格式化输出函数printf来实现输出。
输出格式为
%.NF
1 %为格式化字符串的引导字符。
2 .N表示指定显示N位小数。
3 F为类型字符,对于float, F值为f, 对于double,F值为lf。
举例:
1 要输出float a=1.23234; 保留3位小数的写法为:
printf("%.3f",a);
2 输出double b=123.345232; 保留4为小数,写法为:
printf("%.4lf",b);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流