鱼C论坛

 找回密码
 立即注册
查看: 2348|回复: 15

关于小甲鱼c语言35课的一个问题

[复制链接]
发表于 2015-2-6 20:37:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bangiao 于 2015-2-6 21:03 编辑

QQ截图20150206201111.png

源代码

源代码




QQ截图20150206201609.png

为什么会出现这种问题???

这是源代码:
  1. #include<stdio.h>
  2. void  main()
  3. {
  4.         double a = 49.0, result;
  5.         double sq(double x);
  6.         result = sq(a);
  7.         printf("%.2f", result);

  8. }
  9. double sq(double x)
  10. {
  11.         double i = 0.0;
  12.         for (i = 0.0; 1; i += 0.1)
  13.         {
  14.                 if (x == i*i)
  15.                 {
  16.                         break;
  17.                 }
  18.         }
  19.         return i;
  20. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-2-6 20:48:35 | 显示全部楼层
本帖最后由 haiouda 于 2015-2-6 20:51 编辑

if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 21:00:16 | 显示全部楼层
haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?

形参!在
  1. double sq(double x)
复制代码

被定义
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 21:00:59 | 显示全部楼层
haiouda 发表于 2015-2-6 20:48
if (x==i*i)
中的 ‘x’,在哪定义的? 形参,可以直接做变量来用~?!?

可以吧!!!{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 21:09:18 | 显示全部楼层
本帖最后由 haiouda 于 2015-2-6 21:27 编辑

帮我看下,为什么不进入 for 循环呀???  这是哪错了,for ,直接跳过???
  1. #include <stdio.h>

  2. void main()
  3. {
  4.         double a =4.0,result;
  5.         double sq(double x);
  6.         result = sq(a);
  7.         printf("%2.15f\n",result);
  8. }

  9. double sq(double x)
  10. {
  11.         double i =0.0;
  12.         for (i=0.0; 1;i+=0.1)
  13.         {
  14.                 if(x==i*i);
  15.                 {
  16.                 break;
  17.                 }
  18.         }
  19.         return i;

  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 21:18:14 | 显示全部楼层

是可以,我刚学完这,习题还没做。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 22:01:47 | 显示全部楼层
haiouda 发表于 2015-2-6 21:09
帮我看下,为什么不进入 for 循环呀???  这是哪错了,for ,直接跳过???

额!看了半天终于知道了!if()后面多了个;号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 22:03:23 | 显示全部楼层
@小甲鱼   老师!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 22:04:20 | 显示全部楼层
因为浮点数在计算机中不能被精确表示,所以会出现这种问题。循环变量一般是禁止使用浮点数的,会出很多不可预知的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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不能被精确表示,所以会死循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 22:14:10 | 显示全部楼层
bangiao 发表于 2015-2-6 22:08
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?

具体浮点数为什么不能精确表示,请查阅IEEE754标准
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 22:16:07 | 显示全部楼层
bangiao 发表于 2015-2-6 22:08
额!那就麻烦了!!!只能用1了么?
没有更好的办法了么?

#include<stdio.h>
void  main()
{
        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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 22:20:27 | 显示全部楼层
haiouda 发表于 2015-2-6 22:16
#include
void  main()
{

哎!不能愉快的完成作业了!!!
  1. if (x < i*i)
复制代码

我把它改成这个了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 22:22:12 | 显示全部楼层
bangiao 发表于 2015-2-6 22:20
哎!不能愉快的完成作业了!!!

我把它改成这个了

这是什么作业呀?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-7 14:59:59 | 显示全部楼层
计算机里浮点数不精确的,稍有偏差正常:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 22:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表