当前位置: 首页 > news >正文

C语言中的控制语句:深入解析与案例实践2

五、使用goto实现无条件跳转

        虽然`goto`语句在现代编程实践中往往被避免使用,因为它可能导致代码难以理解和维护,但在某些特定情况下,它仍然可以作为一种解决方案。`goto`语句允许程序无条件地跳转到代码中指定的标签位置。

案例代码:模拟简单的错误处理机制:

#include <stdio.h>
int main() {int number;printf("请输入一个数字:");scanf("%d", &number);if (number < 0) {goto error;}  printf("您输入的数字是:%d\n", number);return 0;error:printf("错误:输入的数字不能是负数!\n");return 1;
}

        在这个例子中,如果用户输入了一个负数,程序将无条件跳转到`error`标签处,打印错误消息并返回1。尽管这个例子展示了`goto`的用法,但通常建议使用更结构化的错误处理机制,如函数返回值或异常处理。

六、使用递归实现循环逻辑

        递归是一种特殊的控制结构,它允许一个函数直接或间接地调用自身。递归在处理某些问题(如树的遍历、阶乘计算等)时非常有用。

案例代码:计算阶乘:

#include <stdio.h>
unsigned long long factorial(int n) {if (n == 0) {return 1;}else {return n * factorial(n - 1);}
}int main() {int number;    printf("请输入一个非负整数:");scanf("%d", &number);printf("%d 的阶乘是:%llu\n", number, factorial(number));return 0;
}

        在这个例子中,`factorial`函数使用递归计算给定数字的阶乘。当`n`为0时,递归结束,返回1。否则,函数返回`n`乘以`n-1`的阶乘。

七、使用条件运算符简化代码

条件运算符(也称为三元运算符)提供了一种简洁的方式来在单个表达式中进行条件判断。

案例代码:根据成绩输出等级:

        

#include <stdio.h>
int main() {int score;char grade;    printf("请输入成绩:");scanf("%d", &score);    grade = (score >= 90) ? 'A' : (score >= 80) ? 'B' : (score >= 70) ? 'C' : (score >= 60) ? 'D' : 'F';printf("您的等级是:%c\n", grade);return 0;
}

        在这个例子中,我们使用条件运算符根据成绩计算等级。条件运算符的语法是`条件 ? 表达式1 : 表达式2`,如果条件为真,则整个表达式的值为`表达式1`,否则为`表达式2`。通过嵌套多个条件运算符,我们可以实现更复杂的条件判断。

        这些案例展示了C语言中控制语句的多样性和灵活性。在实际编程中,我们应该根据问题的性质和需求选择合适的控制结构,并编写清晰、可维护的代码。

八、switch语句的高级用法

        `switch`语句在C语言中用于多分支选择结构,它根据表达式的值选择执行相应的代码块。

案例代码:使用`switch`语句实现菜单选择功能:

#include <stdio.h>
int main() {int choice;do {printf("\n请选择操作:\n");printf("1. 添加\n");printf("2. 删除\n");printf("3. 查找\n");printf("4. 退出\n");scanf("%d", &choice);switch (choice) {case 1:printf("执行添加操作...\n");break;case 2:printf("执行删除操作...\n");break;case 3:printf("执行查找操作...\n");break;case 4:printf("退出程序。\n");break;default:printf("无效的选择,请重新输入。\n");}
} while (choice != 4);return 0;
}

        在这个例子中,我们使用`switch`语句来实现一个简单的菜单选择功能。用户可以根据提示输入不同的选项,程序根据输入执行相应的操作,直到用户选择退出。

九、结合数组和循环处理批量数据

        在处理批量数据时,通常会结合使用数组和循环语句。

案例代码:计算一个整数数组中所有元素的平均值:

#include <stdio.h>
int main() {int arr[] = {1, 2, 3, 4, 5};int sum = 0;float average;int size = sizeof(arr) / sizeof(arr[0]); // 计算数组大小for (int i = 0; i < size; i++) {sum += arr[i];}average = (float)sum / size;printf("数组的平均值为:%.2f\n", average);return 0;
}

        在这个例子中,我们首先定义了一个整数数组,并使用`sizeof`运算符计算数组的大小。然后,我们使用`for`循环遍历数组中的每个元素,将它们累加到`sum`变量中。最后,我们计算平均值并打印结果。

十、嵌套循环与二维数组

        在处理二维数组时,通常需要使用嵌套的循环语句。

案例代码:打印一个5x5的二维数组:

#include <stdio.h>
int main() {int arr[5][5] = {{1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11, 12, 13, 14, 15},{16, 17, 18, 19, 20},{21, 22, 23, 24, 25}};for (int i = 0; i < 5; i++) { // 外层循环控制行for (int j = 0; j < 5; j++) { // 内层循环控制列printf("%d ", arr[i][j]);}printf("\n"); // 每行打印完后换行}return 0;
}

        在这个例子中,我们定义了一个5x5的二维数组,并使用嵌套的`for`循环遍历数组中的每个元素,将它们打印到控制台上。外层循环控制行数,内层循环控制列数。

相关文章:

C语言中的控制语句:深入解析与案例实践2

五、使用goto实现无条件跳转 虽然goto语句在现代编程实践中往往被避免使用&#xff0c;因为它可能导致代码难以理解和维护&#xff0c;但在某些特定情况下&#xff0c;它仍然可以作为一种解决方案。goto语句允许程序无条件地跳转到代码中指定的标签位置。 案例代码&#xff1a…...

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…...

深入解析C#中的async和await关键字

文章目录 一、异步编程的基本概念及其在C#中的实现二、async关键字的定义及其用法三、await关键字的定义及其用法示例代码&#xff1a;使用async和await编写一个简单的异步程序 四、async和await的优点注意事项 五、C#下async和await中常见问题汇总1. 异步方法中的await调用2. …...

【VUE.js】前端框架——未完成

基于脚手架创建前端工程 环境 当安装node.js时&#xff0c;它本身就携带有npm命令。&#xff08;-v 查版本号&#xff09;安装VUE CLI npm i vue/cli -g&#xff08;全局&#xff09; 创建 vue create 【project name】 镜像源解决方案 输入创建命令后&#xff0c;提示检查更…...

开源的文件压缩和解压缩软件7-Zip

7-Zip是一款开源的文件压缩和解压缩软件&#xff0c;它支持多种压缩格式&#xff0c;包括自有的7z格式以及常见的ZIP、RAR、TAR等格式。下面是对7-Zip的详细介绍&#xff0c;包括其功能特点、使用方法、优缺点等方面的内容。官网&#xff1a;7-Zip 1. 功能特点&#xff1a; 多…...

搜维尔科技:Patchwork 3D 新功能:爆炸视图动画

Patchwork 3D新功能&#xff1a;爆炸视图动画 为什么使用 Patchwork 3D&#xff1f; Patchwork 3D 软件有助于将 CAD 数据转换成真实感的 3D 模型以用于工业用途。 Patchwork 3D 可轻松进行实时渲染&#xff0c;有助于缩短设计周期&#xff0c;或者让您获得效果逼真的渲染图&…...

Redis——RedLock、Zookeeper及数据库实现分布式锁

在分布式系统中&#xff0c;实现分布式锁是确保数据一致性和防止并发问题的重要手段。以下是使用Redis的RedLock算法、ZooKeeper以及数据库实现分布式锁的基本概念和步骤&#xff1a; 1. Redis的RedLock算法 Redis的RedLock算法是Redis官方推荐的一种分布式锁实现方式&#x…...

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析 起因 最近在学习安全协议&#xff0c;大多数实验都是基于Windows下IIS&#xff0c;或者Linux下nginx搭建的Web服务&#xff0c;搭建环境和编写配置文件比较麻烦。而且我有多个不同环境的设备&#xff0c;折腾起来…...

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明&#xff1a; 项目A是现在的vue2前端项目&#xff0c;项目B是一个开源的工作流前端&#xff0c;项目后端代码已经整合了&#xff0c;就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能&#xff0c;拷贝到自己对应的vue2项目里…...

物联网五层架构分析

物联网五层架构分析 随着科技的迅速发展&#xff0c;物联网&#xff08;IoT&#xff09;作为日常生活中不可或缺的一部分&#xff0c;已融入人们的生活和工作中。物联网五层架构&#xff0c;包括感知层、网络层、数据层、应用层和业务层&#xff0c;扮演着关键的角色。 感知层 …...

【Java EE】多线程(三)线程状态

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…...

FFmpeg常用API与示例(一)—— 工具库篇(av_log、AVDictionary、avio)

工具层 1.av_log 可以设置日志的级别&#xff0c;这个看看名字就明白了&#xff0c;也不用过多的解释。 AV_LOG_PANICAV_LOG_FATALAV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_VERBOSEAV_LOG_DEBUG void test_log() {/ av_register_all();AVFormatContext *pAVFmtCtx NU…...

日志的基本用法

目标 1. 掌握如何设置日志级别 2. 掌握如何设置日志格式 3. 掌握如何将日志信息输出到文件中 1. logging模块 Python中有一个标准库模块logging可以直接记录日志 1.1 基本用法 import logging logging.debug("这是一条调试信息") logging.info("这是一条…...

什么是页分裂、页合并?

数据组织方式 在InnoDB存储引擎中&#xff0c;表数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表(index organized table IOT)。 行数据&#xff0c;都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图&#xff1a; 在I…...

软件2班20240513

第三次作业 package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) {ResourceBundle bundle ResourceBundle.getBundle("com/resources/db");// ctrl alt vString driver …...

嵌入式学习-时钟树

时钟树 时钟分类 时钟树框图 LSI与LSE HSI、HSE与PLL 系统时钟的产生 AHB、APBx的时钟配置 相关寄存器 寄存器部分的细节内容请参考手册。 相关库函数...

对博客系统基本功能进行自动化测试(Junit + Selenium)

环境搭建&#xff1a; 浏览器&#xff1a; 本次测试使用Chrome浏览器在jdk的bin目录下安装对应浏览器驱动&#xff08;尽量选择与浏览器版本相近的驱动&#xff09;chromedriver.storage.googleapis.com/index.htmlJunit依赖&#xff1a; <!-- https://mvnreposit…...

《换你来当爹》:AI驱动的养成游戏,探索虚拟亲子关系的新模式

AI技术如何重塑我们对游戏互动的认知 在人工智能技术的浪潮下&#xff0c;一款名为《换你来当爹》的AI养成游戏&#xff0c;以其创新的互动模式和个性化体验&#xff0c;吸引了游戏爱好者的目光。这款游戏利用了先进的LLM技术&#xff0c;通过AI实时生成剧情和图片&#xff0c…...

在idea中使用vue

一、安装node.js 1、在node.js官网&#xff08;下载 | Node.js 中文网&#xff09;上下载适合自己电脑版本的node.js压缩包 2、下载完成后进行解压并安装&#xff0c;一定要记住自己的安装路径 一直点击next即可&#xff0c;这部选第一个 3、安装成功后&#xff0c;按住winR输入…...

Linux系统编程:进程控制

1.进程创建 1.1 fork函数 fork&#xff08;&#xff09;通过复制调用进程来创建一个新进程。新进程称为子进程&#xff0c;是调用进程的精确副本 进程&#xff0c;但以下几点除外&#xff1a; 子进程有自己的PID&#xff0c;此PID与任何现有进程组的ID不匹配子进程的父进程ID…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...