c语言这题那错了

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:33:44
main()
{
int i,j,a;
for(i=1;;i++)
for(j=1;;j++)
{a=(i*10+j)-(j*10+j);
if (a==45) break;}
printf("\n%d",i,j);}

算法有问题
你要算什么啊
根据a=(i*10+j)-(j*10+j);
a永远不可能等于45的
不折不扣的死循环
按楼上的改了
一样还会是死循环的
我都算到1000了

你用双重循环 但是只是一次break
main()
{
int i,j,a;
for(i=1;;i++)
{for(j=1;;j++)
{a=(i*10+j)-(j*10+j);
if (a==45) break;}
if (a==45) break;}
printf("\n%d",i,j);}

break只能调出最里面的那个循环,改法如楼上所写,还有就是输出有问题应该改成:
printf("\n%d%d",i,j);

main()
{
int i,j,a;
for(i=1;;i++)
for(j=1;;j++)//i,j都没有上限的话一直增加!!
{a=(i*10+j)-(j*10+j);//这里在j的循环里,i永远为一,且a永远!=45,所以死循环啊!!!
if (a==45) break;}
printf("\n%d",i,j);}
不明白你程序什么意思!

用了break语句,造成了两个出口,也就是说:当a==45;成立时,得到的i不是你想要的i,而是i+1;因为break执行后还要进行一次for(i=1;;i++)这个步骤!

死循环
只有一个break,只退出第二个for循环
因为printf语句不是第一个for循环的执行语句但循环一直执行,
所以不执行输出语句 不可能有输出