(五)控制流

1、概念:
是一些具有特定执行逻辑的复合语句(语句块/代码段),用于控制程序的执行流程。
2、循环控制流
1》while语句
while (表达式) {     //判断表达式是否为真,真:进入while语句块中执行,执行完之后再次判断表达式,假:执行while语句块后面的语句
语句1;
语句2;
....

}

#include <stdio.h>

int main(void)
{
	int a,b,i;
	
	printf("请输入i:");
	scanf("%d",&i);
	while(i){
		printf("请输入a和b:");
		scanf("%d%d",&a,&b);
		printf("%d + %d = %d\n",a,b,a+b);
		printf("请输入i:");
		scanf("%d",&i);
	}
	
	return 0;
}
2》do-while语句do {     //不管表达式是否为真,先进入do-while语句块执行,执行一次后再判断表达式是否为真,真:回到do-while语句块的第一条语句执行,假:跳出do-while语句块句。语句1;语句2;....} while (表达式);

#include <stdio.h>

int main(void)
{
	int a,b,i;
	
	do{
		printf("请输入a和b:");
		scanf("%d%d",&a,&b);
		printf("%d + %d = %d\n",a,b,a+b);
		printf("请输入i:");
		scanf("%d",&i);
	}while(i);
	
	return 0;
}
3》for语句
//先执行表达式1,然后判断表达式2是否为真,真:进入for语句块中执行,执行完语句块之后,执行表达式3,再判断表达式2,假:执行for语句块后面的语句。
for(表达式1;表达式2;表达式3){     
语句1;
语句2;
....
}

for (i = 0;i < 5;i++) {
	printf("请输入a和b:");
	scanf("%d%d",&a,&b);
	printf("%d + %d = %d\n",a,b,a+b);
	//printf("请输入i:");
	//scanf("%d",&i);
}
3、分支控制流
1》if语句
if(表达式){     //判断表达式是否为真,真:进入if语句块中执行,假:执行if语句块后面的语句。
语句1;
语句2;
....
}

<pre name="code" class="cpp">#include <stdio.h>

int main(void)
{
	int i;

	while (1) {
		scanf("%d",&i);  //i为1,打印:今天心情不错,i为0,打印:今天心情很糟糕
		if (i == 1) {
			printf("今天心情不错!\n");
		}

		if (i == 0) {
			printf("今天心情很糟糕!\n");
		}

		if (i == 2) {
			return 1;
		}
	}

	return 0;
}
2》if-else语句
if(表达式1){     //判断表达式是否为真,真:进入if语句块中执行,假:执行if语句块后面的语句。
语句1;
语句2;
....
}else if(表达式2){
语句1;
语句2;
....
}else if(表达式3){
语句1;
语句2;
....
}
.....
else if(表达式n){
语句1;
语句2;
....
}else{
语句1;
语句2;
....
}

 
<pre name="code" class="cpp"> if (i == 1 ){
<span style="white-space:pre">	</span>printf("今天心情不错!\n");
	} else if (i == 0) {
<span style="white-space:pre">	</span>printf("今天心情很糟糕!\n");
	} else  {
	return 1;
}
上面的例子中,if-else语句一定会被执行,其中只能执行一个代码段
 
3》switch-case语句
<span style="white-space:pre">	</span>switch(整型变量){
<span style="white-space:pre">		</span>case 整型常量:
<span style="white-space:pre">			</span>语句块A;
<span style="white-space:pre">		</span>case 整型常量:
<span style="white-space:pre">			</span>语句块A;
<span style="white-space:pre">		</span>。。。
<span style="white-space:pre">		</span>case 整型常量:
<span style="white-space:pre">			</span>语句块A;
<span style="white-space:pre">		</span>default:
<span style="white-space:pre">			</span>语句块A;
<span style="white-space:pre">		</span>}
<pre name="code" class="cpp">#include <stdio.h>

int main(void)
{
	int i;
	
	while (1) {
		scanf("%d",&i);  
		switch (i) {
			case 1:
			printf("今天是星期一!\n");
			case 2:
			printf("今天是星期二!\n");
			case 3:
			printf("今天是星期三!\n");
			case 4:
			printf("今天是星期四!\n");
			case 5:
			printf("今天是星期五!\n");
			case 6:
			printf("今天是星期六!\n");
			case 7:
			printf("今天是星期天!\n");
			default:
			return 1;
		}
	}
	
	return 0;
}
上面的例子中:执行到switch语句时,先取出i的值,然后和case后面的常量比较,如果等于某个case后的常量,
case下面的语句执行,直到switch的最后一条语句,如果i的值,不等于case后的常量,则执行default下面的语句
 
五、跳转语句:
<span style="white-space:pre">	</span>1、continue语句
<span style="white-space:pre">	</span>只能用在循环控制流中,表示跳出一次循环体执行,回到循环语句的表达式位置
<pre name="code" class="cpp">#include <stdio.h>

int main(void)
{
	int i;
	
	for(i = 0; i < 100; i++){
		if( i % 2 == 0)
			continue;
		printf("i = %d\n",i);
	}
	return 0;
}

2》用于switch语句中,表示跳出该switch语句
 
<pre name="code" class="cpp">#include <stdio.h>

int main(void)
{
	int i;
	while (1) {
		scanf("%d",&i);  
		switch (i) {
			case 1:
				printf("今天是星期一!\n");
				break;
			case 2:
				printf("今天是星期二!\n");
				break;
			case 3:
				printf("今天是星期三!\n");
				break;
			case 4:
				printf("今天是星期四!\n");
				break;
			case 5:
				printf("今天是星期五!\n");
				break;
			case 6:
				printf("今天是星期六!\n");
				break;
			case 7:
				printf("今天是星期天!\n");
				break;
			default:
				return 1;
		}
	}
	return 0;
}
3、goto语句:
无条件跳转,例如:
#include <stdio.h>

int main(void)
{
	int i;
tab:	
	scanf("%d",&i);
	printf("i = %d\n",i);
	goto tab;

	return 0;
}
一般用于跳出多层循环,在项目开发中经常用于出错处理(如:内核驱动出错跳转)
#include <stdio.h>

int main(void)
{
	int i = 0;

	while (1) {
		for (; i < 100; i++) {
			if ( i % 2 == 0)
				//break;  //可以跳出离它最近的for循环,不能跳出while循环
				//此处出错
				goto tab;  
			printf("i = %d\n",i);
		}

		i++;
	}
tab:
	printf("处理程序中的错误!\n");

	return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值