flag既可以称作标记,也可以称作哨兵,我觉得也可以理解成是登记册。
就像是大家排队站好,根据需求进行相应的登记
flag可以定义为bool,依然可以定义为int,或者可以定义为数组等,根据需要各取所需。
例:输出0~200 的所有素数,其中flag用于标记是不是素数,是素数标记为1,不是素数标记为0
#include<stdio.h>
#include<math.h>
int init (int n){
int flag;//设置标记
flag=1;//初始化
int i;
for(i=2 ; i<=sqrt(n) ; i++){
if( n%i==0){
flag=0;
break;
}
}
return flag;
}
int main()
{
int i;
for(i=2 ; i<=100 ;i++){
if(init(i)==1)
printf("%d\n",i);//输出0~100的素数
}
return 0;
}
例二:埃氏筛求素数,flag数组,记录是否是素数,是素数记为0,不是素数记为1;
#include<stdio.h>
#include<math.h>
#include<string.h>
const int MAX=1000;
int prime[MAX];
void init()
{
int i,j;
memset(prime,0,sizeof(prime));
int n=sqrt(MAX)+1;
for (i=2 ; i<=n ; i++)
{
if(prime[i]==0)
{
for(j=i*i; j<=MAX; j+=i)
{
prime[j]=1;
}
}
}
}
int main()
{
int i;
init();
for(i=2; i<MAX; i++)
{
if(prime[i]==0)
printf("%d\n",i);//输出0~100的素数
}
return 0;
}