永发信息网

一道程序题,看哪不对?

答案:2  悬赏:50  手机版
解决时间 2021-07-21 14:32
  • 提问者网友:龅牙恐龙妹
  • 2021-07-20 22:21

#include<stdio.h>
void main()
{
int a,b,c,d,e,i,j,k,l,m,x,count=0,f=0;
printf("There are following possble result:\n");
for(a=1;a<=23;a++)
for(b=1+a;b<=23-a;b++)
for(c=1+b;c<=23-a-b;c++)
for(d=1+c;d<=23-a-b-c;d++)
{
f=1;
if((e=23-a-b-c-d)>d)
for(f=0,x=1;x<24&&!f;x++)
for(f=0,i=0;i<2&&f;i++)
for(j=0;j<2&&f;j++)
for(k=0;k<2&&f;k++)
for(l=0;l<2&&f;l++)
for(m=0;m<2&&f;m++)
if(x==a*i+b*j+c*k+d*l+e*m) f=0;
if(!f) printf("[%d]: %d %d %d %d %d\n",++count,a,b,c,d,e);
}
}

见加粗的那条for(f=0,i=0;i<2&&f;i++) 为什么f=0,后面的循环语句还能运行呢?也就是该程序还有运行结果!

最佳答案
  • 五星知识达人网友:慢性怪人
  • 2021-07-20 22:47
for(f=0,i=0;i<2&&f;i++) 后面没有{}这个语句没起到限定作用
全部回答
  • 1楼网友:北城痞子
  • 2021-07-20 23:53

我单步跟踪执行了下 ,发现从你加粗的地方开始的for语句根本没执行。

我把这部分内容注释掉发现,执行的结果和没注释的时候是一样的。

所以这段程序的问题是被注释掉的部分没起到作用。那么从程序中第一次对f 赋值为1和可见的最后一次对f 赋值为0,分析我觉得正确的程序应该是这样的:

虽然这次之前被注释掉的地方可以有效执行了,但是结果和没执行仍然一样。

x==a*i+b*j+c*k+d*l+e*m 对于这个条件我还没能理解,不过这应该是理解这段代码的关键。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯