【C 學習】10-循環結構

“知道做不到就是不知道”

一、條件循環

1. while

只要條件為真(true),就會重復執行循環體內的代碼。

while (條件) {// 循環體(要重復執行的代碼)
}//示例
int i = 1;
while (i <= 5) {printf("%d\n", i);i++;  // 讓 i 遞增,否則會無限循環
}輸出:
1
2
3
4
5

(1)檢查?條件是否為真(true)。

(2)如果為真,執行循環體代碼。

(3)再次檢查?條件,重復上述過程。

(4)如果?條件為假(false),退出循環。

2. do-while

do-while在進入循環的時候不做檢查,而是執行完一輪循環體的代碼之后,再來檢查循環的條件是否滿足,如果滿足,則繼續執行下一輪;不滿足,則結束循環。

do
{//循環體語句
}while(條件);

注意事項:

(1)不要忘記在while條件最后的分號!!

(2)while和do-while循環的區別就在于前者是先判斷條件再執行語句;后者是先執行1次語句,再判斷條件。

(3)對比判斷條件:if是一次性的,while是反復多次的。

(4)要求在循環體內有結束循環的機會,否則就會進入死循環。

3. 示例1-猜數游戲

讓計算機隨機產生一個數,然后讓用戶來猜。用戶每輸入一個數字,就告訴用戶是輸大了,還是輸小了,直到用戶猜中為止,最后再輸出計算機一共猜了多少次。

分析:可以知道,只要用戶輸入的數字a和計算機隨機生成的數字不相等,循環就應該繼續執行下去,所以a與隨機數相等就是循環的停止條件。

補充:每次使用rand()函數就得到一個隨機的整數。計算機隨機生成的數一般都比較大,為了獲取兩位整數,可以將數據在輸出的時候對100取余。a%n(得到的結果是0~n-1)

printf("猜數字游戲(1-100)開始!\n");while (1) {printf("請輸入你的猜測:");scanf("%d", &guess);attempts++;if (guess > target) {printf("太大了!\n");} else if (guess < target) {printf("太小了!\n");} else {printf("恭喜你猜中了!數字是 %d。\n", target);printf("你一共猜了 %d 次。\n", attempts);break;}
}return 0;

4. 示例2-整數逆序

基本的方法:先對10取余,得到個位數,再除以10,去掉個位數;按此方法,再得到十位數、百位數……

(1)要在寫程序之前就確定好需要哪些變量;

(2)不同的題目有不一樣的要求,700對應的是007還是7,其表達的意思都是不一樣的,但是前者就算使用printf(不換行)也是可以做到的;后者有個十百千……位具體的要求,需要乘以相應的倍數。

#include <stdio.h>int main() {//不保留前導零,計算數值int num, reversed = 0;printf("請輸入一個最多三位數的整數:");scanf("%d", &num);// 使用 while 循環計算逆序while (num > 0) {reversed = reversed * 10 + num % 10;num /= 10;}printf("逆序結果:%d\n", reversed);return 0;
}輸出:
輸入:700
輸出:7   // 因為 007 和 7 數值相同

二、for循環

for(初始動作(1);條件(2);每輪的動作(3))
{//語句塊(4)
}

1. 在條件為真的情況下,執行的順序是(1)-(2)-(4)-(3);如果不滿足條件(2),就直接停止;如果滿足條件(2),則一定會執行(4)、(3)?

2.?(1)和(3)可以分別放到for語句的前后,在括號中省略,此時相當于while語句。

初始動作(1)for(  ;條件(2);   )
{//語句塊(4)
}每輪的動作(3)

理解:for循環就像一個計數循環:設定一個計數器,初始化,然后在計數器達到某值之前,重復執行循環體,而每執行一輪循環,計數器值以一定的步進進行調整:++或者--

3. 注意事項

(1)求和的程序初始值設為0;求積的程序初始值設為1。

(2)循環控制變量只在循環里面被用到了,在循環外面是無法訪問的,因此可以把該變量的定義直接寫在for語句中去。

(3)通過控制for語句后面的條件,可以控制語句能否進入到循環中,進而簡化運算。比如說for(int i = 1;i<=i,i*i),這個語句就根本沒有意義,就可以改變判斷條件,讓過程跳過該語句。

4. 循環的選擇

(1)次數:i=0;i<5;i++ ? 相當于 ?i=1;i<=5;i++ ?初始值和條件判斷是互相關聯的!!

(2)選擇方法

????????a)如果有固定的次數——for
b)如果無論如何必須要執行一次——do-while
c)其他情況——while

三、循環嵌套

1. 嵌套的循環

(1)外層循環控制行數,內層循環實行具體的語句(計算、空格…)

注意:

(1)每一層循環里面的計數變量應該是有區別的

(2)注意在for循環里面聲明的變量,不一定非要出現在條件語句里面,只要能夠控制循環的結束即可

(2)具體案例(右側圖案)

#include <stdio.h>int main() {int rows = 4; // 金字塔的行數for (int i = 0; i < rows; i++) {// 打印前導空格(用于居中)for (int space = 0; space < rows - i - 1; space++) {printf("  ");}// 打印左半部分(遞減字母)for (int j = i; j >= 0; j--) {printf("%c ", 'A' + j);}// 打印右半部分(遞增字母,從第二個字母開始)for (int j = 1; j <= i; j++) {printf("%c ", 'A' + j);}printf("\n");}return 0;
}輸出:A B A B C B A B C 
D C B A B C D 

(3)提高程序效率的方法

????????a)在滿足題目條件的情況下,在for循環中,用“break”提前結束程序的循環部分;
b)利用if語句的特點,用0和非0來標志是否進入循環以及“返回值”。

2. 跳出嵌套訓循環

案例-湊硬幣:如何用1/2/5角的硬幣湊出10元以下的金額?

(1)接力break(傳統教材方式):因為break和continue只能控制最近的循環,所以單純地把break放在想要結束的語句后面是行不通的。故同樣需要一個變量來記錄語句的成功和失敗。1表示成功;0表示失敗。在判斷語句中給變量重新賦值,之后想要結束循環的時候就可以直接“if(exit==1) break;”

(2)“goto語句”:離開所有的循環!!跳到最外面去!!最好只是在有多重嵌套的環境下使用。很多人認為這個“goto”破壞了程序的結構性!!

四、其他“碎碎念”

  1. 進入循環之前盡可能的保留一份原有數據,輸出的時候可能會用到(新定義一個變量用于存儲);
  2. 循環條件決定了能不能進入循環體 : x>2?x>=2?
  3. 預先設定的用于計數的變量和循環進入的條件是互相影響的,要考慮能不能進,計數次數是多了還是少了,要實踐。剛開始的時候可以用表格/手寫的方式分析;
  4. 自加、自減,要注意放在語句中的位置!(會影響循環的開始和結束)
  5. 循環控制
  • break:跳出最近的循環
  • continue:跳過最近的循環內部剩余的語句,到達該次循環的最后,再進入下一輪的循環(或者開始外部代碼)!

6. 不借用第三個變量實現數值交換

//用其中一個變量保存和,可以作差互相計算int i=3;j=5;j=i+j;  //j=3+5=8
i=j-i;  //i=8-3=5
j=j-i;  //j=8-5=3

寫在最后:

更新C語言學習筆記

如有錯誤,煩請多多批評指正!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96522.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

音視頻的下一站:協議編排、低時延工程與國標移動化接入的系統實踐

一、引言&#xff1a;音視頻的基礎設施化 過去十年&#xff0c;音視頻的兩條主線清晰可辨&#xff1a; 娛樂驅動&#xff1a;直播、電商、短視頻把“實時觀看與互動”變成高頻日常。 行業擴展&#xff1a;教育、會議、安防、政務逐步把“可用、可管、可控”引入產業系統。 …

SAM-Med3D:面向三維醫療體數據的通用分割模型(文獻精讀)

1) 深入剖析:核心方法與圖示(Figure)逐一對應 1.1 單點三維提示的任務設定(Figure 1) 論文首先將3D交互式分割的提示形式從“2D逐片(每片1點,共N點)”切換為“體素級單點(1個3D點)”。Figure 1直觀對比了 SAM(2D)/SAM-Med2D 與 SAM-Med3D(1點/體) 的差異:前兩者…

【Spring】原理解析:Spring Boot 自動配置進階探索與優化策略

一、引言在上一篇文章中&#xff0c;我們對 Spring Boot 自動配置的基本原理和核心機制進行了詳細的分析。本文將進一步深入探索 Spring Boot 自動配置的高級特性&#xff0c;包括如何進行自定義擴展、優化自動配置的性能&#xff0c;以及在實際項目中的應用優化策略。同時&…

OpenCV:圖像直方圖

目錄 一、什么是圖像直方圖&#xff1f; 關鍵概念&#xff1a;BINS&#xff08;區間&#xff09; 二、直方圖的核心作用 三、OpenCV 計算直方圖&#xff1a;calcHist 函數詳解 1. 函數語法與參數解析 2. 基礎實戰&#xff1a;計算灰度圖直方圖 代碼實現 結果分析 3. 進…

docke筆記下篇

本地鏡像發布到阿里云 本地鏡像發布到阿里云流程 鏡像的生成方法 基于當前容器創建一個新的鏡像&#xff0c;新功能增強 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] OPTIONS說明&#xff1a; OPTIONS說明&#xff1a; -a :提交的鏡像作者&#xff1b; -m :提交時的說…

《大數據之路1》筆記2:數據模型

一 數據建模綜述 1.1 為什么要數據建模背景&#xff1a; 隨著DT時代的來臨&#xff0c;數據爆發式增長&#xff0c;如何對數據有序&#xff0c;有結構地分類組織額存儲是關鍵定義&#xff1a; 數據模型時數據組織和存儲的方法&#xff0c;強調從業務、數據存取、使用角度 合理存…

“量子能量泵”:一種基于并聯電池與電容陣的動態直接升壓架構

“量子能量泵”&#xff1a;一種基于并聯電池與電容陣的動態直接升壓架構摘要&#xff1a;本文揭示了一種革命性的高效電源解決方案&#xff0c;旨在徹底解決低電壓、大功率應用中的升壓效率瓶頸與電池一致性難題。該方案摒棄傳統磁性升壓拓撲&#xff0c;創新性地采用并聯電池…

DeepSeek實戰--自定義工具

1. 背景 當前已經有很多AI基礎平臺&#xff08;比如&#xff1a;扣子、Dify&#xff09;&#xff0c;用戶可以快速搭建Agent&#xff0c;那怎樣將已有的接口能力給大模型調用呢 &#xff1f; 今天我們來探索一個&#xff0c;非常高效、快捷的方案&#xff1a;將http接口做成Dif…

“移動零”思路與題解

給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。思路講解&#xff1a;舉例如下&#xff1a;實現代碼是&#xff1a;class Solution { public:v…

關于行內元素,行內塊元素和塊級元素

1、什么是行內元素&#xff0c;什么是行內塊元素&#xff0c;什么是塊級元素行內元素的特點&#xff1a;不獨占一行&#xff0c;相鄰元素會在同一行顯示&#xff0c;直到一行排不下才換行。寬度和高度由內容本身決定&#xff0c;無法通過width&#xff0c;height手動設置&#…

?絡請求Axios的概念和作用

Axios 是一個基于 ??Promise?? 的輕量級、高性能 ??HTTP 客戶端庫??&#xff0c;主要用于在瀏覽器和 Node.js 環境中發起 HTTP 請求&#xff08;如 GET、POST、PUT、DELETE 等&#xff09;。它通過簡潔的 API 和強大的功能&#xff0c;簡化了前端與后端之間的數據交互過…

在AgentScope中實現結構化輸出

在AgentScope中實現結構化輸出 概述 在AgentScope框架中&#xff0c;結構化輸出功能允許開發者定義明確的輸出模式&#xff0c;確保AI模型的響應符合預期的格式和約束。本教程將介紹如何使用AgentScope的structured_model參數來實現結構化輸出。 結構化輸出的優勢 數據一致性&a…

Linux 磁盤I/O高占用進程排查指南:從定位到分析的完整流程

在Linux服務器運維工作中&#xff0c;磁盤I/O瓶頸是導致系統性能下降的常見原因之一。當服務器出現響應緩慢、應用卡頓等問題時&#xff0c;及時定位并解決高I/O占用進程就顯得尤為重要。本文將從核心思路出發&#xff0c;通過“確認問題-定位磁盤-鎖定進程-深入分析”四個步驟…

解決React中通過外部引入的css/scss/less文件更改antDesign中Modal組件內部的樣式不生效問題

不生效原因Ant Design 的 Modal 默認通過 ReactDOM.createPortal 掛在 <body> 下&#xff0c;與你的組件樹平級&#xff0c;所以寫在 .module.css / scoped less 里的選擇器根本匹配不到它&#xff0c;就算寫全局樣式&#xff0c;也可能因為權重不足或異步掛載時機而“看…

day41 51單片機最小系統、GPIO控制、時序邏輯器件(74HC138/595)與LED點陣驅動原理

day41 51單片機最小系統、GPIO控制、時序邏輯器件&#xff08;74HC138/595&#xff09;與LED點陣驅動原理一、嵌入式系統基礎概念 1.1 嵌入式系統定義先設計硬件&#xff0c;基于硬件設計軟件實現一個具體的功能 —— 專用的計算機系統硬件/軟件可剪裁&#xff1a;根據功能需求…

html列表總結補充

1.有序列表的type屬性不同的type值表示不同的排序標號1 表示列表項目用數字標號&#xff08;1,2,3...&#xff09; 1 a 表示列表項目用小寫字母標號&#xff08;a,b,c...&#xff09; 2 A 表示列表項目用大寫字母標號&#xff08;A,B,C...&#xff09; 3 i 表示列表項目用小寫羅…

smartctl Current_Pending_Sector 硬盤待處理扇區

smartctl -a /dev/sdae當前值: 312 個待處理扇區 嚴重警告信號&#xff0c;硬盤發現了 312 個可疑扇區&#xff0c;正在等待重新分配 197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 312讀取錯誤頻發 錯誤計數: 38 次 ATA 錯誤 …

MATLAB1-基本操作和矩陣輸入-臺大郭彥甫

目錄 基礎的指令 format 矩陣和向量 找出某行某列的矩陣元素 快速打出多個矩陣或者向量 矩陣連接 矩陣計算 一些特殊矩陣fuction 矩陣相關函數 基礎的指令 clc 清空命令行窗口 clear all 清空工作區的全部變量 who 將工作區的全部變量顯示出來 whos 工作區的變量信息詳…

【CSS 3D 交互】實現精美翻牌效果:從原理到實戰

效果圖 前言 在現代網頁設計中&#xff0c;交互效果是提升用戶體驗的重要手段。3D 翻牌效果作為一種常見的交互模式&#xff0c;廣泛應用于卡片展示、問答切換、產品詳情等場景。本文將詳細介紹如何使用 CSS 3D 技術實現一個精美的翻牌效果&#xff0c;并深入解析其實現原理。…

Python核心技術開發指南(062)——靜態方法

版權聲明 本文原創作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 靜態方法的定義 靜態方法是類中定義的一種特殊方法,它不需要依賴類實例或類本身即可調用,也不隱含傳遞self(實例引用)或cls(類引用)參數。在Python中,通過@staticmethod裝飾器來定義靜態…