flag在C语言中没有特定的含义,但是我们一般将它作为标记使用。比如设立判断条件,或者作为跳出循环的依据。
例如,判断素数中,设置flag标记,让我们的程序可读性更佳。
#include<stdio.h>
#include<math.h>
int prime(int n)
{
int flag=1; //设置标记
for(int i=2; i<=sqrt(n); i++)
{
if(n%i==0)
{
flag = 0;
break;
}
}
return flag;
}
int main()
{
for(int i=2;i<=200;i++)
{
if(prime(i)==1)
printf("%d\n",i);
}
}
在三色旗算法中同样用到flag标记,里面需使用三种标记使得三种不同的旗子能够按要求移动排序。
//三色旗
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLUE 'b'
#define RED 'r'
#define WHITE 'w'
//宏定义函数,无参数类型,且容易产生错误,节省时间但是占用空间 ,'\'是宏定义的换行符
//交换两面旗的函数方法
#define \
swap(x, y){ \
char temp; \
temp=color[x]; \
color[x]=color[y]; \
color[y]=temp;}
int main() {
char color[] = {'r','w','r','r','b','b','w','w','r','b','\0'};
//标记的含义是,当蓝色和白色标记若在非自己颜色的旗子上则不移动,
//若在,则向前移动,直到红色与白色标记停留在同一位置结束
int bFlag = 0; //b放在第一位
int wFlag = 0; //w也放在第一位
int rFlag = strlen(color)-1; //r放在最后一位
int i;
//打印初始旗子次序
for(i=0; i<strlen(color);i++)
printf("%c",color[i]);
printf("\n");
//当一个在前一个在后
while(wFlag <= rFlag){
if(color[wFlag] == WHITE)
wFlag++; //白色往后移
else if(color[wFlag] == BLUE){
swap(bFlag,wFlag);
bFlag++; //蓝色往后移
wFlag++;
} else {
while(wFlag < rFlag && color[rFlag] == RED)
rFlag--; //往前移动
swap(rFlag,wFlag);
rFlag--;
}
}
for(i=0; i<strlen(color);i++)
printf("%c",color[i]);
printf("\n");
return 0;
}
补充一个韩信点兵使用flag,用C++写的,使else语句在for循环中只输出一次的效果。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int a, b, c, x=0;
bool flag = true;
int n=1;
while(scanf("%d %d %d", &a,&b,&c) == 3)
{
for(int i=10;i<100;i++){
if(i%3==a && i%5==b && i%7==c)
{
cout<<i;
flag = false;
break;
} else {
if(!flag)
{
cout<<"No answer";
flag = true; //这里必须重置,不然会使得后面结果重复输出原来的结果
break;
}
}
}
}
return 0;
}
不懂的同学可以在下方留言。
以后继续补充。。。