c语言的分支和循环语句
c语言是结构化的程序设计语言,结构是指顺序结构/循环结构/选择结构,我们可以使用if,switch 来实现分支结构,使用for,while,do while来实现循环结构
if语句
1.if
if(表达式)
语句
- 在C语言中,0为假,非0为真,也就是表达式的结果是0则语句不执行,反之如果表达式结果不为0,则语句执行
例子:输入一个整数,判断是否为偶数
#include<stdio.h>
int main() {
int n;
scanf("请输入一个整数:%d", &n);
if (n % 2 == 1) {
printf("这个数是偶数");
}
return 0;
}
2.else
- 如果一个数不是偶数那就是奇数了,这个时候我们就可以用if...else...的语句表示了
if(表达式)
语句1
else
语句2
- 那我们就接着上个例子继续完善它吧
#include<stdio.h>
int main() {
int n;
scanf("请输入一个整数:%d", &n);
if (n % 2 == 1) {
printf("这个数是偶数");
}
else {
printf("这个数为奇数");
}
return 0;
}
3.分支中包含多条语句
默认在if和else语句中,都只控制一条语句,例如:
#include<stdio.h>
int main() {
int money = 0;
scanf("%d", &money);
if (money >= 10)
printf("有钱啦\n");
printf("可以出门消费了\n");
return 0;
}

通过上面的代码,你会发现无论输入>=10还是<10,都会在屏幕上打印"可以出门消费了"
这是因为if语句只能控制一条语句,就是上述的"有钱啦\n",如果条件为真就会打印"有钱啦",如果条件为假则不会打印; 但是对于"可以出门消费了这句话\n"是独立存在的,通过上面的例子我们也能得知无论条件为真还是为假都会打印"可以出门消费了"这句话
- 那我们想用if语句同时控制两条语句就需要{ }将代码括起来,else后也可以跟上{ }
#include<stdio.h>
int main() {
int money = 0;
scanf("%d", &money);
if (money >= 10) {
printf("有钱啦\n");
printf("可以出门消费了\n");
}
return 0;
}
#include<stdio.h>
int main() {
int money = 0;
scanf("%d", &money);
if (money >= 10) {
printf("有钱啦\n");
printf("可以出门消费了\n");
}
else {
printf("钱还不够");
printf("还不能出门消费");
}
return 0;
}
4.嵌套if
- 在if else语句中,else 可以与另一个 if语句连用,构成多重判断
比如说,输入一个整数判断它是为正数,负数还是0
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
if (n > 0) {
printf("这个数是正数");
}
else if (n == 0) { //这里的if相当于是嵌套在else语句中,形成了嵌套结构
printf("这个数为0");
}
else printf("这个数为负数");
return 0;
}
switch 语句
- c语言中的switch语句也是实现分支结构
- switch 语句是一种特殊形式的if....else结构, 用于判断多种结果的情况
switch(expression){
case value1 : statement
case value2 : statement
...
default : statement
}
- 上面的代码中,根据表达式expression 不同的值,来执行相应的case 分支, 如果找不到对应的值,就执行 default的分支
举个例子吧:输入一个整数,计算它除以3之后的余数
用if 语句完成如下:
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;
}
用switch语句完成如下:
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;
}
注意:
1.case后面必须要有空格
2.每个case语句执行完后,必须加上break,才能跳出switch这个语句
如果不加上break的情况就如下:
int main() {
int n = 0;
scanf("%d", &n);
switch (n%3)
{
case 0:
printf("余数为0\n");
case 1:
printf("余数为1\n");
case 2:
printf("余数为2\n");
}
return 0;
}

3是整除3的,余数为0,我们就会发现多打了后两行代码
- 这是因为switch语句也是具有分支结构的. 如果在某一个case语句的后面没有break语句,代码就会往下执行,直到遇到break语句或者switch语句结束
- 所以在switch语句中break是很重要的,但也不是每个case语句都需要break,这个需要结合实际情况来考虑
switch语句中的default
我们在使用switch语句的时候,也会出现不匹配代码中的case的情况 ,这个时候可以不做处理,也可以加入default子句
例子:输入星期,判断是休息日还是工作日
int main() {
int day = 0;
scanf("%d", &day);
switch (day)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
printf("这是工作日");
break;
case 6:
case 7:
printf("这是休息日");
default:
printf("输入错误,请输入1-7内的数字");
break;
}
return 0;
}
在switch语句中case 和 default是没有顺序要求的,满足需求即可,一般是把default放在最后
while 循环
while是c语言的循环结构中的一种 ,而且while的语法结构与if语句相似
比较:
if(表达式)
语句
while(表达式)
语句 //如果循环体有更多语句,需要加大括号
while语句的执行流程
- 首先是执行判断表达式, 如果表达式为0则直接循环结束. 如果表达式的值为1,则执行循环语句,语句执行完之后在继续判断,是否进行下一次循环
例子:用while打出1-10的代码
int main() {
int i = 1;
while (i < 11) {
printf("%d ", i);
i++;
}
return 0;
}

for 循环
- for循环是三种循环中使用最多的,for循环的语法格式如下:
for(表达式1;表达式2;表达式3)
语句;
表达式1:用于循环变量的初始化
表达式2:用于循环条件结束的判断
表达式3:用于循环变量的调整
首先执行表达式1初始化循环变量, 接下来执行表达式2 的判断成分, 表达式2如果==0则循环结束; 表达式2 的结果如果!=0则执行循环语句, 循环语句执行完之,后,再去执行表达式3, 调整循环变量,然后再去执行表达式2 的判断 ,表达式2的结果是否为0, 决定循环是否继续
在整个循环过程中, 表达式1初始化部分只执行1次,剩下的表达式2,循环语句,表达式3在循环过程中
例子:打印1-10的值
int main() {
for (int i = 1;i < 11;i++) {
printf("%d ", i);
}
return 0;
}

do-while 循环
- 在循环中do-while循环用的最少,它的语法如下:
do
语句;
while(表达式)
while和for这两种循环都是先判断条件,条件满足则进入循环,执行循环语句,不满足则跳出循环
而do-while循环则是先进入循环体,在执行循环语句,然后在执行while的表达式,表达式为真,就会进行下一次,表达式为假则不再继续循环
例子:在屏幕上打印1-10的值
int main() {
int i = 1;
do {
printf("%d ", i);
i++;
} while (i < 11);
return 0;
}

break和continue语句
- 在循环语句执行的过程中, 如果某些状况发生的时候,需要提前终止循环
c语言提供了break和continue两个关键字就是运用到循环中的
- break的作用是永久终止循环,只要break被执行,直接就会跳出循环,继续往后执行
- continue的作用是跳出本次循环中continue后边的代码,在for和while循环中会有差异
while循环中的break和continue
break举例:
int main() {
int i = 1;
while (i < 11) {
if (i == 5)
break;
printf("%d ", i);//当i执行到5时,就执行break,循环结束了
i++;
}
return 0;
}

打印了1,2,3,4之后,当i=5的时候.循环就在break的地方终止,不在循环
所以break的作用就是终止循环,只要break进行,则break外一层的循环就停止了
continue举例
int main() {
int i = 1;
while (i < 11) {
if (i == 5)
continue; //当i=5后,执行continue,去循环判断的地方
printf("%d ", i); //因为这里跳过了i++,所以i一直为5,程序进入死循环
i++;
}
return 0;
}
我们可以从中看出来,continue可以帮助我们跳过某一次循环continue后面的代码,直接到循环的判断部分,进行下一次循环,如果循环的调整在continue后面的话则可能进入死循环
for循环的continue和break
break举例
int main() {
for (int i = 1;i < 11;i++) {
if (i == 5)
break;
printf("%d ", i);
}
}

- break的作用是终止循环,当我们在某个条件下不想继续循环时,就可以使用break来完成
continue举例
int main() {
for (int i = 1;i < 11;i++) {
if (i == 5)
continue; //这里的continue跳过了打印部分,来到了i++
printf("%d ", i);
}

- 所以在for循环中的continue是跳过本次循环continue后面的代码,直接去循环调整部分.
do while循环中的break和continue
do while循环中的break和continue是和while中的作用几乎一模一样的,我们来看代码
int main() {
int i = 1;
do {
if (i == 5)
break;
printf("%d ", i);
i++;
} while (i < 11);
return 0;
}
int main() {
int i = 1;
do {
if (i == 5)
continue;
printf("%d ", i);
i++;
} while (i < 11);
return 0;
}
goto语句
- c语言提供了一种特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到标志好的
来看个例子吧:
int main() {
printf("hello\n");
goto next;
printf("hehe\n");
next:
printf("nihao\n");
return 0;
}

这里就是直接跳过了hehe的输出,直接来到了next然后到nihao的输出
如果说goto语句使用不当,会在函数内随意乱跳转,打乱程序的执行顺序,所以建议少去使用goto语句,但是goto语句不是毫无用处,比如在跳出多层循环使用goto就会很方便
for (...) {
for (...) {
for (...) {
if (disater)
goto error;
}
}
}
error:
结语
以上就是c语言的循环结构和分支结构,希望大家可以多多点赞支持,欢迎大佬来纠正~
谢谢大家啦
更多推荐



所有评论(0)