关于小甲鱼c语言35课的一个问题
本帖最后由 bangiao 于 2015-2-6 21:03 编辑为什么会出现这种问题???
这是源代码:
#include<stdio.h>
voidmain()
{
double a = 49.0, result;
double sq(double x);
result = sq(a);
printf("%.2f", result);
}
double sq(double x)
{
double i = 0.0;
for (i = 0.0; 1; i += 0.1)
{
if (x == i*i)
{
break;
}
}
return i;
}
本帖最后由 haiouda 于 2015-2-6 20:51 编辑
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?
haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?
形参!在
double sq(double x)
被定义 haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?
可以吧!!!{:1_1:} 本帖最后由 haiouda 于 2015-2-6 21:27 编辑
帮我看下,为什么不进入 for 循环呀???这是哪错了,for ,直接跳过???#include <stdio.h>
void main()
{
double a =4.0,result;
double sq(double x);
result = sq(a);
printf("%2.15f\n",result);
}
double sq(double x)
{
double i =0.0;
for (i=0.0; 1;i+=0.1)
{
if(x==i*i);
{
break;
}
}
return i;
} bangiao 发表于 2015-2-6 21:00
可以吧!!!
是可以,我刚学完这,习题还没做。 haiouda 发表于 2015-2-6 21:09
帮我看下,为什么不进入 for 循环呀???这是哪错了,for ,直接跳过???
额!看了半天终于知道了!if()后面多了个;号 @小甲鱼 老师!!!
因为浮点数在计算机中不能被精确表示,所以会出现这种问题。循环变量一般是禁止使用浮点数的,会出很多不可预知的问题。 gyedkbvo 发表于 2015-2-6 22:04
因为浮点数在计算机中不能被精确表示,所以会出现这种问题。循环变量一般是禁止使用浮点数的,会出很多不可 ...
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么? 你把循环for (i=0.0;1;i+=0.1)改成for (i=0.0;i==1.0;i+=0.1)试验一下就知道了,循环也不会结束,因为i==1.0不能被精确表示,所以会死循环。 bangiao 发表于 2015-2-6 22:08
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?
具体浮点数为什么不能精确表示,请查阅IEEE754标准 bangiao 发表于 2015-2-6 22:08
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?
#include<stdio.h>
voidmain()
{
int a = 4, result;
double sq(int x);
result = sq(a);
printf("%d\n", result);
}
double sq(int x)
{
double i = 0.0;
int y;
for (i = 0.0; 1; i += 0.1)
{
if (x ==(y=i*i))
{
break;
}
}
return i;
} haiouda 发表于 2015-2-6 22:16
#include
voidmain()
{
哎!不能愉快的完成作业了!!!
if (x < i*i)
我把它改成这个了 bangiao 发表于 2015-2-6 22:20
哎!不能愉快的完成作业了!!!
我把它改成这个了
这是什么作业呀? 计算机里浮点数不精确的,稍有偏差正常:lol:
页:
[1]