循环分支总结

什么是计算机语言

  相信很多人不清楚什么是计算机语言,没有接触这门语言的人会觉得听起来就很高级,其实,单从这个名字方面来讲,其实还是很好解释的,虽然你不清楚何为计算机语言,但你一定清楚什么是汉语和英语吧,其实这些各国语言统称为自然语言,自然语言是人与人之间交流使用的媒介;而计算机语言与他们不同,他是人与计算机进行交流的媒介,这样听起来是不是就很好理解了呢。

  下面我们就来进入C语言基础中的循环分支语句吧,我会给大家尽可能详细的总结出这里比较重要的知识点,让我们一起努力吧!!!💪💪💪

C语言的语句

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

  C语言的语句主要可以分为5类,分别是表达式语句,函数调用语句,控制语句,复合语句以及=控制语句。

  本篇文章所讲的循环分支语句属于上述五大类语句中的控制语句,而控制语句又可分成三类,分别是:

1、分支语句:if语句、switch语句;

2、循环语句:do-while语句、while语句、for语句;

3、转向语句:break语句、goto语句、continue语句、return语句;

那么我们先从分支语句开始吧🤭

分支语句

我们首先从 if 语句讲起吧!!

if 语句

  if语句的标准语法形式如下:

1   if ( 表达式 )
2       语句

  如果if 后面的表达式成立(即表达式为真或表达式不为0),则if 后面的语句执行,如果表达式不成立(即表达式为假或为0),则语句不执行。

  上面括号内为什么说或表达式为0或非0呢,其实在C语言中0表示假,而非0表示真,那我们为什么说 if 语句是判断语句呢,其实只想英文也能想到,if 在英文中是如果的意思,顾名思义,如果条件成立,则进行下面的这句话。就是这么简单,那么基础原理懂了,我们来练习一下吧

  上面的意思就是说,随即输入一个数,看这个数是否为奇数,如果是就打印出来,也是比较简单的运用了。 

  那么有人就会问了,如果有两种情况或两种以上都要打印出一些东西呢?欸~~,哥哥们姐姐们别急,if 的金牌搭档兼青梅竹马它不就来了吗,下面我们来讲else

else语句

  这个语句是 if 语句的老相好,一般情况下都是配套使用的,它的语法如下:

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

解释一下,其实翻译成白话文就是如果是这种情况,就执行语句1;如果是其他情况,就执行语句2。理解了这些,我们再来练习一下:

  这个语句就是让你输入一个年龄,如果大于等于18岁就是成年,如果不是,就打印未成年。这时就有同学发现了,如果是三种情况的话,这个好像就不能很好的表示了,但显然,设计C语言的设计师可不是吃干饭的,这时我们就可以加上else if ,如下:

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

 如果你还是觉得情况不够,就疯狂往中间加else if 就行了。

  当然,这里的语句1、2、3等等默认的都是1条语句,也就是说if和else和else if后面只能跟一条语句,如果是两条语句,第二条就不再归 if 和 else 和else if管了,那这时我们该如何解决呢,其实只要像int main()后面加上一个大括号 {} 就行了。,不过这里记住了if+else只能算一条语句。

  相信到这里,大家对if-else语句有了一定的了解,那么我们下面来讲一下其中会出现的一种特殊情况,悬空else。

悬空else

  什么是悬空else问题呢?我来给大家解释一下:如果有多个 if 和 else ,可以记住这样一条规则,else总是与其最接近的if 进行匹配。

就比如以下这种情况:

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

  你觉得他会输出什么呢,很多初学者,上来以判断 a 是0,不等于1,那就执行 else 子句,打印 haha 。但是当你去运行代码,输出的结果是:啥都不输出。

  那这是个什么情况呢???

  这就是我们上面说的规则,这是一定要遵守的,我们不能只看格式,说else明明和第一个if是对齐的,为什么会出现这种情况,但是虽然这是和第一个if 对齐的,但当你运行时,vs把编译器会自动帮你把格式矫正,出现上图中的情况。

  那么讲完了if_else语句之后,我们就来讲一下switch语句吧

switch语句

  除了if语句,C语言还提供了另一种分支语句就是switch语句。

switch语句其实是另一种形式的if-else结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。如下:

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

 注:1、case后面的值,必须是整型变量

        2、case和后面的数字之间必须有空格

  那我们来尝试一下:

  这时,我猜你肯定会写成这样

#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1:
 printf("星期⼀\n");
 case 2:
 printf("星期⼆\n");
 case 3:
 printf("星期三\n");
 case 4:
 printf("星期四\n");
 case 5:
 printf("星期五\n");
 case 6:
 printf("星期六\n");
 case 7:
 printf("星期天\n"); 
 }
 return 0;
}

  但是当你自信的把他放在编译器中时,输入一个1以后,点击回车就发现,原来自己长得像个小丑哈哈哈,那我们运行一下一起看看是怎么回事吧。

  很明显,这里把后面几个case语句后的情况都打印出来了,由此可以得知,正常情况下,你输入case 1,他会从case 1窗口进入,但它并不会从这个窗口出来,而是往下把所有的case窗口 走完才出来,那么这时我们就该想想怎么解决这个问题了,这时我们就要引入break语句了

switch中的break语句

  书接上段,这时我们就用到了break语句了。

在switch语句中的break具有直接跳出case窗口的作用,也就是不再进入后面的case窗口,直接跳出switch语句,所以对于此代码,只需要每个语句后加入一个break就能预防进入后续窗口

注:一定要注意,不是每个case语句后都要使用break,需要视情况而定,不能总是盲目的在每个case语句都加上break。

default子句

  但是这时有同学想到,如果上述所有case的情况都不与结果相符,但是此时程序并不会被终止,因为这种情况程序并不会认为是错误的,而我们又不想忽略这些值,这时就需要我们人为干预了。

  关于default的使用:写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。

这时我们就可以对上述代码进行补充,使程序更加完善,如下:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	    case 1:
			printf("星期一\n");
		case 2:
			printf("星期二\n");
		case 3:
			printf("星期三\n");
		case 4:
			printf("星期四\n");
		case 5:
			printf("星期五\n");
		case 6:
			printf("星期六\n");
		case 7:
			printf("星期天\n");
		default:
			printf("不存在这个星期\n");
	}
	return 0;
}

注:这里的default和case并不要求顺序,但是我们习惯将default放在case之后

OK,到这里分支语句就讲的差不多了,我们接下来讲一下循环语句吧。

循环语句

while循环

  while语句其实使用方法一样,只不过if是满足表达式则执行语句,而while是满足表达式则将语句进行循环直到不满足表达式为止。

while的基本结构:

while(表达式)
 循环语句;

 首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

  while循环虽然用的比较多,但是比较简单,所以我们就简单练习一下,不说多余废话了。

 

 题目解析 :

1. 要想得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4

2. 要想去掉n的最低位,找出倒数第二位,则使用 n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。

3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。

代码如下:

#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 while(n)
 {
 printf("%d ", n%10);
 n /= 10;
 }
 return 0;
}

 for循环

  好,这里我们上的循环就是三大循环里用的最多的了,for的语法形式如下:

for(表达式1; 表达式2; 表达式3)
 循环语句;

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

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

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

下面是for循环的执行流程:

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

  我想到这里好多同学还是看不懂,那么咱们上一下实践,大家应该就能看懂了:

我们现在在屏幕上打印1~10:

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

运行结果如下:

 接下来我们将for循环和while循环进行对比:

 

一定程度上,while和for是可以相互转换的!

可以发现在 while 循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for 循环的风格更胜一筹; for 循环使用的频率也最高。后面学习数据结构的时间复杂度时for循环也是比较重要的!

do-while循环

  OK,这里我们就讲到了最后一个要讲的循环do-while,这个循环是3个循环里用的最少的一个,它的语法如下:

do
 循环语句;
while(表达式);

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

执行流程如下:

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

  还是在屏幕上打印1~10,用do-while循环代码如下:

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

break和continue

  在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。

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

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

  其实break对于while和for其实作用相同,都是中止break外的第一层循环,所以我们只拿while循环举个例子:

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

执行结果如下:

 打印了1,2,3,4后,当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。所以 break 的作用就是永久的终止循环,只要 break 被执行, break 外的第一层循环就终止了。 那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。

  但是continue在for和while中就有所不同了,我们在for循环中运用一下continue,让大家对其作用有所了解:

#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 来实现。

那么在for和while循环中continue具体有什么区别呢?

其实区别不算很大,我来给大家对比一下:

  while循环中,如果它跳过了本次循环中的continue后的代码,那么这次循环中 i 就不会再++,导致你执行代码后会陷入死循环,也就是你运行出1 2 3 4后光标一直会闪烁,因为i不加1,所以i一直卡在5,陷入死循环;

  而for循环中,你会发现,就算跳过这次循环,由于for循环里的调整式位于for以后,所以i仍会++,不会陷入死循环。

  我想,讲到这里,大家应该就看懂了,下面,我们来介绍一下转向语句中的goto语句。

转向语句

goto语句

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

例如:

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

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

  goto语句语法如下:

for(...)
{
    for(...)
    {
         for(...)
         {
             if(disaster)
                  goto error;
         }
    }

error:
 //...

  本来 for 循环想提前退出得使用 break ,⼀个 break 只能跳出一层 for 循环,如果3层循环嵌套就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。

  偷偷告诉大家,goto语句还可以用来整蛊欧(●ˇ∀ˇ●)

由于篇幅过长,这里就直接给代码了,同志们下课自己去玩吧

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 120");
	while (1)
	{
		printf("您的电脑将在分钟后关机,请输入密码取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "伦伦是猪") == 0)
		{
			system("shutdown -a");
			break;
		}

	}
	return 0;
}

循环分支语句到这里结束啦,看过的小伙伴赞一下啦🔅

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第2关是通过while循环来学习分支结构的入门。while循环是一种根据条件重复执行的循环结构,当条件满足时,循环体中的代码会被执行,然后再检查条件是否满足,满足则再执行,不满足则跳出循环。 在这一关中,我们可以使用while循环结合if语句来模拟一个简单的猜数字游戏。首先,我们随机生成一个1到100之间的整数作为答案。然后,通过输入一个猜测数字,判断是否猜中了答案。 首先,我们可以设定一个初始值表示是否猜中答案的状态为False。然后,使用while循环进行猜数字的过程。在循环中,需要输入一个数字作为猜测,然后通过if语句判断这个猜测是否等于答案。 如果猜测正确,将状态设置为True,并打印猜中的提示信息。如果猜测错误,根据猜测数字与答案的大小关系打印相应的提示信息。然后继续进行下一次循环,直到猜中答案。 在每次循环之后要记得更新循环条件,即判断是否已经猜中答案。如果猜中了,条件为True,循环将停止;如果没有猜中,条件为False,循环将继续。 通过这样的循环结构,可以让我们不断地进行猜数字的过程,直到猜中为止。这是分支结构在循环中的一个实际应用。 总结起来,第2关的while循环分支入门主要是通过猜数字游戏的例子,让我们学习如何使用while循环来进行条件判断和分支执行。这是程序设计中非常基础也非常重要的一个知识点,掌握好这个知识对于以后的编程学习将非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值