嵌入式開發學習(第二階段 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.pswp.cn/pingmian/80488.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80488.shtml
英文地址,請注明出處:http://en.pswp.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;當然這個功能也是最難的&…