C语言·switch语句(DAY9)

一、概述:

switch语句是多分支选择语句;多分支选择可以用if…else if,甚至用多层嵌套if实现,但是分支较多时,会使if语句嵌套层数增加,程序可读性变差;此时使用switch语句可以直接解决。

switch语法基本形式:

switch(表达式)

{case 常量表达式1:语句序列1;

case 常量表达式2:语句序列2;

……

case 常量表达式n:语句序列n;

default: 语句n+1;

}
switch关键字后面的表达式可以是字符变量、整型变量、枚举变量。switch中的变量先去和各个case的值进行匹配,匹配成功后,执行该case后面的语句;如果没有一个case与之匹配成功,则执行default后面的语句。注意:每个case后面的语句中,最后都有一个break语句,其作用是使程序转到switch语句的末尾(即“}”处),而default分支后面不需要break,可以忽略掉。

二、使用switch语句的实际例子

问题:要求给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。90以上为‘A’,80~89为‘B’,70~79为‘C’,60~69为‘D’,60以下为‘E’。

解决思路:

#include <stdio.h>
int main()
{
	float score;
	printf("Please input your score:\n");
	scanf("%f", &score);

	switch((int)(score / 10)){
	case 10:
	case 9:printf("A\n");
		   break;
	case 8:printf("B\n");
		   break;
	case 7:printf("C\n");
		   break;
	case 6:printf("D\n");
		   break;
	case 5:
	case 4:
	case 3:
	case 2:
	case 1:
	case 0:printf("E\n");	
		   break;
	default:printf("invalid\n");
	}
	return 0;
}

运行结果:

从程序中,可以发现:多个case可以执行同一个语句(case5、case4、case3、case2、case1、case0都是执行printf("E\n");语句,也就是说只有输入的分数小于60就输出字符“E”)。

三、switch语句的执行过程

首先:计算switch语句后面的表达式的值,然后跳转到case标签值与表达式相等的地方开始往下执行,如果没有跳转指令的话,会一直执行到switch语句的最后。执行过程如下图所示:

这种情况正是case语句后面不加break(跳转指令)的运行过程。

四、switch语句的练习

1.给一个不多于5位的正整数,要求:

①求出它是几位数;

②分别输出每一位数字;

③按逆序输出各位数字,例如原数为123,应输出321。

解决思路:

解决第一个需求:求出它是几位数,先定义一个变量表示位数,方便第三个需求的switch语句作为分支选择,用if语句判断输入数字位数即可;

解决第二个需求:分别输出每一位数字,定义个十百千万的变量,用运算符去求各个位的值;

解决第三个需求:按逆序输出各位数字,对于这种情况,需要分清楚输入数字的位数了,即用switch语句去进行分支选择:输入5位数,则按照万,千,百,十,个的顺序输出;输入4位数,则按照千,百,十,个的顺序输出……

大致思路已经明确,开干!

#include <stdio.h>

int main()
{
	int num, place , individual, ten, hundred, thousand,ten_thousand;

	printf("Please input a int with five place:\n");
	scanf("%d", &num);

	if(num > 99999){
		printf("invalid\n");
	return 0;
	}
	if(num > 9999)
		place = 5;
	else if(num > 999)
		place = 4;
	else if(num > 99)
		place = 3;
	else if(num > 9)
		place = 2;
	else 
		place = 1;
	printf("place = %d\n", place);

	individual = num % 10;
	ten = num % 100 / 10;
	hundred = num % 1000 / 100;
	thousand = num % 10000 /1000;
	ten_thousand = num / 10000;

	switch(place){
	case 5:
	printf("输入的五位数:%d,%d,%d,%d,%d\n", ten_thousand, thousand, hundred, ten, individual);
	printf("反序数字:%d,%d,%d,%d,%d\n", individual, ten, hundred, thousand, ten_thousand);
	break;
	case 4:
	printf("输入的四位数:%d,%d,%d,%d\n", thousand, hundred, ten, individual);
	printf("反序数字:%d,%d,%d,%d\n", individual, ten, hundred, thousand);
	break;
	case 3:	
	printf("输入的三位数:%d,%d,%d\n", hundred, ten, individual);
	printf("%d,%d,%d\n", individual, ten, hundred);
	break;
	case 2:
	printf("输入的二位数:%d,%d\n", ten, individual);
	printf("%d,%d\n", individual, ten);
	break;
	case 1:
	printf("输入的一位数:%d\n", individual);
	}
	return 0;

}

tips:对于用if语句去划分数字区间的思维导图可以用数学的区间进行划分,如下图所示

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值