(C语言篇)第二章--分支与循环

前言:讲完了基础知识,今天我们就正式的开始了专题讲解了,后续博主还会更新函数、数组、操作符、指针、结构体等专题知识。因为博主也是个刚接触C语言的小白,文章难免会有些不足,但我会用心的写好这些专题,话不多说我们正式开始学习。

文章目录

  • 一、分支语句
    • I. 分支语句if
      • 1.第一种写法
      • 2.第二种写法
      • 3.第三种写法
      • 4.第四种写法
    • II. 分支语句switch
      • 1.用法
      • 2.case穿透现象
      • 3.用字符型
  • 二、 循环语句
    • I. for循环
    • II. while循环
    • III. do while循环
  • 三、continue和break
    • I. continue
      • 1.用于for循环:
      • 2.用于while循环
      • 3.用于do while 循环
    • II. break
  • 四、getchar和putchar
  • 五、练习

一、分支语句

I. 分支语句if

if是分支语句也可以叫做条件语句,if分支语句有四种写法,这里我们一起研究一下

1.第一种写法

if的第一种写法为:
(C语言篇)第二章--分支与循环_第1张图片

这里的一个大括号 {} 被称为一个分支,if可以翻译为如果,所以也可以称为条件语句,当表达式为真时则执行大括号里的语句,当表达式为假时就不执行这个 if 语句,当然大括号里的语句数量可以是随机的,根据自己需求定的注意:在C语言中用0表示"假",一切非零的值都是"真"。
例:

#include 

int main()
{
     
	int i = 0;
	//输入i的值
	scanf("%d", &i);
	if (i < 10) 
	{
     
		printf("%d\n", i);
	}
	return 0;
}

这里我们输入一个数判断 i 是否小于10,如果小于10就为真,则打印输入的值 i , 大于10就为假,则不执行 if 里的语句。

在这里插入图片描述在这里插入图片描述

2.第二种写法

(C语言篇)第二章--分支与循环_第2张图片

else表示其他。当表达式为真时,执行分支1中的语句,当表达式为假时则执行else中的语句,注:使用这种写法时一定会有一个分支执行。
例:

#include 

int main()
{
     
	int i = 0;
	//输入i的值
	scanf("%d", &i);
	if (i < 10) 
	{
     
		printf("i = %d\n", i);
	}
	else 
	{
     
		printf("Hello\n");
	}
	return 0;
}

当条件成立时则打印 i 后结束:
(C语言篇)第二章--分支与循环_第3张图片

当条件不成立时则打印 Hello 后结束:
在这里插入图片描述

3.第三种写法

(C语言篇)第二章--分支与循环_第4张图片

这种写法就是先判断表达式1,为"真"则执行分支1,执行后整个 if 语句就结束了,如果表达式1为"假",则判断表达式2,为真则执行分支2,执行后整个if 语句就结束。以此类推,即只要执行一个分支,if 语句就结束。如果所以表达式都为假,就等于不执行整个 if 语句。
例:

#include 

int main()
{
     
	int i = 0;
	//输入i的值
	scanf("%d", &i);
	if (i < 10) //分支1
	{
     
		printf("haha\n");
	}
	else if (i > 12)//分支2
	{
     
		printf("yyds\n");
	}
	else if (i == 10)//分支3
	{
     
		printf("Hello\n");
	}
	return 0;
}

当分支1的条件为真时打印 haha 后语句结束:
(C语言篇)第二章--分支与循环_第5张图片

当分支1为假,分支2为真时打印 yyds 后语句结束:
(C语言篇)第二章--分支与循环_第6张图片

当分支1 2都为假,分支3为真时打印 Hello 后语句结束:
(C语言篇)第二章--分支与循环_第7张图片

当分支1 2 3都为假时则不执行:
在这里插入图片描述

4.第四种写法

(C语言篇)第二章--分支与循环_第8张图片

这种写法可以从上面三种写法推理出当分支3及之前的分支都为假时,则执行else。使用这种写法时一定会有一个分支执行。 这里可以通过上面三种例子推出所以博主就不举例了。

II. 分支语句switch

1.用法

(C语言篇)第二章--分支与循环_第9张图片

注:使用switch语句时,switch() 括号里不能使用浮点数,不然会报错,case语句的缩进和switch一样

这里我们上代码讲解:

#include 

int main()
{
     
	int day = 0;
	//我们把day当做星期,输入星期几。
	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;
	default:
		printf("输入的值不在范围内,");
	}
	return 0;
}

用法:switch(表达式)中的表达式中的值和case的值进行匹配,如果相同则执行这条case语句,即day的值与case后的值进行匹配。

这里我们输入2则执行case 2:的语句即打印星期二。
在这里插入图片描述

输入6则打印星期六:
(C语言篇)第二章--分支与循环_第10张图片

而default语句的作用就是当你输的值与case的值都不相符时,则执行default中的语句,当然在switch分支语句中default语句是可写可不写的。
在这里插入图片描述

2.case穿透现象

当然case语句中的break是可以省略的,当省略时就会发生case穿透现象,例:


#include 

int main()
{
     
	int day = 0;
	//我们把day当做星期,输入星期几。
	scanf("%d", &day);
	switch (day)
	{
     
	case 1:
		printf("星期一\n");
	case 2:
		printf("星期二\n");
	case 3:
		printf("星期三\n");
	case 4:
		printf("星期四\n");
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	default:
		printf("输入的值不在范围内,");
	}
	return 0;
}

执行结果:
(C语言篇)第二章--分支与循环_第11张图片

当输入2时与case匹配,则输入星期二,而当没有break时,就会一直往下执行,去找break,找到后就停止。

当然case语句中可以什么都不写:

#include 

int main()
{
     
	int day = 0;
	//我们把day当做星期,输入星期几。
	scanf("%d", &day);
	switch (day)
	{
     
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("上学\n");
	case 6:
	case 7:
		printf("打游戏\n");
	}
	return 0;
}

这里1 2 3 4 5都是上学,而6 7则是打游戏:
(C语言篇)第二章--分支与循环_第12张图片在这里插入图片描述

3.用字符型


#include 

int main()
{
     
	char a = '0';
	//输入字符给a
	scanf("%c", &a);
	switch (a)
	{
     
	case 'A':
		printf("睡觉");
		break;
	case 'B':
		printf("学习");
		break;
	case 'C':
		printf("吃饭");
	}
	return 0;
}

二、 循环语句

I. for循环

(C语言篇)第二章--分支与循环_第13张图片

第一:初始化表达式最先执行,并且在整个循环中只执行一次。
第二:条件表达式结果必须是"真"或"假",即0和非零的表达式。
执行原理:
1.先执行初始化表达式,并且初始化表达式只执行1次。
2.然后判断条件表达式的结果,如果条件表达式结果为true,则执行循环体。
3.循环体结束之后,执行更新表达式。
4.更新完之后,再判断条件表达式的结果,如果还是真,继续执行循环体,以此类推,直到条件表达式为"假"时for循环终止
这里我们可以看图执行完1~5的顺序后如果条件表达式为真,则继续执行(这里看灰色线),直到条件表达式为假,for循环结束。

例如我们想打印1~10:

#include 

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

第一次执行 i = 1,然后执行判断语句判断 i <= 10,为真则执行循环体中语句,执行完循环体,则 i++,此时i = 2,再执行判断语句 i <= 10,为真时执行循环体中的语句…,以此类推,直到第十次循环完后此时i = 10,执行i++后,i = 11,再执行 i <= 10,此时可以看出条件不成立即为假,所以for循环终止。
在这里插入图片描述

当然for循环的初始化表达式和更新表达式是可以不写的,而条件表达式一般都要写,不写就会判定恒为"真",进入死循环,不管你有没有省略表达式
分号(;)都是不能省略。

#include 

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

for循环还可以输入多个条件如图:
(C语言篇)第二章--分支与循环_第14张图片

II. while循环

(C语言篇)第二章--分支与循环_第15张图片
执行原理:

1.先判断条件表达式为"真"还是"假",为真则执行循环语句,执行后再判断条件语句…直到条件表达式为假while循环终止。

#include 

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

这样写得的效果和for循环是一样的,并且也很相似,大家可以模拟一下执行顺序体会一下。其结果为:
在这里插入图片描述

III. do while循环

(C语言篇)第二章--分支与循环_第16张图片

执行原理:
1.do while 的执行原理其实和while的执行原理很相似。进来直接执行循环体中的语句,再进行条件表达式的判断,这里需要注意while()后需要加分号。 使用do while 循环一定会执行循环体一次。

三、continue和break

I. continue

continue为继续的意思,用于for、while、do while循环,作用是终止本次循环,进入下一次循环继续执行。

1.用于for循环:

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

(C语言篇)第二章--分支与循环_第17张图片

这里为什么不是打印0 1 2 3 呢,因为当第三次循环时i = 2 ,if 条件语句判断为真执行continue,使其不执行后面的语句直接进行下一次循环,这时候 i++,再判断。

2.用于while循环

#include 

int main()
{
     
	int i = 1;
	while (i <= 5)
	{
     
		if (i == 2)
		{
     
			continue;
		}
		printf("%d\n", i);
		i++;
	}
}

结果:
(C语言篇)第二章--分支与循环_第18张图片

我们可以看到光标闪着不动,这是死循环的意思,这是因为当第二次进入循环时i = 2,这时 if 语句的判断为真,进入分支,执行continue,使其进行下一次循环而不执行后面的数,这时 i 得不到改变,就会一直以2的值进入循环,再执行if语句,从而导致死循环。为了防止死循环我们可以把i++放在if 上面。

3.用于do while 循环

#include 

int main()
{
     
	int i = 0;
	do {
     
		printf("haha");
		continue;
		i++;
	} while (i < 3);
}

这里我们可以自己练习一下看看结果会怎样。

II. break

1.用于switch语句,防止case发生穿透现象。
2.用于for、while、do while循环,终止循环的执行。

当我们把上面的continue换为break又会怎样呢

#include 

int main()
{
     
	int i = 0;
	for (i = 0; i <= 3; i++)
	{
     
		if (i == 2)
		{
     
			break;
		}
		printf("%d\n", i);
	}
}

(C语言篇)第二章--分支与循环_第19张图片
打印 0 和 1 ,当第三次进入循环体时i = 2,符合 if 条件语句,则执行break,for循环直接结束。

这里的break运用到while 、do while都没什么陷阱,和for都是一样的,遇到break后直接结束循环。

四、getchar和putchar

(C语言篇)第二章--分支与循环_第20张图片

getchar的返回值为int类型。
(C语言篇)第二章--分支与循环_第21张图片

当gatchar不为字符时返回EOF。
在这里插入图片描述
(C语言篇)第二章--分支与循环_第22张图片


以下可以看到用getchar接收一个字符,再用putchar输出字符,当其不等于EOF时就一直打印,即不为字符时,就等于EOF,用int a = 0,是因为getchar返回的是int类型
(C语言篇)第二章--分支与循环_第23张图片
接下来我们来模拟一下用户登录的场景

#include 
int main() {
     
	char password[20] = {
      0 };
	printf("请输入密码:");
	//输入密码
	scanf("%s", password);
	printf("请确定密码(Y/N):");
	int ch = getchar();//输入Y/N放到ch中
	if (ch == 'Y') {
     
		printf("确定成功\n");
	}
	else {
     
		printf("确定失败\n");
	}
	return 0;
}

(C语言篇)第二章--分支与循环_第24张图片
按道理来说我们输入密码后,就能输入Y/N确定密码了。但为什么会不输Y/N就给出确定失败呢。原因是当我们使用输入函数时都会先放缓冲区,当我们使用scanf函数在键盘上输入123456时,需要按回车键确定输入的数,即\n,所以缓冲区里会有123456\n
(C语言篇)第二章--分支与循环_第25张图片(C语言篇)第二章--分支与循环_第26张图片这时我们只需在用getchar把\n接收走。

#include 
int main() {
     
	char password[20] = {
      0 };
	printf("请输入密码:");
	//输入密码
	scanf("%s", password);
	printf("请确定密码(Y/N):");
	getchar();//把\n拿走
	int ch = getchar();//输入Y/N放到ch中
	if (ch == 'Y') {
     
		printf("确定成功\n");
	}
	else {
     
		printf("确定失败\n");
	}
	return 0;
}

(C语言篇)第二章--分支与循环_第27张图片这里我们可以看到可以正常的判断了,但问题又来了如果用户这样输入呢:
在这里插入图片描述当我们使用scanf接收123456时,用空格时,空格前面表示123456输入给一个变量,即变量ch,这时缓冲区还剩下:"空格"abcd\n,而使用一个getchar只是把空格拿走,后面还剩下abcd\n所以需要用到循环来接收。

#include 
int main() {
     
	char password[20] = {
      0 };
	printf("请输入密码:");
	//输入密码
	scanf("%s", password);
	printf("请确定密码(Y/N):");
	int teap = 0;
	while ((teap = getchar()) != '\n')//用于接收多余的值
	{
     
		;//空语句
	}
	int ch = getchar();//输入Y/N
	if (ch == 'Y') {
     
		printf("确定成功\n");
	}
	else {
     
		printf("确定失败\n");
	}
	return 0;
}
while ((teap = getchar()) != '\n')
{
	;//空语句
}

这个的意思是用getchar()返回的字符然后赋值给变量teap,当其接收到 \n 时,while循环执行的条件就不满足了,这时缓冲区的值也都被拿出来了,所以下一个getchar()光标会停下等待输入字符.
这次我们再来看看结果:
(C语言篇)第二章--分支与循环_第28张图片
这时我们可以看到成功了。这里我们可以先理解再自己把完整的把代码敲出来。

五、练习

我们做些练习来巩固一下知识:
小练习1

好了分支与循环我们学到这里就到这里结束了,如果对你有帮助的话记得收藏一下哦,喜欢本章节的也可以动动小手点个赞。如果发现文章中有错误的话,请各位大佬及时指正,谢谢各位啦。

你可能感兴趣的:(c语言笔记,c语言)