嵌入式开发学习(第二阶段 C语言基础)

直到型循环的实现

特点:先执行,后判断,不管条件是否满足,至少执行一次。

**代表:**do…while,goto(已经淘汰,不推荐使用)

do…while

语法:

循环变量;
do
{循环体;
}while(循环条件);

说明:

循环条件的返回值必须是逻辑值(0和非0(计算机返回1))

{}包起来的内容称之为循环体

③我们要在循环体中控制循环条件的变换,否则会产生死循环。

流程图

在这里插入图片描述

**特点:**先执行,后判断,不管是否满足条件,循环体语句至少执行一次

案例在这里插入图片描述
  • 需求:求1~100以内的偶数和

  • 分析

    • 创建一个变量,用来存储sum,sum=0
    • 创建一个循环变量,i=2
    • 创建一个do.while循环,在循环体中,校验i%2==0,如果满足,就实现sum+=i
    • 计算完成,在循环体的末行,对循环变量进行更新i++
    • 限制循环的出口:i <= 100
    • 限制循环的出口:i <= 100
    • 循环结束,打印输出sum的值
  • 代码

    /*************************************************************************> File Name:    demo06.c> Author:       小刘> Description:  用do..while..累加1~100中的偶数> Created Time: 2025年05月09日 星期五 14时30分41秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {// 创建一个变量,存储偶数和int i = 2;// 创建一个循环变量int sum = 0;// 创建一个循环,实现偶数和的计算do{// 校验偶数if(i % 2 == 0)// 更新循环变量,逼近出口sum += i;i ++;}while(i <= 100);// 打印输出sumprintf("1~100以内的偶数和是%d\n",sum);return 0;
    }
案例:
  • 需求:用C语言编写简单猜数字游戏代码。游戏规则是程序随机生成一个1到100之间的数字,玩家通过输入猜测数字,程序会提示猜测是太大还是太小,直到玩家猜中为止。
  • 代码:
/*************************************************************************> File Name:    demo07.c> Author:       小刘> Description:  > Created Time: 2025年05月09日 星期五 14时39分37秒************************************************************************/#include <stdio.h>
#include <stdlib.h>//
#include <time.h>//随机种子int main(int argc,char *argv[])
{int guess;int number ;int count = 0;srand(time(NULL));number = rand() % 100;printf("--------------------------\n");printf("-----猜数字小游戏---------\n");printf("--------------------------\n");printf("我已经想了0~99之间的数字,你猜猜是多少");do{printf("请输入你猜的数字:\n");int result = scanf("%d",&guess);if(result != 1){while(getchar() != '\n');printf("请输入数字!\n");continue;}count ++;if(guess > number)printf("太大了,再猜一次。\n");else if(guess < number)printf("太小了,在猜一次");else{printf("恭喜你,猜对了!\n");printf("你一共猜了%d次。\n",count);}}while(guess != number);return 0;
}

运行结果:

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

goto

语法:

goto 标签(labe1)

标签:标明目标代码的位置,是一个不加 "" 的字符串。

案例:

  • 需求:1~100以内的偶数和
  • 代码:
#include <stdio.h>
int main(int argc,char *argv[])
{//创建一个变量,用来存放偶数和int sum = 0;//创建一个循环变量int i = 2;//定义goto标签,名字自己取,符合标识符命名即可loop://过滤偶数if (i % 2 == 0) sum += i; // 偶数和计算i++//更新循环变量//循环条件if (i <= 100)gotoloop;//标签loop由goto触发printf("1~100以内的偶数和是%d\n",sum);return 0;
}
  • 注意事项

    1.可读性:goto语句会破坏代码的结构和可读性,使得代码难以理解和维护。因此,应尽量避免使用。

    2.替代方案:大多数情况下,可以使用循环、条件语句、函数等结构来替代goto语句,使代码更加清晰和易于管理。

    3.嵌套限制:虽然goto语句可以跨函数跳转(即跳转到另一个函数中的标签),但这种用法是不合法的,并且会导致编译错误。goto语句只能在同一函数内部跳转。

    4.错误处理:在某些情况下,goto语句可以用于错误处理,例如从嵌套的多层循环中跳出。但即使在这种情况下,也应谨慎使用,并考虑是否有更好的替代方案。

总结

虽然goto语句在C语言中是合法的,并且有时可能看起来很方便,但过度使用或不当使用会导致代码质量下降。因此,建议尽量避免使用goto语句,而是采用更结构化和可维护的编程方法。

循环化的嵌套

3种循环(while、for、do.while)可以相互嵌套的。在前一个循环结构中又嵌套一个循环结构。例如:

在这里插入图片描述

案例:

  • 需求:九九乘法表

  • 分析:

    • 我们发现九九乘法表整体其实就是一个9行的直角三角形、

    • 同时发现:每一行显示的列数最多不超过行,第1行1列,第2行2列…第9行9列

      假定:行用i表示,列用j表示,i和j的关系:j<=i

  • 在实现的时候,我们发现需要同时控制行和列的变化,在编程中,行列式需要通过for双层嵌套实现双重for循环

  • 代码:

/*************************************************************************> File Name:    demo09.c> Author:       l小刘> Description:  求100~200之间的素数> Created Time: 2025年05月09日 星期五 15时57分37秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
{int num = 100;int i=2;while(num <= 200){for (i = 2;i < num / 2;i ++){if(num % i == 0){break;}}printf("%d\n",num);num += 1;}return 0;
}
  • 运行结果:

在这里插入图片描述

案例:

  • 需求:

循环结构的典型应用场景

  • 求累和:举例:1+2+3..+100的和,sum = 0
  • 求累积:举例:1*2*3..*100的积,result = 1
  • 求均值:举例:(1+2+3...+100)/100的值
  • 求极值:举例:12,34,56,67中的最大值、最小值
  • 元素遍历:常用于数组元素的遍历。

基础算法模型

1.累加和

  • 定义一个变量(sum),并赋初值为0;
  • 该变量累加(+=)每一个数据项(i);
  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果。
  1. 累乘
  • 定义一个变量,并赋初值为1;
  • 用该变量累乘(*=)每一个数据项;
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果。

3.极值(多应用于数组)

  • 定义一个变量,并赋初值为第一个数据项;
  • 从第二个数据项开始,依次于该变量进行比较,如果大于/小于该变量,则将当前数据项的 数据赋值给该变量。
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。

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

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

相关文章

Nginx +Nginx-http-flv-module 推流拉流

这两天为了利用云服务器实现 Nginx 进行OBS Rtmp推流&#xff0c;Flv拉流时发生了诸多情况&#xff0c;记录实现过程。 环境 OS&#xff1a;阿里云CentOS 7.9 64位Nginx&#xff1a;nginx-1.28.0Nginx-http-flv-module&#xff1a;nginx-http-flv-module-1.2.12 安装Nginx编…

射频ADRV9026驱动

参考&#xff1a; ADRV9026 & ADRV9029 Prototyping Platform User Guide [Analog Devices Wiki] 基于ADRV9026的四通道射频收发FMC子卡-CSDN博客 adrv9026 spi 接口验证代码-CSDN博客

使用本地部署的 LLaMA 3 模型进行中文对话生成

以下程序调用本地部署的 LLaMA3 模型进行多轮对话生成&#xff0c;通过 Hugging Face Transformers API 加载、预处理、生成并输出最终回答。 程序用的是 Chat 模型格式&#xff08;如 LLaMA3 Instruct 模型&#xff09;&#xff0c;遵循 ChatML 模板&#xff0c;并使用 apply…

Oracle19c中的全局临时表

应用程序通常使用某种形式的临时数据存储来处理过于复杂而无法一次性完成的流程。通常&#xff0c;这些临时存储被定义为数据库表或 PL/SQL 表。从 Oracle 8i 开始&#xff0c;可以使用全局临时表将临时表的维护和管理委托给服务器。 一、临时表分类 Oracle 支持两种类型的临…

Windows 安装 Milvus

说明 操作系统&#xff1a;Window 中间件&#xff1a;docker desktop Milvus&#xff1a;Milvus Standalone&#xff08;单机版&#xff09; 安装 docker desktop 参考&#xff1a;Window、CentOs、Ubuntu 安装 docker-CSDN博客 安装 Milvus 参考链接&#xff1a;Run Mil…

24、DeepSeek-V3论文笔记

DeepSeek-V3论文笔记 **一、概述****二、核心架构与创新技术**0.汇总&#xff1a;1. **基础架构**2. **创新策略** 1.DeepSeekMoE无辅助损失负载均衡DeepSeekMoE基础架构无辅助损失负载均衡互补序列级辅助损失 2.多令牌预测&#xff08;MTP&#xff09;1.概念2、原理2.1BPD2.2M…

1.8 梯度

&#xff08;知识体系演进逻辑树&#xff09; 一元导数&#xff08;1.5&#xff09; │ ├─→ 多元偏导数&#xff08;1.6核心突破&#xff09; │ │ │ └─解决&#xff1a;多变量耦合时的单变量影响分析 │ │ │ ├─几何&#xff1a;坐标轴切片切线斜率…

274、H指数

题目 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09…

【C++11】异常

前言 上文我们学习到了C11中类的新功能【C11】类的新功能-CSDN博客 本文我们来学习C下一个新语法&#xff1a;异常 1.异常的概念 异常的处理机制允许程序在运行时就出现的问题进行相应的处理。异常可以使得我们将问题的发现和问题的解决分开&#xff0c;程序的一部分负…

Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)

文章目录 前言1、Linux文件系统1.1 核心特点1.2 重要目录结构1.3 文件类型1.4 文件和目录的命名规则1.5 文件与目录的定位方式 2、查看目录或文件的详细信息&#xff08;ls&#xff09;2.1 基本语法2.2 常用操作2.3 高级用法 3、切换目录&#xff08;cd&#xff09;3.1 常用操作…

在线caj转换word

CAJ格式是中国知网特有的一种文献格式&#xff0c;在学术研究等领域广泛使用&#xff0c;但有时我们需要将其转换为Word格式&#xff0c;方便编辑、引用文献。本文分享如何轻松将CAJ转换为word的转换工具&#xff0c;提高阅读和办公效率。 如何将CAJ转换WORD? 1、使用CAJ转换…

【现代深度学习技术】注意力机制05:多头注意力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫

介绍 滑块验证码比传统的字符验证码更加直观和用户友好&#xff0c;能够很好防止爬虫获取数据。 AJ-Captcha行为验证码&#xff0c;包含滑动拼图、文字点选两种方式&#xff0c;UI支持弹出和嵌入两种方式。后端提供Java实现&#xff0c;前端提供了php、angular、html、vue、u…

边缘网关(边缘计算)

边缘网关是边缘计算架构中的关键组件&#xff0c;充当连接终端设备&#xff08;如传感器、IoT设备&#xff09;与云端或核心网络的桥梁。它在数据源头附近进行实时处理、分析和过滤&#xff0c;显著提升效率并降低延迟。 核心功能 协议转换 ○ 支持多种通信协议&#xff08;如…

OpenCV定位地板上的书

任务目标是将下面的图片中的书本找出来&#xff1a; 使用到的技术包括&#xff1a;转灰度图、提取颜色分量、二值化、形态学、轮廓提取等。 我们尝试先把图片转为灰度图&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;书的…

机器学习第一讲:机器学习本质:让机器通过数据自动寻找规律

机器学习第一讲&#xff1a;机器学习本质&#xff1a;让机器通过数据自动寻找规律 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指…

修改图像分辨率

在这个教程中&#xff0c;您将学习如何使用Python和深度学习技术来调整图像的分辨率。我们将从基础的图像处理技术开始&#xff0c;逐步深入到使用预训练的深度学习模型进行图像超分辨率处理。 一、常规修改方法 1. 安装Pillow库 首先&#xff0c;你需要确保你的Python环境中…

jsAPI

环境准备 1 安装nvm nvm 即 (node version manager)&#xff0c;好处是方便切换 node.js 版本 安装注意事项 要卸载掉现有的 nodejs提示选择 nvm 和 nodejs 目录时&#xff0c;一定要避免目录中出现空格选用【以管理员身份运行】cmd 程序来执行 nvm 命令首次运行前设置好国…

SCDN是什么?

SCDN是安全内容分发网络的简称&#xff0c;它在传统内容分发网络&#xff08;CDN&#xff09;的基础上&#xff0c;集成了安全防护能力&#xff0c;旨在同时提升内容传输速度和网络安全性。 SCDN的核心功能有&#xff1a; DDoS防御&#xff1a;识别并抵御大规模分布式拒绝服务…

Qt/C++开发监控GB28181系统/实时视频预览/视频点播/rtp解包解码显示

一、前言 通过gb28181做实时视频预览&#xff0c;也就是视频点播功能&#xff0c;是最重要的功能了&#xff0c;绝对是整个系统排第一重要的&#xff0c;这就是核心功能&#xff0c;什么设备注册、获取通道等都是为了实时预览做准备的&#xff0c;当然这个功能也是最难的&…