C語言王國——選擇與循環(1)

目錄

一、引言

二、選擇結構

1,if語句

1.1,if...else...語句

1.2,多分支語句

1.3懸空else的問題

2,switch語句

2.1,switch

2.2,break

2.3,default


一、引言

? ? ? ?寫了幾個C語言代碼我發現C語言程序和我們做事一樣,按照順序做事,選擇做某事或者重復做某事。那我們繼續對C語言深入認知:

C語言是結構化的程序設計語言,這?的結構指的是順序結構、選擇結構、循環結構,C語言是能夠實 現這三種結構的,其實我們如果仔細分析,我們日常所見的事情都可以拆分為這三種結構或者這三種 結構的組合。

?順序結構:就如我們人做事一樣一樣的進行。

選擇結構:就是對多個分支選擇一個進行。用if、swich語句來實現。

循環語句:對同一件事反復進行。用for、while、do while語句來實現。

? ? ? ? 那接下來就讓我們了解這些結構:

二、選擇結構

*順序結構大家已經耳熟能詳了,C語言中也沒有對順序結構有特殊的語句所以不再做詳細敘述。

1,if語句

1.1,if...else...語句

if語句的語法表達式如下:

if (//表達式)
{//語句1
}
else//語句2

*若語句只為一句,大括號可以不加。

這個代碼執行的邏輯就是,表達式成立則執行語句1,反之則執行語句2。

那C語言怎么判斷表達式成立的呢?

在C語言中有一個特別的數0,0則代表假,非0則代表真。

舉一個例子方便大家理解:

輸出a和b中大的數字

if (a>b)
{printf("%d",a);
}
elseprintf("%d",b);

正如代碼上顯示的表達式為a>b,若成立則而1即為真,則打印a;若不成立則為0,即為假。則打印b,

1.2,多分支語句

? ? ?? 有細心的人就會發現只有if和else那只能分成兩種情況啊,那如果多種情況我們該如何編寫呢?其實大家不用擔心,C語言在設計的時候已經考慮到了這個問題,那就是在if..else...語句中,else可以與另外一個if語句連用,構成多重判斷。

舉個例子:

判斷整數的正負性

#include<srdio.h>int main()
{int num = 0;scanf("%d",&num);if(num > 0)printf("你輸入的數字為正數");else if(num < 0)printf("你輸入的數字為負數")elseprintf("你輸入的數字為0");return 0;
}

這個例子中就很好的利用到了else if,最后再加上一個else把沒有討論到的0也加上去。

*else if的使用其實就是構成了嵌套的if語句。

*if語句也可以在if語句中使用也屬于if語句的嵌套。

1.3懸空else的問題

? ? ? ?在寫代碼中常常會遇到else寫著寫著位置跑丟了,不知道跟誰匹配了。那接下來姜糖就跟大家聊一聊這個問題。

? ? ? ? 大家如果遇到有多個if和else,可以記住這樣的一條規則,else總是跟最接近的if匹配。那大家就來看看下面這個代碼:

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

?大家那想一想輸出結果是什么呢?

輸出結果為啥也沒有輸出,嘿嘿嘿,想到了嗎?

沒想到也沒有問題,接下來我們一起來分析一下:

? ? ? ?可能有些人會想else跟第一個if對齊的所以a=0不=1所以輸出haha。但我上面不是跟大家說過嗎,else總是跟最接近的if匹配所以else是和第二個if相匹配,而大家所認為的對齊和排版是不絕對這個的,大家可以試試你把代碼放一行也是可以運行的。排版只是方便程序員的理解。

比如我改一下這個代碼:

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

這樣子,大家是不是更好理解了。

? ? ? ? 或許有的人希望讓這個else與第一個if匹配那有什么辦法了。?豁,還真有辦法,數學中你想讓什么在一起計算加括號就行了,那我這邊也是不是可以加括號呢?是的,只不過加的是大括號。這樣我們就可以這樣修改這個代碼:

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

只要帶上適當的大括號,代碼的邏輯就會更加的清晰,所以大家以后在寫代碼的時候要注意括號的使用,讓代碼的可讀性更高。

2,switch語句

2.1,switch

在C語言中的選擇結構中除了if語句外,C語言還提供了switch語句來實現分支結構。

switch 語句是?種特殊形式的if...else 結構,用于判斷條件有多個結果的情況。它把多重 的 else if 改成更易用、可讀性更好的形式。

代碼定義如下:

switch(條件語句)
{case 條件1: 語句1case 條件2: 語句2default: 語句3
}

?switch語言中是根據條件語句中不同的值,執行相對應的case分支。如果沒有對應的值則執行default分支。

注:

*switch中的條件語句必須是整形表達式

*case后的值,必須是整形常量表達式

那讓我來用switch來舉個例子:

輸入一個整數輸入?3之后的余數

#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余數為0\n");break;case 1:printf("余數是1\n");break;case 2:printf("余數是2\n");break;}return 0;
}

以上的代碼有兩點值得我們注意:

1,case和后面的數字之間必須有空格。

2,每一個case語句中的代碼執行完之后,需加上break,才能跳出這個switch語句。

2.2,break

? ? ? ?細心的人已經發現了我在每一個case語句中的代碼執行完之后,加上了break,那如果不加會怎么樣呢?

#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余數為0\n");case 1:printf("余數是1\n");case 2:printf("余數是2\n");}return 0;
}

我們發現10/3余數為1,結構程序還多打印了一行余數為2。

這是為什么呢?

原因是 switch 語句也是分?效果的,只有在 switch 語句中使? break 才能在跳出 switch 語 句,如果某?個 case 語句的后邊沒有 break 語句,代碼會繼續玩下執行,有可能執行其他 case 語句中的代碼,直到遇到 break 語句或者 switch 語句結束。就比如上面的代碼就執行了 case 2 中的語句。 所以在 switch 語句中 break 語句是非常重要的,能實現真正的分支效果。 當然, break 也不是每個 case 語句都得有,這就得根據實際情況來看了。

2.3,default

在選擇結構的多分支中我們常常不能把情況選完,但可以把他們全都歸為一類,所以就誕生了else,和default。他們的用法是相同的,只不過放在不同的語句中。

接下來我就舉一個例子讓大家更深刻的了解他們(用default):

#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;default:printf("輸?錯誤\n");break;}}

在一個星期中只有七天,那輸入的超過7呢,那就提醒他輸入錯誤。

那default和case在switch語句中有順序要求嗎?答案是沒有的,只不過我們通常喜歡把default放在最后方便理解。

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

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

相關文章

ReduceTask工作機制

&#xff08;1&#xff09;Copy階段 ReduceTask從各個MapTask上遠程拷貝一片數據&#xff0c;并針對某一片數據&#xff0c;如果其大小超過一定閾值&#xff0c; 則寫到磁盤上 &#xff0c;否則直接放到內存中。 &#xff08;2&#xff09;Merge階段 在遠程拷貝數據的同時 &a…

go模擬經典面試題

講下MySQL事務 &#xff08;1&#xff09;事務的概念 事務就是對數據庫執行一系列操作&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部失敗&#xff0c;不會存在部分成功的情況。 &#xff08;2&#xff09;事務的ACID特點 原子性&#xff1a;一個事務中的所有操…

def用法 Python:深度解析函數定義與調用的奧秘

def用法 Python&#xff1a;深度解析函數定義與調用的奧秘 在Python的編程世界中&#xff0c;def 關鍵字如同一座神秘的燈塔&#xff0c;照亮了我們探索函數定義與調用的道路。它不僅是創建函數的起點&#xff0c;更是構建高效、可維護代碼的關鍵所在。本文將通過四個方面、五…

華為坤靈交換機S300, S500, S210,S220, S200, S310 如何WEB抓包

通過S系列交換機配置端口鏡像實現抓包 1、應用場景 端口鏡像是指將經過指定端口(源端口或者鏡像端口)的報文復制一份到另一個指定端口(目的端口或者觀察端口)。在網絡運營與維護的過程中&#xff0c;為了便于業務監測和故障定位&#xff0c;網絡管理員時常要獲取設備上的業務報…

FFmpeg中視頻 Filters 使用文檔介紹

FFmpeg中Filters 簡介 FFmpeg是一個強大的多媒體框架,它支持多種音視頻編解碼器、容器格式、協議等。其中,FFmpeg的Filters(過濾器)是FFmpeg中一個非常強大的功能,它允許用戶對音視頻數據進行各種處理,包括但不限于視頻濾鏡、音頻效果、視頻轉換等。 到目前為止,FFmpeg…

Lua使用方式介紹

背景 Lua是C語言開發的腳本語言&#xff0c;設計的目的是為了嵌入到程序中&#xff0c;因此被設計得輕量小巧。Nginx配置中可以直接嵌入Lua 代碼或引入Lua 文件&#xff0c;Redis支持運行Lua語句和腳本&#xff0c;Wireshark中使用Lua腳本自定義協議。 本文用于收集常用的語法…

JMeter源碼解析之SplashScreen.java

JMeter源碼解析之SplashScreen.java完結 SplashScreen.java主要作用 JMeter GUI啟動加載界面。 文件路徑 路徑地址&#xff1a;…\apache-jmeter-5.1\src\core\org\apache\jmeter\SplashScreen.java 關于SplashScreen內容中的代碼解析 package org.apache.jmeter;import …

隊列——一種操作受限的線性表

隊列 隊列&#xff08;Queue&#xff09;簡稱隊&#xff0c;也是一種操作受限的線性表&#xff0c;只允許在表的一端進行插入&#xff0c;而在表的另一端進行刪除。向隊列中插入元素稱為入隊或進隊&#xff0c;刪除元素稱為出隊或離隊。隊列中的元素是先進先出&#xff08;Fir…

大聰明教你學Java | 深入淺出聊 Stream.parallel()

前言 &#x1f34a;作者簡介&#xff1a; 不肯過江東丶&#xff0c;一個來自二線城市的程序員&#xff0c;致力于用“猥瑣”辦法解決繁瑣問題&#xff0c;讓復雜的問題變得通俗易懂。 &#x1f34a;支持作者&#xff1a; 點贊&#x1f44d;、關注&#x1f496;、留言&#x1f4…

MySQL學習——選項文件的使用

MySQL 的許多程序都可以從選項文件&#xff08;有時也被稱為配置文件&#xff09;中讀取啟動選項。選項文件提供了一種方便的方式來指定常用的選項&#xff0c;這樣你就不必每次運行程序時都在命令行上輸入這些選項。 要確定一個程序是否讀取選項文件&#xff0c;你可以使用 -…

man命令的作用

man命令是Linux操作系統中一個非常實用的命令&#xff0c;它用于查看命令的手冊頁面&#xff0c;幫助用戶了解特定命令的用法、選項和參數。這不僅對新用戶在學習如何使用新命令時很有幫助&#xff0c;也方便了經驗豐富的用戶快速查找命令的詳細信息。以下是具體介紹&#xff1…

[論文精讀]Supervised Community Detection with Line Graph Neural Networks

論文網址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是純手打的!論文原文的summarizing and paraphrasing。可能會出現難以避免的拼寫錯誤和語法錯誤,若有發現歡迎評論指正!文章偏向于筆記,謹慎食用 ?內涵大量可視…

高速模擬信號鏈的設計學習

目錄 概述&#xff1a; 定義&#xff1a; 斷開&#xff1a; 鏈路設計&#xff1a; 結論&#xff1a; 概述&#xff1a; 由于對共模參數及其與設備之間的關聯缺乏了解&#xff0c;客戶仍然會提出許多技術支持問題。ADC數據表指定了模擬輸入的共模電壓要求。關于這方面沒有太…

jenkins應用2

1.jenkins應用 1.jenkins構建的流程 1.使用git參數化構建&#xff0c;用標簽區分版本 2.git 拉取gitlab遠程倉庫代碼 3.maven打包項目 4.sonarqube經行代碼質量檢測 5.自定義制作鏡像發送到遠程倉庫harbor 6.在遠程服務器上拉取代碼啟動容器 這個是構建的整個過程和步驟…

C# 反射類Assembly 程序集(Assembly)用法

常見的兩種程序集&#xff1a; 可執行文件&#xff08;.exe文件&#xff09;和 類庫文件&#xff08;.dll文件&#xff09;。 在VS開發環境中&#xff0c;一個解決方案可以包含多個項目&#xff0c;而每個項目就是一個程序集。 他們之間是一種從屬關系&#xff0c;也就是說&…

java —— 匿名內部類與 Lambda 表達式

一、匿名內部類 匿名內部類是一種沒有名稱的類&#xff0c;多用于只使用一次的情況&#xff0c;本質上就是其所繼承的父類或接口的一個子類。 &#xff08;一&#xff09;繼承普通類的情況 public class Test{public void method(){System.out.println("通用方法"…

Python與Android連接:深入探索與實現

Python與Android連接&#xff1a;深入探索與實現 在現代移動應用開發領域&#xff0c;Python和Android的結合使用為開發者帶來了無限的可能性。這種跨平臺的組合不僅拓寬了開發者的視野&#xff0c;也極大地提升了應用的靈活性和可擴展性。本文將從四個方面、五個方面、六個方…

【NLP開發】Python實現聊天機器人(微信機器人)

&#x1f37a;NLP開發系列相關文章編寫如下&#x1f37a;&#xff1a;1&#x1f388;【小沐學NLP】Python實現詞云圖&#x1f388;2&#x1f388;【小沐學NLP】Python實現圖片文字識別&#x1f388;3&#x1f388;【小沐學NLP】Python實現中文、英文分詞&#x1f388;4&#x1…

轉讓北京電力施工總承包二級資質變更條件和流程

在電力工程領域&#xff0c;資質等級是企業能否參與競標、承接工程的重要標志之一。北京電力工程總包二級資質的轉讓&#xff0c;是指已經取得該資質的企業將其資質轉讓給需要的企業。這種轉讓是基于合作與共贏的原則&#xff0c;旨在推動電力工程行業健康、穩定發展&#xff0…

記錄使用自定義編輯器做試題識別功能

習慣了將解析寫在代碼注釋&#xff0c;這里就直接上代碼啦&#xff0c;里面用到的bxm-ui3組件庫是博主基于element-Plus做的&#xff0c;可以通過npm i bxm-ui3自行安裝使用 // 識別方法&#xff1a; // dom 當前識別數據所在區域, questionType 當前點擊編輯選擇的題目類型&a…