C++while嵌套while不跳出
想写一段输出abc的程序,ab为100以内的正整数,c为(a^2+b^2)^(1/2)且c<=100.#include<iostream>intmain(){inta=0...
想写一段输出a b c的程序,a b为100以内的正整数,c为(a^2+b^2)^(1/2)且c<=100.
#include<iostream>
int main()
{
int a = 0, b = 1, n;
double c;
while (a <= 100)
{
a = a + 1;
while (b <= 100)
{
n = a*a + b*b;
c = sqrt(n);
if (c <= 100)
{
std::cout << a << " " << b << " " << c
<< std::endl;
b = b + 1;
}
}
}
return 0;
}
运行结果只是运行了第二个循环,不知道是什么原因。 展开
#include<iostream>
int main()
{
int a = 0, b = 1, n;
double c;
while (a <= 100)
{
a = a + 1;
while (b <= 100)
{
n = a*a + b*b;
c = sqrt(n);
if (c <= 100)
{
std::cout << a << " " << b << " " << c
<< std::endl;
b = b + 1;
}
}
}
return 0;
}
运行结果只是运行了第二个循环,不知道是什么原因。 展开
6个回答
展开全部
你的判断条件有问题 while(b<=100)这里,是永远跳不出的,你想下,当b加到100时,n为10001,10000的开根是100,所以n的开根是大于100的,即c大于100,所以不会进到if(c<=100)条件中,因此b不会再加,所以b一直为100,因此不会跳出while(b<=100)条件。这是一死循环代码。还不明白的话可以提问
代码(有注释,应该很容易理解)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a=1,b=1;
double c;
while(a<=100)
{
//初始化b,不然的话b是101,永远大于100,是不会进入下面的while循环的
//这回导致我们不能看到,如a=2,b=1(等等等)的情况
b=1;
while(b<=100)
{
c=(int)sqrt(a*a+b*b); //取整
if(c<=100)
{
cout<<"a: "<<a<<" b: "<<b<<" c: "<<c<<endl;
}
b=b+1;
}
a=a+1;
}
return 0;
}
代码(有注释,应该很容易理解)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a=1,b=1;
double c;
while(a<=100)
{
//初始化b,不然的话b是101,永远大于100,是不会进入下面的while循环的
//这回导致我们不能看到,如a=2,b=1(等等等)的情况
b=1;
while(b<=100)
{
c=(int)sqrt(a*a+b*b); //取整
if(c<=100)
{
cout<<"a: "<<a<<" b: "<<b<<" c: "<<c<<endl;
}
b=b+1;
}
a=a+1;
}
return 0;
}
追问
我想通过这个程序把100以内的勾股数找出来,但为什么输出的c不是(a^2+b^2)^(1/2)?而且由于条件问题,输出的a也到了99。要是想要找出100以内的勾股数还应该怎样修改一下程序?请您指点一下。
追答
但为什么输出的c不是(a^2+b^2)^(1/2)? 因为你要求C是整数,所以取整了(取整肯定会出现误差)你可以把:c=(int)sqrt(a*a+b*b); 中的(int)去掉,然后把cout<<"a: "<<a<<" b: "<<b<<" c: "<<c<<endl;这句代码改成cout<<"a: "<<a<<" b: "<<b<<" c: "<<(int)c<<endl;结果会更符合题意。 你要求100以内的勾股数,很简单呀! 把取整那句改成c=a*a+b*b,然后 判断 是否小于等于100,符合就输出呀,不过while(a<=100)和while(b<=100)应该改成while(a<=10)和while(b<=10)就足够了,这样算法的效率会好很多。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、while (b <= 100)前应该加一句b=1;否则你第一次结束后b就大于100,后面就不会进入while(b <= 100)循环
2、把b = b + 1;放到if (c <= 100)后面,你放在里面的话如果c不满条件,会一直在里面死循环的
2、把b = b + 1;放到if (c <= 100)后面,你放在里面的话如果c不满条件,会一直在里面死循环的
更多追问追答
追问
那个b=1很关键啊
请问如果要让输出的c为整数要添加什么语句?
追答
std:cout<<(int)c 把double强制转换成int输出
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include <math.h>
int main()
{
int a = 0, b = 1, n;
double c;
while (a <= 100)
{
a = a + 1;
while (b <= 100)
{
n = a*a + b*b;
c = sqrt(n);
if (c <= 100)
{
std::cout << a << " " << b << " " << c
<< std::endl;
b = b + 1;
}
else
b=b+1;//b==100时,因为c>100,所以上面的内层循环陷入死循环了,得让它能跳出循环;
}
b=1;//跳出循环后,这时候需要把b恢复到1,然后a加1,重新开始循环
}
getchar();
return 0;
}
#include <math.h>
int main()
{
int a = 0, b = 1, n;
double c;
while (a <= 100)
{
a = a + 1;
while (b <= 100)
{
n = a*a + b*b;
c = sqrt(n);
if (c <= 100)
{
std::cout << a << " " << b << " " << c
<< std::endl;
b = b + 1;
}
else
b=b+1;//b==100时,因为c>100,所以上面的内层循环陷入死循环了,得让它能跳出循环;
}
b=1;//跳出循环后,这时候需要把b恢复到1,然后a加1,重新开始循环
}
getchar();
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
稍简化了一下,供参考:
#include<iostream>
int main()
{
double result;
for (int i = 1; i < 100; ++i)
{
for (int j = 1; j < 100; ++j)
{
result = sqrt(i*i + j*j);
if (result <= 100)
std::cout << i << " " << j << " " << result << std::endl;
}
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b=b+1;放到if外面就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询