C語言分支和循環(2)

?我的相關博客:

C語言的分支與循環(1)

? ??

?1.switch語句

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

switch (expression)
{
case value1:statement1;break;
case value2:statement2;break;
default: statement3;break;
}

上面代碼中,value1,value2對應的是expression的值,如果expression的值符合?value1,則進入statement1,執行其中的語句,緊接著遇到break,退出這個switch

如果expression的值符合value2,則進入statement2,執行其中的語句,緊接著遇到break,退出這個switch

而上面的default,指的是value1、和value2以外的所有情況,都會進入statement3,執行其中的語句

注意:

switch 后的 expression 必須是整型表達式
case? ?后的值必須是整形常量表達式?

2.if語句和switch語句的對比?

?實例::輸?任意?個整數值,計算除2之后的余數

使用if語句時:

int n = 0;
scanf("%d", &n);
if (n % 2 == 0)printf("整除,余數為0\n");
elseprintf("余數是1\n");

而使用switch語句改寫,則:?

int n = 0;
scanf("%d", &n);
switch (n % 2)
{
case 0:printf("整除,余數為0\n");break;
case 1:printf("余數是1\n");break;
}

?需要注意的是:

case和后邊的數字之間必須有空格

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

3.switch中的break

switch中的break非常重要,是正確跳出switch的關鍵

如果沒有break,則執行相應的一條語句后,對之后的每一個case中的語句都會執行?

如下面這個例子:?

printf("輸入1~7的數字,打印星期幾\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:printf("星期一\n");
case 2:printf("星期二\n");
case 3:printf("星期三\n");
case 4:printf("星期四\n");
case 5:printf("星期五\n");
case 6:printf("星期六\n");
case 7:printf("星期天\n");
default:printf("輸入錯誤\n");
}

輸入:2?

輸出 :

??

如果要實現正確的功能,需要給加上 break,正確的代碼為:

printf("輸入1~7的數字,打印星期幾\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
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;
default:printf("輸入錯誤\n");break;
}

?當然,我們也可以依此實現一些功能,如下面這個代碼:

輸入1-5,輸出:工作日

輸入6-7,輸出:休息日?

int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:printf("工作日\n");break;
case 6:
case 7:printf("休息日\n");break;
default:printf("輸入錯誤\n");
}

?4.switch語句中的default

?在switch語句中,default歸納為 除了case之外的所有情況

滿足這個條件就會進入default中,default可以理解為:非目標值,或者無用值

關于default與case不需要考慮順序,可以case在前,也可以default在前,不影響代碼效果的實現,一般習慣將default放在最后

5.循環?

?C語言提供了3種循環,分別是:for循環、while循環、do-while循環

5.1for循環?

for(語句1;語句2;語句3)?

{

? ? ? ? 語句4;

}

for循環的小括號里面有3條語句 ,部分語句可以為空,但是必須有兩個分號

一次循環語句的執行順序為:

語句1——>語句2——>語句4——>語句3?

如果語句循環多次,執行的順序為:?

?語句1——>語句2——>語句4——>語句3——>語句1——>語句2——>語句4......

(語句1 ,2,4,3...1,2,4,3的循環)

這個執行順序是固定的,根據這個邏輯,可以完成大量的循環運算

?實例:計算1到10相加的和

int sum = 0;
for (int i = 1; i <= 10; i++)
{sum = sum + i;
}
printf("相加的和為%d", sum);

運行結果:

相加的和為55?

上面循環停止的關鍵在于 i <= 10?,所以語句2一般是循環停止的條件

?實例:打印1到10

for (int i = 1; i <= 10; i++)
{printf("%d ", i);
}

?運行結果:

1 2 3 4 5 6 7 8 9 10

5.2while循環?

while 循環的語法結構?和 if 非常相似?

if(表達式)

{

????????語句;

}?

while(表達式)

{

? ? ? ? 語句;

}?

while循環的執行順序為:表達式——>語句——>表達式——>語句——>......?

?先上來就是執?判斷表達式,若表達式的值為0,循環直接結束

表達式的值不為0,則執?循環語句,語句執?完后再繼續判斷,是否進?下?次循環語句

實例:計算1到10相加的和(可與上面的for循環對比)

int sum = 0;
int i = 1;
while (i <= 10)
{sum = sum + i;i++;
}
printf("和為%d\n", sum);

運行結果:

和為55?

?while循環和for循環對比:

while與for循環都有:初始化、判斷,和調整這三個部分,但是for循環?常集中,便于代碼的維護?

5.3do while循環?

do while語句的使用較少,語法是:

do

{

? ? ? ? 語句;

}while(表達式)?

do while循環和while循環非常相似,只是先執行了一次語句再判斷表達式是否成立

因此,即使表達式不成立,也會先執行一次語句(與C語言的代碼,從上往下執行相對應)

如:?

int n = 0;
do
{printf("執行\n");
} while (n);

運行結果:

執行?

6.break和continue

在循環執?的過程中,如果某些狀況發?的時候,需要提前終?循環,這是?常常?的現象

C語?中提供了 break 和 continue 兩個關鍵字,就是應用到循環來終止的

6.1while循環中的break和continue?

先看一個實例:

1.break

#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)break;printf("%d ", i);i = i + 1;}return 0;
}

運行結果:1 2 3 4?

2.continue?

#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)continue;printf("%d ", i);i = i + 1;}return 0;
}

運行結果:1 2 3 4 (死循環)

上面代碼中的if沒有使用花括號{ },只能控制一條語句,即break,或者continue,而之后的代碼不受if的控制?

通過對比,不難看出, while 中的 break 跳過相應的while整個循環

而 while 中的 continue 只是跳過本次循環,也跳過了i = i + 1這條語句,因此,i一直停留在4,陷入死循環

?6.2for循環中的break和continue

1.break

#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}return 0;
}

?這里break的含義是跳過for循環,因此,運行結果與while中的break相同

運行結果:1 2 3 4?

2.continue?

#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}return 0;
}

?運行結果:1 2 3 4 6 7 8 9 10

這里的continue和while中的continue相同,跳過本次循環,但是由于i++還是會執行

所以 i 可以繼續自增,往后執行

6.3do while中的break和continue?

do while中的 break 和 continue 與 while 中的幾乎一模一樣

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

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

相關文章

非質量成本總結

非質量成本 非質量成本 定義 舉例 固定成本 不隨生產量或工作量變動而變動的成本 辦公室租賃費 可變成本 隨著生產量或工作變動而變動的成本 材料費 直接成本 可以直接計入某項目的成本 工人工資 間接成本 不能直接計入某項目而需要再幾個項目之間或在項目與職能部…

Linux基本指令3

Linux基本指令3 目錄 Linux基本指令3 一、Linux文件系統管理 二、Linux進程與服務管理

億發:制造型企業信息化規劃——從破冰到全面落地

在制造型企業中&#xff0c;信息化規劃的落地是一個復雜而關鍵的過程。盡管規劃和藍圖可能已經制定完畢&#xff0c;但如何成功地實施信息化才是關鍵所在。本文將詳細介紹制造型企業信息化規劃的落地過程&#xff0c;通過三個周期逐步推進&#xff0c;最終實現信息化與自動化的…

深度學習知識與心得

目錄 深度學習簡介 傳統機器學習 深度學習發展 感知機 前饋神經網絡 前饋神經網絡&#xff08;BP網絡&#xff09; 深度學習框架講解 深度學習框架 TensorFlow 一個簡單的線性函數擬合過程 卷積神經網絡CNN&#xff08;計算機視覺&#xff09; 自然語言處理NLP Wo…

OpenAI助手API接入-問答對自動生成

支持GPT-3.5-Turbo, GPT-4o, GPT-4-Turbo import json import openai from pathlib import Path import os client openai.OpenAI(base_urlbase_url, api_keyapi_key) file client.files.create( fileopen("H3.pdf", "rb"), purposeassistants ) …

HTTP 的三次握手

????? HTTP 的三次握手是指在建立 TCP 連接時&#xff0c;客戶端和服務器之間進行的三步握手過程。這個過程確保了雙方都能夠互相通信&#xff0c;并且同步了彼此的序列號和確認號。 概念&#xff1a; 第一次握手&#xff1a;客戶端發送一個 SYN&#xff08;同步…

2.1數據的表示和運算--進位制

2.數據的表示和運算 2.1進位制 &#x1f53a;問題&#xff1a;計算機采用二進制有什么優點&#xff1f; 答&#xff1a; 1.制造兩個穩態的物理器件較容易。 2.二進制的運算規則簡單。 3.便于用邏輯門電路實現運算。 4.二進制的0和1正好對應邏輯值真和假。 &#x1f53a;…

成功解決“ModuleNotFoundError: No Module Named ‘utils’”錯誤的全面指南

成功解決“ModuleNotFoundError: No Module Named ‘utils’”錯誤的全面指南 在Python編程中&#xff0c;遇到ModuleNotFoundError: No Module Named utils這樣的錯誤通常意味著Python解釋器無法找到名為utils的模塊。這可能是由于多種原因造成的&#xff0c;比如模塊確實不存…

念念不忘,必有回響 的 echo

念念不忘&#xff0c;必有回響 的 echo 念念不忘&#xff0c;必有回響 的 echo幾個示例更多信息 念念不忘&#xff0c;必有回響 的 echo echo命令用于在終端設備上輸出字符串或變量的值&#xff0c;類似于Python的print和C語言的printf&#xff0c;是Linux系統中最常用的命令…

【GIC400】——PLIC,NVIC 和 GIC 中斷對比

文章目錄 PLIC,NVIC 和 GIC 中斷對比中斷向量表PLIC中斷向量表中斷使能中斷服務函數NVIC中斷向量表中斷使能中斷服務函數GIC中斷向量表系列文章 【ARMv7-A】——異常與中斷 【ARMv7-A】——異常中斷處理概述

深度學習筆記:0.cuda安裝,成功

B站上說&#xff1a;cs上騙子太多。文章太久&#xff0c;我深以為然。用了一天。才裝好。其實很簡單。 CUDA安裝教程&#xff08;超詳細&#xff09;-CSDN博客文章瀏覽閱讀1w次&#xff0c;點贊5次&#xff0c;收藏56次。windows10 版本安裝 CUDA &#xff0c;首先需要下載兩個…

AI技術的演進與未來

隨著科技的不斷進步&#xff0c;人工智能&#xff08;AI&#xff09;技術已經成為引領時代發展的重要力量。從最初的模糊概念到如今的具體應用&#xff0c;wre98.cnAI技術已經滲透到我們生活的方方面面&#xff0c;并不斷拓展其邊界。本文將探討AI技術的演進歷程、當前應用領域…

【并發程序設計】總篇集(八萬字)

11_Concurrent_Programing 1.進程概念 在Linux中&#xff0c;進程是操作系統分配資源和調度運行的基本單位。 Linux中的進程有以下用處&#xff1a; 提高CPU利用率&#xff1a;通過進程的并發執行&#xff0c;可以讓多個程序同時利用計算機的資源&#xff0c;這樣每個用戶都…

Springboot與mongodb集成及聚合查詢

Spring Boot 與 MongoDB 的集成為開發者提供了一種簡便的方式來構建高性能、基于文檔的數據驅動應用程序。MongoDB 是一個非關系型數據庫&#xff08;NoSQL&#xff09;&#xff0c;它使用 JSON 格式的文檔進行數據存儲&#xff0c;非常適合處理大量的、半結構化的數據。而 Spr…

mybatisplus 字段存的是json 在查詢的時候怎么映射成對象

數據庫交互對象 TableName(value "表名", autoResultMap true)TableField(typeHandler JacksonTypeHandler.class, value "user_info")private User user;autoResultMap 是一個 MyBatis-Plus 中的注解屬性&#xff0c;用于控制是否自動生成結果映射。…

部署metrics-server

kubeadm部署metrics-server 需求&#xff1a;生產環境是kubeadm部署的v1.22.2版本的k8s&#xff0c;統計資源時發現這套環境沒有部署metrics-server這個服務&#xff0c;今天來部署一下 1、在github社區找到這個項目并下載 rootjumpserver-cmcc:~# wget https://github.com/…

你需要知道關于 Java 線程一些最基本的事情

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

百度云下載不限速方式集合

使用解析網站配合Motrix工具軟件 下載Motrix工具&#xff1a;Motrix下載鏈接打開解析網址&#xff1a;解析網站獲取&#xff0c;將百度網盤鏈接粘貼到解析網站&#xff0c;獲取下載鏈接。在Motrix中配置Aria2 RPC地址&#xff1a;ws://localhost:16800/jsonrpc開始下載&#x…

《SpringBoot3+Vue3實戰》系列文章目錄

前后端分離&#xff08;Frontend-Backend Separation&#xff09;是一種軟件架構設計模式&#xff0c;它將傳統的Web應用中的前端&#xff08;用戶界面&#xff09;和后端&#xff08;服務器邏輯和數據存儲&#xff09;從應用層面進行解耦&#xff0c;使得兩者可以獨立地開發、…