前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言分支和循环语句

C语言分支和循环语句

作者头像
P_M_P
发布2024-01-18 18:58:30
1150
发布2024-01-18 18:58:30
举报
文章被收录于专栏:C语言P_M_P学习笔记C语言

前言

C语言是程序化的设计语言,这里的结构指的是顺序结构、、选择结构、循环结构。

我们可以使用if、switch实现分支结构,使用for、while、do while实现循环结构

1 if语句
1.1 if

if语句的语法形式如下

代码语言:javascript
复制
if(表达式)
   语句

表达式成立(为真),则语句执行,表达式不成立(为假),则不执行。

另外,在C语言中,0表示假,非0表示真,也就是输出的结果为0,则语句不执行,表达式的结果不是0,则语句执行。        

eg:输入一个整数,判断是否为奇数

代码语言:javascript
复制
#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...else...语句,语法形式如下:

代码语言:javascript
复制
if(表达式)
   语句1
else
   语句2

eg:输入一个整数,判断是奇数还是偶数

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 else
 printf("%d 是偶数\n", num);
 return 0;
}
1.3 分支中包含多条语句

默认在if和else语句中都只控制一条语句

如果要控制多条语句,可以使用{}将代码括起来。

eg:

代码语言:javascript
复制
int main()
{
	int  age= 0;
	scanf("%d", &age);

	if (age >= 18)
	{
		printf("成年了\n");
		printf("要上大学了\n");
	}
	else
	{
		printf("未成年\n");
		printf("还未上大学\n");
	}

	return 0;
}
1.4 嵌套if

在 if else语句中,else可以与另一个if语句连用,构成多重判断。

语法形式如下:

代码语言:javascript
复制
if(表达式)
else if(表达式)
...
else

eg:输⼊⼀个⼈的年龄

如果年龄<18岁,打印"少年"

如果年龄在18岁⾄44岁打印"⻘年"

如果年龄在45岁⾄59岁打印"中⽼年"

如果年龄在60岁⾄89岁打印"⽼年"

如果90岁以上打印"⽼寿星"

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age<18)
 {
 printf("少年\n");
 }
 else
 {
 if(age<=44)
 {
 printf("⻘年\n");
 }
 else
 {
 if(age<=59)
 {
 printf("中⽼年\n");
 }
 else
 {
 if(age<=90)
 printf("⽼年\n");
 else
 printf("⽼寿星\n");
 }
 }
 }
 return 0;
}
1.5悬空else

如果有多个if和else,else总是跟最接近的if匹配。

适当带上大括号,代码的逻辑会更清晰,可以避免产生bug。

2 关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称 为“关系运算符”(relational operator),主要有下⾯6个。

> 大于运算符

< 小于运算符

>= 大于等于运算符

<= 小于等于运算符

== 等于运算符

!= 不等于运算符

注意:=用于赋值,==用于判断是否相等

关系表达式通常返回0或1,表示真假。

c语言中,0表示假,非0表示真。比如,20>12返回1,12>20返回0。

关系表达式通常if或while结构中。

代码语言:javascript
复制
if(x==3)
printf("%d",x);

为了分支==和=混淆,通常将x==3写出3==x,此时如果==写成了=,编译器会报错。

另外,多个关系运算符不宜连用。

代码语言:javascript
复制
i<j<m

上面的示例并不如我们数学中的意义相同,它表达的是(i<j)<m,而i<j返回0,即0<m,此时编译器不会报错。正确的写法应该是:

代码语言:javascript
复制
i<j&&j<m
3 逻辑操作符:&&,||,!

! :逻辑取反运算符(改变单个表达式的真假)。

 && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

 || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

短路:C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

例如:

代码语言:javascript
复制
if(month>=33&&month<=5)

表达式中&& 的左操作数是 month >= 3 ,右操作数是 month = 3 的 结果是0的时候,及时不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。 所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短 路求值。

 4 switch语句

除了if语句外,C语言还提供了switch语句来实现分支操作。 

代码语言:javascript
复制
switch(experssion){
case value1:statement
case value2:statement
default:statement

}

 上面代码中,根据表达式expression不同的值,执行相应的case分支。如果找不到相应的情况,就执行default分支。

另外,switch后的expression必须是整型表达式

           case后的值,必须是整型常量表达式。

4.1 switch语句中的break
代码语言:javascript
复制
#include <stdio.h>
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;
}

 运行结果如下:

 这是为什么呢? 原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。

所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

如果需求发⽣变化,变为:

1. 输⼊1-5,输出的是“⼯作⽇”;

2.输⼊6-7,输出“休息⽇”

代码语言:javascript
复制
#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 ,或者在哪⾥使⽤ break ,才能正确完成实际的需求。

4.3 switch语句中的default

在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。

不过我们通常是把 default ⼦句放在最后处理的。

5 while循环
5.1 while语句的执行流程
 6 for循环
6.1 语法形式

for(表达式1;表达式2;表达式3)

       语句;

表达式1用于循环变量的初始化

表达式2用于循环结束条件的判断

表达式3用于循环变量的调整

整个循环过程中,表达式1只被执行一次,剩下的就是表达式2,循环语句,表达式3在。

7 do while 循环

举一个例子:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 
 return 0;
}

⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些。

8 break和continue语句

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执行。

 continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

8.1 while循环中的break和continue

下面用两个例子来解释:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;//当i等于5后,就执⾏break,循环就终⽌了
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}
代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 //当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
 //因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}
 8.2 for循环中的break和continue

for循环中break的作用和while中的相同

对于continue,举例如下:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
 printf("%d ", i);
 }
 return 0;
}

 在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调 整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。

在这里,可以对比一下while和for循环中continue的区别

 8.3 do while循环中的break和continue

作用几乎和while循环中的一模一样。

10 goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    printf("hello\n");
    goto next;
    printf("world\n");
next:
    printf("hi\n");
    return 0;
}

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 1 if语句
      • 1.1 if
      • 1.2 else
      • 1.3 分支中包含多条语句
      • 1.4 嵌套if
      • 1.5悬空else
    • 2 关系操作符
      • 3 逻辑操作符:&&,||,!
        •  4 switch语句
          • 4.1 switch语句中的break
          • 4.3 switch语句中的default
        • 5 while循环
          • 5.1 while语句的执行流程
        •  6 for循环
          • 6.1 语法形式
        • 7 do while 循环
          • 8 break和continue语句
            • 8.1 while循环中的break和continue
            •  8.2 for循环中的break和continue
            •  8.3 do while循环中的break和continue
          • 10 goto语句
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档