C语言——设置flag的优点

本文介绍了C语言中使用flag标记来提高程序可读性的方法,包括判断素数、三色旗排序算法及韩信点兵问题的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          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; 
}

不懂的同学可以在下方留言。

以后继续补充。。。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值