C语言零基础学习笔记9——分支和循环(三)

本节大纲


一、if 语句

二、关系操作符

三、条件操作符

四、逻辑操作符:&&、||、!

五、switch语句

六、while循环


 五、switch语句

        除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。 switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更简单易用、可读性更好的形式。下面是 switch 语句的基本语法:

switch (expression) 
{
	case value1: statement
	case value2: statement
	default: statement
}

        上面代码中,根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,就执⾏ default 分支。

        但是我们要注意,switch 后的 expression 必须是整型表达式,另外 case 后的值,必须是整型常量表达式。

(一)、if 语句和 switch 语句的对比

        我们现在想实现“输入任意一个整数,计算除三之后的余数”这个功能,用我们之前学习的if语句很容易就可以实现,代码如下:

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	if (num % 3 == 0)
		printf("您输入的整数除三之后的余数为0。\n");
	else if (num % 3 == 1)
		printf("您输入的整数除三之后的余数为1。\n");
	else if (num % 3 == 2)
		printf("您输入的整数除三之后的余数为2。\n");
	return 0;
}

        这段代码是可以拿 switch 语句修改的,改完之后的代码是:

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("您输入的整数除三之后的余数为0。\n");
		break;
	case 1:
		printf("您输入的整数除三之后的余数为1。\n");
		break;
	case 2:
		printf("您输入的整数除三之后的余数为2。\n");
		break;
	}
	return 0;
}

        上述的代码中,我们要注意的点有:

1、case 和后边的数字之间必须有空格

2、每一 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。case 语句仅决定了代码的入口。

(二)、switch 语句中的 break

        如果上面的示例代码中,我们去掉所以 case 语句中的 break 。那么运行结果就会出现完全不一样的现象:

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("您输入的整数除三之后的余数为0。\n");
	case 1:
		printf("您输入的整数除三之后的余数为1。\n");
	case 2:
		printf("您输入的整数除三之后的余数为2。\n");
	}
	return 0;
}

        我们输入一个数据测试一下:

        我们发现,124除以3本来余数是1,但是我们发现程序运行的结果多了一行“您输入的整数除三之后的余数为2”的打印。出现这个问题的原因就是 switch 语句也是分支效果的,只有在 switch 语句中使用 break 才能在跳出 switch 语句,如果某一个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

        所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。

        当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

        下面我们就来实操两个练习体会 break 语句的重要性:

        第一个练习要求实现“输入一个1~7的数字,打印对应的星期几”的功能,例如:输入1 ,输出星期一;输入2 ,输出星期二;…… 下面是我实现这个功能所编写的代码,大家可以自行练习:

#include <stdio.h>
int main(){
	int day = 0;
	printf("请输入一个整数:");
	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~7的数字,如果输入的是1~5,打印‘工作日’;如果输入的是6~7,打印‘休息日’”的功能,那么我们这段代码就需要更改如下:

#include <stdio.h>
int main() 
{
	int day = 0;
	printf("请输入一个整数:");
	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;
}

        从上面的两个练习中,我们发现应该根据实际的情况,来在代码中判断是否应该使用 break ,在哪里使用 break ,才能正确完成实际的需求。

(三)、switch语句中的default

        在使用 switch 语句的时候,我们经常可能遇到一种情况,就是 switch 后的表达式中的值无法匹配代码中的任何一个 case 语句的时候,这时候要是不做处理,编译器的输出结果就为空,所以为了让运行结果不为空,我们在 switch 语句中加入 default 子句。

        比如“实现‘输入一个1~7的数字,打印对应的星期几’的功能”这个例子,如果我们输入的数字不是1 ~ 7的值,我们就可以设置一个 default 子句来实现打印“输入错误,请输入一个1~7之间的整数。”具体操作是将上面的示例代码更改如下:

#include <stdio.h>
int main() 
{
	int day = 0;
	printf("请输入一个整数:");
	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("输入错误,请输入一个1~7之间的整数");
		break;
	}
	return 0;
}
(四)、switch语句中的case和default的顺序问题

        在 switch 语句中 case 子句和 default 子句其实是没有顺序要求的,只要你的顺序是可以满足满实际需求的就可以。

        不过大多数程序员的变成习惯通常是把 default 子句放在最后处理的。


六、while循环

        C语言提供了3种循环语句, while 就是其中一种,接下来就介绍一下 while 循环语句。

        其实 while 语句的语法结构和 if 语句非常相似。

(一)、if 和 while 语句的比较

        我们可以先来看一下这两个语句语法结构上的区别:

if (表达式)
	语句;

while (表达式)
	语句;	//如果循环题想包含更多的语句,使用{}即可

        由此可见两个格式是非常相近的,下面我再使用一段代码,通过输出结果我们可以更加直观的体会到两者的异同:

#include <stdio.h>
int main()
{
	int a = 1;
	if (1 == a)
	{
		printf("haha\n");	//if后面条件为真,则执行语句,打印一次“haha”
	}
	while (1 == a)
	{
		printf("hehe\n");	//while后面条件为真,则执行语句,不断地打印无数次“hehe”
	}
	return 0;
}

        从运行结果上我们可以看出这两者的区别,while语句是可以实现循环效果的。

(二)、while语句的执行流程

        首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

        在上面的图示中,还展示到了 break 语句和 continue 语句,我们会在本章接下来的部分详细学习,现在我们已经可以简单的使用while循环语句了,比如实现“在屏幕上打印输出1~10的值”这个功能,我们就可以使用while语句来实现,具体代码如下:

#include <stdio.h>
int main()
{
	int num = 1;
	while (num <= 10)
	{
		printf("%d ", num);
		num = ++num;
	}
	return 0;
}
 )、while 语句练习

        通过上面的学习,接下来我们可以实现一个比较复杂的功能了——“输入一个正整数,逆序打印这个整数的每一位”,例如输入1234,打印4 3 2 1 。为了完成这个功能,我们可以自行练习一下,下面是我解决这个问题所编写的代码:

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个多位整数:");
	scanf("%d", &num);
	printf("将您输入的整数逆序输出的结果为:");
	while (num > 0)
	{
		printf("%d ", num % 10);
		num = num / 10;
	}
	return 0;
}

        完成这个问题需要一定的逻辑,我整理如下:

1、要想得到n的最低位,可以使用 n%10 的运算,得到的余数就是最低位,如:1234%10得到4

2、要想去掉n的最低位,找出倒数第二位,则使用 n=n/10 操作就可以去掉最低位的,如:

n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第二位3。

3、循环1和2两个步骤,在n变成0之前,就能到所有的位。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值