c语言选择题,下面的c程序为何是7次不是8次

(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

第1个回答  2012-10-09
备选答案有错,只要循环没有被跳出,执行完i+=k后,必然会执行if(i>j),与i>j表达式的值是否为真无关。
因此,当前7次循环,i每次自增2,i的值从2到14,i>j的值一直为假;
第八次循环式,i的值变为16,仍然会执行if(i>j),只不过此时条件为真,最后跳出循环。
第2个回答  2012-10-09
这个是 itat大赛的一道题 我刚才看着来的
把我的分析给你看看
当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次啊,好无奈的大赛啊!!!你是哪个学校的?

本回答被提问者和网友采纳
第3个回答  2012-10-09
i = 16的时候if判断不成立,所以是七次,if (i>j) 语句执行的次数是if成立后
printf(“%d %d”,s);
break ;
执行的次数追问

i=2,4,6,8,10.。。。时也不成立啊

第4个回答  2012-10-09
if(i>=j)的话就是8次,只有>的话就是7次啊追问

i=2,4,6,8,10,12,14这是7次,然后16还要在执行一次吧,应该为8次,如果加上个等号就是6次啊怎么算的您?

追答

我擦,会错意了,抱歉,有=才是7次,不过你可以多写几句测试下,我也不太清楚这个答案

第5个回答  2012-10-09
因为第执行 一次i+2,当i执行第七次的时候 i=14, if(i>j) 条件已经不成立,所以不再执行。追问

。。。那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);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网