【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘

news2024/12/27 0:48:11

📝个人主页🌹:Eternity._
⏩收录专栏⏪:C语言 “ 登神长阶 ”
🤡往期回顾🤡:C语言入门
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

❀分支与循环语句

  • 📒1. 什么是语句?
  • 📜2. 分支语句
    • 🔄if 语句
      • 🍁else 的匹配
      • 🍂if 书写形式
    • 💬switch 语句
      • 🎩switch中 break
      • 🎈default子句
  • 📚3. 循环语句
    • 🧩while 循环
      • 🌞while中 break
      • 🌙while中 continue
    • 🧩for 循环
      • ⛰️break和continue在for循环中
      • 🏞️for语句的循环控制变量
      • 🌄for循环和while循环
    • 🧩do while 循环
      • 🌄do while循环中的break和continue
  • 📝4. goto语句
  • 📖5. 总结


前言: 在编程的世界里,构建程序的基石不仅仅是数据的表示与处理,更在于如何根据条件做出选择,以及如何重复执行特定的代码块以完成任务。这正是分支语句(如if-else、switch等)和循环语句(如for、while、do-while等)大放异彩的舞台。它们如同编程语言的导航员和动力源泉,引领着代码逻辑在复杂的任务中穿梭前行,实现高效、灵活的程序逻辑控制

分支语句: 让我们能够基于不同的条件执行不同的代码块,它们如同决策树上的分叉,每个分叉都代表了一个可能的路径,根据条件判断的结果选择最合适的路径继续执行。这种能力使得程序能够根据用户输入、系统状态或计算结果等外部条件灵活地调整其行为,从而应对各种复杂多变的场景

循环语句: 是重复执行某段代码的强大工具。无论是需要遍历数组、处理大量数据、还是执行周期性任务,循环语句都能以简洁高效的方式完成任务。它们通过设定循环条件和循环体,使得程序能够在满足条件的情况下不断重复执行特定的操作,直至条件不再满足为止。这种能力极大地提高了程序的自动化程度和执行效率

因此,掌握分支和循环语句是成为一名合格程序员不可或缺的一步 。它们不仅是构建程序逻辑的基本单元,更是实现复杂功能和优化程序性能的关键所在。在接下来的内容中,我们将深入探讨这两种语句的工作原理、语法规则以及实际应用场景,帮助大家更好地理解并灵活运用它们来编写高效、可靠的程序代码

让我们一同踏上这段充满挑战与收获的C语言分支与循环语句之旅吧!


📒1. 什么是语句?

C语句可分为以下五类:

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

我们今天介绍的是控制语句:

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成

控制语句可分为以下三类:

  • 条件判断语句也叫分支语句:if语句、switch语句;
  • 循环执行语句:do while语句、while语句、for语句;
  • 转向语句:break语句、goto语句、continue语句、return语句

📜2. 分支语句

分支语句(Branch Statements)在编程中扮演着至关重要的角色,它们允许程序根据特定的条件执行不同的代码块。这种能力使得程序能够处理不同的输入、状态或计算结果,从而以灵活和动态的方式响应各种情况

我们在前两节入门时简单提到过


🔄if 语句

if 语句代码示例:

// 语法结构:
if(表达式)
	语句1;
else
	语句2;
	
//多分支
if(表达式1)
	语句1;
else if(表达式2)
	语句2;
else
	语句3;

if 语句中,我们规定如果表达式的结果为真,则语句执行

注意: 在C语言中0表示假,非0表示真

如果表达式的结果为真,我们想要执行多条指令就需要用 { } 将指令括起来代表一个代码块

if(表达式1)
{
	指令1;
	指令2;
	......
}
else if(表达式2)
{
	指令3;
	指令4;
	......
}
else
{
	指令5;
	......
}	

🍁else 的匹配

我们先来看一段代码:

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

我想大部分人以为会输出haha,但是实际它什么都不会输出,因此我们要将代码写规范

因为: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;
}

所以一定要将代码写规范,不然会发生想不到的错误


🍂if 书写形式

//代码1
if (condition) {
	return x;
}
return y;

//代码2
if(condition)
{
	return x;
}
else
{
	return y;
}

//代码3
int num = 1;
if(num == 5)
{
	printf("hehe\n");
}

//代码4
int num = 1;
if(5 == num)
{
	printf("hehe\n");
}

代码2和代码4更好,逻辑更加清晰,不容易出错,书写代码3时,如果疏忽少了一个=那么结果将有很大差异


💬switch 语句

🎩switch中 break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支

switch代码示例:

#include <stdio.h>
int main()
{
	int day = 1;
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}
	return 0;
}

注意:break语句 的实际效果是把语句列表划分为不同的分支部分

如果我们想 输入1-5,输出的是“weekday”; 输入6-7,输出“weekend”,我们可以用 break 来划分

int main()
{
	int day = 3;
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	}
	return 0;
}

注意:建议在最后一个 case 语句的后面加上一条 break语句,避免出现在以前的最后一个 case 语句后面忘了添加 break语句


🎈default子句

如果表达的值与所有的case标签的值都不匹配的话,所有的语句都被跳过。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果我们想在不匹配所有标签的表达式的值时让程序输出特定语句,我们可以在语句列表中增加一条default子句,在里面加入特定语句

default:
	......
	break;

注意:

  • 写在任何一个 case 标签可以出现的位置
  • 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句
  • 它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句

建议在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break


📚3. 循环语句

循环语句是编程中非常重要的一部分,它们允许程序重复执行一段代码块直到满足某个条件为止。循环语句可以分为几种不同的类型,但最常见的是for循环、while循环和do-while循环


🧩while 循环

🌞while中 break

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		// 这里输出的是 1,2,3,4
		i = i + 1;
	}
	return 0;
}

break在while循环中的作用:

  • 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环
  • 所以:while中的break是用于永久终止循环的

🌙while中 continue

int main()
{
	int i = 1;
	while (i <= 10)
	{
		i = i + 1;
		if (i == 5)
			continue;
		printf("%d ", i);
		// 这里输出的是 2,3,4,6,7,8,9,10,11
	}
	return 0;
}

continue在while循环中的作用就是:

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

🧩for 循环

for 循环代码示例:

for(表达式1; 表达式2; 表达式3)
	循环语句;
  • 表达式1:为初始化部分,用于初始化循环变量的
  • 表达式2:为条件判断部分,用于判断循环时候终止
  • 表达式3:为调整部分,用于循环条件的调整

for 循环的使用代码示例:

// 打印 1-10的数字
int main()
{
	int i = 0;
	//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

for循环的执行流程图:
在这里插入图片描述


⛰️break和continue在for循环中

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

// 代码1
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

// 代码2
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

🏞️for语句的循环控制变量

  • 不可在for 循环体内修改循环变量,防止 for 循环失去控制
  • 建议for语句的循环控制变量的取值采用“前闭后开区间”写法
int i = 0;
// 前闭后开的写法
for(i=0; i<10; i++)
{
	// 语句......	
}

-注意: for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题

for(;;)
{
	......
}

🌄for循环和while循环

代码对比:

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
	printf("hehe\n");
	i = i+1;//调整部分
}

//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
	printf("hehe\n");
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,比较分散,这样查找修改就不够集中和方便。

所以,for循环的风格更胜一筹;for循环使用的频率也最高,我本人也比较喜欢用for循环(嘻嘻)


🧩do while 循环

do while 循环代码示例:

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

do while循环的执行流程图:
在这里插入图片描述

注意: 循环至少执行一次

int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i=i+1;
	}while(i<=10);
	return 0;
}

🌄do while循环中的break和continue

总体来说和之前差不太多

代码示例:

// 代码1
int main()
{
	int i = 1;
	do
	{
		if(5 == i)
			break;
		printf("%d ", i);
		i=i+1;
	}while(i<=10);
	return 0;
}

// 代码2
int main()
{
	int i = 1;
	do
	{
		if(5 == i)
			continue;
		printf("%d ", i);
		i=i+1;
	}while(i<=10);
return 0;
}

📝4. goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程

例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环

goto语句代码示例:

for(...)
	for(...)
	{
		for(...)
		{
			if(disaster)
				goto error;
		}
	}
.......
error:
	if(disaster)
		// 处理错误情况

这里来介绍一个幽默小程序 -> 关机程序

关机程序代码示例:

// goto语句
#include <stdio.h>
int main()
{
	char input[10] = {0};
	system("shutdown -s -t 60");
again:
	printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
	scanf("%s", input);
	if(0 == strcmp(input, "我是猪"))
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

// 循环语句
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char input[10] = {0};
	system("shutdown -s -t 60");
	while(1)
	{
		printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
		scanf("%s", input);
		if(0 == strcmp(input, "我是猪"))
		{
			system("shutdown -a");
				break;
		}
	}
	return 0;
}

📖5. 总结

在编程的浩瀚宇宙中,分支与循环语句犹如夜空中最亮的星辰,指引着程序逻辑的方向,赋予了代码以生命与智慧。它们不仅是编程语言中的基础构件,更是实现复杂逻辑、优化算法、以及构建动态交互体验的关键所在

分支语句让我们学会了如何在程序中做出决策,根据不同的条件执行不同的代码路径。这种能力让我们的程序更加智能,能够处理各种复杂的场景和变化。而循环语句则赋予了我们重复执行代码块的力量,无论是简单的重复任务,还是复杂的迭代计算,都能得心应手

掌握分支与循环语句,不仅是学习编程的必经之路,更是提升编程技能、解决实际问题的重要手段。它们教会我们如何构建逻辑清晰、结构合理的程序,如何优化代码性能、提升用户体验。在未来的编程之旅中,愿大家能够灵活运用分支与循环语句,创造出更加精彩、更加智能的程序作品。让我们携手并进,在编程的世界里不断探索、不断前行!

在这里插入图片描述

希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行!
谢谢大家支持本篇到这里就结束了,祝大家天天开心!

在这里插入图片描述

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

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

相关文章

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

Kafka:Kafka详解

Kafka 消息中间件 区别于rabbitmq,kafka更适用于量级较大的数据(100w级),主要在大数据领域使用 Kafka介绍 一个分布式流媒体平台,类似于消息队列或企业消息传递系统 Kafak的结构如下 producer:发布消息的对象 topic:Kafak将消息分门别类,每类的消息称为一个主题(Topic) …

《0基础》学习Python——第十一讲__时间函数

一、时间函数是Python中的内置函数和模块&#xff0c;用于处理日期和时间相关的操作。以下是常用的时间函数的种类和用法&#xff1a; 1、time.time()&#xff1a;返回当前时间的时间戳。 时间戳&#xff08;timestamp&#xff09;是一种表示日期和时间的方式&#xff0c;它是一…

高频面试题基本总结回顾4(含笔试高频算法整理)

目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 &#xff08;一&#xff09;Java高频面试题整理 &#xff08;二&#xff09;JVM相关面试问题整理 &#xff08;三&#xff09;MySQL相关面试问题整理 &#xff08;四&#xff09;Redis相关面试…

使用 SSH 通过 VS Code 连接企业服务器并拉取 Git 仓库代码的指南

文章目录 前言一、SSH 是什么&#xff1f;1.1 SSH 的主要特性和用途1.2 SSH 的工作原理 二、 为什么使用 SSH 而不是 HTTPS三、使用步骤3.1 生成 SSH 密钥3.2 配置 VS Code 远程连接3.3 通过 SSH 克隆 Git 仓库3.4 安装必要的组件 总结 前言 在现代软件开发中&#xff0c;远程…

Sentinel-1 Level 1数据处理的详细算法定义(四)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…

鸿蒙语言基础类库:【@ohos.data.storage (轻量级存储)】

轻量级存储 轻量级存储为应用提供key-value键值型的文件数据处理能力&#xff0c;支持应用对数据进行轻量级存储及查询。数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据类型包括数字型、字符型、布尔型。 说明&#xff1a; 开发前请熟悉鸿蒙开发…

红色文化3D虚拟数字展馆搭建意义深远

在房地产与土地市场的浪潮中&#xff0c;无论是新城规划、乡村振兴&#xff0c;还是商圈建设&#xff0c;借助VR全景制作、虚拟现实和web3d开发技术打造的全链条无缝VR看房新体验。不仅极大提升了带看与成交的转化率&#xff0c;更让购房者足不出户&#xff0c;即可享受身临其境…

前端Vue组件化实践:自定义轮播图组件的探索与应用

在前端开发领域&#xff0c;随着业务逻辑的不断丰富和系统规模的日益扩大&#xff0c;传统的开发方式逐渐暴露出种种弊端。其中&#xff0c;最突出的问题之一便是修改一个小的功能或细节可能导致整个系统的逻辑调整&#xff0c;造成开发效率低下和维护困难。为了应对这些挑战&a…

部署大语言模型并对话

随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;因其强大的语言理解和生成能力而备受关注。OpenWebUI &#xff0c;原名 Ollama WebUI &#xff0c;是一款专为大语言模型&#xff08;LLM&#xff09;设计的先进 Web 交互…

pdf文件怎么转换为jpg图片?这几种转换方法操作起来很简单!

pdf文件怎么转换为jpg图片&#xff1f;在数字化洪流席卷职场的当下&#xff0c;PDF文档虽一度稳坐信息传输与储存的宝座&#xff0c;却逐渐显露出其在效率与便捷性追求中的疲态&#xff0c;随着技术疆界的不断拓宽&#xff0c;我们愈发深刻地意识到&#xff0c;PDF那复杂的格式…

Python array的特点及使用

1、Python array的特点及使用 1.1、python array为什么只能接收指定类型数据 array 模块提供了一种叫做 array 的数据结构&#xff0c;它表示一块连续的内存空间&#xff0c;所有的元素必须是相同的类型。这是因为在内存中&#xff0c;数组元素存储在连续的位置上&#xff0c…

【256 Days】我的创作纪念日

目录 &#x1f33c;01 机缘 &#x1f33c;02 收获 &#x1f33c;03 日常 &#x1f33c;04 成就 &#x1f33c;05 憧憬 最近收到官方来信&#xff0c; 突然发现&#xff0c;不知不觉间&#xff0c;距离发布的第一篇博客已过256天&#xff0c;这期间我经历了春秋招、毕业答辩…

Type-C PD芯片:引领充电技术的新纪元

随着科技的飞速发展&#xff0c;人们对电子设备的依赖日益加深&#xff0c;对充电速度、效率和安全性的要求也越来越高。在这样的背景下&#xff0c;Type-C PD&#xff08;Power Delivery&#xff09;芯片应运而生&#xff0c;以其高效、安全、智能的特点&#xff0c;成为了充电…

gorm多表联合查询 Joins方法 LEFT JOIN , RIGHT JOIN , INNER JOIN, FULL JOIN 使用总结

gorm中多表联合查询&#xff0c;我们可以使用Joins来完成&#xff0c;这个Joins方法很灵活&#xff0c;我们可以非常方便的多多表进行联合查询&#xff0c; 我们先来看看这个方法的官方定义和使用示例&#xff1a; Joins方法定义和使用示例 当然我们这里要说的使用方式是官方示…

网络运输层之(2)UDP协议

网络运输层之(2)UDP协议 Author: Once Day Date: 2024年7月14日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

SQL server 练习题2

课后作业 作业 1&#xff1a;自己查找方法&#xff0c;将 homework_1.xls 文件数据导入到 SQLServer 的 homework 数据库中。数据导入完成后&#xff0c;把表名统一改为&#xff1a;外卖表 如下所示&#xff1a; 作业 2&#xff1a;找出所有在 2020 年 5 月 1 日至 5 月 31 …

离散数学,自反和反自反 ,对称和反对称,传递关系 ,复合关系和逆关系 ,关系的闭包

目录 1.自反和反自反 自反性 反自反性 判断关系是自反或是反自反 2.对称和反对称 对称性 反对称性 判断关系是对称或是反对称 3.传递关系 4.复合关系和逆关系 复合关系 逆关系 关系运算的性质 5.关系的闭包 闭包的性质 1.自反和反自反 自反性 反…

适合初创企业的有效 CRM 策略

客户关系管理 (CRM) 是任何企业的重要组成部分&#xff0c;尤其是对于旨在与客户建立牢固而有意义的关系的初创公司而言。实施良好的 CRM 策略不仅可以简化您的销售流程&#xff0c;还可以提高客户满意度和保留率。在本文中&#xff0c;我们将介绍初创公司有效 CRM 策略的关键组…

原生APP外包开发成本的估算

原生APP外包开发成本的估算取决于多种因素。根据经验&#xff0c;原生APP外包开发成本一般在几十万到几百万人民币之间。对于功能复杂、要求高的大型APP&#xff0c;开发成本可能更高&#xff0c;甚至达到上千万人民币。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发…