fairylee83 发表于 2018-1-5 14:26:55

编的小程序得不出结果,求指错

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

#include <stdio.h>
#include <math.h>
void main()
{
        float a,p,q;
        a=1.0;
loop:        p=sqrt(a+100.0);
                q=sqrt(a+100+168.0);
                if(a<=10000&&(p-(int)p==0)&&(q-(int)q==0))
                {printf("%f\n",a);
                a++;
                goto loop;
                }               
}
调试运行没有错,但就是没有结果,得不出来数。自己找不到问题出在哪里。

BngThea 发表于 2018-1-5 17:14:45

把a申明为int试试

另外,慎用goto

wjp 发表于 2018-1-5 18:53:44

p-(int)p==0和q-(int)q==0应该为假if语句不执行

libocdf 发表于 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

libocdf 发表于 2018-1-5 19:07:33

改写成for循环的代码
        float a, p, q;
        a = 1.0;

        for (; a < 10000.0; ++a){
                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);
        }

fairylee83 发表于 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循环代码让我学习。

fairylee83 发表于 2018-1-8 09:29:51

libocdf 发表于 2018-1-5 19:07
改写成for循环的代码

运行结果好像不对哦。

libocdf 发表于 2018-1-8 20:06:09

fairylee83 发表于 2018-1-8 09:29
运行结果好像不对哦。

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

给你参考

fairylee83 发表于 2018-1-9 09:25:38

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

谢谢,昨天只学到GOTO还没学到for.后来又学了for语句和调试,调试通了。
程序小白,问的问题也弱{:5_91:}
页: [1]
查看完整版本: 编的小程序得不出结果,求指错