本篇文章主要介绍分支结构的一些基础语法,好好学习,天天向上!
分支结构
1.if语句
1.1.if语句的语法形式如下:
if(表达式)
语句
表达式为真,执行语句,为假,则不执行语句。在c语言中,0为假,非零为真
例子:判断一个人是否为男性
#include<stdio.h>
int main()
{
int flag = 0;
scanf("%d", &flag);
if (flag == 1)
printf("是男性");
return 0;
}
1.2.else
显然,一个人的性别除了男性还有女性,要判断到底是男性还是女性就要用到else语句
例子:
#include<stdio.h>
int main()
{
int flag = 0;
scanf("%d", &flag);
if (flag == 1)
printf("是男性");
else
printf("是女性");
return 0;
}
1.3分支中包含多条语句
默认在if和else下都只控制一条语句
例子:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("您已成年");
printf("可以接触未成年防沉溺");
return 0;
}
上面的代码我们会发现,无论我们输入什么,可以解除未成年沉溺都会被打印
这就是因为if语句只能控制一条语句,对于第二条语句是独立存在的,无论条件是否成立都会被打印
如果我们想让他同时控制两条语句,那就需要用{}把要执行的语句括起来,else同理
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("您已成年");
printf("可以接触未成年防沉溺");
}
return 0;
}
这样就可以使代码输出满足我们的要求
当输入值小于18时,什么都不输出
1.4嵌套if
在实际生活中,仅仅是一个简单的if...else很难满足需要,需要我们进行多重判断才能达到目的
这时候我们就要用到嵌套if,当然if嵌套,既可以嵌套到if语句中,也可以嵌套到else语句中
这里给出一个嵌套在if的例子,else类比同理:
#include<stdio.h>
int main()
{
int m = 0;
scanf("%d", &m);
if (m > 0)
{
if (m % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
printf("非正数\n");
return 0;
}
当我们学会了if...else的嵌套语法,就可以解决逻辑更加复杂的问题了
1.5悬空else
当代码中出现多个if...else时,有这样一个规则:else总是与最近的if配对
例子:
#include<stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 2)
if (b == 3)
printf("ok\n");
else
printf("yes\n");
return 0;
}
对于这个代码错误的想法就是,a不等于2,那么执行else语句输出”yes“。事实上这个代码的运行结果什么也不输出
原因是什么呢?
这就是悬空else
根据规则,else总是与离他最近的if匹配,这里代码的排版让我们以为,else于第一个if匹配,当地一个if的语句不成立时,执行else,打印yes。但事实上,else是与第二个if匹配,他们构成的if...else嵌套在第一个if语句中,当第一个if语句不成立时,代码就不会再往下执行,最终什么也不输出。
为了方便理解,我们可以把代码改成这样
#include<stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 2)
{
if (b == 3)
printf("ok\n");
else
printf("yes\n");
}
return 0;
}
如果我们确实想让else与第一个if匹配来达到目的,可以通过加适量的大括号,让代码的逻辑更清新,方便阅读
#include<stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 2)
{
if (b == 3)
printf("ok\n");
}
else
printf("yes\n");
return 0;
}
1.6switch语句
在c语言中,实现分支结构除了可以用if语句外,还可以使用switch语句
switch适用于判断条件有多个结果的情况
switch (expression)
{
case value1: statement
case value1: statement
default:statement
}
根据上面的代码,根据条件表达式expression可能出现的不同的值,分别执行相应的case分支,如果没有对应的case分支,就执行default语句。
!!!
1.switch后边的expression必须是整型表达式
2.case后边的value1,也必须是整型常量表达式
例子:输入一个整数,计算除3之后的余数
#include<stdio.h>
int main()
{
int m = 0;
scanf("%d", &m);
switch (m % 3)
{
case 0:
printf("余数为\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
这个代码中应该注意
!!!
1.case和后边的数字之间必需有空格
2.每一个case语句的代码执行完后,都要加一个break语句,来跳出switch语句
1.6.2switch语句中的break
如果不加break语句会怎样呢?
根据编译的结果我们不难看出,明明我们输入了4,理想的结果应该只输出余数是1,但程序运行的结果却多了一行,余数是2.
出现这个结果的原因就是:switch语句也是有分支效果的,只有在switch语句中使用break语句才能跳出switch语句,如果一个case语句后边没有break,代码就会继续向下执行,出现执行其他case语句的代码的情况,直到遇到break,或者switch语句结束。比如上边的代码,就没有break,在执行完case1后,程序没有停下来,而是接着执行case2中的语句,直至switch语句结束
由此我们可以看出switch语句中break非常之重要。
当然,也不是所有情况case语句后边都要跟一个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("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
因此,在写代码的过程中,我们还是要根据实际情况,来判断是否需要加break;来更好地满足我们的要求。
1.6.3switch语句中的default语句
在使用switch语句的过程中,我们也会碰到,expression语句中的值不满足任何一个case语句,这个时候沃尔玛你可以选择不做处理,或者加入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("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
运行结果如下:
当我们输入9时,case语句均不满足,执行default语句,输出”输入错误“
1.7switch语句中的case和default的顺序问题
在switch语句中case和default语句的顺序并没有硬性的要求,只要顺序满足要求即可,不过大家通常都把default语句放在最后。
作者有话说:这是写的第一篇,可能有很多不足,希望可以提出宝贵意见!!!
虚心求教!!!我只是一只刚学c语言没几天的小白,如果感到有帮助,还麻烦各位看官老爷点个赞!