分支和循环笔记

《C语言入门》

                热情篇  — — 热情像一对翅膀,带我飞过山岭

目录

前言

一、“C陷阱”问题思考

二、分支语句

1.if语句

2.switch语句

3.分支语句的比较

三、循环语句

1.while循环

2.for循环 

3.do while循环

四、综合使用

总结


前言

    在我们的生活中,做任何事情都要遵循一定的原则、流程。程序设计也是如此,需要控制语句控制程序的执行流程。控制语句可以根据用户的输入决定程序要“做什么”“怎么做”等等,因此控制语句对于任何一门编程语言都是至关重要的。C语言支持三种结构:顺序结构、选择结构、循环结构。在顺序结构中,程序的流程是固定的,会按照程序的顺序逐语句执行。

选择结构的特点是程序的流程由多路的分支组成。而循环结构是指对同一程序会段执行若干次。

一、“C陷阱”问题思考

 测试问题1:{}问题,例if语句后面加与不加花括号的区别

代码测试:(if语句后面+{})


int main()
{
	int a = 10;
	if (a < 20)
	{
		printf("Hello\n");
		printf("hehe");
	}
	else
	{
		printf("你好\n");
		printf("HaHa");
	}
	return 0;
}

a = 10                                                       更改a = 30

还是这段代码,if语句后面不加{}

 

 观察发现在不加括号的情况下出现了报错,说明在这种情况下if语句只对它下面的一行代码起管理作用。

#include <stdio.h>
int main()
{
	int a = 30;
	if (a < 20)
	
		printf("Hello\n");
		
	else
		printf("你好\n");
		printf("HaHa");
	
	return 0;
}

 修改代码后,发现else后面没加{}的两条语句没有报错,这是为什么?运行结果看一下:

a = 10;                                                        a = 30

结果都输出了HaHa,所以“HaHa”不属于if()else语句。

综上所述:if语句后面只控制一条语句,不加{}也是可以的,但是如果后面有多条语句一定要记得加上{}。

 测试问题2:什么是悬挂“else”

#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;
}

当看到这样一段代码的时候,一定要杜绝自己写出这样代码风格,可读性较差。分析:运行结果为空,所以逐条执行到第一if语句的时候,a 不等于1,不会进入到第二个if语句,直接跳了出去。

综上所述:没有{}的情况,else是和它离的最近的if匹配的。

2.C语言中如何表示真假

0表示假,非0表示真。

3.EOF是什么意思

End Of File  (文件结束符)

 

二、分支语句

分支语句可以根据不同的条件执行不同的语句。包括if语句和switch语句

1.if语句

if语句的三种语法结构:

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

应用:直接体验下第三种语句

#include <stdio.h>
int main()
{
	int weight = 0;
	printf("请输入你的体重:>");
	scanf("%d",&weight);
	if (weight > 0 && weight <= 60)
	{
		printf("瘦");
	}
	else if (weight > 60 && weight <= 120)
	{
		printf("完美");
	}
	else
	{
		printf("胖");
	}
	return 0;
}

 

  

嘻嘻,举例可能不是很准确,重点体会语法的应用!

 小练习: 输出1-100之间的奇数

解法1:

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

解法2:

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

 解法3:

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

2.switch语句

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

当检测一个变量是否符合条件时,如果不符合,就再用另一个值来检测。这样的问题用if语句也是可以解决的,但是代码看起来比较笨重,这时候用switch语句就是一个很好的选择! 

switch语句的语法结构:

switch(表达式)
{
    case 整形常量表达式:
    语句;
}

switch语句中的break 

 没有使用break的情况下,运行如下代码:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch (day)
	{
	case 1:
		printf("星期一");
	case 2:
		printf("星期二");
	}
	return 0;
}

结果:

没有达到我们想要的效果。修改代码后: 

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch (day)
	{
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
		break;
	}
	return 0;
}

结果:

 总结:switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

 问题的需求改变:例如:1-5是工作日而周六、周日是休息日

#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");

	}

	return 0;
}

测试结果:

所以,break语句 的实际效果是把语句列表划分为不同的分支部分。

细心的你可能还会发现一个问题,如果表达的值与所有的case标签的值都不匹配怎么办?

这时可以加上一个default子句。

 在上面的代码中加上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");
		default:
			printf("输入错误!");

	}

	return 0;
}

测试结果:

 

总结:

switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个 switch 语句中只能出现一条 default 子句。
注意:switch语句中的表达式必须是整型、字符型、字符串类型 ;case语句后面跟的是 整形常量表达式;

3.分支语句的比较

 当有一种或两种的分支情景时,我们使用if语句非常的方便,告诉程序在某个条件成立的条件下执行某段语句,判断是否要执行紧跟在条件之后的语句;在有多种情况时使用switch更巧妙,当switch(条件)满足case 后面的常量,则执行对应的语句,若满足的条件未能匹配到对应的常量,则执行default后的语句。

三、循环语句

在生活中很多的实际的例子是:同一件事情我们需要完成很多次;循环语句就是在满足一定条件的情况下反复执行一个语句。

1.while循环

while 语法结构:
while(表达式)
 {
    循环语句;
}

循环方式是通过一个条件来控制是否要反复执行这个语句。

实践:在屏幕上打印1-10的数字。(用while循环)

#include <stdio.h>
int main()
{

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

结果:

while中的breakcontinue:

break在上面已经谈到过了,

其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。
测试:
#include <stdio.h>
int main()
{
	int i = 0;
	while (i <= 10)
	{
		
		printf("%d ",i);
    //break;
		i++;
	}
	return 0;
}

结果:无break                                                     有break:

测试发现,当程序执行到break的时候 直接终止了循环!

 综上所述:while中的break是用于永久终止循环的。

continue翻译成汉语是继续的意思,那么它在程序中起到怎样的作用呢?

代码测试:

#include <stdio.h>
int main()
{
	int num = 0;
	while (num <= 10)
	{
		num += 1;
		if (3 == num)
		{
			continue;
			printf("haha");
		}
		printf("%d ", num);
	}
	return 0;
}

测试结果:

 当num = 3,执行到continue时,循环并没有结束,也没有执行continue后面的语句,而是直接进入到了下次循环。

总结:

continue 是用于终止本次循环的,也就是本次循环中 continue 后边的代码不会再执行,
而是 直接跳转到while语句的判断部分 。进行下一次循环的入口判断

2.for循环 

语法结构:

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

实践:

#includ <stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}

结果:

for循环中breakcontinue:

break测试:

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i < 10; i++)
	{
		printf("%d ",i);
		//break;
	}
	return 0;
}

结果:无break                                   有break

 continue测试:

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i < 10; i++)
	{
		if (i == 4)
		{
			continue;
			printf("haha");
		}
		printf("%d ",i);
	}
	return 0;
}

 结果:

 经过测试发现,他们的意义和在while循环中是一样的!

小练习:打印9*9乘法口诀(forx循环)

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 1; i <= 9; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%2d ",j,i,i*j );
		}
		printf("\n");
	}
}

 结果:

 

3.do while循环

do while循环语法:

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

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

实践:

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

结果:

通过测试发现, 循环至少执行一次,循环先执行一次在进行判断。 

四、综合使用

通过分支和循环语句,编写一个简易的菜单界面!

#incldue <stdio.h>
void menu()
{
	printf("**********************\n");
	printf("******1.开始游戏*******\n");
	printf("******0.退出游戏*******\n");
	printf("**********************\n");

}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请输入选项:>");
		scanf("%d", &input);
		switch (input)
		{
			case 0:
				printf("游戏结束!\n");
				break;
			case 1:
				printf("游戏开始!\n");
				break;
			default:
				printf("请重新输入选项!\n");
		}
	} while (input);

	
	return 0;
}

运行结果:


总结

本章主要介绍了C语言的分支语句if、switch和循环语句for 、while、do while以及控制语句break、continue.

分支语句根据不同的条件执行不同的语句

通常情况下,3种循环可以处理同一个问题,while和for循环都是先判断条件再执行循环体语句,因此有可能一次也不执行。而do while循环是先执行在判断,所以至少会执行一次! 

分支和循环的语法和简单应用基本掌握,接下来就要做大量的练习,熟练的在不同的场景使用不同的语法。小张加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值