【C语言初阶】C语句成员1:分支语句

C语言中的3种结构

我们在了解C语言的语句之前,应先了解C语言中的基本程序结构,从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构分支(选择)结构循环结构

顺序结构:
在这里插入图片描述

就是从上往下依次执行语句的结构,就如一条笔直的大路,没有任何转折。
分支(选择)结构:
在这里插入图片描述

通过分支语句(选择语句)组成,分支就如我们走到分叉路口,我们要进行方向选择才能接着往前走。
循环结构:
在这里插入图片描述

通过循环语句组成,循环就如春夏秋冬四季的变换。

这三种基本结构可以组成所有各种复杂程序。
C语言中提供了多种语句来实现这些程序结构。

这期我们对分支(选择)结构进行讲解。

什么是语句

语句是C程序的基本构建块。在C语言中由一个分号 ;结尾就是一条语句。比如:

printf(“hehe\n”);
1+2;

最简单的语句是空语句:

;//空语句

分支(选择)语句

if语句

if语句的三种形式

//语法结构

//第一种
if(表达式)
	语句;
	
//第二种
if(表达式)		//if可以理解为如果的意思
	语句1;
else			//else就是否则的意思
	语句2;

//第三种
if(表达式1)
	语句1;
else if(表达式2)
	语句2;
else
	语句3;

解释:在第二种和第三种形式中,如果表达式的结果为真,则语句执行。
在C语言中:0表示假非0表示真

下面我们来看第一种形式
if(表达式) 语句;
在这里插入图片描述

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d",%age);
	if(age<18)
		printf("未成年\n");
	return 0;
}

//再举个例子
//从键盘上获取两个数,按从大到小输出
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int t = 0;
	scanf("%d%d",&a,&b);
	if(a<b)
	{
		t = a;
		a = b;
		b = t;
	}
	printf("a = %d,b = %d\n",a,b)
	return 0;
}

注意:
(1)如果if后的语句只有一条,可以不用大括号括住。

例如:
if(age<18)
	printf("未成年\n");
等价于:
if(age<18)
	{printf("未成年\n");}

(2)当if控制多条语句时,则必须用大括号将缩控制的所有语句括起来,否则if只能控制离它最近的那条语句

例如:
if(a<b)
	t = a;
	a = b;
	b = t;
等价于:
if(a<b)
	{t = a;}
a = b;
b = t;

第二种形式:if…else分支结构
在这里插入图片描述

//演示代码:
//代码1
#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age >= 18)
	{
		printf("成年\n");
	}					//合理使用大括号,可以使代码的逻辑更加清晰,使读者更易读懂
	else
	{	
		printf("未成年\n");
	}
	return 0;
}

//代码2
/输入两个整数,使用if...else结构求最大数,并输出
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	printf("请输入两个整数:");
	scanf("%d%d",&a,&b);
	if(a>b)
		printf("最大数为:%d\n",a);
	else
		printf("最大数为:%d\n",b);
	return 0;
}

第三种形式: 多重选择 if…else if…else
在这里插入图片描述

//代码演示
#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age < 18)
		printf("青少年\n");
	else if (age >= 18 && age < 30)
		printf("青年\n");
	else if (age >= 30 && age < 50)
		printf("中年\n");
	else if (age >= 50 && age < 80)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

注意: 以上三种形式无论是哪种,在if或者else后面都不需要加分号“;”。因为这样会影响控制范围,甚至导致语法错误。

悬空else:
我们看下列代码

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

你觉得输出什么呢?是不是haha呀?实际上当我们运行代码会发现什么都没输出。
其实上方代码等价于:

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

所以,我们可以看到,在C语言中,如果没有用括号来改变配对关系,else 总是与它前面最近且未配对的 if 进行配对。

适当的使用 { } 可以使代码的逻辑更加清楚

从这我们可以清楚的知道代码风格的重要性,在这我给大家推荐一本书,可以来提高自己的代码风格,不是打广告,哈哈~

高质量的c-c++编程

switch语句

switch语句结构:

switch(整型表达式)
{
语句项;
}

那么语句项时什么呢?

//是一些case语句
//如下:
case 整型常量表达式:
	语句;

注意:
(1)switch小括号里面的表达式必须是整型表达式,比如 int、short、long、char。其中的char类型虽然是字符型,但每个字符对应的ASCII值也是整型。
(2)case后面接的也必须是整型常量表达式,其中关键字case整型常量表达式之间有空格,整型常量表达式后面必须有一个冒号“ :”。

接下来让我们来看看switch语句如何使用吧!

//代码演示
//打印星期几
#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch(day)
	{
		case 1:
			printf("星期1\n");
		case 2:
			printf("星期2\n");
		case 3:
			printf("星期3\n");
		case 4:
			printf("星期4\n");
		case 5:
			printf("星期5\n");
		case 6:
			printf("星期6\n");
		case 7:
			printf("星期天\n");
	}
	return 0;
}

阅读上面代码,是不是输入数字几,就会在屏幕上输出星期几呢?我们来运行一下
在这里插入图片描述

程序输出的是从我们输入的数开始,将后方输出的内容都打印出来了。

我们应该如何解决这个问题呢?接下来看:

在switch语句中的break
在switch语句中,其实我们没法直接实现分支,搭配break使用才能实现真正的分支。那我们将break加入上方语句看看效果

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch(day)
	{
		case 1:
			printf("星期1\n");
			break;
		case 2:
			printf("星期2\n");
			break;
		case 3:
			printf("星期3\n");
			break;
		case 4:
			printf("星期4\n");
			break;
		case 5:
			printf("星期5\n");
			break;
		case 6:
			printf("星期6\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语句 的实际效是把语句列表划分为不同的部分。

编程好习惯

在最后一个case语句的后面加上一条break语句(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。

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

编程好习惯

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

接下来我们来做一道练习结束这期吧

#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;
           }
    case 4:
            m++;
             break;
    default:
             break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0; 
}

正确答案:m = 5 , n = 3

好啦,这期到这,记几天精彩继续。
在这里插入图片描述

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Clumsy、笨拙

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值