中国队世界杯_2014世界杯德国 - dyhdcw.com

保留小数||有效数字问题(C语言)

保留小数问题

在C语言中我们可以直接利用printf()的特质进行小数的保留,首先目标值应当为一个浮点数类型, 以double类型为例 "% .(这里有个点)n(指的是要保留的位数)lf"

printf("%.1lf\n",a);//指的是保留一位小数

printf("%.2lf\n",a);//指的是保留两位小数

保留小数所使用的printf函数还是比较复杂(bushi),在sacnf函数中,还会存在读取宽度问题

int a = 123;

printf("%6d",a);

此时的printf就需要读取到6位a仅有三位剩余的三位就由空格补齐,这时就出现了问题:空格补在哪里,上例中空格就直接补在了右边(默认右对齐)。左对齐则需要“-”加在数字n的左边如下:

printf("%-6d",a);

此时变为左对齐

保留有效数字问题

同样以double类型为例,"% . n (指的是要保留的位数)g(保留有效数字的符号)"

printf("%.1g\n",a);//指的是保留一位有效数字

printf("%.2g\n",a);//指的是保留两位有效数字

在一些问题中可能会遇见一些麻烦,比如我刚刚遇见的。

我给出的代码是

#include

int main()

{

int n=0,k=0,count1=0,count2=0,,sum1=0,sum2=0;

double A=0,B=0;

scanf("%d %d",&n,&k);

for(int i=1;i<=n;i++)

{

if(i%k==0)

{

count1++;

sum1+=i;

}

else

{

count2++;

sum2+=i;

}

}

A=sum1/count1;

B=sum2/count2;

printf("%.1lf %.1lf",A,B);

return 0;

}

但是得不到正确的答案

其原因在于整数除法运算结果先去尾再转换为浮点。

将sum也定义为double类型

正确答案是

#include

int main()

{

int n=0,k=0,count1=0,count2=0;

double A=0,B=0,sum1=0,sum2=0;

scanf("%d %d",&n,&k);

for(int i=1;i<=n;i++)

{

if(i%k==0)

{

count1++;

sum1+=i;

}

else

{

count2++;

sum2+=i;

}

}

A=sum1/count1;

B=sum2/count2;

printf("%.1lf %.1lf",A,B);

return 0;

}

总结:保留小数的除法计算应将除数,被除数,结果均定义为double类型,因为整形的除法运算先去尾再转化为浮点型

Copyright © 2022 中国队世界杯_2014世界杯德国 - dyhdcw.com All Rights Reserved.