我在一个介绍性的C编程课程中。我们的最新项目让我们编写代码,使用while循环将x
和sqrt(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;
}
答案 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
的类型更改为浮点类型,例如float
或double
。
分享并享受。
答案 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