各位高手,这个程序运行不出结果,帮忙看看怎么回事
#include<stdio.h>#defineMAXN100inta[MAXN];voidcomb(intm,intr){inti,j;i=0;a[i]=1;do{if...
#include<stdio.h>
#define MAXN 100
int a[MAXN];
void comb(int m,int r)
{
int i,j;
i=0;
a[i]=1;
do
{
if (a[i]-i<=m-r+1)
{
if (i==r-1)
{
for (j=0;j<r;j++)
{printf("%4d",a[j]);
printf("\n");}
}
a[i]++;
continue;
{
if(i==0)
return;
a[--i]++;
}
}
}while(1);
}
main()
{
comb(5,3);
} 展开
#define MAXN 100
int a[MAXN];
void comb(int m,int r)
{
int i,j;
i=0;
a[i]=1;
do
{
if (a[i]-i<=m-r+1)
{
if (i==r-1)
{
for (j=0;j<r;j++)
{printf("%4d",a[j]);
printf("\n");}
}
a[i]++;
continue;
{
if(i==0)
return;
a[--i]++;
}
}
}while(1);
}
main()
{
comb(5,3);
} 展开
1个回答
展开全部
第一个判断条件,if (a[i]-i<=m-r+1),如果是假,则跳过整个if的分支,进入while(1),重新进入do循环,而且所有变量都没有发生变化,判断结果仍然是假,就进入了死循环;
如果条件是真,则执行第二个判断,if (i==r-1) ,这个判断无论是真还是假,都会执行到continue这条语句,于是又重新进入do循环。
我看了一下,在调用comb(5,3)时,因为i的初值是0,r=3,,条件为假,所以也不会执行其后的printf语句,所以程序没有输出结果,而且一直处于死循环当中。
因为不清楚你程序的目的,所以也不好帮你改动。觉得应该梳理清楚逻辑条件,画出流程图,弄清楚各种条件分支,从逻辑上就要避开环路,确保每个分支都最终能够走到结束,再考虑程序实现。仅供参考。
如果条件是真,则执行第二个判断,if (i==r-1) ,这个判断无论是真还是假,都会执行到continue这条语句,于是又重新进入do循环。
我看了一下,在调用comb(5,3)时,因为i的初值是0,r=3,,条件为假,所以也不会执行其后的printf语句,所以程序没有输出结果,而且一直处于死循环当中。
因为不清楚你程序的目的,所以也不好帮你改动。觉得应该梳理清楚逻辑条件,画出流程图,弄清楚各种条件分支,从逻辑上就要避开环路,确保每个分支都最终能够走到结束,再考虑程序实现。仅供参考。
中智咨询
2024-08-28 广告
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。...
点击进入详情页
本回答由中智咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询