前言
在C语言中支持三种结构,分别是顺序结构、选择结构和循环结构。顺序结构就是一条道走到黑,先干什么后干什么,按顺序来;选择结构就是有所选择的结构,你好好学习,去麻省理工读研究生,走上人生巅峰,如果不好好学习,毕业家里蹲,要么好好学习,要么不好好学习,这就是选择。
这就是选择结构,用分支语句来支持选择结构,分支语句也叫条件判断语句。
在C语言中主要有两种分支语句分别是 if 语句和 switch 语句。这篇文章将对if语句进行详细说明。
if语句
if语句也有三种情况,一是单if语句,二是if…else语句,三是嵌套if…else
单 if 语句
if (表达式)
语句;
#include<stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
if (score > 80)
printf("优秀\n"); //单if语句
return 0;
}
if…else语句
if...else语句意味着非此即彼。形式为
if(表达式)
语句1;
else
语句2;
举个例子,如果成绩分数大于80分为优秀,否则需要继续努力。
#include<stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
// if...else语句
if (score > 80)
printf("优秀\n");
else
printf("继续努力\n");
return 0;
}
嵌套if…else
使用多个 if...else 语句来表达,适用于多种情况。
如:如果成绩大于80分是优秀,60分到80分之间是合格,60分以下还需要努力。
这种情况使用一个if...else无法表达清楚,所以需要使用嵌套if...else。
#include<stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
// 嵌套if...else
if (score > 80)
printf("优秀\n");
else if (score >= 60 && score <= 80)
printf("合格\n");
else
printf("需要努力\n");
return 0;
}
在这个地方请注意:
if (score >= 60 && score <= 80)
这一行不能写成
if (60<= score <= 80)
这是数学里面的表示方法,如果写成数学的表达形式,会出现什么情况呢?我们来看一下:
我在这里输入一个50,按理说应该输出“需要努力”,但是这里是“合格”。我在前面的文章中说过,在C语言中0为假,非0为真,在这里,输入50,表达式相当于变成了
if (60 <= 50 <= 80)
编译器会先判断60小于等于50,为假,因为 0 为假,则这行表达式相当于变成了
if (0 <= 80)
结果为真,于是就打印出“合格”。
if 语句注意点
if 语句后默认管理一条语句,如
if (score > 80)
printf("优秀\n");
如果你还想在score大于80的条件下打印“给你点赞”,是不能这样写的:
if (score > 80)
printf("优秀\n");
printf("给你点赞\n");
我们可以来看一下:
我们发现编译器报错,并且已经告诉我们应该只输入一个语句。我们可以通过加大括号的形式让一个 if 管理多条语句。
我们可以看到这个时候运行成功,输入90,两个都打印出来了。
else采取就近原则,和最近的if匹配,不要被代码风格迷惑
#include<stdio.h>
int main()
{
int a = 10;
int b = 10;
if (a == 1)
if (b == 10)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
return 0;
}
你们可以想一想这段代码的结果是什么?
我们发现什么都没有打印出来。这是因为你可能走入了一个误区,你以为我圈出来的 if 和 else 是一对,如果你是这样想的,说明你被代码风格给迷惑了。其实真正的代码应该是这样的:
#include<stdio.h>
int main()
{
int a = 10;
int b = 10;
if (a == 1)
if (b == 10)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
return 0;
}
这样写是不是就清楚很多了,这就是 else 就近原则,虽然这样写也没有问题,但我建议这样写:
#include<stdio.h>
int main()
{
int a = 10;
int b = 10;
if (a == 1)
{
if (b == 10)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
}
return 0;
}
适当加上大括号,可以使代码的逻辑更加清晰,这是我的一点建议。
好的代码风格很重要。以后找工作无论是面试还是笔试都需要写代码,远程面试可能面试官让同学们共享屏幕,或者与面试官面对面,给你一张纸在面试官面前写,这个时候你怎么写代码,写的代码是什么样子,面试官一眼就看清楚了,心里就有数了。你如果写成这样:
#include<stdio.h>
int main()
{
int a=10;
int b=10;
if (a==1)
{
if (b==10)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
}
return 0;
}
这写的什么玩意,可能直接就把你pass了。
一个小技巧
很多同学在写一个变量等于某个值的时候,经常会忘记一个等号:
这段代码如果没少等号的话是什么都打印不出来的,但是这里我们发现有输出,这里相当于给a重新赋值为1,那自然为真会进入这个分支语句内。所以建议同学们开始学习的时候写一个变量等于某一个值时,将值写在左边,变量名写在右边:
if (1 == a ) // 这里将值写在左边,变量名写在右边
{
if (10 == b)
printf("小刘是帅哥\n");
else
printf("你是帅哥\n");
}
这样做有什么好处呢?我们可以来看一下,如果少个等号是什么情况:
我们发现在visual studio上,它会直接报错,根本编译不过。这算是一个小技巧吧。
练习题
- 判断一个数是否为奇数
- 输出 1 ~ 100 之间的奇数
结语
if 语句到这里就结束了,下一篇文章将对switch进行详细说明。