分支与循环

分支语句与循环语句

C语言是一门结构化的程序设计语言,其结构化主要体现在顺序结构、选择结构和循环结构这三者上;不难发现实际生活中很多事情,或多或少都可以划分成以上三种结构。同样,程序设计也可以划分为以上三种结构,这样做所带来的影响便是所设计的程序可以执行各种各样的功能。

这三种结构想要顺利的执行必然离不开控制语句,控制语句可分为条件判断语句、循环执行语句以及转向语句。其中分支结构主要涉及条件判断语句(if 语句、Switch语句)、循环结构则涉及循环执行语句(do while语句、while语句、for语句);转向语句在两种结构中都可使用。


分支语句

在具体介绍之前有必要先了解一下关系、条件以及逻辑这三种操作符

关系操作符
符号意义
>大于运算符
>=大于等于运算符
<小于运算符
<=小于等于运算符
==相等运算符
!=不相等运算符

以下是相关例子


1. a > b
2. a >= b
3. a < b
4. a <= b
5. a == b
6. a !=b
条件操作符(三目操作符)
1 exp1 ? exp2 : exp3	//先对exp1进行判断,如果为真则执行exp2,否则执行exp2
逻辑操作符
符号含义
!逻辑取反运算符(改变单个表达式的真假)
&&与运算符(就是并且的意思,两侧表达式同真则真,否则为假)
l l或运算符(就是或者的意思,两侧表达式同假则假,否则为真)

以上三种操作符起着条件控制的作用,符合条件则为真,执行相对应的操作;不符合条件则为假,要么执行特定的操作,要么直接退出。其中,通常使用0表示假,非0为真。


1. if语句
//if 语句的语法形式
if (表达式)		//表达式为真时,执行内部语句;否则没有任何操作
{	
	语句
}

//输入一个整数,判断其是否为奇数
#include <stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if(number % 2 == 1 )
		printf("%d 是奇数\n", number);
	return 0;
}
1.2. else语句

else语句执行的是if语句中不符合表达式条件的语句

//if...else 语句语法形式
if(表达式)
{
	语句1
}
else
{
	语句2
}

例:输入一个整数,判断是否为奇数,如果是则输出是奇数,否则输出偶数

#include <stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if(number % 2 == 1 )
		printf("%d 是奇数\n", number);
	else
		printf("%d 是偶数\n", number);
	return 0;
}
1.3. 分支语句中出现多条语句

if和else语句中默认只控制一条语句,若出现多条语句时则要加上"{ }"控制

#include <stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if(number % 2 == 1 ) //if后使用{ }控制多条语句,也叫做代码块,或者复合语句
	{
		printf("%d 是奇数\n", number);
		printf("每天多挣 %d 倍小钱钱\n",number);
	}
	else
	{
		printf("%d 是偶数\n", number);
		printf("每天多挣 %d 倍小钱钱\n",number);
	}
		
	return 0;
}
1.4. 嵌套if(if else语句中,else与if语句连用,构成多重判断)
#include <stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if(number == 0 ) 
	{
		printf("输入的数字是0\n");
	}
	/*
	else 
	{
		if(number > 0)
		{
			printf("输入的数字是正数\n");
		}
	}
	*/
	else if(number > 0) 	//这里的if相当于嵌套在else语句中,形成嵌套结构
	{
		printf("输入的数字是正数\n");
	}
	else 
	{
		printf("输入的数字是负数\n");
	}
		
	return 0;
}
1.5. 悬空else

若果有多个if和else连用,则采用就近原则即else与最近的if匹配

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if(a == 1)
		if(b == 2)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;

	//最总的结果是什么也没打印输出,因为else并不是跟第一个if连用,而是跟第二个if连用
}
2.switch 语句

分支语句除if……else语句外,还有Switch语句,Switch语句用于判断条件有多个结果的情况。

//Switch语句语法形式

switch(表达式){		//	表达式必须为整形表达式
	case value1:	//	case后的值必须是整型常量表达式
		语句
		break;		//case后语句执行完必须加上break,否则会出现击穿现象;也可以根据所要实现的操作适当的省略
	case value2:
		语句
		break;
		……
	default :	//当所有case都没执行则会执行此语句
		语句
		break;
}

if……else语句和Switch语句是可以相互转换的

#include <stdio.h>
int main()
{
	/*if……else语句实现
	int number = 0;
	scanf("%d", &number);
	if(number %3 == 0 ) 
	{
		printf("整除,余数为0\n");
	}
	else if(number % 3 == 1) 	
	{
		printf("整除,余数为1\n");
	}
	else 
	{
		printf("整除,余数为2\n");
	}
	*/
	
	/* Switch语句实现*/
	int number = 0;
	scanf("%d", &number);
	switch(number % 3)
	{
		case 0:
			printf("整除,余数为0\n");
			break;
		case 1:
			printf("整除,余数为1\n");
			break;
		case 2:
			printf("整除,余数为2\n");
			break;
	}
	return 0;
}

[ 注] Switch语句中case语句与default语句没有顺序的要求,但通常把default语句在最后。

循环结构

循环结构主要由循环语句控制,循环语句分为while循环、do……while循环和for循环

while循环
//while循环语法形式
while(表达式)
	语句;
/*while循环执行顺序:先进行表达式判断,如果表达式的值为0,则结束循环;
反之则执行循环语句,之后继续进行表达式判断直至表达式为0不满足条件退出循环为止*/

例:在屏幕上打印1~10的值

#include <stdio.h>

int main()
{

	int i = 1; 
	while (i<=10)
	{
		printf("%d ", i);
		i++;
	}

	return 0;
}

执行结果:
在这里插入图片描述

do……while循环
//do……while循环语法形式
do
{
	语句;
}while(表达式);
//do……while循环会先执行一次循环体,在进行表达式判断

例:在屏幕上打印1~10的值

#include <stdio.h>

int main()
{

	int i = 1; 
	do{
		printf("%d ", i);
		i++;
	}while(i <= 10);
	return 0;
}

执行结果:
在这里插入图片描述

for 循环
//for循环语法形式
for(表达式1; 表达式2; 表达式3{
	语句;
}
/*for循环中表达式1是初始条件,只执行一次;表达式2是判断条件,判断是否继续执行循环;表达式3是循环变量的调整
for循环的执行顺序是表达式1 ==> 表达式2 ==> 语句 ==> 表达式3 ==> 表达式2 ==> 语句 ==> 表达式3……直至不满足循环条件*/

例:在屏幕上打印1~10的值

#include <stdio.h>

int main()
{

	int i = 0; 
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}

执行结果:
在这里插入图片描述

  • for循环与while循环的对比
    在这里插入图片描述
    for循环和while循环都有初始化、判断以及调整三部分,但是二者的执行顺序各有不同;这也意味着for循环和while循环可以相互改写,只需修改初始化、判断以及调整的执行顺序即可。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值