前言:C语言是结构化的程序设计语言!而所有的结构又可大致分为三种,分别是:顺序结构,选择结构,循环结构。
分支结构即选择结构,顾名思义,使用选择结构可以帮助我们进行选择,进行判断;一般通过 if , switch实现,而循环结构一般通过for ,while,do while实现。
其中,if和for使用频率较高,do while 一般适用于特定的场景。
1.if语句
1.1 if
if语句格式如下:
1.if ( 表达式 )
2.语句
表达式为真,则执行语句;为假反之
eg.
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
1.2 else
通常使用if语句时,不会单独使用if,而是使用 if...else 的形式。
就如同他们的中文翻译一样,if的表达式为真,则执行if后的语句;为假则执行else后的语句;
不过需要注意的是:if只对第一个分号前的语句负责,如果需要if负责更多的语句,则需要将它们放入{}内;类似地,else也是同样的道理
eg.
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
return 0;
}
1.3 嵌套if
if...else 语句中,else可以和另一个if连用,构成多重判断
在嵌套中,一般遵循就近原则,即else和最近的if构成if......else语句。
eg.
#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;
}
上面代码的排版模式,很容易让人以为else是与第一个if匹配。但根据就近原则,else与第二个if匹配。
2.switch语句
2.1 switch与if语句
与if语句类似,switch语句也可以帮我们进行选择,
也可以将switch 语句理解为
是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易
用、可读性更好的形式。
eg.
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
一个判断被3整除的程序用if写如上,而用switch写如下:
eg.
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
两者效果相同,但switch语句的可读性会更好一些,也更不容易出错
2.2 switch语句中的break和case
从上面的例子中,可以轻易地发现if和switch的差别:
比较明显的就是switch中有case和break,
值得注意的是:
1.case后面只能接数字且与数字之间有空格
2.每一个case执行完之后,必须加入break才能跳出语句
2.3 switch语句中的default
先补充一下switch语句的结构:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
当switch后的表达式不能满足value1和value2时,则会执行default
eg.
#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;
}
至于case和default的顺序问题,问就是没有顺序,只是一般来说会将default放在最后一位
3.while语句
3.1 while和if
while语句与if语句的结构类似
if(表达式)
语句;
while(表达式)
语句;
可以说while是循环版的if
3.2 while的执行逻辑
1.执行判断表达式,表达式的值为0,循环直接结束;
2.表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下⼀次判断
4.for语句
4.1 语法形式
for语句可以说是循环语句界的扛把子,在三种语句中使用最多
一般形式如下:
for(表达式1;表达式2;表达式3)
{
语句;
}
4.2 for的执行流程
一般来说:表达式1为初始化;
表达式2为判断;
表达式3为调整;
表达式1通常只执行1次,而2,3则在循环中一直判断和调整,直到循环结束
5.do...while循环
一般用于特定的使用场景,所以使用最少
5.1 do...while的语法形式
do{
语句;
}while(表达式)
5.2 do...while的执行流程
与前两个不同之处就在于:
1.先执行“语句”,执⾏完语句。
2.在去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
所以,do...while语句至少执行一次。
eg.
输入一个正整数,判断其位数
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int count = 0;
do
{
count++;
n = n / 10;
} while (n);
printf("%d\n", count);
return 0;
}