C语言之for while语句详解

C语言之for while语句详解

文章目录

  • C语言之for while语句详解
    • 简介
    • 1 while语句
      • 1.1while语句的格式
      • 1.2 while语句的实践
    • 2 for
      • 2.1 for语句格式
      • 2.2 for循环的实践
    • 3 do while
      • 3.1 do while语句格式
      • 3.2 do while循环的实践
    • 3 循环中break和continue
      • 3.1 while语句中的break和continue
      • 3.1.1break和continue举例
      • 3.2 for语句中的break和continue
      • 3.2.1break和continue举例
    • 4 循环的嵌套
    • 5 go to语句

简介

在上一篇博客中,我们了解了基本的两种分支结构,在这篇博客中我将介绍一下循环结构,包括whilefordo while

1 while语句

1.1while语句的格式

while语句的格式如下:

1 while(表达式)
2      语句;

while语句流程图如下:
在这里插入图片描述
  ⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

1.2 while语句的实践

练习1:在屏幕上打印1~100的数字

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

练习2:输入一个正整数,逆序打印这个数
例如:输入 3541 输出 1453
思路:

  1. 一个数%上10,即可得到这个数的最后一个位数。如1234%10=4。
  2. 一个数/上10,即可将这个数的最后一位去掉。
    即可打印一下最低位然后删除最低位 重复1 2步直到这个数为0即可实现逆序打印

代码实现如下:

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	while (num)
	{
		printf("%d ", num % 10);//打印最低位的数
		num /= 10;//删除最低位是数
	}
	return 0;
}

2 for

2.1 for语句格式

1 for(表达式1;表达式2;表达式3)
2       语句;
//表达式1为循环的初始化
//表达式2为循环的判断
//表达式3为循环的调整

for语句流程图如下:
在这里插入图片描述
  ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

2.2 for循环的实践

练习1:在屏幕上打印1~100的数字

代码如下:

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

for和while之间的异同点
  for和while语句都有初始化,判断和循环这三个部分,但for语句的三个部分更为紧凑,便于后期的代码维护,若while语句中的代码量较大的时候,这三个部分会显得十分分散,不利于代码的可读。

3 do while

3.1 do while语句格式

1 do
2     语句;
3 while(表达式);

  forwhile语句都是先判断表达式,若表达式不为真,则不继续执行。而do while语句,无论表达式为真假都会执行一次,执行完一次后再判断表达式真假,是否重复执行。
do while流程图如下:
在这里插入图片描述
  在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

3.2 do while循环的实践

练习1:在屏幕上打印1~100的数字

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

练习2:输入一个数,判断这是个几位数
例如:输入 5672 输出 4
思路:
上面提到一个数/10可以删除最低位,那么在删除的同时用个标志记录下,删除一次,标志加一

代码实现如下:

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

3 循环中break和continue

在循环语句中,如果我达到了某种目标,我想让代码停下来就可以使用breakwhile
break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所
差异的。

3.1 while语句中的break和continue

3.1.1break和continue举例

在这里插入图片描述
  在上述代码中,打印1~10的代码中,我想让他打印到4就停止,我就可以在循环中加入一个判断,当num ==5的时候,代码就停止,利用break永久的终止循环。

在这里插入图片描述
  在上述代码中出现了死循环,这是因为当num == 5时,continue终止了本次循环,同时跳过了num++代码的调整部分,使得每次num回到判断部分num始终小于10,再次下去又continue跳过了调整部分,使得代码出现死循环。因此我们应该合理的使用continue。

do while语句中的break和continueh使用方法一样,故不作介绍

3.2 for语句中的break和continue

3.2.1break和continue举例

在这里插入图片描述
在for语句中,break用法与while语句一样,当num == 5时,永久终止本次循环,所以不会打印4之后的值。

在这里插入图片描述

在本次代码中,与while语句不同的是,continue只是跳过了num == 5时,continue后边的代码,故不会打印5,for语句的调整部分在上边,所以调整部分不会被跳过,故代码可以继续执行,不会进入死循环。

4 循环的嵌套

练习:打印100~200之间的素数
思路:

  1. 素数又叫质数(prime number),有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
  2. 先产生100~200之间的素
  3. 要想知道n的素数,要用2~n-1的数试除n,也就需要生成
  4. 如果2~n-1之间有数字能整除n,则n不是素数,如果都不能整除,则n是素数
    代码实现:
#include <stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++) //生成100~200的数
	{
		int j = 0;
		int flag = 1; //设置一个标志 1代表素数,0代表非素数
		for (j = 2; j < i; j++) //生成2~i-1的数
		{
			if (i % j == 0) //判断是否为素数
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);//打印素数
			count++; //打印一次+1
		}
	}
	printf("\n%d", count); //100~200之间的素数
	return 0;
}

上面介绍了一种打印素数的方法,感兴趣的可以去打印素数的三种方法看看其他写法

5 go to语句

 C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

应用:

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

  注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/162854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段&#xff0c;对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中&#xff0c;可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…

君正X2100 读取CHIP_ID

每个处理器会有一个唯一的ID&#xff0c;这个ID可用做产品序列号&#xff0c;或其它。 X21000的CHIP_ID存放于芯片内部的efuse中&#xff0c;efuse是一次性可可编程存储器&#xff0c;初始值为全0&#xff0c;只能将0改为1&#xff0c;不能将1改为0。芯片出厂前会被写入一些信…

WPF中行为与触发器的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 一、行为 (Behaviors) behaviors的简单测试 <Window x:Class"Test_05.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…

STL简介

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解c中的STL库 > 毒鸡汤&#xff1a;路难行&a…

22款奔驰S450L升级流星雨大灯 感受最高配的数字大灯

“流星雨”数字大灯&#xff0c;极具辨识度&#xff0c;通过260万像素的数字微镜技术&#xff0c;实现“流星雨”仪式感与高度精确的光束分布&#xff1b;在远光灯模式下&#xff0c;光束精准度更达之前84颗LED照明的100倍&#xff0c;更新增坡道照明功能&#xff0c;可根据导航…

UE 程序化网格 计算横截面 面积

首先在构造函数内加上程序化网格&#xff0c;然后复制网格体到程序化网格组件上&#xff0c;将Static Mesh&#xff08;类型StaticMeshActor&#xff09;的静态网格体组件给到程序化网格体上 然后把StaticMesh&#xff08;类型为StaticMeshActor&#xff09;Instance暴漏出去 …

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列6 (承接系列5)

文章目录 一、原始代码---随机采样和评估模型二、详细解释分析每一行代码 一、原始代码—随机采样和评估模型 def randomSample(self,D_set): #从D_set随机取支持集和查询集&#xff08;20个类中的其中一个类&#xff0c;shape为[20,105,105]&#xff09;index_list list(ran…

复旦大学EMBA深度链接深圳科创产业:聚焦智联,产融未来

作为科创成就的经济大区&#xff0c;深圳南山区通过跨界创新研发生态链条&#xff0c;领跑科创产业创新&#xff0c;以187.5平方公里的面积&#xff0c;雄踞着204家上市公司&#xff0c;地均生产总值产出达到了40.7亿元&#xff0c;相当于每平方公里出产超过1家上市公司&#x…

Java项目实战《苍穹外卖》 二、项目搭建

当我痛苦地站在你的面前 你不能说我一无所有 你不能说我两手空空 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目&#xff0c;作为业余练手用&#xff0c;需要源码或者课程的可以找我&#xff0c;无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战《苍穹外…

B-2:Linux系统渗透提权

B-2:Linux系统渗透提权 服务器场景:Server2204(关闭链接) 用户名:hacker 密码:123456 1.使用渗透机对服务器信息收集,并将服务器中SSH服务端口号作为flag提交; 使用nmap扫描,发现ssh服务端口为2283 Flag:2283 2.使用渗透机对服务器信息收集,并将服务器中…

复合、委托、继承

1. 单例模式 静态实例对象在getInstance函数中定义&#xff0c;这样只有在调用函数时才会生成对象 2. 复合 1. 类中封装另一个类某些功能&#xff1b; 2. 构造、析构的调用过程 指明了复合中如何调用被包含类的构造函数&#xff0c;可以直接写在初始化列表位置&#xff1b; 3.…

剑指JUC原理-19.线程安全集合

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

Spring Cloud -熔断器Hystrix

为什么需要服务降级或熔断 微服务架构与传统架构的一个显著区别就是服务变多了&#xff0c;任何一个服务调用失败、或者服务不可用&#xff0c;都会对整个应用造成影响。比如前段时间阿里云整体业务不可用&#xff0c;有多方猜测就是阿里云的某一个关键服务不可用导致的。 服…

火星探测器背后的人工智能:从原理到实战的强化学习

目录 一、引言二、强化学习基础强化学习的基本概念主要算法概述Q-Learning 示例代码 环境建模与奖励设计 三、火星探测器任务分析任务需求与挑战探测器环境建模目标设定与奖励机制层层递进的关系 四、强化学习模型设计模型架构概述DQN架构核心组件&#xff1a; 状态、动作与奖励…

RT-Thread基于STM32H743的网络通信调试

使用STM32H743开发网络通信&#xff0c;本以为会很简单&#xff0c;实际却遇到好多问题&#xff0c;记录一下&#xff0c;以备后续查看。 1.新建工程&#xff0c;系统版本选择的是4.1.1&#xff0c;芯片型号是STM32H743IIK6. 2.修改系统时钟&#xff0c;使用外部25MHz晶振&…

C++类与对象(1)—初步认识

目录 一、面向过程和面向对象 二、类 1、定义 2、类的两种定义方式 3、访问限定符 4、命名规范化 5、类的实例化 6、计算类对象的大小 7、存储方式 三、this指针 1、定义 2、存储位置 3、辨析 四、封装好处 一、面向过程和面向对象 C语言是面向过程的&#xf…

记录联系ThinkPad T490扬声器无声音但插耳机有声音的解决办法

型号&#xff1a;联想ThinkPad T490&#xff0c;系统Win10 64位。 现象&#xff1a;扬声器无声音&#xff0c;插耳机有声音。且右下角小喇叭正常&#xff0c;设备管理器中驱动显示一切也都正常&#xff08;无黄色小叹号&#xff09;。 解决办法&#xff1a; 尝试了各种方法&a…

基础课7——数据预处理

在智能客服系统中&#xff0c;数据预处理是进行自然语言处理&#xff08;NLP&#xff09;的关键步骤之一。它是对用户输入的文本数据进行分析、处理和转换的过程&#xff0c;目的是将原始文本数据转化为计算机可理解的语言&#xff0c;为后续的智能回答提供支持。 1.什么是数据…

数据结构-插入排序+希尔排序+选择排序

目录 1.插入排序 插入排序的时间复杂度&#xff1a; 2.希尔排序 希尔排序的时间复杂度&#xff1a; 3.选择排序 选择排序的时间复杂度&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的…

基于SpringBoot+MyBatis-Plus的教务管理系统

基于SpringBootMyBatis-Plus的教务管理系统 教务管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 教务管理系统 欢迎访问此博客&#xff0c;是否为自己的毕业设计而担忧呢&#xff1f;是否感觉自己的时间不够做毕业设计呢&#xff1f;那你不妨看一下下面的文章&a…