分支与循环

目录

引言

分支(选择)语句

if语句

switch语句

循环语句

while语句

for语句

do while语句

应用

改变循环执行状态

break

continue

使用

goto语句

循环的嵌套使用


引言

      由前面的知识我们可以知道C语⾔是一种结构化的程序设计语⾔,这⾥的结构包括顺序结构、选择结构、循环结构,在C语言中我们可以使⽤ if 、 switch语句 实现分⽀结构,使⽤ for 、 while 、 do while语句实现循环结构。

      接下来,我们一一介绍:

分支(选择)语句

if语句

     if语句的一般形式为:

if(表达式)

             语句1

当表达式为真(非0)时,语句1执行;当表达式为假(0)时,语句1就不会执行。

通常if会与else一起用,一般形式为:

if(表达式)

       语句1

else

      语句2

当表达式1不成立时,就会执行else后面的语句2.

需要特别注意的是if后面默认只控制一条语句,如果需要if后面执行多条语句的话,就需要将控制的多条语句用{   }括起来。

这里通过一个代码来更好地理解:

#include<stdio.h>
int main()
{
  int a = 0;
  if(a >= 18)
     printf("成年人");
  else
     printf("未成年人");
  return 0;
}

同时在多种分支的情况下,可以在else部分又嵌套多层的if语句,它的一般形式为:

if(表达式1)

      语句1

else if

      语句2

else if

      语句3

else

      语句4

悬空else问题

      在这里,我们需要记住的是“如果有多个 if else else 总是跟最接近的 if 匹配,而不是与对齐的if匹配。

  你知道下面的代码输出结果是什么吗?

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hello\n");
	else
			printf("haha\n");

	return 0;
}

事实上,它什么也不会输出,else与第二个if进行匹配,因为第一个if后面的表达式为假,就不会执行后面的了。

switch语句

     除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 事实上switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况,适合多分支结构,它把多重 else if 改成更易⽤、可读性更好的形式。

    它的一般形式为:

switch(表达式)

{

case 常量1:

            语句1

case 常量2:

            语句2

..................

case 常量n:

            语句n

default:

           语句n+1;

}

注意:

1.表达式必须是整型(包括字符型-----字符的本质是ASCII值,所以字符类型也归类到整型类型)表达式。

2.switch后面的{  }中是一个复合语句,一般来讲会有多个以关键字case开头的语句行和最多一个以default开头的行。当switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候可以不做处理,也可以在在 switch 语句中加⼊ default ⼦句。

3.case后面的值必须是整型常量(表达式),同时case 和后边的表达式之间必须有空格如:case ‘A',case 1,它们和default都是起标号的作用,来标志一个位置

4.switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以了,不过我们通常是把 default ⼦句放在最后处理的。

5.每一个case常量必须互不相同,否则会出现互相矛盾,一个常量有多个执行方案。

6.switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然,使用时需要结合实际情况,并不是每个 case 语句都得有break。

下面就来使用一个switch语句的代码来体会它的效果:

可以看出使用switch语句来处理多分支结构比if else语句更加简便。

循环语句

while语句

   while语句一般形式:

while(表达式)

{


}

while的执行流程是: ⾸先执⾏判断表达式 ,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

for语句

for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
     语句; // 如果循环体想包含更多的语句,可以加上⼤括号
表达式1 : ⽤于循环变量的 初始化 ,只需要执行一次,可以给零个、一个或者多个变量设置初始值。
表达式2 :⽤于循环结束条件的 判断 ,每一次执行循环体前先执行这个表达式,决定是否继续执行循环。
表达式3 :⽤于循环变量的 调整
表达式1和表达式3可以是一个简单的表达式,也可以是一个逗号表达式(包含多个简单表达式)
事实上,for while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
     语句;
for语句一般形式可以改写成:
表达式1;
while(表达式2)
      {
         语句
         表达式3;

      }

这两个无条件等价。

do while语句

dowhile一般形式:

do

{

 语句

}while(表达式 ); 后面有分号;

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

应用

接下来我们用这三个代码来解决同一个问题:输出1--50可以被3整除的数
while循环
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 50)
	{
		if (i % 3 == 0)
			printf("%d ", i);
		i++;
	printf("\n");
	return 0;
}

for循环
#include<stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 50; i++)
	{
		if (i % 3 == 0)
			printf("%d ", i);
	}
	printf("\n");
	return 0;
}

do while循环

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i % 3 == 0)
			printf("%d ", i);
		i++;
	} while (i <= 50);
	printf("\n");
	return 0;
}

可以看出它们输出的结果是一致的

改变循环执行状态

break

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

continue

     continue 的作⽤是 跳过本次循环中 continue 后边的代码 ,只是 结束本次循环 ,继续执行下次的循环的判断。

使用

     在使用上,break在三种循环语句差别不大。

这里需要特别注意的是 continuefor 循环和 while 循环中是有所差异的。

while循环中:continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成 死循环。

for 循环 中 : continue 的作⽤是跳过本次循环中 continue 后的代码, 直接到循环的调整部分
我们用下面的代码来进行更好的理解!(输出1--50被3整除的数,使用continue版)

       可以看出当使用continue时,在while循环中循环的调整是在 continue 后边,造成了死循环(i一直等于36)

除此之外,我们需要注意的是continue只能在循环中使用,而break可以在switch循环语句中使用,但是break不能与if语句单独使用。

goto语句

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

       但是如果goto 语句使⽤不当,就会导致在函数内部随意乱跳转打乱程序的执⾏流程,所以建议是能不⽤尽量不去使⽤。

       如果在多层循环的代码中,循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层循环,所以如果想快速跳出循环的话使⽤ goto语句就更加的方便。

循环的嵌套使用

用两个例子来说明:

1.打印100--150的素数

2.打印4*4矩阵

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值