C语言中的分支和循环【上】

本文详细介绍了C语言中的选择结构(if、else和switch语句)以及循环结构(for、while、do-while),包括基本语法、嵌套使用和break/continue/return语句的应用实例。
摘要由CSDN通过智能技术生成

想必大家都知道C语言是一门结构化程序设计的语言,在C语言中常见分为三种结构:顺序结构、选择结构和循环结构。今天我们用控制语句来实现选择和循环结构。

注:控制语句实质就是控制程序的执行过程,共有九种类型,分为三大类

  • 选择判断语句(分支语句):if语句,switch语句。
  • 循环语句:for语句,while语句,do while语句。
  • 转向语句:break语句,continue语句,return语句。

一、选择结构:

1.if语句

1.1.if

if语句的语法格式

if (表达式)
 语句;

 表达式为真,则执行语句;表达式为假,则不执行

eg.判断奇偶数 

在C语言中0表示假,非零为真。 

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 2 == 0)
		printf("是偶数\n");
	return 0;
}

不难发现上面代码中只能判断偶数,要想判断是奇数我们需要引入else。 

1.2.else

if else的语法与if差别不大

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

对于上文举例的代码,我们只需稍加改进,就能完整的判断奇偶数

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 2 == 0)
		printf("是偶数\n");
	else
		printf("是奇数\n");
	return 0;
}

1.3.一个分支包含多个语句

无论是if语句还是else语句都默认控制下面一行语句

eg.

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a < 18)
		printf("未成年\n");
	    printf("不可以饮酒\n");
	return 0;
}

运行结果如下:

输入值大于等于18或小于18,不可以饮酒这条语句都会打印

要想单分支控制多语句只需加上{}。

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a < 18)//在if或else语句后加上{}用于控制多个语句
	{
		printf("未成年\n");
		printf("不可以饮酒\n");
	}
	else
	{
		printf("成年了\n");
		printf("适度饮酒\n");
	}
	return 0;
}

1.4.if语句的嵌套

 (1)当我们判断一个稍微复杂一些的问题时,显然if else就不太够用了,所以我们可以将else再与if连用构成多重判断。

eg.输入两个数比较大小


#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	if (a < b)
	{
		printf("%d<%d", a, b);
	}
	else if (a > b)
	{
		printf("%d>%d", a, b);
	}
	else
	{
		printf("%d=%d", a, b);
	}
	return 0;
}

1.5.悬空else 

当判断复杂的逻辑问题时,会出现多个if,else语句,但是else总是跟它距离最近的if匹配

​
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 1;
	if (a == 1)
		if (b == 1)
			printf("right\n");
	else
			printf("left\n");
	return 0;
}

​

许多初学者初见大多都认为既然else与最近的if匹配那就该打印left 。此段代码什么都不会打印,因为本段代码不带{}默认控制一行,也就是相当于后面的if...else语句相当于嵌套在第一个if语句中,当判断第一个if语句为假,下面语句就不会被执行。

  • 我们可以把代码复制到vs中查看结果

聪明的vs会帮你把else与对应的if对齐。与其这样不如自己养成写代码1好习惯,适当的加上{}可以让自己写代码时逻辑更清晰,所以可以再修改一下 

2.switch语句 

switch语句可以认为成一种特殊的if...else语句,它可以用来处理多个结果的问题

switch语句的语法如下:

switch (表达式)
{
case 1://case后一定是整形常量表达式并且用空格隔开
	语句;
case 2:
	语句;
default:
	语句;
}

eg.判断余数

int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a % 5)
	{
	case 0:
		printf("整除\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数是2\n");
	}
	return 0;
}

运行结果:

我们发现当输入一个5被整除后语句继续执行并没有停下来,因为switch也是一个具有分支效果语句。当case后没有break语句程序就会继续执行下个语句直到遇到break或者switch语句结束。

2.1. switch语句中break

break在switch中是很重要的,没有它就不能实现分支的效果,同时想要跳出switch也需要break。break固然重要但是不代表每个case后reak,要具体问题具体分析。

eg.输入数字并打印对应日期

#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 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;
 }
 return 0;
}

如果我们想更改需求,例如:输入1~5打印工作日,6,7打印休息日就不需要使用太多的break。

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	    case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
			
		case 7:
			printf("休息日\n");
			break;
	}
	return 0;
}

我们在输入时有可能不小心输入了1~7以外的数字,如何在输入其他值的情况下生成一个提示呢?我们可以加入default字句。

2.2.switch语句中的default  

 switch语句后的表达式中的值与case语句无法匹配就会执行default。我们对以上代码稍作改进

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	   
	    case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
			
		case 7:
			printf("休息日\n");
			break;
        default:
		    printf("输入错误,请输入1~7范围内的值");
		    break;
		
	}
	return 0;
}

default与case的位置关系无关紧要 ,但一般默认default在末尾

输入其他值运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值