前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C语言初阶——循环语句(while,for,do while)

C语言初阶——循环语句(while,for,do while)

作者头像
YIN_尹
发布于 2024-01-23 07:31:06
发布于 2024-01-23 07:31:06
98700
代码可运行
举报
文章被收录于专栏:YIN_尹的博客YIN_尹的博客
运行总次数:0
代码可运行
生活中有些事情需要我们重复、反复的去做,这时我们就可以说我们循环的去做这件事。

要学习循环语句,首先我们介绍一下程序设计语言中的循环是什么意思: 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,常见的有按照次数循环和按照条件循环。

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,取决于循环的终止条件。循环语句是由循环体及循环的终止条件两部分组成的。 那么接下来我们就来介绍一下C语言中的3中循环:

一.while循环

我们已经掌握了,if语句: if(条件) 语句; 当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。

1.语法介绍和基本使用

首先我们来学习while循环,那什么是while循环呢? 我们知道,while有当…的时候的意思,所以while循环就是当满足一个特定条件是执行循环体,一旦不满足,就结束循环。 while的语法结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//while 语法结构
while (表达式)
	循环语句;

举个例子,我们想要在屏幕上打印数字1——10,就可以使用while循环:

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

当i的值加到10 的时候,满足i<=10,再执行一次循环,i再加1,变为11,再进行判断,不满足i<=10,循环结束

上面的代码已经帮我了解了 while 语句的基本语法,那我们再继续向下学习:

2. while循环中的break的作用

break有终止,中断,逃脱的意思,那么在循环中break的作用是啥呢? 我们通过一段代码来学习break的作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

大家思考一下,输出的结果是啥:

答案是是的!!!,循环中遇到break循环就直接结束了。

break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。

3.while循环中continue的作用

介绍了break在在while中的作用,那我们再来介绍一下continue再while循环中的作用: 还是通过几个实例来解释,上代码: 先看第一个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//continue 代码实例1
#include <stdio.h>
int main()
{
 	int i = 1;
 	while(i<=10)
 {
 	if(i == 5)
 	continue;
 	printf("%d ", i);
 	i = i+1;
 }
 return 0; 
 }

思考一下,结果是什么?

为什么出现这样的情况呢?别急,我们再来看一个代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//continue 代码实例2
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		i = i + 1;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

大家先看一下这个代码与上一个有啥区别,再思考结果是啥: 我们发现,这段代码与上一个相比,只是把i=i+1这句代码放在了if语句前面,那结果会有什么不同呢?

是这样吗?确实是的。 现在我们就可以很好的解释上一个代码的结果了:

总结: continue在while循环中的作用就是: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断

二.for循环

1.语法介绍和基本使用

我们已经知道了while循环,但是我们为什么还要一个for循环呢? 首先来看看for循环的语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(表达式1; 表达式2; 表达式3)
 循环语句;

看一个实际的问题: 使用for循环 在屏幕上打印1-10的数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
 int i = 0;
 //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
 for(i=1; i<=10; i++)
 {
 printf("%d ", i);
 }
 return 0; }

来看看结果是啥:

相信现在大家对于for循环的基本使用已经了解了。

2.for循环和while循环的对比

我们使用for循环和while循环实现一个相同的功能,进行一下对比: 实现相同的功能,使用while

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int i = 0;
i=1;//初始化部分
while(i<=10)//判断部分
{
 printf("hehe\n");
 i = i+1;//调整部分
}

实现相同的功能,使用for

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(i=1; i<=10; i++) {
 printf("hehe\n");
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。 所以,for循环的风格更胜一筹;for循环使用的频率也最高

3. break和continue在for循环中的作用

在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 代码1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

代码2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//代码2
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0; }

好的一点时我们在for循环中这样写不会像while那样出现死循环。因为continue不能跳过调整部分 所以在for循环中,break和Continue的作用也是如此: 1.遇到break,就停止后期的所有的循环,直接终止循环,执行循环后面的部分。 2.遇到continue,直接跳到调整部分,然后进行条件判断。

4.for语句的循环控制变量

这里给大家提一些建议: 1.不可在for 循环体内修改循环变量,防止 for 循环失去控制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		i = 3;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。(只是建议,这样写不合适的话也不必强求)

5. 一些for循环的变种

for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题 1. 举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	//代码1
	for (;;)
	{
		printf("hehe\n");
	}
}

死循环了,为啥呢?

2.在看一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	//代码2
	int i = 0;
	int j = 0;
	int count = 0;
	//这里打印多少个hehe?
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			count++;
			printf("hehe\n");
		}
	}
	printf("count=%d\n", count);
}

打印多少次hehe呢? 这个比较容易,打印100次。

那还是这段代码,如果省略掉初始化部分,这里打印多少个hehe?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for(; i<10; i++)
   {
        for(; j<10; j++)
       {
 printf("hehe\n");
       }
   }

去掉初始化部分后,值打印10次:

3.for循环中的循环控制变量可以有多个 举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
	//代码4-使用多个变量控制循环
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;	
}

好了,for循环就介绍完了。

三.do while循环

接下来介绍do while循环

1.语法介绍和基本使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
do
	循环语句;
while (表达式);

特点: 循环至少执行一次,使用的场景有限,所以不是经常使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 printf("%d ", i);
        i=i+1;
 }while(i<=10);
 return 0; }
2. break和continue在do while循环中的作用

break和continue在do while循环中的作用也和在while循环中一样。 演示一下: 代码1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
        if(5 == i)
            break;
 printf("%d ", i);
        i=i+1;
 }while(i<=10);
    
 return 0; }

代码2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int main()
{
 int i = 1;
    
 do
 {
        if(5 == i)
            continue;
 printf("%d ", i);
        i=i+1;
 }while(i<=10);
    
 return 0; }

以上就是对C语言中循环语句的介绍了。 欢迎大家指正!!!

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战
这里推荐一篇实用的文章:《Java 读取寄存器数据的实现与应用》,作者:【喵手】。
小马哥学JAVA
2024/11/21
1960
jdk动态代理和cglib动态代理详解
如上图,代理模式可分为动态代理和静态代理,我们比较常用的有动态代理中的jdk动态代理和Cglib代理,像spring框架、hibernate框架中都采用了JDK动态代理,下面将结合代码阐述两种代理模式的使用与区别。
全栈程序员站长
2022/08/29
7090
jdk动态代理和cglib动态代理详解
jdk动态代理和cglb动态代理
静态代理是在编译时就确定了代理类的代码,在程序运行前就已经存在了代理类的class文件。代理类与委托类的关系在编译时就已经确定,因此被称为静态代理。在静态代理中,代理类需要实现与委托类相同的接口或者继承委托类的父类,以便能够对委托类进行代理操作。
一个风轻云淡
2023/10/15
2210
jdk动态代理和cglb动态代理
Java两种动态代理JDK动态代理和CGLIB动态代理[通俗易懂]
代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。为了对外开放协议,B往往实现了一个接口,A也会去实现接口。但是B是“真正”实现类,A则比较“虚”,他借用了B的方法去实现接口的方法。A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情。Spring AOP就是使用了动态代理完成了代码的动态“织入”。
全栈程序员站长
2022/07/02
3610
Java两种动态代理JDK动态代理和CGLIB动态代理[通俗易懂]
cglib实现动态代理_cglib和jdk动态代理
  说到动态代理,开发者们第一时间想到的就是JDK动态代理和cglib动态代理。了解Spring的同学应该知道,Spring AOP功能的底层实现,就是使用的这两种动态代理。
全栈程序员站长
2022/11/03
3280
JDK动态代理、Cglib动态代理及Spring AOP
Java中的JDK动态代理是一种通过反射机制生成代理对象的技术,使得我们能够在运行时动态地创建某个接口的代理类,而无需手动编写实现类。JDK动态代理通常用于横切关注点(如日志、事务管理、安全性等)在方法调用前后进行处理,而不需要修改目标类的源代码。
意疏
2024/12/31
2230
JDK动态代理、Cglib动态代理及Spring AOP
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
在Java开发中,动态代理是一种强大的技术,它允许在运行时创建代理对象以添加行为,而无需修改原始类的代码。JDK动态代理和Cglib是两种主要的动态代理实现方式。本文将深入探讨它们的实现原理、区别、劣势以及性能对比。
AI码师
2024/05/29
3K0
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
jdk静态代理,jdk动态代理,cglib动态代理
代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道。如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法。如果公司卖多少钱,代理商也卖多少钱,那么代理商就赚不了钱。所以代理商在调用公司的卖方法后,加上自己的利润然后再把产品卖给客户。而客户部直接跟公司打交道,或者客户根本不知道公司的存在,然而客户最终却买到了产品。
互扯程序
2019/07/01
4910
jdk静态代理,jdk动态代理,cglib动态代理
Spring的两种动态代理Jdk与Cglib
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
全栈程序员站长
2022/08/04
7310
Spring的两种动态代理Jdk与Cglib
Java代理相关:JDK动态代理、CGLIB动态代理
代理(Proxy)是一种设计模式,提供了对目标对象另外的一种访问方式。可以在目标对象实现的基础上,增加额外的功能操作,即扩展目标对象的功能。
lpe234
2020/07/27
4140
Java-CGLib动态代理
我们知道使用JDK创建代理时只能为接口创建代理实例。我们从Proxy的newProxyInstance方法中可以看出
小小工匠
2021/08/16
2510
JDK动态代理和CGLIB字节码增强
Java 在 java.lang.reflect 包中有自己的代理支持,该类(Proxy.java)用于动态生成代理类,只需传入目标接口、目标接口的类加载器以及 InvocationHandler 便可为目标接口生成代理类及代理对象。我们称这个Java技术为:动态代理
JMCui
2019/12/04
7820
探索Java动态代理的奥秘:JDK vs CGLIB
动态代理是一种在 运行时动态生成代理类 的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的 无侵入式增强(如日志、事务、权限控制等)。
用户7954602
2025/02/04
1330
探索Java动态代理的奥秘:JDK vs CGLIB
cglib动态代理实现原理_jdk cglib 动态代理 区别
我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?
全栈程序员站长
2022/11/01
1K0
【面试系列】JDK动态代理和CGLIB静态代理 - Java技术债务
是否在面试过程中经常被问到Spring的代理的问题:比如说几种代理方式?两种代理方式的区别?或者问为什么JDK动态代理只能代理接口?
Java技术债务
2024/06/21
1140
【面试系列】JDK动态代理和CGLIB静态代理 - Java技术债务
你必须会的 JDK 动态代理和 CGLIB 动态代理
我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。
ytao
2020/06/04
5260
你必须会的 JDK 动态代理和 CGLIB 动态代理
Java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
java干货
2021/02/19
1650
从根上理解Cglib与JDK动态代理
最近在阅读到了Spring源码对于两种动态代理使用在不同场景下的使用,两种方式各有利弊写一篇文加深自己的认识。文中对于源码的涉及较少,更多的是作者自己的理解和举例,然后通过部分源码验证。
科技新语
2023/03/07
4350
Java动态代理模式jdk和cglib
jdk动态代理模式里面有个拦截器的概念,在jdk中,只要实现了InvocationHandler接口的类就是一个拦截器类 还使用了些反射的相关概念。 拦截器的概念不了解没关系,假如写了个请求到action,经过拦截器,然后才会到action。然后继续有之后的操作。 拦截器就像一个过滤网,一层层的过滤,只要满足一定条件,才能继续向后执行。 拦截器的作用:控制目标对象的目标方法的执行。
JavaEdge
2021/02/22
1590
静态代理与动态代理
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/52025353
DannyHoo
2018/09/13
3450
静态代理与动态代理
推荐阅读
相关推荐
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 生活中有些事情需要我们重复、反复的去做,这时我们就可以说我们循环的去做这件事。
  • 一.while循环
    • 1.语法介绍和基本使用
    • 2. while循环中的break的作用
    • 3.while循环中continue的作用
  • 二.for循环
    • 1.语法介绍和基本使用
    • 2.for循环和while循环的对比
    • 3. break和continue在for循环中的作用
    • 4.for语句的循环控制变量
    • 5. 一些for循环的变种
  • 三.do while循环
    • 1.语法介绍和基本使用
    • 2. break和continue在do while循环中的作用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档