C语言初阶-分支与循环语句(1)

目录

一、什么是语句?

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

1.if语句

1.1 if语句的语法结构

1.2 if语句的使用示例

1.3 悬空else

1.4几种代码书写方式的对比

1.5 练习:输出1~100之间的奇数

2. switch语句

2.1switch语句的语法结构

 2.2switch语句中break的作用

2.3 default子句

2.4练习:switch语句是可以嵌套使用的


一、什么是语句?

C语言可分为下面五类:

       1.表达式语句

       2.调用函数语句

       3.控制语句

       4.复合语句

       5.空语句

本次介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

可分为下面三类:

         1.条件判断语句也叫分支语句:if语句,switch语句;

         2.循环执行语句:do while语句、while语句、for语句;

         3.转向语句:break语句、goto语句、continue语句、return语句。

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

1.if语句

1.1 if语句的语法结构

语法结构:

if(表达式)

        语句1;

else

        语句2;

//多分支

if(表达式1)

         语句1;

else if(表达式2)

         语句2;

else

         语句3;

1.2 if语句的使用示例

用双分支根据输入年龄的大小实现成年和未成年的判断:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);//输入
	if (age >= 18)//判断
		printf("成年");
	else
		printf("未成年");
	return 0;
}

如果我们想分的更细致点,就可以使用多分支:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);//输入
	if (age < 18)//判断
		printf("青少年");
	else if (age >= 18 && age < 30)//判断
		printf("青年");
	else if (age >= 30 && age < 50)//判断
		printf("中年");
	else if (age >= 50 && age < 80)//判断
		printf("中老年");
	else
		printf("老年");
	return 0;
}

注意:if 语句后面默认只能跟一条语句,如果要写多条语句,应该用大括号{}括起来。

如下图所示:

if (age < 18)
	{
		printf("青少年");
		printf("好好学习");
	}

1.3 悬空else

看下面一段代码:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
			printf("haha\n");
	return 0;
}

大家认为打印结果是什么呢?

  结果应该是什么都不会打印。因为代码中的else是和第二个 if 相匹配的,并且它们合起来属于第一个 if 的一条语句,第一个 if 的判断条件都不成立,后面的肯定不会打印。

  在这里有一个常见的错误就是有人看见第一 if 和else是对齐的,就误以为他们两个是相匹配的,打印结果就是haha,实际上是上述代码的风格误导了大家,由此可见好的代码风格的重要性,如果你的代码写的更加工整规范,就不会发生这种误会,可读性也会变强。

下面我们对上述代码用更好的风格写一下,大家会发现一目了然:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	}
	return 0;
}

else的匹配:else是和离它最近的 if 相匹配的。

1.4几种代码书写方式的对比

1.

 如图代码1和代码2的运行结果是一样的,但是代码1的写法就很容易给人造成误解。

2.

   上述第二个代码书写方式就优于第二个,因为代码1在书写时如果错误的少一个等号,编译器仍然会成功编译,但是代码2会编译报错。(如下图)所以代码2如果错误了,很容易发现错误。代码1则不行。

1.5 练习:输出1~100之间的奇数

#include<stdio.h>
int main()
{
	int i = 0;
	while (i <= 100)//循环判断
	{
		if (i % 2 == 1)//判断是否为奇数
			printf("%d ", i);
		i++;
	}
	return 0;
}

2. switch语句

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

 比如:输入1,输出星期一

            输入2,输出星期二

            输入3,输出星期三

            输入4,输出星期四

            输入5,输出星期五

            输入6,输出星期六

            输入7,输出星期日

如果我们用 if else 语句写就太复杂了,这时就要用到switch语句了。

2.1switch语句的语法结构

语法结构:

switch(整型表达式)

{

        语句项;

}

//语句项就是一些case语句:

case 整型常量表达式:

          语句;

注意:1.switch后面括号()中的必须是整型表达式,case后面必须跟整型常量表达式 。

           2.在写case 整型常量表达式:时不要忘了中间有空格和后面的冒号。

 2.2switch语句中break的作用

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
		break;
	case 3:
		printf("星期三");
		break;
	case 4:
		printf("星期四");
		break;
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期日");
	}
	return 0;
}

运行结果示例: 

 代码中switch(day)是循环入口,break是出口,代表着跳出整个switch语句

如果去掉break,输出结果就变成:

 这是因为代码从入口进来后会继续执行后面的代码,去掉break后,没有及时跳出switch,继续执行完后面的代码才结束。

当然break是根据需要写的,不用每个case后面都写上break,比如我们要打印周一到周五是工作日,周六和周天是休息日,只需要在星期五和星期日后面写上break:

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	}
	return 0;
}

2.3 default子句

如果输入的不在1~7的范围内怎么提醒用户呢?

这时候用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("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	default:
		printf("输入错误");
		break;
	}
	return 0;
}

运行结果示例:

 default子句可以在switch语句中的任意位置使用,使用时注意后面的break要写上。

2.4练习:switch语句是可以嵌套使用的

#include<stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{//switch的嵌套使用
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case4:
		m++;
		break;
	default:
		break;
	}
	printf("m = %d,n = %d\n", m, n);
	return 0;
}

输出的结果是什么呢?答案放在评论区。(提醒:注意break的使用

今天就学到这里啦,未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

成屿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值