鱼C论坛

 找回密码
 立即注册
查看: 1651|回复: 8

[已解决]编的小程序得不出结果,求指错

[复制链接]
发表于 2018-1-5 14:26:55 | 显示全部楼层 |阅读模式

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

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

x
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
我编的代码是:

  1. #include <stdio.h>
  2. #include <math.h>
  3. void main()
  4. {
  5.         float a,p,q;
  6.         a=1.0;
  7. loop:        p=sqrt(a+100.0);
  8.                 q=sqrt(a+100+168.0);
  9.                 if(a<=10000&&(p-(int)p==0)&&(q-(int)q==0))
  10.                 {printf("%f\n",a);
  11.                 a++;
  12.                 goto loop;
  13.                 }               
  14. }
复制代码

调试运行没有错,但就是没有结果,得不出来数。自己找不到问题出在哪里。
最佳答案
2018-1-5 19:05:25
        float a, p, q;
        a = 1.0;
loop:        
        p = sqrt(a + 100.0);
        q = sqrt(a + 100 + 168.0);
        if (a <= 10000.0 && (p - (int)p == 0) && (q - (int)q == 0))
        {
                printf("%f\n", a);
        }
        a++;
        goto loop;
       

a++和goto loop拿出大括号;
能用for不用while,能用while不用goto
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-5 17:14:45 From FishC Mobile | 显示全部楼层
把a申明为int试试

另外,慎用goto
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 18:53:44 | 显示全部楼层
p-(int)p==0和q-(int)q==0应该为假if语句不执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 19:05:25 | 显示全部楼层    本楼为最佳答案   
        float a, p, q;
        a = 1.0;
loop:        
        p = sqrt(a + 100.0);
        q = sqrt(a + 100 + 168.0);
        if (a <= 10000.0 && (p - (int)p == 0) && (q - (int)q == 0))
        {
                printf("%f\n", a);
        }
        a++;
        goto loop;
       

a++和goto loop拿出大括号;
能用for不用while,能用while不用goto
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 19:07:33 | 显示全部楼层
改写成for循环的代码
  1.         float a, p, q;
  2.         a = 1.0;

  3.         for (; a < 10000.0; ++a){
  4.                 p = sqrt(a + 100.0);
  5.                 q = sqrt(a + 100 + 168.0);
  6.                 if (a <= 10000.0 && (p - (int)p == 0) && (q - (int)q == 0))
  7.                         printf("%f\n", a);
  8.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-8 09:23:57 | 显示全部楼层
libocdf 发表于 2018-1-5 19:05
float a, p, q;
        a = 1.0;
loop:        

谢谢指点,原来是我把a++;及goto loop;的层次放错了。没有执行。
我刚学到goto,还不会for及while语句。感谢大神又编了段for循环代码让我学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-8 09:29:51 | 显示全部楼层
libocdf 发表于 2018-1-5 19:07
改写成for循环的代码

运行结果好像不对哦。
QQ截图20180108092924.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 20:06:09 | 显示全部楼层
fairylee83 发表于 2018-1-8 09:29
运行结果好像不对哦。

1.注意代码风格
2.我这边表示没问题,你需要学会自己调试
3.为什么缺少math.h头文件编译也能通过????

给你参考
微信截图_20180108200525.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-9 09:25:38 | 显示全部楼层
libocdf 发表于 2018-1-8 20:06
1.注意代码风格
2.我这边表示没问题,你需要学会自己调试
3.为什么缺少math.h头文件编译也能通过??? ...

谢谢,昨天只学到GOTO还没学到for.后来又学了for语句和调试,调试通了。
程序小白,问的问题也弱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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