首页 > 其他分享 >C语言中的基本结构3——循环结构篇

C语言中的基本结构3——循环结构篇

时间:2024-03-31 22:29:24浏览次数:20  
标签:语句 return goto C语言 break while 循环 结构

C语言中的基本结构3——循环结构篇

一、前言

前两篇博客我们结束了对于顺序结构和分支结构的介绍,本篇我们将学习C语言中最后一个基本结构——循环。

二、何为循环结构

在不知道循环结构前如果需要打印1~10的数字,我们得从1 printf 到10,1~10的任务量尚且可以对付,那如果需要从1打印到1000、10000呢?使用 printf 的办法就显得捉襟见肘了,键盘的Ctrl键、C键、V键恐怕都得摁出火花来。为了解决这一难题,C语言向我们提供了三种能够实现循环的语句。

1.while语句

2.do···while语句

3.for语句

在学习之前,我们需要知道程序能顺利完成循环要求的三个条件,即:循环条件的初始化、循环的判断、循环条件的调整。
当程序运行进入循环语句后,除非不再满足循环的判断条件,或者通过特殊方式(例如return、break)提前跳出循环,否则将会陷入死循环中,一直不停地重复执行循环语句的内容。

了解到这些基本要求后下面开始我们的学习。

三、三种循环语句

1.while

while语句的基本结构为

    //1.初始化数据
	while (/*2.对条件做出判断*/)
	{
		//执行内容
		//3.对条件做出调整
	}

以打印1~10为例在这里插入图片描述
我们首先将n的值初始化为1,在while语句先进行判断,符合条件就执行打印的操作,将第一次的 n 表示的值打印完成后 n 自增1,当 n 自增到10后仍满足循环的条件,再次打印并自增到11,此时再进行判断就不再满足<=10的条件了,于是程序离开while循环。

如果少了对条件的调整会怎样?
在这里插入图片描述能够很清楚地看到:当我们将 n++注释掉后再次运行,控制台内不停地循环打印 n 的初始值1,它既不会打印其他的数字,也不会主动停下,无止息的只有控制台内跳动着的1,这时我们将控制台关闭了就好。如果以后遇到自己的代码运行起来后出现类似的情况,就可以考虑是不是循环变量的调整出现了问题并做出修改。

小tip:单一的 while()语句括号后不需要加分号,加了分号编译系统就认为单独的一个 while()是一条语句,那么就会反复地执行判断,这同样也是死循环。

2.do···while

do···while 与 while 非常类似,其区别在于对于第一次进入循环是否做出判断。while 在每一次的执行时都会进行条件的判断,而 do while 则不管三七二十一,先执行一次再说。
在这里插入图片描述
在这里插入图片描述

3.for

for语句可以说是while语句的浓缩版了,它集初始化、条件判断、条件调整为一体。三个条件由两个分号隔开。

for (/*初始化; 条件判断; 条件调整*/)
{
	//执行内容
}

在这里插入图片描述
for语句同样可以完成while的功能。
在这里插入图片描述

四、循环的嵌套

循环语句是可以实现嵌套的。

以打印乘法表为例:
最外层的循环以 i 控制,当第一次进入最外层循环时 i=1,此时内层循环的判断条件为 j<=1,内层循环的次数也只有一次,因此在控制台的第一行打印1*1=1后便离开内层循环,再次回到外层循环,执行换行的打印。
以此类推,当 i 逐步变化到 9 时,内层循环的判断条件也变成 j<=9,所以在最后一行 i 反复使用了9次,而 j 的值从1变到了9。(为了让打印的结果更符合我们的习惯,所以我将内层循环%d的显示顺序变成了 j,i。%-2d为对齐方式,意思是向左对齐2个空格)
在这里插入图片描述

五、如何根据需要使用适合的循环语句?

一般而言,只要情况合适,三种循环结构都是可以使用的。但是在处理不知道循环次数的情况下,while比for更加合适。比如在很多oj题中,我们事先并不知道究竟有多少组数据的输入,对于循环次数的限制也无从谈起,因此使用下面的while语句进行判断更加合适。

while("scanf(内容) != EOF")

当输入内容符合条件时就可以一直进行循环。

六、循环的辅助:continue和break

通常当程序进入循环后在下一次循环前会执行完循环体中的所有语句。而continue和break可以让程序提前进入下一轮循环或者是直接离开循环

1.continue

continue的功能是:当程序运行到continue时不再执行本次循环后面的代码,直接开始下一轮的循环。

例如我们打印1~10时附加条件

		if (i == 8)
		{
			continue;
		}

观察运行结果,除了8以外所有的数字都显示了出来
在这里插入图片描述

2.break

break的功能是:当程序运行到break时,直接跳出break所在的循环。

我们将上面代码的附加条件修改为

		if (i == 8)
		{
			break;
		}	

观察运行结果,当打印完数字7后 i 增加到8,程序执行了break后所有的数字都不再打印
在这里插入图片描述

3.其余的方法:goto,return离开循环

使用goto和return同样也可以离开循环。

1.goto

其中因为goto的使用会破坏程序的顺序结构而饱受诟病。其结构为:

goto 名称;
······
名称:

只要程序走到了goto语句,那么它就会寻找你要让它去的地方,从那个地方再开始执行。

体会goto设定的不同位置带来的不同结果。
在这里插入图片描述

在这里插入图片描述
需要注意,goto语句在使用时会造成顺序结构的颠倒,有死循环的危机,因此在编程时如非必要,尽量不要使用goto语句
在这里插入图片描述

2.return

看到出现return,有不少朋友会感到惊奇:return 不是应该只有一个 return 0 吗,一个程序中难道可以同时存在多个return?!答案是是的,一个程序中允许多个return的出现。
return 的功能比break更加强大,它不仅能结束循环,更是能直接结束程序的运行。
在这里插入图片描述
在执行了return语句后,程序就直接结束了,这也是为什么我们编写的所有C代码必须有return 0的原因,如果没有return 0,那么程序就不知道该在何时结束。

七、结束语

C语言的三个基本结构大致介绍到这里,之后我们会对前面涉及到但没有讲的运算符、条件表达式等知识点进行学习。休息一下,马上回来。

在这里插入图片描述

标签:语句,return,goto,C语言,break,while,循环,结构
From: https://blog.csdn.net/2302_76585709/article/details/137202708

相关文章

  • 学习笔记之嵌入式八股文(C语言)
    文章目录前言一、指针和变量二、关键字1.Volatile2.const3.static4.extern三、结构体1.结构体基本内容2.通过指针对结构体赋值3.结构体指针四、链表1.链表的基本内容2.链表的插入和删除五、堆、栈和队列1.栈(Stack)2.堆(Heap)3.队列前言笔者在学习时发......
  • InnoDB 内存结构
    参考资料https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.htmlhttps://relph1119.github.io/mysql-learning-notes/#/mysql/InnoDB内存结构内存结构如下图查看InnoDB运行状态SHOWENGINEINNODBSTATUS通过上述命令查看InnoDB运行时的状态信息BufferPool......
  • 修仙之条件语句与循环语句
    修仙之条件语句与循环语句一、条件语句1.算术运算符,逻辑运算符a.算术运算符b.逻辑运算符2.if语句3.switch语句二、循环语句1.while语句2.dowhile语句3.for语句总结一、条件语句1.算术运算符,逻辑运算符a.算术运算符在写代码时候,一定会涉及到计算。C语言......
  • Ray Tracking 加速结构
    基本原理中使用AABB作为判断光线和物体相交的加速。在AABB内部如何快速判断判断光线和物体的相交情况呢?主要分为种方法:UniformgridsSpatialpartitions注意这里使用的加速结构是在光线追踪之前做的准备工作。Grids分格子,然后记住每个格子里有哪些物体。碰到格子的话,再和......
  • C语言——常用库函数的使用及模拟实现
    C语言编译系统为使用者提供了很多的预定义库函数。用户在编写程序时,可以直接调用这些库函数。这里选择了一些常用的库函数,简单介绍各个函数的使用方法:字符串函数字符串函数函数分为长度不受限制的字符串函数,和长度受限制的字符串函数。长度不受限制的字符串函数包括strcpy函......
  • Java(3) ----- File类、IO流、基本软件结构
    File类:代表当前操作系统的文件对象。File类:建用来操作操作系统的文件对象的,删除文件,获取文件信息,创建文件(文件夹)广义来说操作系统认为文件包含(文件和文件夹)File类创建文件路径:相对路径:默认是直接相对到工程目录下寻找文件的;分隔符:File:separatorgetAbsolutePath()绝对......
  • 数据结构(六)——图的遍历
    6.3图的遍历6.3.1图的广度优先遍历⼴度优先遍历(Breadth-First-Search,BFS)要点:1.找到与⼀个顶点相邻的所有顶点2.标记哪些顶点被访问过3.需要⼀个辅助队FirstNeighbor(G,x):求图G中顶点x的第⼀个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。Next......
  • 数据结构 - 线性表 - 顺序表
    前言最近刚刚开始复习408数据结构,就想着把每个章节的代码部分汇总记录一下,写成一组文章,便于日后的复习和参考。本系列整体的框架和课后习题参考了王道的复习指导。在本系列的每篇文章中,我会先把该章节所对应数据结构的基础代码放上来,然后附上参考资料习题对应的题目代码。线性......
  • 快速排序(C语言实现)此文章由vivo的AI蓝心小v生成
    当然可以。快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔(C.A.R.Hoare)于1962年提出。它的基本思想是采用分治法(DivideandConquer)来进行排序。###快速排序的基本步骤:1.**选择基准值(Pivot)**:从待排序的序列中选取一个元素作为基准值。这个元素可以是序列的第一......
  • 对于结构体的见解(新手)
    不知道还能坚持多久,是没有自信了还是?不试试怎麽知道?希望自己以后可以挣好多好多钱,不要在为钱发愁!!!加油吧,少年!!!首先结构体是自定义类型的,它里面包含许多成员变量,  结构体内存对齐对齐规则 vs中的默认对齐数为8    修改默认对齐数 intb[1000]; 位段......