鱼C论坛

 找回密码
 立即注册
查看: 3452|回复: 9

不明白哪里错了(死不幂目吖),请大神们赐教^^

[复制链接]
发表于 2014-2-13 21:14:02 | 显示全部楼层 |阅读模式
10鱼币
【C语言经典100例之3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少(10w以内)?

#include"stdio.h"
#include"math.h"
void main()
{
   double x,y;
   int i=100000;
   do
   {
     x=sqrt(i+100);
  if((int)x==x)
  {
    y=sqrt(i+268);
    if((int)y==y)
    { printf("%d\t",i); }   
  }     
   }while(i>0); {i--;}
}
以上程序编译后,死循环,百思不得其解,不知怎么死的,
各位"挑通眼眉"的大神吖,请先别急着去DATA,有劳先帮帮详细分析分析,感激不尽

最佳答案

查看完整内容

求鱼币啊,求鱼币,哎你那个问题是这样的,do{ }while();只会运行{}和while那个括号里面的东西,不会运行到while外面的那个{}所以,你的{i--;} 这个事没有运行的,你需要把他放到do-while里面去,如下 #include"stdio.h" #include"math.h" void main() { double x,y; int i=100000; do { x=sqrt(i+100); if((int)x==x) { y=sqrt(i+268); if((int)y==y) { printf("%d\t",i); } ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 21:14:03 | 显示全部楼层
求鱼币啊,求鱼币,哎你那个问题是这样的,do{  }while();只会运行{}和while那个括号里面的东西,不会运行到while外面的那个{}所以,你的{i--;}
这个事没有运行的,你需要把他放到do-while里面去,如下
#include"stdio.h"
#include"math.h"
void main()
{
        double x,y;
        int i=100000;
        do
        {
                x=sqrt(i+100);
                if((int)x==x)
                {
                        y=sqrt(i+268);
                        if((int)y==y)
                        {
                                printf("%d\t",i);
                        }   
                }
                i--;     
   }while(i>0);
}
这样就没问题了,顺便说一句
1.请用排版好,vc++请选择所有代码 然后alt+F8,自动排版
2.请规范点,int范围是-32768~32767,你现在int是10000了,不合适,会自动截取断了,虽然vc++还可以识别出来,但是不规范,请改int为long类型吧
最后可以给我鱼币麽,缺啊!!!不懂可以继续联系我!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 21:39:00 | 显示全部楼层
这句应该是错误的:while(i>0); {i--;}  i--已经在循环体之外了。这样写不知道行不行,没试过while(--i>0);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 21:40:12 | 显示全部楼层
:lol: do {} while (i>0)// i=10000,i何时才能小于0啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 22:08:56 | 显示全部楼层
求鱼币啊,求鱼币,哎你那个问题是这样的,do{  }while();只会运行{}和while那个括号里面的东西,不会运行到while外面的那个{}所以,你的{i--;}
这个事没有运行的,你需要把他放到do-while里面去,如下
#include"stdio.h"
#include"math.h"
void main()
{
        double x,y;
        int i=100000;
        do
        {
                x=sqrt(i+100);
                if((int)x==x)
                {
                        y=sqrt(i+268);
                        if((int)y==y)
                        {
                                printf("%d\t",i);
                        }   
                }
                i--;     
   }while(i>0);
}
这样就没问题了,顺便说一句
1.请用排版好,vc++请选择所有代码 然后alt+F8,自动排版
2.请规范点,int范围是-32768~32767,你现在int是10000了,不合适,会自动截取断了,虽然vc++还可以识别出来,但是不规范,请改int为long类型吧
最后可以给我鱼币麽,缺啊!!!不懂可以继续联系我!!!!!!!!!

评分

参与人数 1鱼币 +4 收起 理由
牡丹花下死做鬼 + 4 请不要发两遍基本上一样的内容 可能会误认为.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 22:51:13 | 显示全部楼层
#include"stdio.h"
#include"math.h"
void main()
{
        double x,y;
        long int i=100000;//用int 装不下了
        do
        {
                x=sqrt(i+100);
                if((int)x==x)
                {
                        y=sqrt(i+268);
                        if((int)y==y)
                        { 
                                printf("%d\t",i); 
                        }   
                } 
                i--;//do 1 while 2  的执行顺序是 先执行 1 然后判断2是否成立如果成立在执行1如此循环
        }while(i>0); //{i--;}
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 23:13:28 | 显示全部楼层

哈哈,多谢给了我4个鱼币!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-15 15:40:31 | 显示全部楼层
原来如此,茅塞T开,运行结果终于跟答案的一样咯,哈哈!!!!!!!
非常感谢{:7_162:},送一首很好听的歌“时光”---许迁铿的,很好听听哦{:7_162:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-16 00:59:55 | 显示全部楼层

请问,我看范磊的教程说,int在32位下是4字节的容量,和LONG型一样,好像都是正负21E
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-18 10:51:37 | 显示全部楼层
路过看看= =!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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