bangiao 发表于 2015-2-6 20:37:32

关于小甲鱼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:48:35

本帖最后由 haiouda 于 2015-2-6 20:51 编辑

if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?

bangiao 发表于 2015-2-6 21:00:16

haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?

形参!在
double sq(double x)
被定义

bangiao 发表于 2015-2-6 21:00:59

haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?

可以吧!!!{:1_1:}

haiouda 发表于 2015-2-6 21:09:18

本帖最后由 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;

}

haiouda 发表于 2015-2-6 21:18:14

bangiao 发表于 2015-2-6 21:00
可以吧!!!

是可以,我刚学完这,习题还没做。

bangiao 发表于 2015-2-6 22:01:47

haiouda 发表于 2015-2-6 21:09
帮我看下,为什么不进入 for 循环呀???这是哪错了,for ,直接跳过???

额!看了半天终于知道了!if()后面多了个;号

bangiao 发表于 2015-2-6 22:03:23

@小甲鱼   老师!!!

gyedkbvo 发表于 2015-2-6 22:04:20

因为浮点数在计算机中不能被精确表示,所以会出现这种问题。循环变量一般是禁止使用浮点数的,会出很多不可预知的问题。

bangiao 发表于 2015-2-6 22:08:01

gyedkbvo 发表于 2015-2-6 22:04
因为浮点数在计算机中不能被精确表示,所以会出现这种问题。循环变量一般是禁止使用浮点数的,会出很多不可 ...

额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?

gyedkbvo 发表于 2015-2-6 22:10:03

你把循环for (i=0.0;1;i+=0.1)改成for (i=0.0;i==1.0;i+=0.1)试验一下就知道了,循环也不会结束,因为i==1.0不能被精确表示,所以会死循环。

gyedkbvo 发表于 2015-2-6 22:14:10

bangiao 发表于 2015-2-6 22:08
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?

具体浮点数为什么不能精确表示,请查阅IEEE754标准

haiouda 发表于 2015-2-6 22:16:07

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;
}

bangiao 发表于 2015-2-6 22:20:27

haiouda 发表于 2015-2-6 22:16
#include
voidmain()
{


哎!不能愉快的完成作业了!!!
if (x < i*i)
我把它改成这个了

haiouda 发表于 2015-2-6 22:22:12

bangiao 发表于 2015-2-6 22:20
哎!不能愉快的完成作业了!!!

我把它改成这个了

这是什么作业呀?

mhhnjuol 发表于 2015-2-7 14:59:59

计算机里浮点数不精确的,稍有偏差正常:lol:
页: [1]
查看完整版本: 关于小甲鱼c语言35课的一个问题