【C語言】分支與循環(上)

前言:C語言是由順序結構、選擇結構、循環結構組成的結構化的程序設計語言。?那C語言是如何設計和實現這些結構的呢?話不多說,馬上開始。

三種結構如圖所示:

我們可以使用?if else語句、 switch語句 來實現選擇(分支)結構,使用for 、 while 、 do while 來實現循環結構。

ps:本篇將先總結分支結構的知識,循環結構留到(下)篇。

看完覺得有幫助的話記得點贊收藏加關注哦~

目錄

一、關系、條件、邏輯操作符

?二、if else 語句

三、switch語句

四、分支結構小練習:判斷閏年


首先補充分支與循環必備操作符

一、關系、條件、邏輯操作符

(1)關系操作符:

C語??于?較的表達式,稱為“關系表達式”,??使?的運算符就稱為“關系運算符”,主要有下?6個。

>:?于運算符
<:?于運算符
>=:??于等于運算符
<=:?于等于運算符
==: 相等運算符
!=: 不相等運算符

用法:用于比較兩個值的大小或相等性,結果通常返回0或1,表示真假。

  • eg:20<25是正確的,結果返回1;25<20是錯誤的,結果返回0。

(2)條件操作符:

條件操作符需要接受三個參數,因此又叫三目操作符。形式如下(exp是表達式expression的縮寫):

?exp1 ? exp2 : exp3

用法:如果exp1為真, exp2計算,計算的結果是整個表達式的結果;如果exp1為假, exp3計算,計算的結果是整個表達式的結果。

  • eg:1<2?1:0 exp1是1<2,結果為真,計算exp2,結果是本身。因此這個表達式最終的結果就是exp2的結果1。

(3)邏輯運算符

提供邏輯判斷功能,?于構建更復雜的表達式,主要有下?三個運算符。

! :邏輯取反運算符(改變單個表達式的真假)。

&& :與運算符,就是并且的意思(兩側的表達式都為真,則為真,否則為假)。
|| :或運算符,就是或者的意思(兩側?少有?個表達式為真,則為真,否則為假)。

  • eg:!0為非零表示真,1&&0為假,1||0為真。

?二、if else 語句

(1)結構:

if(表達式)語句1;
else語句2;

?執行流程:

  • step1:判斷if中表達式的真假。
  • step2:表達式為真?執行if中的語句1,跳過else。
  • step3:表達式為假?跳過if,直接執行else中的語句2。

tips:上面的結構僅適用于單語句的情況,因為if和else只能控制一條語句,當分支中包含多條語句時要用大括號{}將多條語句括起來形成代碼塊

if(表達式)
{語句1;語句3;
}
else
{語句3;語句4;
}

?先看一個問題:輸??個分數,>=60分就輸出:及格,<=60分就輸出:不及格。

下面三種寫法都可以解決這個問題

int score=0;
scanf("%d",&score);//輸入一個成績①if(score>=60)printf("及格");elseprintf("不及格");②if(score>=60)printf("及格");if(score<=60)printf("不及格");③if(score>=60)printf("及格");else if(score<=60)//嵌套ifprintf("不及格");

(2)嵌套if(else if)

在 if else 語句中, else 可以與另?個 if 語句連?,構成多重判斷

#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num > 0)printf("輸?的數字是正數\n");else if(num < 0)                     printf("輸?的數字是負數\n");//這?的if 相當于嵌套在else語句中,形成了嵌套結構elseprintf("輸?的數字是0\n");return 0;
}

(3)懸空else問題

先看這樣一段代碼:

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("11\n");elseprintf("22\n");return 0;
}

大家覺得結果輸出什么呢??

小飛在初學階段看到這段代碼時本能的以為結果應該打印11,但實際上什么也不輸出。

為什么會這樣呢?這就是懸空else問題。分析如下:

在編寫代碼時,如果遇到多個if和else語句。需要注意一個規則:else總是與最接近的if匹配。有時候,代碼的排版可能會讓人產生誤解,比如上面的else與第一個if對齊,從而誤以為當第一個if條件不成立時,會執行else子句。但實際上,else是和第二個最近的if語句匹配,形成嵌套的if else語句。如果第一個if條件不成立,那么嵌套的if和else語句根本就沒有機會執行,因此最終可能什么都不會打印。

為了讓代碼更容易理解,我們應該調整代碼塊(添加大括號),使else與其真正匹配的if語句關系更加清晰。

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1){if(b == 2)printf("11\n");}else{printf("22\n");}return 0;
}

帶上適當的?括號形成代碼塊,代碼的邏輯就會更加的清晰,所以以后在寫代碼的時候要注意括號的使?,讓代碼的可讀性更?。


三、switch語句

除了 if 語句外,C語?還提供了 switch 語句來實現分?結構。switch語句可以看作是?種特殊形式的if else語句,?于判斷條件有多個結果的情況。它把多重的 else if 改成更易?、可讀性更好的形式。

(1)結構:

switch (表達式) 
{case value1:語句1;case value2: 語句2;default: 語句3;
}

上?結構中,根據表達式不同的值,執?相應的 case 分?。如果找不到對應的值,就執? default 分?。
注意:

  • switch 后的(表達式)必須是整型表達式(可以是數值,也可以是表達式,如a+b,a,b均是變量)。
  • case 后的value值,必須是整形常量表達式(只能是數值,如1、2)。
  • case 和后邊的數字之間必須有空格

(2)break和default

①break

每?個 case 語句中的代碼執?完成后,需要加上 break ,才能跳出這個switch語句

eg:

寫一個輸入?個1~7的數字,打印對應的星期?的程序:

#include <stdio.h>
int main()
{int day = 0;scanf("%d", &day);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 也不是每個 case 語句都得有,這就得根據實際情況來看了。?

比如當判斷星期幾是工作日還是休息日時,我們可以只在星期五和星期日時寫break,這樣在遇到星期1~5時因為沒有break 語句,代碼會繼續往下執?直到最后一個滿足工作日的星期跳出。

#include <stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("?作?\n");break;case 6:case 7:printf("休息?\n");break;}return 0;
}

②default

在使? switch 語句的時候,我們經常可能遇到?種情況,?如 switch 后的表達式中的值?法匹配代碼中的 case 語句的時候,這時候要不就不做處理,要不就得在 switch 語句中加?default ?句。switch 后邊的表達式結果不是 value1 ,也不是 value2 的時候,就會執?default ?句
就?如上面打印星期的練習,如果 day 的輸?不是1~7的值,如果我們要提?:輸?錯誤,即可:

switch(day){case 1:case 2:case 3:case 4:case 5:printf("?作?\n");break;case 6:case 7:printf("休息?\n");break;default://輸入無匹配printf("輸?錯誤\n");break;}

tips:switch語句中的case和default無順序要求,只要順序是滿?實際需求的就可以。不過習慣把?default ?句放在最后處理。


四、分支結構小練習:判斷閏年

輸??個年份year,判斷year是否是閏年?

閏年判斷的規則:
能被4整除并且不能被100整除是閏年,即滿足year%4==0 && year%100!=0
能被400整除是閏年,即滿足year%400==0

參考代碼:

#include <stdio.h>
int main()
{int year = 0;scanf("%d", &year);if(year%4==0 && year%100!=0)printf("是閏年\n");else if(year%400==0)printf("是閏年\n");return 0;
}

?結語:非常感謝耐心看到這里的小伙伴,本文主要講了分支與循環中的分支結構,它們是代碼中的重要組成成分,是構建任何復雜結構的基石。下期主要圍繞循環結構展開。本篇文章到此結束,我們下期再見!

如果上述內容對您有幫助的話,還請點贊收藏?

如果發現內容有誤,還請給予指正,十分感謝:>

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

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

相關文章

一次與chatgpt關于VO的深入討論。

我&#xff1a; {"usageRate":50,"projectInfo":[{"productName":"長江一號","deviceInfo":[{"deviceName":"AA","num":10},{"deviceName":"BB","num":3}]},…

Springboot學習筆記3.20

目錄 1.實戰篇第一課 我們將會在本次實戰中學習到哪些知識點&#xff1f; 開發模式和環境搭建&#xff1a; 注冊接口 1.Lombok 2.開發流程 1.controller層&#xff0c;這個層會指明訪問路徑和要執行的邏輯&#xff1a; 2.我們把返回結果根據接口文檔包裝成一個類result&a…

docker save如何遷移鏡像更節省空間?

文章目錄 方法一&#xff1a;使用docker save命令方法二&#xff1a;直接保存多個鏡像到一個tar文件哪個方法更節省磁盤空間&#xff1f;空間效率對比實際測試示例其他優勢結論 如何用腳本遷移加載鏡像 遷移鏡像時候&#xff0c;往往會碰到基礎鏡像相同的很多鏡像需要遷移&…

全新升級 | Built For You Spring ‘25 發布,Fin 智能客服實現新突破!

圖像識別、語音交互、任務自動化&#xff0c;立即體驗智能客服蛻變&#xff01; 上周&#xff0c;Intercom 舉辦了 Built For You Spring 25 發布會&#xff0c;正式揭曉了 AI Agent Fin 的一系列令人振奮的更新。Fin 正在以前所未有的速度革新客戶支持模式——它已經成功解決了…

需求導向的K8S網絡原理分析:Kube-proxy、Flannel、Calico的地位和作用

最近發現自己似乎從來沒學明白過Kubernetes網絡通信方案&#xff0c;特開一貼復習總結一下。 在k8s中&#xff0c;每個 Pod 都擁有一個獨立的 IP 地址&#xff0c;而且假定所有 Pod 都在一個可以直接連通的、扁平的網絡空間中。所以不管它們是否允許在同一個 Node&#xff08;宿…

Vulnhub:Digitalword.local: FALL靶機滲透

將靶機按照圖中連接方式打開&#xff0c;fall在virtualBox中打開 信息收集 掃描得ip arp-scan -l 掃描端口 nmap -A -T4 -sV -p- 掃描目錄 gobuster dir -u http://192.168.117.160 -x php,txt,html -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 一個一個…

4、網工軟考—VLAN配置—hybird配置

1、實驗環境搭建&#xff1a; 2、實驗過程 SW1&#xff1a; 先創建vlan2和vlan3 [Huawei-Ethernet0/0/2]port link-type hybrid //hybird端口 [Huawei-Ethernet0/0/2]port hybrid pvid vlan 2 [Huawei-Ethernet0/0/2]port hybrid untagged vlan 10 //撕掉vlan10的標簽 …

【OCR】技術

OCR圖像識別 一、OCR是什么二、Python中如何實現OCR1.簡單應用 三、OCR的核心步驟1.?圖像預處理?&#xff08;提高識別準確率&#xff09;2.?文字識別3.?輸出結果 四、OCR到的應用場景五、注意事項六、擴展學習 此貼用來更新在工作中遇到的一些圖片解析內容 一、OCR是什么 …

深入理解 dispatchEvent:前端事件觸發的藝術

dispatchEvent 是 DOM 元素的一個方法&#xff0c;用于手動觸發/派發一個事件。這個方法允許開發者以編程方式觸發事件&#xff0c;而不是等待用戶交互或瀏覽器自動觸發。 1.基本概念 作用&#xff1a;dispatchEvent 用于在指定的 DOM 節點上觸發一個事件 使用場景&#xff1…

2025年數智化電商產業帶發展研究報告260+份匯總解讀|附PDF下載

原文鏈接&#xff1a;https://tecdat.cn/?p41286 在數字技術與實體經濟深度融合的當下&#xff0c;數智化產業帶正成為經濟發展的關鍵引擎。 從云南鮮花產業帶的直播熱銷到深圳3C數碼的智能轉型&#xff0c;數智化正重塑產業格局。2023年數字經濟規模突破53.9萬億元&#xff…

【深度學習】【目標檢測】【OnnxRuntime】【C++】YOLOV5模型部署

【深度學習】【目標檢測】【OnnxRuntime】【C】YOLOV5模型部署 提示:博主取舍了很多大佬的博文并親測有效,分享筆記邀大家共同學習討論 文章目錄 【深度學習】【目標檢測】【OnnxRuntime】【C】YOLOV5模型部署前言Windows平臺搭建依賴環境模型轉換--pytorch轉onnxONNXRuntime推…

深入解析 JSON-RPC:從基礎到高級應用(附調用示例)

在當今的軟件開發領域&#xff0c;遠程過程調用&#xff08;RPC&#xff09;技術是實現分布式系統間通信的關鍵手段之一。JSON-RPC&#xff0c;作為一種基于 JSON 數據格式的輕量級 RPC 協議&#xff0c;因其簡潔性和高效性而備受青睞。本文將全面深入地探討 JSON-RPC 的核心概…

抽象代數:群論

系列筆記為本學期上抽象代數課整理的&#xff0c;持續更新。 群的相關定義 群的定義 群是一個帶有滿足結合律、單位元、逆元的二元運算的集合&#xff0c;記作 ( G , ? ) \left({G, \cdot}\right) (G,?)。若群運算滿足結合律&#xff0c;則該集合構成半群。如果該半群中含…

線程同步——讀寫鎖

Linux——線程同步 讀寫鎖 目錄 一、基本概念 1.1 讀寫鎖的基本概念 1.2 讀寫鎖的優點 1.3 讀寫鎖的實現 1.4 代碼實現 一、基本概念 線程同步中的讀寫鎖&#xff08;Read-Write Lock&#xff09;&#xff0c;也常被稱為共享-獨占鎖&#xff08;Shared-Exclusive Lock&a…

全面解析PRN文件:從原理到可視化的完整指南 【標簽打印】

文章目錄 一、PRN文件概述二、PRN文件結構深度解析2.1 文件頭配置2.1 繪圖指令詳解2.3 文本處理方案2.4 條碼/二維碼實現2.5 RFID指令集 三、實戰&#xff1a;PRN可視化工具開發3.1 基于Canvas的實現方案3.2 坐標轉換關鍵算法 四、常見問題解決方案4.1 內容偏移問題4.2 中文亂碼…

C++:函數(通識版)

一、函數的基礎 1.什么是函數&#xff1f;&#xff08;獨立的功能單位&#xff09; 函數是C中封裝代碼邏輯的基本單元&#xff0c;用于執行特定任務。 作用&#xff1a;代碼復用、模塊化、提高可讀性。 2、函數的基本結構 返回類型 函數名(參數列表) {// 函數體return 返回值…

sql注入語句學習

說明 注入漏洞作為登頂過web十大漏洞多次的漏洞&#xff0c;危害性不言而喻&#xff0c;其中sql注入就是注入漏洞常用的手段。其形成的原因是由于web在接收傳參數據時&#xff0c;對數據的過濾不夠嚴格&#xff0c;將其帶入到數據庫查詢中&#xff0c;導致用戶可以通過傳參一些…

云鑰科技多通道工業相機解決方案設計

項目應用場景分析與需求挑戰 1. 應用場景 ?目標領域?&#xff1a;工業自動化檢測&#xff08;如精密零件尺寸測量、表面缺陷檢測&#xff09;、3D立體視覺&#xff08;如物體建模、位姿識別&#xff09;、動態運動追蹤&#xff08;如高速生產線監控&#xff09;等。 ?核心…

離散的數據及參數適合用什么算法做模型

離散數據和參數適用的機器學習算法取決于具體任務(分類、回歸、聚類等)、數據特點(稀疏性、類別數量等)以及業務需求。以下是針對離散數據的常用算法分類和選擇建議: 1. 分類任務(離散目標變量) 經典算法 決策樹(ID3/C4.5/CART) 直接處理離散特征,無需編碼,可解釋性…

VMware 安裝 Ubuntu 實戰分享

VMware 安裝 Ubuntu 實戰分享 VMware 是一款強大的虛擬機軟件&#xff0c;廣泛用于多操作系統環境的搭建。本文將詳細介紹如何在 VMware 中安裝 Ubuntu&#xff0c;并分享安裝過程中的常見問題及解決方法。 1. 安裝前的準備工作 (1) 系統要求 主機操作系統&#xff1a;Windo…