While循环中的0.1增量(C编程)

时间:2015-02-12 23:28:15

标签: c while-loop increment tabular

我在一个介绍性的C编程课程中。我们的最新项目让我们编写代码,使用while循环将xsqrt(x)值从1-10列为0.1步。但是,当我尝试执行0.1增量时,没有任何内容添加到起始整数1,程序在无限循环中运行。我将发布以下代码。除了不执行该步骤之外,程序运行正常(并且与其他增量(如1等)一起使用)。我该如何解决这个问题?

#include <stdio.h>
#include <math.h>
int main(void)
{
   int x=1;
   double sq_rt;
   printf("Square Root Table: \n");
printf("Value of X        Square Root of X\n");    
while (x <= 10)
   {
      sq_rt = sqrt (x);     
printf("%6i %20f \n", x, sq_rt);   
x += 1e-1;
  }
   return 0;
}

3 个答案:

答案 0 :(得分:1)

int类型只允许存储整数(即-2,-1,0,1,2等)。要存储带小数点的数字,您需要双精度(或double)类型。将main()的第一行更改为:

double x = 1.0;

如果您尝试将1e-1添加到int,它会首先将其转换为int - x的类型 - 当被截断时最终会被零,所以你永远不会向x添加任何内容。

答案 1 :(得分:1)

程序中的行

x += 1e-1;

正在执行相当于

的操作
x = (int)(((double)x) + 0.1);

换句话说,首先将x转换为double,然后将0.1添加到其中,得到1.1。然后将该值转换为int,得到值1,分配给x。

修复方法是将x的类型更改为浮点类型,例如floatdouble

分享并享受。

答案 2 :(得分:0)

以下代码是关于如何执行所需算法的建议。

#include <stdio.h>
#include <math.h>

// define the magic numbers, don't embed them in the code
#define UPPER_LIMIT (10.0)
#define STEP_SIZE   (0.1)

int main(void)
{
    double x=1.0;
    double sq_rt;

    printf("Square Root Table: \n");
    printf("Value of X        Square Root of X\n");

    // due to ambiguities in 'real' values, 
    // this loop will iterate approx. 90 times.
    while( x < UPPER_LIMIT )
    {
        sq_rt = sqrt (x);

        // display the two double values
        // note: long float conversion values 
        // because the underlying numbers are double
        // note: blanks for alignment with column headers

        printf("%9.6lf        %16.13lf \n", x, sq_rt);

        // increase base value by increment of 0.1
        x += STEP_SIZE;
    } // end while

   return 0;
} // end function: main