for循环的判断条件应注意!

来源:互联网 发布:网络qp是什么意思 编辑:程序博客网 时间:2024/05/01 17:06

错例:

用筛选法求100以内的素数:

#include<stdio.h>

void main()

{

 int a[101],i,j,w;

 for(i=1;i<101;i++)

  a[i]=i;

 a[1]=0;

 for(i=2;i<101&&a[i]!=0;i++)

  for(j=i+1;j<101&&a[j]!=0;j++)

   if(a[j]%i==0) a[j]=0;

 for(i=1;i<101;i++)

  if(a[i]!=0) printf("%5d",a[i]);

 printf("/n");

 getch();

}

输出结果:2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

 

错误分析:for循环括号中的表达式2是判断循环是否进行下去的判断条件,你把绿色部分理解成如下:

for(i=2;i<101;i++)

{

 if(a[i]==0) continue;

 for(j=i+1;j<101;j++)

 {

  if(a[j]==0) continue;

  if(a[j]%i==0) a[j]=0;

 }

}

但程序进行到i=3,j=4是,a[j]=0,所以内层循环跳出,i=4,a[i]=0,所以最外层循环跳出,程序只把2之后2的倍数的数归零。

原创粉丝点击