【C语言】一篇文章带你搞定C语言的分支语句和循环语句

在这里插入图片描述

👦个人主页:Weraphael
✍🏻作者简介:目前正在回炉重造C语言(2023暑假)
✈️专栏:【C语言航路】
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍


一、什么是语句

C语言可分为以下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

本章介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义组成,C语言有九种控制语句。
可分为以下三类:

  1. 条件判断语句(分支语句):ifswitch
  2. 循环执行语句:do whilewhilefor
  3. 转向语句:breakgotocontinuereturn

二、if语句

2.1 if语法结构

1.单分支
//表达式结果为真,语句就被执行
if(表达式) 
     语句;

2.双分支
if (表达式1)
   	语句;
else
    语句2;  

3. 多分支
if(表达式1)
     语句1;
else if(表达式2)
     语句2;
else
     语句3

【代码样例】

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 16)
		printf("少年\n");
	else if (age >= 16 && age < 30)
		printf("青年\n");
	else if (age >= 30 && age < 40)
		printf("中年\n");
	else if (age >= 40 && age < 56)
		printf("壮年\n");
	else if (age >= 56 && age < 80)
		printf("老年\n");
	else
	{
		printf("老寿星\n");
		printf("身体健康\n");
	}
	return 0;
}

代码解析:ifelse语句默认只会执行一条语句,如果需要执行多条语句需要加代码块{}

2.2 悬空else

以下结果是多少?

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

答案是不输出!原因是:else是与最近的if匹配的

三、练习

3.1 判断一个数是否是奇数

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

3.2 输出1~100之间的奇数

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 100)
	{
		if (i % 2 == 1)
			printf("%d ", i);
		i++;
	}
	return 0;
}

四、switch语句

switch语句也是一种分支,常常用于多分支的情况。

比如,写个输入一显示星期一,输入二显示星期二。以此类推…

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	if (day == 1)
		printf("Monday\n");
	else if (day == 2)
		printf("Tuesdy\n");
	else if (day == 3)
		printf("Wednesday\n");
	else if (day == 4)
		printf("Thursday\n");
	else if (day == 5)
		printf("Friday\n");
	else if (day == 6)
		printf("Saturday\n");
	else if (day == 7)
		printf("Sunday\n");
	else
		printf("输入错误\n");

	return 0;
}

ifelse也能实现这个场景,但这样写下去有没有发现很长且非常麻烦,所以这里我们可以用switch语句。

【语法形式】

// 其中,整型表达式也包括char类型,
// 虽然char为字符类型,但字符的存储是ASCII码值是整数
// 所以char也是整型家族。
switch(整型表达式)
{
	//case和整型常量表达式中间要有空格
	case 整型常量表达式:             
         语句项;
}
#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("Monday\n");
		break;
	case 2:
		printf("Tuesday\n");
		break;
	case 3:
		printf("Wednesday\n");
		break;
	case 4:
		printf("Thursday\n");
		break;
	case 5:
		printf("Friday\n");
		break;
	case 6:
		printf("Saturday\n");
		break;
	case 7:
		printf("Sunday\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

在这里,我想说case只决定程序的入口如果没有break作为出口,就会一直往后打印,直到程序结束。当所有的case都不能匹配的时候,还要处理不能匹配的情况,这时就引入了default。当然,default也可以放在switch中任何地方,但后面要加上break。如果default放在最后,break可以不写。 但不是每次写完语句项都要跟上break,这要根据实际情况而定。

【switch笔试考点】

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)  
	{
	case 1:  
		m++; 
	case 2: 
		n++; 
	case 3:
		switch (n)  
		{         //switch可以嵌套使用
		case 1:  
			n++;
		case 2:   
			m++;  
			n++;  
			break; 
		}
	case 4: 
		m++; 
		break;  
	default:
		break;
	}
	printf("m=%d,n=%d\n", m, n);
	return 0;
}

【详解】

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
		//++后,m=3
		// 由于没有break继续执行
	case 2:
		n++;
		//++后,n=2
	case 3:
		//switch可以嵌套使用
		switch (n)
		// n = 2来到case 2
		{         
		case 1:
			n++;
		case 2:
			m++;
			n++;
			//m和n++后分别是
			//m=4,n=3
			break;
			//break结束的是嵌套的switch
		}
	case 4:
		m++;
		// ++后m=5
		break;
		// break结束
	default:
		break;
	}
	printf("m=%d,n=%d\n", m, n);
	// 因此最后m=5,n=3
	return 0;
}

五、循环语句

5.1 while循环

【语法结构】

//表达式为真,则执行循环语句。
while(表达式)  
{
   循环语句;
}

执行流程:如果表达式为真,就执行循环语句,然后又会跳到表达式判断是否为真,直到表达式为假,则循环停止。

【代码样例】

打印1~10

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}
5.1.1 while中的break
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 2)
		{
			break;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

执行流程:当i = 1满足条件进入循环,不满足if语句,因此打印1,然后i自增为2;又满足循环条件,此时i = 2满足if条件执行break语句,breakwhile中的作用:break只要被执行,不管后面有多少循环,程序直接永远终止循环。 所以程序最后的结果为1

【程序结果】

在这里插入图片描述

5.1.2 while中的continue
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 2)
		{
			continue;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

执行流程:当i = 1满足条件进入循环,不满足if语句,因此打印1,然后i自增到2;i又满足循环条件,此时i = 2满足if条件执行continue语句。continuewhile的作用是:终止本次循环,也就是本次循环continue后边的代码不会执行,而是跳转到while语句的判断部分,进行下一次循环的入口判断。 因此以上代码最后打印1,并且光标一直闪烁。

【程序结果】

在这里插入图片描述

5.2 for循环

【语法结构】

for(表达式1;表达式2;表达式3)
{
	循环语句;
}
//表达式1为初始化部分,用于初始化循环变量的。
//表达式2为条件判断部分,用于判断循环时候终止的。
//表达式3为调整部分,用于循环条件的调整。

【代码样例】

输出1~10

#include <stdio.h>
int main()
{
	for (int i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	return 0;
}
5.2.1 for循环中的break
#include <stdio.h>
int main()
{
	for (int i = 1; i <= 10; i++)
	{
		if (i == 2)
		{
			break;
		}
		printf("%d ", i);
	}
	return 0;
}

【程序结果】

在这里插入图片描述

我们发现在for循环中,break的意义和在while循环是一样的,break只要被执行,不管后面有多少循环,程序直接永远终止循环。

5.2.2 for循环中的continue
#include <stdio.h>
int main()
{
	for (int i = 1; i <= 10; i++)
	{
		if (i == 2)
		{
			continue;
		}
		printf("%d ", i);
	}
	return 0;
}

【程序结果】

在这里插入图片描述

continuewhile循环还是略有差异的,这就要涉及for循环的执行顺序,当第一轮循环结束后,会执行调整部分i++。所以会完整打印1~10

5.2.3 for的变种

1. 省略初始化部分,条件判断部分和调整部分

在这里插入图片描述

其实程序死循环了。因为省略了判断部分,导致判断一直都为真。
总结:for循环的初始化,判断和调整三个部分都可以省略,但是省略判断部分,判断恒为真,循环就死循环。

2. 省略初始化部分

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)
	{
		for (; j < 3; j++)
		{
			printf("hello world\n");
		}
	}
	return 0;
}

【程序结果】

在这里插入图片描述

【代码解析】
首先一开始i = 0,满足循环条件,进入循环,j = 0且满足内部循环,打印第一个hello world,接着j++使得j = 1,又满足内部循环条件,再打印第二个hello world,接着j++使得j = 2,又满足内部循环条件,再打印第三个hello world,接着j++,导致j = 3为假,跳出内部循环循环,此时外部循环i++,使得i = 1,再次进入内部循环,但此时j没有被初始化,j还是等于3为假跳出循环,以此类推。最后只打印3个hello world

3. 使用多于一个变量控制循环

#include <stdio.h>
int main()
{ 
    for (int x = 0, y = 0; x < 2 && y < 5; x++, y++)
    {
        printf("hello world\n");
    }
    return 0;
}

【程序结果】

在这里插入图片描述

5.3 do while循环

【语法结构】

do 循环语句 while(表达式);

特点:循环至少执行一次,使用场景有限,所以不经常使用。
for>while>do while

【代码样例】

打印1~10

#include <stdio.h>
int main()
{
	int i = 0;
	do
	{
		i++;
		printf("%d ", i);
	} while (i < 10);

	return 0;
}

while是先判断再执行,而do while是必须先执行do里的语句,再判断。

5.3.1 do while中的break
#include <stdio.h>
int main()
{
	int i = 0;
	do
	{
		i++;
		printf("%d ", i);
		if (i == 2)
		{
			break;
		}
	} while (i < 10);

	return 0;
}

【程序结果】

在这里插入图片描述

break只要被执行,不管后面有多少循环,程序直接永远终止循环。

5.3.2 do while中的continue
#include <stdio.h>
int main()
{
	int i = 0;
	do
	{
		i++;
		printf("%d ", i);
		if (i == 2)
		{
			continue;
		}
	} while (i < 10);

	return 0;
}

【程序结果】

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值