深入理解C语言中的分支和循环语句

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

1. if语句

1.1 if语句

if语句是最基本的条件语句之一,在执行过程中根据条件判断选择性地执行特定的代码块。其语法如下:

if (condition) {
    // 如果条件为真,执行这里的代码块
}

在C语言中,0为假,非0表⽰真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。

例⼦:输⼊⼀个整数,判断是否为奇数

#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… 语句了,语法形式如下:

if ( 表达式 )
    语句1
else
    语句2

1.3 多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句,那如果我们要if语句同时控制2条以上语句,怎么办呢?那就要使⽤ {} 将代码括起来,else 后也可以跟上⼤括号。如下:

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
		{
		printf("成年了\n");
		printf("可以谈恋爱了\n");
		}
	else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
		{
		printf("未成年\n");
		printf("不可以早恋哦\n");
		}
    return 0;
}

2. 关系操作符

C语言中的关系操作符用于比较两个值之间的关系,常见的关系操作符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

注意:
相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不小心写出下⾯的代码,它可以运行,但很容易出现意料之外的结果。

另⼀个需要避免的错误是:多个关系运算符不宜连⽤。

示例

i < j && j < k

3. 条件操作符

条件操作符(?:)是C语言中的三元操作符,用于根据条件的真假选择性地返回两个值之一。其语法如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

int main()
{
  int a = 0;
  int b = 0;
  scanf("%d", &a);
  b = a>5 ? 3:-3;
  printf("%d\n", b);
 return 0;
}

4. 逻辑操作符:&& , || , !

逻辑操作符用于对条件表达式进行逻辑运算,包括与(&&)、或(||)、非(!)等。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语言中,非0表⽰真,0表示假

5. switch语句

switch语句用于根据表达式的值选择性地执行多个代码块中的一个。其语法如下:

switch (expression) {
    case value1:
        // 如果expression的值等于value1,执行这里的代码块
        break;
    case value2:
        // 如果expression的值等于value2,执行这里的代码块
        break;
    // 可以有多个case
    default:
        // 如果expression的值与任何case都不匹配,执行这里的代码块
}

注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
• case 和后边的数字之间必须有空格
• 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。

5.1 if语句和switch语句的对⽐

练习:输⼊任意⼀个整数值,计算除3之后的余数
如果使⽤if语句完成,如下:

#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;

如果使⽤switch语句改写,就可以是这样的:

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
		8 {
	case 0:
	   printf("整除,余数为0\n");
	   break;
	 case 1:
	   printf("余数是1\n");
	   break;
	 case 2:
	   printf("余数是2\n");
	   break;
	   }
return 0;
}

6. while循环

while循环在条件为真时重复执行代码块,直到条件为假为止。其语法如下:

while (condition) {
    // 在条件为真时执行这里的代码块
}

6.1 while语句的执行流图

在这里插入图片描述
示例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

7. for循环

for循环提供了一种在已知循环次数时重复执行代码块的方法。其语法如下:

for (initialization; condition; increment/decrement) {
    // 在条件为真时重复执行这里的代码块
}

表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整

7.1 for语句的执行流图

在这里插入图片描述

8. do-while循环

do-while循环先执行一次循环体,然后检查条件是否为真,如果为真,则继续重复执行。其语法如下:

do {
    // 执行一次循环体
} while (condition);

while 和 for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满⾜就跳出循环;
而 do while 循环则是先直接进⼊循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下⼀次,表达式为假,则不再继续循环。

8.2 do while循环的执⾏流程

在这里插入图片描述
在 do while 循环中先执⾏图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地方。

9. break和continue语句

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。
• continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

10. goto语句

虽然不推荐使用,但C语言中也提供了goto语句,可以无条件地跳转到程序中的标签处。
例如:

#include <stdio.h>
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
	
	next:
	printf("跳过了haha的打印\n");
	return 0;
}

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

总结:
以上就是C语言中常用的分支和循环语句的介绍。熟练掌握这些语句对于编写清晰、高效的程序至关重要。在实际编程中,要根据具体情况选择合适的语句,并遵循良好的编程习惯,以确保代码的可读性和可维护性。

  • 56
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值