高质量博主,点个关注不迷路🌸🌸🌸!
目录
1.案例引入
2.if判断语句的语法与注意事项
3.switch多分支语句的语法与注意事项
前言: 书接上回,我们已经学习了所有的数据类型、运算符,并且可以书写简单的运算式子来解决一些问题了。那么下面进入到C语言学习的下一阶段:判断语句 的学习。对于任意一种编程语言,我们用的最多的几种结构,无非就是 顺序结构、分支(判断)结构 与 循环结构,顺序结构比较简单,就是指程序是按从上到下的顺序依次执行的一种结构。这种结构我们最初在写第一段C语言的程序时就用过了,因此无须赘述。而今天学习第二种结构:分支(判断结构),并用它解决更多的编程问题。
1.案例引入
首先,如前言所述,学习每一门编程语言,我们都要学习顺序结构、判断结构和循环结构这三种结构,这是从宏观上看,我们必须要学习的三种结构。那么判断结构,有哪些实际的意义呢?我们下面举一个简单的例子:
假如有这么一个需求:
我们需要让用户输入两个数,并帮他其中较大的那个数字打印在控制台,我们要怎么做呢?
这需求看起来很简单,但我们目前学习的内容是不足以解决这类比较并执行的任务的。因此需要引入if-else判断语句。
2.if判断语句的语法与注意事项
下面用一段简单的代码,展示if-else判断语句的语法格式:
#include<stdio.h>
int main(){
int a = 3;
int b = 4;
if(a > b){
printf("%d",a);
}
else{
printf("%d",b);
}
return 0;
}
从这段代码可以看出if-else的语法格式:
if (判断表达式){
若表达式为真,执行的内容
}
else{
若表达式为假,执行的内容
}
其中具体的判断表达式,则根据我们的需求进行编写,如果你要问什么是表达式,请看上一篇笔记。
之后我们补充几点注意事项:
首先,if-else语句,可以没有else,只有if,即else部分并不是必须的,但是if是必须有的,
不能没有if来一个else。(这个很好理解,if才是做判断的地方,没有if,else自然没有意义)
其次,如果if语句后面的执行部分,只有一句代码,可以不写大括号,即:if () 表达式
但这种写法不推荐,推荐无论是否是一行执行代码,都写上大括号,便于代码的阅读。
接下来是if-else if-else 的多判断语句的语法格式:
#include<stdio.h>
int main(){
int x = 3;
if(x > 0){
printf("x是正数");
}
else if (x > 0){
printf("x是负数");
}
else{
printf("x是0");
}
return 0;
}
上面这段代码的逻辑是:
如果x的值大于0,则输出x是正数,否则执行判断x是否小于0,如果是,则输出x是负数,如果前两个都不满足,则x为0。
于是得到if-else if-else多判断语句的语法格式:
if (判断表达式1){
若表达式1为真,执行的内容
}
else if(判断表达式2){
若表达式1为假,但判断表达式2为真,执行的内容
}
else{
若表达式1和2都为假,执行的内容
}
需要注意的是,if-else if-else型的多判断语句,else if的数量可以是无穷多的,例如我们想要判断当前用户输入的值对应的月份,可以这么写:
#include<stdio.h>
int main(){
int x = 3;
if(x == 1){
printf("一月");
}
else if (x == 2){
printf("二月");
}
else if (x == 3){
printf("三月");
}
...
return 0;
}
注意,多个else if时,每个表达式都是按从上到下顺序访问的,即:先判断第一个if的表达式,如果为假,则判断第一个else if,如果还为假,则判断第二个else if,如果判断到某个分支,发现成立(为真),则不会继续向下判断和执行其他的分支的内容。
3.switch多分支语句的语法与注意事项
下面讲解分支结构中比if稍微不常用一些的switch语句。这种语句没有if那么“火爆”,但作为系统学习的入门笔记,需要进行讲解。
我们先看这样一个小的案例:
假如我们需要实现:当用户输入一个在[1,7]之间的整数时,我们在控制台打印该数字对应星
期几,例如用户输入3,我们需要在控制台输出:星期三。
首先,应该想到可以用上面学习的if-else if-else的多重判断语句实现,但这样写,代码量太大了,而且看起来比较臃肿,不够简洁,我们能否用一种简洁的方式实现呢?于是我们引入switch case的分支语句:
switch(num){
case num1:
执行内容
break;
case num2:
执行内容
break;
...
}
上面是switch case语句的语法格式,它的执行逻辑是这样的:
在switch()中,放置一个整型数或者整型变量,而后在下面的case关键字后面写上一个整型数或者整型变量,当switch()的括号中的数字等于case关键字后面的整型数时,会执行对应的内容,其中case 的个数是无限的。
于是基于switch case 的语法特点,我们很容易实现上面的输出周几的需求:
#include<stdio.h>
int main(){
int num;
printf("请输入[0-7]中的一个数字\n");
scanf("%d",&num);
switch(num){
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("星期日");
break;
}
return 0;
}
下面补充一个重要的细节,这个细节在switch case中经常容易被忽略:
break关键字的使用:break关键字,表示中断的意义。在switch case语句中,每一个case最后都需要有一个break,否则会导致执行该case之后,并不会跳出switch case结构,而是会继续向下执行下一个case,这会导致我们的程序出现意外的错误。例如我们看下面这段代码:
#include<stdio.h>
int main(){
int num = 2;
switch(num){
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
}
return 0;
}
这段代码在case 2的后面没有break,而且当前的num变量的值恰好是2,于是我们运行代码会发现:
也就是说,最终输出了两个case 的内容,这与我们的预期显然是不对的,我们的预期,此时只应该输出星期二,因此我们一定要注意break关键字不要漏掉了!!!
那么到这里,我们的分支(判断)结构以及在C语言中的两种实现方式:if else和switch case语句就都学习完毕了。