(1) 在下述程序中,if (i>j) 语句共执行的次数是( )。C
main()
{ int i=0,j=14,k=2,s=0;
for(;;)
{ i+= k ;
if(i>j)
{
printf(“%d %d”,s);
break ;
}
s+=i ;
}
}
A、6
B、9
C、7
D、12
因此,当前7次循环,i每次自增2,i的值从2到14,i>j的值一直为假;
第八次循环式,i的值变为16,仍然会执行if(i>j),只不过此时条件为真,最后跳出循环。
把我的分析给你看看
当i=2时 i=4 i= 6 i=8 i=10 i=12 i=14 时分别执行一次 。 当 i=14时 14不大于14 程序跳出循环 所以执行的7次。
给个程序测试下
Cmain()
{ int i=0,j=14,k=2,s=0;
for(;;)
{ i+= k ;
if(i>j)
{
printf("%d %d",s); break ;
printf("第%d回执行\n",i/2);
}
s+=i ;
printf("第%d回执行\n",i/2);
}
}
void main()
{
Cmain();
}追问
i=14,i不大于j,但也不会跳出循环啊,这是全国信息技术大赛的预赛题怎么弄的啊
追答是 8次了 ! ! ! 可是答案为什么是7次啊,好无奈的大赛啊!!!你是哪个学校的?
本回答被提问者和网友采纳printf(“%d %d”,s);
break ;
执行的次数追问
i=2,4,6,8,10.。。。时也不成立啊
i=2,4,6,8,10,12,14这是7次,然后16还要在执行一次吧,应该为8次,如果加上个等号就是6次啊怎么算的您?
追答我擦,会错意了,抱歉,有=才是7次,不过你可以多写几句测试下,我也不太清楚这个答案
。。。那i=2,4,6,8,10,12时就满足了?不是吧
追答不好意思,看错
追问i=14不满足啊,因为条件是i>j,等于16才满足吧
追答答案还是 7,因为if(i>j)是从2开始,不是从0,因为在执行if(i>j)之前,i已经是2,所以最后到i =16时,只执行7次。你仔细想下就知了。例如,i=4时,只执行if(i>j) 一次,因为i =4时,if(i>j)还没执行。i =6 时,执行了两次,依次类推,i =16时,执行了7次。
追问2------16是8次。。。
追答2的时候没有执行,你没看懂?i =4 的时候才执行了一次,因为if(i>j)在i=2之前。
给你个程序测试下:
#include
main()
{
int i=0,j=14,k=2,s=0;
int p = 0;
for(;;)
{
i+= k ;
if(i>j)
{
printf("%d\n",s);
break;
}
p++; //记录 if(i>j)执行的次数
s+=i ;
}
printf("%d",p);
}