循环语句的使用

1.switch语句

switch语句是一种特殊形式的if ...else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用,更可读的形式。

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

根据expression表达式结果的不同,执行相应的case分支。如果摘不到对应的值就执行default分支。

注意:1 switch后加的expression必须是整形表达式

           2 case后的值,必须是整形常量表达式

1.1 if和switch语句的对比

练习:输入任意一个整数值,计算除3之后的余数

if语句

int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 3 == 0)
		printf("余数为0\n");
	else if (a % 3 == 1)
		printf("余数为1\n");
	else if (a % 3 == 2)
		printf("余数为2\n");
	return 0;

}

switch语句

int main()
{
	int a = 0;
	scanf("%d", &a);

	switch (a % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	}

注意:1 case后必须有空格再加数字;

            2 每一个case语句中的代码执行完后,需加上break才能跳出这个switch语句

1.2switch中的break

刚才的代码如果去掉break会有什么影响呢

int main()
{
	int a = 0;
	scanf("%d", &a);

	switch (a % 3)
	{
	case 0:
		printf("余数为0\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数为2\n");
	}
		return 0;
}

输入7时,余数却出现1和2,这是由于switch语句也是分支效果的,只有再switch语句中使用break才能跳出switch语句,如果某一个case语句后面有break语句,代码就会继续往下执行,有可能执行其他case语句中的代码。

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

练习:

输入一个1~7的数
字,打印对应的星期几
例如:
输入:1 输出:星期一
输入:2 输出:星期二
输入:3 输出:星期三
输入:4 输出:星期四
输入:5 输出:星期五
输入:6 输出:星期六
输入:7 输出:星期天 

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

当题目改为

1. 输入1~5,输出的是“工作日”;
2. 输入6~7,输出“休息日”

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");
		break;
	}
		return 0;
}

在上面代码中,是否使用break语句根据实际需要来决定

1.3 switch语句中的default

在使用switch语句时,如果switch后的表达式中的值无法匹配代码中case语句的时候,这时候可以在switch中加入default子句.

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

switch后面expression的结果不是value1,也不是value2时,就会执行default的子句.例如

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

1.4 switch语句中的case子句和default自居有顺序要求吗?default只能放在最后吗?

其实,在switch语句中case子句和default子句没有顺序要求的,只要你的顺序满足实际要求就行.

2 while循环

while的语法结构

while(表达式)
    语句;//如果循环体包含更多语句,要使用大括号
int main()
{
	while (1)
		printf("hehe");
	return 0;
}

死循环打印hehe

2.1while循环的实践

练习:在屏幕上打印1~10的值

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

2.2 练习

输入一个正的整数,逆序打印这个整数的每一位
例如:
输入:1234,输出:4 3 2 1
输入:521,输出:1 2 5

int main()
{
	int i = 0, b = 0;
	scanf("%d", &i);
	while (i%10)
	{
		b=i % 10;
		printf("%d ", b);
		i /= 10;
	}

	return 0;
}

3.for循环

3.1语法形式

for(表达式1;表达式2;表达式3)
    语句;//如果循环体想包含多条语句,必须使用大括号

表达式1用于循坏变量初始化,每次只执行一次,

表达式2用于循环结束条件的判断;

表达式3用于循环变量的调整;

执行顺序:首先执行表达式1初始化循环变量,接下来执行表达式2判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后再执行表达式3,调整循环变量,然后再去表达式2判断是否为0决定是否再执行.

3.2for循环的实践

练习:在屏幕上打印1~10的值

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

while和for循环的对比

 

for和while在实现循环过程中都有初始化、判断、调整这三部分,但是for循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候while循环的三个部分就比较分散,所以从形式上for循环更优一些。

3.3

练习:计算1~100之间3的倍数的数字之和

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

此代码还可进行小小的优化

int main()
{
	int i = 0;
	int sum = 0;
	for (i = 3;i <= 100;i+=3)
	{
		 sum += i;
	}
	printf("%d", sum);
	return 0;
}

4.do—while循环

4.1语法形式

在循环语句中do while语句的使用最少,它的语法如下

do
    语句;
 while(表达式);

while和for都是先判断,条件如果满足就进入循环,执行语句,不满足就跳出循环;

do while则是先直接进入循环体执行语句,再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。其特点是循环体至少被执行一次。

4.2 do while循环实例

再屏幕上打印1~10的值

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

4.3 练习

输入一个正整数,计算这个整数是几位数?

例如:
输入:1234  输出:4
输入:12      输出:2

int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		cnt++;
		n = n / 10;
	
	} while (n);
	printf("%d\n", cnt);
	return 0;
}

cnt就相当于是这个代码循环的计数器,记录这个循环体被执行了几次.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值