C语言分支与循环(一)if语句及switch语句

c语言是一种结构化的程序设计语言,其中结构是指顺序结构选择结构循环结构三种结构。

其中选择结构又叫分支结构,可以使用ifswitch语句实现,

而循环结构则可以利用forwhiledo while语句实现。

1、if语句
1.1  if

if语句的形式如下:

if(表达式)
{
   想执行的语句;
}

当{}中执行语句只有一句时,{}可以省略不写。

 运行时,先对()里的表达式进行判断,如果表达式为真,则执行{}里的语句,如果表达式为假则语句不执行

而在c语言中,判断规则是,0为假,非0为真,即表达式的值不为0就执行{}内语句,若为0,则不执行该语句。

举例说明,输入一个数判断其是否是正数

#include<stdio.h>
int main()
{
 int num=0;
 scanf("%d",&num);
 if(num>0)
{
  printf("%d是正数",num);
}
return 0;
}

此时如果输入的数大于0,便会在屏幕上输出打印该数是正数,否则屏幕上不会打印任何文字,即不执行if语句。

如果一个数不是正数,那它就是负数,如果我们想同时清楚地知道一个数为正还是负,就需要用到if....else...语句

1.2  else

if...else...语句形式如下:

if(表达式)
{
  语句1;
}
else
{
  语句2;
}

当if语句()的表达式为假,则会往下执行else下的{}当中的语句,即不执行语句1,而执行语句2。

还是以判断一个数正负为例子

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
	{
		printf("%d是正数", num);
	}
	else
	{
		printf("%d是负数", num);
	}
	return 0;
}

现在在屏幕中输入一个数,假设为-56,那么屏幕上就会打印出“-56是负数”这句话。结果如图:

可知这里没有执行if中的语句1,而是执行了else中的语句2。即不满足if语句()中的判断条件时,便会执行else中的语句,相当于else的执行条件是if不执行。

需要注意的点是,if语句和else语句都只能控制一条语句,所以当所要执行的语句不止一条时,要记住用{}括起来。

1.3  if嵌套
1.3.1 else if

上面所举的例子中,只需要做两个判断语句,但在实际问题当中一个对问题的分析可能远远不止两个判断可以完成

此时我们就可以采用嵌套循环,即将else与另一个if语句连用,即else if,构成多重判断

else if语句使用形式如下

if(表达式)
{
  语句1;
}
else if(表达式)
{
  语句2;
}
else if(表达式)
{
  语句3;
}
……

其中省略号表示可以按照需求,用else if不断进行再判断,具体举例如下:

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num==0)
	{
		printf("输入的数字是0");
	}
	else if (num>0)
	{
		printf("%d是正数", num);
	}
	else
	{
		printf("%d是负数", num);
	}
	return 0;
}
1.3.2 嵌套if

在if语句内写if语句,就构成嵌套if语句,

举例如下:在判断一个数为正数后,再判断其奇偶性,如果为奇数则输出打印“奇数”,如果为偶数则输出打印“偶数”。

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num>0)
	{
		if (num%2==0)
		{
			printf("%d是偶数", num);
		}
		else
		{
			printf("%d是奇数", num);
		}
	}
	else
	{
		printf("%d是负数", num);
	}
	return 0;
}

假设输入的数字是26,则运行结果为:

1.3.3 else悬空

else悬空问题,即当有多个if语句时,else只与离它最近的if匹配。

我们以一个代码举例,

int main()
{
	int a = 0;
	int b = 1;

	if (a == 1)
		if (b == 2)
			printf("bulubulu\n");
	else
		printf("balabala\n");
	return 0;
}

(注:这里都只有一条语句,于是省略了{},前面有提到)

我们可以猜测一下上面代码的输出结果可能是什么,初学者可能认为是打印"balabala",

但是其实运行结果是什么也不输出

因为else对应的是表达式为b==2的if语句,而该if语句嵌套在第一个if语句(a==1)中,第一个if语句因为表达式为假不执行,进而不执行嵌套在其中的if语句,而else对应第二个if语句,所以else也不执行。

2、switch语句

在c语言中,除了if语句,还提供了一种语句用于分支结构,即switch语句

2.1 switch语句一般形式

switch可以看作一种特殊的if...else if....结构,用于判断条件有多个结果的情况。

它的一般形式如下

switch(表达式){
     
     case 结果1: 语句1;
     
     case 结果2: 语句2;

     default:语句3; 

}

根据switch()里表达式的结果,往下与case后的结果进行匹配,如果匹配到相同的值,则执行对应case后的语句,如果在遍历所有case后没有找到一样的值就执行default后的语句。

需要注意的是switch的表达式必须是整型表达式

case后的结果也必须是整型常量表达式

举例:输入一个数字,计算其除以3后的余数

int main()
{
	//计算一个数除以3后的余数
	int a = 0;
	scanf("%d", &a);
	switch (a%3)
	{
	case 0:
		printf("整除,余数是0");
		break;
	case 1:
		printf("余数是1");
		break;
	case 2:
		printf("余数是2");
		break;
	}
	return 0;
}

于是不同的计算结果就会执行不同的case语句分支

但需要注意两点:1、每一个case语句里的break不可以省略,否则无法跳出switch语句 2、case必须和后面的数字有空格

2.2 switch中的break语句

如果省略了break,就会发生如下错误:按照之前的结果,它应该只打印第一个结果,但我们发现,它继续接下去执行了后面的case语句,打印出了另外两个结果。

而其中具体原因是因为,switch语句也是分支效果,只有使用break语句才能跳出switch语句,如果某个case语句中没有break,代码会继续往下执行,有可能执行其他case语句中的代码,直到遇到break或者switch语句结束,这也是为什么不能省略掉break语句的原因。

2.3 switch中default语句

当switch(表达式)中表达式的结果没有在case中找到匹配的值时,这时要么不做处理,要么在switch中加入default语句

即当没有case有对应的值匹配时,就执行default后的语句3

switch(表达式){
     
     case 结果1: 语句1;
     
     case 结果2: 语句2;

     default:语句3; 

}

同时,在switch语句中default和case语句没有顺序要求,只需要满足实际需求就好,不过我们通常把它放在switch语句的最后。 

  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值