【C语言从不挂科到高绩点】06-流程控制语句-循环语句

news2024/9/21 8:04:22

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程

本套课程将会从0基础讲解C语言核心技术,适合人群:

  1. 大学中开设了C语言课程的同学
  2. 想要专升本或者考研的同学
  3. 想要考计算机等级证书的同学
  4. 想要从事C/C++/嵌入式开发的同学

----------------------------------------------------------------------

​分享不易,耗时耗力,喜欢的同学给个关注和赞吧

承接毕设指导,技术答疑,学习路上想要找私人教练的同学可以私信我

更多学习资料,公众号:墨轩学习网,B站:墨轩大楼

----------------------------------------------------------------------

另:有下图需求的同学可以私信我

5.3 循环结构-while 循环

5.3.1 while 循环的格式

while(条件表达式){

    代码块;
}

表示:如果条件表达式成立,结果为 1,就会一直重复执行代码块,直到条件表达式不成立为止。

5.3.2 while 循环的死循环

所谓的死循环:让程序一直重复执行,直到程序死亡为止

死循环的实现方式:让条件表达式恒成立

/**
	while循环的死循环
**/

#include <stdio.h>

int main(){
	// 在c语言中 1表示真  0表示假
	// while循环括号中写1,代表着这个条件恒为真,所以这个循环是死循环
	while(1){
		// 会重复执行这段代码.直到程序强制关闭(死亡为止)
		printf("O(∩_∩)O哈哈~你中毒了!\n");
	}

	return 0;	
}

程序进入到死循环之后,要结束程序,按键盘的 ctrl+c .

5.3.3while 循环指定循环次数

编写一个指定循环次数的循环,一般步骤:

  1. 定义个计数器,记录循环的次数
int n=1;
  1. 使用计数器,在 while 的括号构建条件语句
while(n<=10){  
    
}
    

n<=10 表示当n<=10就重复执行while代码块中的内容,n>10就结束循环

  1. 每循环一次,让计数器逐渐接近条件表达式的临界点
while(n<=10){
    n++;  // 每次循环,n的值会自加1
}

【参考代码】

/**
	创建指定循环次数的循环

**/	

#include <stdio.h>

int main(){

	// 循环10次的循环

	//1. 定义计数器,记录循环的次数
	int n=1;
	// 2. 使用计数器,在while括号中构建条件表达式
	while(n<=10){

		printf("第%d次循环\n",n);

		// 3. 每次循环之后,让计数器n逐渐接近条件表达式的临界点
		n++;
	}

	// 1. n=1  n<=10 成立 输出 第1次循环  执行n++  之后 n=2
	// 2. n=2  n<=10 成立 输出 第2次循环  执行n++  之后 n=3
	// 3. n=3  n<=10 成立 输出 第3次循环  执行n++  之后 n=4
	// ......
	// 10.n=10  n<=10 成立 输出 第10次循环  执行n++  之后 n=11
	// 11.n=11  n<=10 不成立,循环结束

	// 尝试从10 输出到 1

	int m = 10; // 循环起点从10开始
	while(m>=1){
		printf("%d\n", m);

		m --;
	}

	return 0;
}

5.3.4 提前结束循环

在开发中,如果需要达到某个条件时,提前结束循环,可以随时使用 break 关键字。

#include <stdio.h>


int main(){

	int n = 1;

	while(n<=10){

		printf("%d\n",n);
		// 当n为5的时候退出循环
		if(n==5){
			break;// 结束循环
		}
		n++;
	}

	return 0;
}

运行结果:

【练习案例】

/**
	提前结束循环
**/

#include <stdio.h>

int main(){
	printf("下去跑10圈......\n");

	// 定义跑10次的循环

	// 1. 定义计数器
	int n = 1;

	int answer = 0;// 接受学生的状态

	// 2. 在while循环的括号中构建条件表达式
	while(n<=10){
		printf("学生:教练我已经跑了%d圈\n",n );
		printf("学生的状态是否OK(1.ok 2.不ok):");
		scanf("%d",&answer);
		if(answer==1){
			printf("教练:继续跑!别偷懒!\n");
		}else{
			printf("教练:快打120\n");
			break;// 可以用来结束循环
			// 需要在什么位置上结束循环,就可以在这个位置上加break
		}

		n++;
	}

	return 0;
}

5.4 循环结构- for 循环

5.4.1 for 循环的格式

for(语句1;语句2;语句3){
    代码块
}
  1. 语句 1:通常用来定义循环的计数器
  2. 语句 2:通常用计数器侯建条件表达式
  3. 语句 3:通常让计数器逐渐接近条件的临界点

【案例代码】

/**

	for(语句1;语句2;语句3){
    	代码块
	}

	1. 语句 1:通常用来定义循环的计数器
	2. 语句 2:通常用计数器构建条件表达式
	3. 语句 3:通常让计数器逐渐接近条件的临界点

**/


#include <stdio.h>


int main(){

	// 用while循环构造一个循环10次的循环
	// 1. 定义循环计数器
	int n=1;
	//2.用计数器构建条件表达式
	while(n<=10){

		printf("%d\n", n);
		//3.让计数器逐渐接近条件的临界点
		n++;
	}

	printf("---------------------------------\n");

	for(int i=1;i<=10;i++){
		printf("%d\n", i);
	}

	return 0;
}

while 循环的弊端:控制循环的三个要素,分为了三行代码,放在三个不同的位置,代码结构比较松散,容易漏写或者错写。为了让代码更加紧凑,当需要写固定次数的循环时,推荐使用 for 循环。

  1. 当不确定循环一共要循环多少次的时候,推荐使用 while 循环(构建一个死循环,然后在特定的条件下结束循环)
  2. 当确定循环要循环多少次时,推荐使用 for 循环,因为 for 所有循环要素,都在一行,很直观能看出循环了多少次

5.4.2 for 循环的执行顺序

for(语句1;语句2;语句3){

代码块

}

执行顺序如下:

  1. 先执行语句 1
  2. 再执行语句 2 中的条件表达式,如果条件表达式成立,就执行代码块,不成立就结束循环
  3. 代码块执行完毕之后,再执行语句 3
  4. 循环重复 第 2 步和第 3 步

注意:在整个循环过程中,语句 1 只在循环开始之前执行一次,后面就不再执行了。

【参考案例】


/** for循环的执行顺序**/

#include <stdio.h>

int main(){

	int i=1;
	for (printf("1 "); i <=5; printf("2 \n"))
	{
		printf("3 ");

		i++;
	}


	return 0;
}

【运行结果】

5.5 结束循环的关键字

5.5.1 break 关键字

在 switch 语句和循环语句中都可以使用 break 关键字

  1. 当 break 出现在 switch 中,作用是终止某个 case 的值,并结束 switch 语句
  2. 当 break 出现在循环语句中,作用结束当前循环
  3. 当 break 出现在嵌套循环中,只能结束内层循环
  4. 如果一个程序中既有 switch 也有循环,那么如果这个 break 出现在 case 中,它结束的是 switch 语句,而不是循环。


#include <stdio.h>


int main(){


	while(1){

		printf("1.登录  2.注册  3.退出\n");
		printf("请输入:");
		int con = 0;
		scanf("%d",&con);

		switch(con){
			case 1: 
			    printf("进入登录功能\n");
			    break;
			case 2: 
			    printf("进入到注册功能\n");
			    break;
			case 3: 
			    printf("再见~~\n");
			    //break; // 此时break,只是结束了switch,并没有结束循环
			    return 0; // 直接将main函数给关闭掉
		}
	}

	return 0;
}

注意:当 switch 的 break 和 while 的 break 有冲突时,有两种方式可以解决:

  1. 将 switch 更换成 if 语句
  2. 在需要退出的时候,不使用 break,而是使用 return 0;直接将 main 函数关掉。

5.5.2 continue 关键字

在循环语句中如果需要立即结束本次循环,直接开启下一次循环,此时就用 continue 关键字。

【案例代码】

/**
	continue 关键字

**/
#include <stdio.h>

int main(){
	for (int i = 1; i <= 10; ++i)
	{
		if(i==5){
			//break;
			continue;  // 结束本次循环,直接开启下一次循环
			// 本次循环中,continue后面的代码将不会执行
		}
		// 当i=5的时候,就会遇到continue,就会结束本次循环
		// 本次循环中continue后面的代码就不会再执行
		printf("第%d次循环\n", i);
		printf("O(∩_∩)O哈哈~\n");
		printf("┭┮﹏┭┮呜呜~\n");
		printf("-------------\n");
	}

	return 0;
}

5.5.3 goto 关键字

goto 看成保留关键字,知道有这个东西,但是开发中尽量不用。

goto 表示无条件跳转

/** goto 关键字**/

#include <stdio.h>


int main(){


	goto flag;  // 无条件跳转到标记为flag的位置,从flag位置开始往下执行
	// goto 标记名; 注意:标记名必须存在,否则会编译错误
	//goto ok;
	printf("哈哈1\n");
	printf("哈哈2\n");
	printf("哈哈3\n");
	printf("哈哈4\n");

	flag:// 此处的flag打了一个锚点(标记),flag名字是自定义的
		printf("┭┮﹏┭┮\n");

	ok:
		printf("过过~\n");

	return 0;
}

5.6 循环嵌套

所谓的循环嵌套,在循环中再写循环,也就是多重循环,一般建议循环层数最好不要超过 3 层



#include <stdio.h>

int main(){
	//  外层for循环
	for (int i = 1; i <=5 ; i++)
	{
		// 内存for循环
		for (int j = 1; j<=5; j++)
		{
			printf("i:%d-j:%d\t", i,j);
		}
		// 上面for循环执行完毕之后,再换行
		printf("\n");
	}
	// 外层循环循环一次,内层循环要全部循环完毕之后,才会开启外层循环的下一层循环
}

运行结果:

需要注意的问题:

  1. 外层 for 循环执行一次,内层循环需要全部执行完毕之后,外层循环才会开启下一次循环。
  2. 对于双层 for 循环而言,可以看成多行多列的矩阵,外层循环的 i 可以看成行,内层循环的 j 可以看成列。

【练习案例】打印九九乘法表

【案例代码】




#include <stdio.h>


int main(){
	// 打印九九乘法表
	// 双层循环,外层循环执行一次,内层循环要全部执行完毕
	// 双层循环,外层循环i代表着行号,(第几次循环就代表当前在第几行)
	//          内层循环j代表着列号,(第几次循环就代表当前在第几列)
	// 外层循环循环n次,就代表着有n行
	// 内层循环循环n次,就代表着有n列
	for(int i=1;i<=9;i++){
		// 外层循环第1次循环:i=1  内层循环 j=1  循环1次 打印1列
		// 外层循环第2次循环:i=2  内层循环 j=1,2  循环2次  打印2列
		// 外层循环第3次循环:i=3  内层循环 j=1,2,3 循环3次  打印3列
		// i和j关系  j<=i
		for(int j=1;j<=i;j++){
			printf("%d*%d=%d\t", i,j,(i*j));
		}
		printf("\n");
	}


	return 0;
}
printf("-------------------------------------------------\n");
for (int i = 1; i <=9; ++i)
    {
        //外层第1次循环:i=1  内层j=1,2,3,4,5,6,7,8,9  j<=10-1 循环9次 打印9列
        //外层第2次循环:i=2  内层j=1,2,3,4,5,6,7,8  j<=10-2 循环8次 打印8列
        //外层第2次循环:i=3  内层j=1,2,3,4,5,6,7 j<=10-3      循环7次 打印7列
        //  内层的j :  j<=10-i
        for (int j = 1; j <=10-i; j++)
            {
                printf("%d*%d=%d\t", i,j,(i*j));
            }
        printf("\n");

    }

【格式 3】

【参考代码】

printf("-------------------------------------------------\n");
	for (int i = 9; i>=1; i--)
	{
		for (int j = 1; j<=i; j++)
		{
			printf("%d*%d=%d\t", i,j,(i*j));
		}
		printf("\n");
	}

5.7 do...while 循环

5.7.1 do-while 循环格式

do{
    代码块;
}while(条件表达式);

表示:先执行一次代码块,然后再判断条件表达式是否成立,如果成立就会重复执行代码块,直到条件表达式不成立为止。

需要注意的点:无论条件表达式是否成立,do 中的代码块,至少会执行一次

【演示案例】



/** do-while循环**/

#include <stdio.h>

int main(){

	int age = 17;

	do {
		printf("do-while:今年%d岁,去洗个脚吧\n",age);

	}while(age>18);


	printf("------------------------\n");

	while(age>18){
		printf("while:今年%d岁,去洗个脚吧\n",age);
	}


	return 0;
}

需要注意的问题:

  1. do-while 先执行 do 中的代码块,再做 while 括号中条件判断,while 循环,先做判断,再根据判断的结果确定是否要执行 while 中的代码块
  2. do-while 中 do 中的代码块,至少要执行一次。while 循环,如果条件表达式不成立,while 中的代码块,不会执行
  3. 当某些操作至少需要执行一次的时候,可以使用 do-while 循环

【参考代码】

int n = 1; // 定义计数器
do{
    printf("第%d次循环\n",n);
    n ++;  // 让计数器逐渐接近条件表达式的临界点
}while(n<=10); // 使用计数器,构建条件表达式的临界点


printf("------------------------\n");

前文传送:

【C语言从不挂科到高绩点】01-C语言概述-CSDN博客

【C语言从不挂科到高绩点】02-变量、数据类型、标识符、关键字-CSDN博客

【C语言从不挂科到高绩点】03-C语言运算符

【C语言从不挂科到高绩点】04-流程控制语句-if-CSDN博客

【C语言从不挂科到高绩点】05-流程控制语句-switch语句-CSDN博客

----------------------------------------------------------------------

​分享不易,耗时耗力,喜欢的同学给个关注和赞吧

承接毕设指导,技术答疑,学习路上想要找私人教练的同学可以私信我

更多学习资料,公众号:墨轩学习网,B站:墨轩大楼

----------------------------------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024测试开发必知必会:Pytest框架实战!

应用场景&#xff1a; pytest 框架可以解决我们多个测试脚本一起执行的问题。 它提供了测试用例的详细失败信息&#xff0c;使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose&#xff0c;开箱即用。接下来我们详细了解下pyte…

LLM与知识图谱

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

昆仑山矿泉水《大湾区旅行者》正式开机,携手共赴一场净化心灵之旅

在这个快节奏的时代&#xff0c;我们总在寻找一片能让心灵得以栖息的地方。今年&#xff0c;昆仑山矿泉水与深圳卫视再度携手&#xff0c;推出充满人文温情与自然探索的慢生活旅行综艺《大湾区旅行者》&#xff0c;目前已于8月29日开机启航。本次旅行&#xff0c;昆仑山矿泉水与…

废品回收小程序,从传统到现代化的回收模式

在数字化发展的当下&#xff0c;废品回收行业也进行了更新换代&#xff0c;由传统“喊卖”&#xff0c;到目前的线上回收&#xff0c;将互联网小程序与废品回收相结合&#xff0c;打造一个线上回收模式&#xff0c;让大众可以直接通过手机进行回收。小程序的出现不仅解决了传统…

四层神经网络,反向传播计算过程;四层神经网络中:y的函数公式是什么

目录 四层神经网络,反向传播计算过程 网络结构 前向传播 损失函数 反向传播 1. 计算输出层到隐藏层 2 的梯度 2. 计算隐藏层 2 到隐藏层 1 的梯度 3. 计算输入层到隐藏层 1 的梯度 梯度下降更新 四层神经网络,反向传播计算过程 在四层神经网络中,使用均方差损失函数…

H264结构及RTP封装

H264是一种针对视频的压缩编码方式。 一、压缩方法 H264主要基于以下几种方法&#xff0c;将数据进行压缩&#xff1a; 1.帧内预测压缩&#xff1a;解决空间域数据冗余的问题 2.帧间预测压缩&#xff1a;&#xff08;运动估计与补偿&#xff09;解决时间域数据冗余的问题 3…

项目实训:创建一张贺卡以及一只盒子——WEB开发系列27

以下是两道关于基础 CSS 盒模型和其他盒子相关特性的练习题&#xff0c;适合测试对这些概念的掌握程度&#xff0c;通过实际的设计任务来深入理解这些概念。 练习题 1: 设计一张中秋节海报贺卡 任务描述 制作一张精美的中秋节海报贺卡&#xff0c;用于庆祝这个传统节日。你的…

visual studio 2022更新以后,之前的有些工程编译出错,升级到Visual studio Enterprise 2022 Preview解决

系列文章目录 文章目录 系列文章目录前言一、解决方法 前言 今天遇到一个问题&#xff1a;visual studio 2022升级成预览版以后&#xff0c;之前的有些工程编译出错。首先代码、项目设置都没有改变&#xff0c;只是更新了visual studio 2022。 在编译工程时&#xff0c;编译器…

Source-code-of-charging-云快充协议1.5+互联互通协议+新能源汽车充电桩系统

介绍 SpringBoot 框架&#xff0c;充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 软件架构 软件功能 小程序端&#xff1a;城市切换、附近电站、电桩详情页、扫码充电、…

视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍

随着智能手机的普及&#xff0c;手机已成为人们生活中不可或缺的一部分。然而&#xff0c;在某些场合&#xff0c;如驾驶、会议、学校课堂等&#xff0c;不当使用手机可能会导致安全隐患或干扰他人。因此&#xff0c;开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…

技术故障和情感危机,哪个更难修复?

在数字化时代&#xff0c;软件服务的稳定性至关重要。 然而&#xff0c;数字时代的感情同样脆弱! 超单身时代 这一概念主要用来描述一个国家或地区中单身人口占据较大比例的社会现象。以日本为例&#xff0c;根据日本国立社会保障与人口问题研究所的推算&#xff0c;到2035年…

[bevformer渲染可视化] 2d框可视化 并可视化出小目标

可视化代码&#xff1a; 代码使用方法&#xff1a; 1.复制代码全文到任意python文件中 2.下载nuscenes v1.0-mini数据集,修改数据集路径&#xff0c;保证能读取到数据集 3.按照需求修改代码&#xff08;本文是2dbox面积的面积和整个图片的面积比小于0.03视为小目标&#xff0…

电流互感器的操作、类型和极性注意事项

了解电流互感器及其在将大电流转换为小电流方面的重要作用&#xff0c;包括绕组比、类型以及保持计量极性的重要性。 电流互感器 (CT) 主要用于改变电压值。第二个结果是它们也会改变当前值。 升压变压器减少次级绕组中的电流&#xff0c;降压变压器增加次级绕组中的电流&…

vscode Git代码版本回退

在项目文件夹右键打开git bash&#xff0c;输入命令git log 查看提交的历史 commit&#xff0c;git log --prettyoneline将版本信息压缩到一行 使用git log可能会显示不全&#xff0c;按enter逐行查看&#xff0c;按end跳至末尾查看完成后&#xff0c;按q即可退出 找到自己想…

云计算实训40——部署nmt、部署project_exam_system项目

NMT N指的是nginx M指的是mysql T指的是tomcat 一、环境准备 #使用基础的docker指令来创建镜像&#xff0c;实现项目的发布 #安装docker、编辑daemon.json文件、安装docker-compose编排容器、启动docker #拖拽docker.sh的脚本[rootdocker--1 ~]# rz -Erz waiting to rec…

Qt QPushButton 按钮右上角增加小红点

简述 在项目里有时候应用类按钮在模块上新时&#xff0c;需要增加小红点提示。 效果图&#xff1a; 实现 实现的方法有很多 &#xff0c;下面介绍超简单的一种。 直接在按钮上贴一个 QLabel 即可。 #pragma once#include <QtWidgets/QWidget> #include "ui_paf…

宁武县乡村e镇招商引资暨产品推介会在京举办

2024年8月26日&#xff0c;宁武县乡村e镇招商引资暨产品推介会在北京市朝阳区五洲皇冠国际酒店举办。此次活动由山西省宁武县委、县政府主办&#xff0c;中国联合国采购促进会、中国商业文化研究会乡村振兴工作委员会协办&#xff0c;旨在宣传推介宁武县丰富的自然资源和农特产…

“1X”家用人形机器人:NEO Beta人形机器人,专为家庭使用而设计

1X机器人是指挪威人形机器人初创企业1X公司推出的一款名为NEO Beta的双足人形机器人原型。这款机器人专为家庭使用而设计&#xff0c;身高约1米65&#xff0c;体重30公斤&#xff0c;具有仿生设计&#xff0c;能够在人与人之间安全工作。NEO Beta采用了OpenAI的技术支持&#x…

spotbugs问题描述汉化

1 支持多语言 spotbugs自身支持问题描述的国际化&#xff0c;默认支持了英语、日语和法语。 问题描述都配置在messages.xml文件中。 (在源码中的位置&#xff1a;/spotbugs//spotbugs/etc/messages.xml) 2 多语言文件名 如果需要支持中文可以将messages.xml中的英文翻译过来。将…

Chapter 08 Vue生命周期

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、生命周期阶段二、生命周期钩子三、生命周期图示 前言 Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;广泛用于构建用户界面。理解 Vue 的生命周期对于开发高效、…