分支和循环语句

一、什么是语句!

在C语言中,由分号隔开的就是一个语句

	;  //这是一条空语句
	int a = 10;//这是一条语句
	char arr[10] = {0};//这是一条语句
	return 0;//这是一条语句

二、分支语句(选择结构)

如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
在这里插入图片描述

2.1、选择语句(if else)

if语句的语法结构是怎么样的??

在这里插入图片描述
当满足条件的时候就执行,不满足就不执行
else与最近的if匹配

if代码练习

1、判断是否成年

int main()
{
	int age = 0;
	printf("请输入年龄:");
	scanf("%d",&age);
	if (age >= 18)
		printf("成年");
	printf("未成年");
	return 0;
}
int main()
{
	int age = 0;
	printf("请输入年龄:");
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	else
		printf("未成年\n");
	return 0;
}
代码风格

这里是引用
在这里插入图片描述

if(条件表达式)判断的是为真为假,0为假,非0为真

这里是引用

2.2、课堂练习

2.2.1、判断一个数是否为奇数

int main()
{
	//判断一个数是否为奇数
	int a = 0;
	printf("请输入一个整数:");
	scanf("%d",&a);
	if (a % 2 == 1)
	{
		printf("是奇数\n");

	}
	else
	{
		printf("不是奇数\n");
	}
	return 0;
}

这里是引用

2.2.2、输出1-100里面的奇数

写法1:

int main()
{
	//输出1-100里面的奇数
	int a = 1;
	while (a <= 100)//首先要产生1-100这些数
	{
		if (a % 2 == 1)
		{
			printf("%d  ", a);
			a++;
		}
		a++;
	}
	return 0;
}

这里是引用

写法2:

int main()
{
	//输出1-100里面的奇数
	int a = 1;
	while (a <= 100)//首先要产生1-100这些数
	{
		printf("%d  ", a);
		a = a + 2;
	}
	return 0;
}

这里是引用
要达到某一种效果,实现的代码方式又不同的方法

2.3、switch语句(多分支结构)

switch语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

这里是引用
那就换一种方式写,满足哪个条件就执行哪个case语句

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");
	case 7:
		printf("星期日\n");
		break;
	default:
		break;
	}
	
	return 0;
}

2.3.1、语法格式

在这里插入图片描述

2.3.2、switch中的break

在这里插入图片描述

2.3.3、default子句

如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个case标签可以出现的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

2.3.4、课堂练习

int main()
{
	int n = 1;
	int m = 2;
	switch (n)//1
	{
	case 1:
		m++;  //m = 3
	case 2:
		n++;  //n = 2
	case 3:
		switch (n)  // 2
		{//switch允许嵌套使用
		case 1:
			n++;
		case 2:
			m++;  //4
			n++;  //3
			break;
		}
	case 4:
		m++;  //5
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}

这个程序执行的结果????

三、循环语句

3.1、while循环

但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了:while语句,可以实现循环

3.1.1、语法格式

这里是引用
比如我们实现: 在屏幕上打印1-10的数字
在这里插入图片描述

3.1.2、while语句中的break和continue

break介绍
在这里插入图片描述
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的

continue介绍
在这里插入图片描述
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分。进行下一次循环的入口判断

3.2、for循环

3.2.1、语法格式

这里是引用
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整

实际的问题: 使用for循环 在屏幕上打印1-10的数字
在这里插入图片描述
在这里插入图片描述

比较while和for循环

这里是引用

3.2.2、break和continue在for循环中

break
在这里插入图片描述

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

3.2.3、for循环的变形

1、死循环
在这里插入图片描述
2、
在这里插入图片描述

3.2.4、一道笔试题

这里是引用

3.3、do…while()循环

3.3.1、语法结构

这里是引用
do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用
在这里插入图片描述

3.3.2、do while循环中的break和continue

break
在这里插入图片描述

continue
在这里插入图片描述

3.4、练习

3.4.1、 计算 n的阶乘

//计算 n的阶乘
int main()
{
	int n = 0;
	int i = 1;
	int sum = 1;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		sum = sum * i;
	}
	printf("sum = %d", sum);
	return 0;
}

在这里插入图片描述

3.4.2、 计算 1!+2!+3!+……+10!

//计算 1!+2!+3!+……+10!
int main()
{
	int i = 1;
	int sum = 1;
	int ret = 0;
	for (i = 1; i <= 10; i++)
	{
		sum = sum * i;
		ret = ret + sum;
	}
	printf("ret = %d", ret);
	return 0;
}

这里是引用

3.4.3、 在一个有序数组中查找具体的某个数字n

int main()
{
	int a = 0;
	int i = 0;
	int flag = 0;
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };//定义一个有序数组
	printf("请输入你要查找的数:");
	scanf("%d",&a);
	for (i = 0; i < 10; i++)
	{
		if (a == arr[i])
		{
			flag = 1;
			break;
		}
		else
		{
			flag = 0;
		}
	}
	if (1 == flag)
	{
		printf("这个数在数组里面,下标为:%d\n", i);
	}
	else
	{
		printf("这个数不在在数组里面\n");
	}
	return 0;
}

这里是引用

3.4.4、二分查找

//二分查找
int main()
{
	int k = 18;//查找的元素
	int flag = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int mid = 0;
	while (left <= right)
	{
		mid = (left + right) / 2;

		if (arr[mid] < k)//说明此时要查找的数在右边
		{
			left = mid + 1;
		}
		else  if (arr[mid] > k)//说明此时要查找的数在左边
		{
			right = mid - 1;
		}
		else //中间元素==要查找的数arr[mid] == k
		{
			flag = 1;
			break;
		}
	}
	if (flag == 1)
	{
		printf("找到了,下标为: %d\n", mid);
	}
	else
	{
		printf("没找到\n");
	}

	return 0;
}

二分查找只适用于有序的数组进行查找,无序的要先进行排序,利用下标进行查找
在这里插入图片描述

3.4.5、编写代码,演示多个字符从两端移动,向中间汇聚

#include<Windows.h>
#include<string.h>
int main()
{
	char arr1[] = "helle worad !!!";
	char arr2[] = "###############";
	int left = 0;
	int right = strlen(arr2) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
		Sleep(1000);
		//system("cls");
	}
	printf("%s\n", arr2);
	return 0;
}

打印的就是这个效果
在这里插入图片描述
在这里插入图片描述

3.4.6、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序)

int main()
{
	int i = 0;
	char arr[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("%s",arr);
		if (strcmp(arr,"123456") == 0)
		{
			break;
		}
	}
	if (3 == i)
	{
		printf("密码错误,登录失败!\n");
	}
	else
	{
		printf("密码正确,登录成功!\n");
	}

	return 0;
}

这里是引用

3.5、go to 语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
关于shutdown命令的扩展
下面是使用goto语句的一个例子:

int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
	scanf("%s", input);
	if (0 == strcmp(input, "我是猪"))
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

这里是引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Später321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值