分支语句初学详解
目录
-
一、列举并简单介绍C语言的基本语句
-
二、介绍分支语句
2.1 if语句
2.1.1 if语句的由来 2.1.2 if语句必须知道的4个语法结构重点及注意事项
2.2 switch语句
2.2.1 switch语句的由来 2.2.2 switch语句必须知道的4个语法结构重点及注意事项
C语言是一门结构化的程序设计语言
它根据生活中的场景总结出三种基本结构:
- 顺序结构
- 循环结构
- 选择结构
而根据这三种基本结构,又衍生出以下五种语句:
- 表达式语句
- 函数调用语句
- 控制语句:
- 分支(条件)语句:if语句、switch语句
- 转向语句:break语句、goto语句、continue语句、return语句
- 循环语句:do while语句、while语句、for语句
- 复合语句
- 空语句
注:本文先给大家介绍分支语句
可以说所有的代码,就是由这些语句根据相应的逻辑结构组合而成的,因此能够了解并且熟练地应用这些语句是成为一名优秀程序员的必经之路。
知道了基本语句有哪些后,我们就先具体探讨分支语句的功能以及如何使用吧!
首先我们来了解一下为什么会出现分支语句
大家在生活中会面对各种各样的选择,如果你好好学习,则校招时你就可以拿个好offer;但是,如果你不好好学习,那大学四年过后你就只能搬砖。那有人就说了:我家在北京市中心有套房,我就不想好好学习。那庄哥在这里只能呵呵一笑了…
从这里可以看出,不同的选择会产生不一样的结局。而我们的编程中通常也会面对不同的情况,从而输出不一样的结果。因此,为了应对这些情况,前辈们创造if语句来解决困难。
重点来了!!!
其次我们来学习if语句的语法结构,请看下图:
注意:
- 这里只有if有表达式和内部语句,而else只有内部语句
- if(表达式)后面不需要有’ ;’
-
重点1
老铁们看到这里肯定会问:庄哥,你的if语句怎么又蹦出个else出来呢???
其实呀,else也属于if语句的一部分,并且这里if与else虽然分开,但它们其实算作一个语句 -
重点2
if语句中的表达式为整形
若表达式结果为0,则为假,跳过其内部语句,进入到下一语句
若表达式结果为非0整数(负数也可以),则为真,执行其内部语句 -
重点3
若内部语句只有一条则不用加大括号
若有多条,则需要加大括号形成语句块
注意:这里的大括号{ }形成一个语句块 -
重点4(关于else悬空问题)
请老铁们看下面这段代码
请问这段代码的运行结果是什么呢?
答案是:什么都不打印
有些老铁们肯定就疑惑了,为什么不打印"haha"或者"hehe"呢?
其实问题就在于else是跟与之对齐的if相配对,还是与它最近的if相配对呢?
在C语言的语法规定中,else是跟最近的if相互配对,因此这里的是与相互配对,而变量a等于0,并不等于1,所以这里并不进入的内部,最后返回结果0,就是什么都不打印。
注:在这里庄哥也要提醒各位老铁,今后在打代码的过程中一定要注意缩进格式,如果打出像悬空else这样格式不规范的代码,会给其他程序员带来阅读压力,从而不再愿意看你打的代码,要记住:我们的代码不仅是打给自己看的,更是供他人指正、学习的!!!
下面我们来介绍switch语句
首先我们先来了解为什么会出现switch语句
例如:
这里如果再用if语句的话,代码就会显得太过繁琐,而生活中的总是会面临各种各样的选择和分支,因此我们需要新的语法形式来表达,于是前辈们就创造了switch语句
其次我们来学习switch语句的语法结构
switch的语法结构非常简单,其形式由* 整形表达式 * 和* 语句项 *构成
那么语句项又是什么呢?
- 重点1
这里的语句项由一些case语句构成(case属于switch语句范围,可以类比else与if语句之间的关系),这里要注意与前面if语句中的语句列表相互区分:
- 语句列表可以由任意语句构成
- 这里的语句项也可以由任意语句构成,但必须包括case语句
- 重点2
下面来看语句项中case语句的语法结构及其功能
注意:这里的整形常量表达式后面需要加上’ : ’
case语句由整形常量表达式与内部子语句构成,而*switch后的整形表达式输出不同的值,与case语句后的不同整形常量表达式相互配对,从而执行不同的语句项
- 重点3
case语句通常在结尾要用break语句作以结束,只有在搭配break语句使用后,我们才能实现真正的分支。
庄哥给你们举个例子:
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{
case 0:
printf("haha\n");
case 1:
printf("hehe\n");
case 2:
printf("lala\n");
}
}
请问各位老铁,这段代码的输出的结果是什么呢?
答案是
为什么只打印后面两句呢?因为呀我们的case语句在没遇到break的时候,它会从第一次进入的case语句一直运行到最后一个case语句,中间是不会停止运行的
在了解这三个重点的基础上,我们先来尝试写出开头给大家介绍的题目
#include<stdio.h>
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;
}
}
注:各位老铁也要自己动手敲一敲哦~
敏锐的老铁已经发现了:庄哥,如果给day变量输入一个数字8会怎么样呢?
其实也不会怎么样,系统不会报错,但会跳过所有的case语句(因为没有整形常量表达式跟8匹配呀)
但是如果你不想忽略掉这种情况的话,你可以在语句项中加上default语句
- 重点4
default语句可以说是case语句的补充,它可以放在与case语句并列的任意位置,而且系统会像执行case语句一样,按从上到下的顺序执行它。
可以参考下面这段代码
#include<stdio.h>
int main()
{
int a=0;
switch(a)
{
case 1:
printf("hehe\n");
default:
break;
//这里的default也可以放在前面
}
}
编程好习惯:在每一个switch语句的后面加上一个default语句,并可以在后面加上一个break
总结
好了,今天庄哥的分享到这里就结束了,第一次尝试,有需要改进的地方烦请各位前辈们批评、指正!