珠海網(wǎng)站設(shè)計(jì)全球十大搜索引擎排名及網(wǎng)址
目錄😋
任務(wù)描述
編程要求
相關(guān)知識(shí)
1. 選擇結(jié)構(gòu)
2. 主要語(yǔ)句類型
3. 比較操作
4. 交換操作
測(cè)試說明
通關(guān)代碼
測(cè)試結(jié)果
任務(wù)描述
本關(guān)任務(wù):從鍵盤上輸入三個(gè)數(shù),請(qǐng)按從小到大的順序排序并打印輸出排序后的結(jié)果。
編程要求
根據(jù)提示,在右側(cè)編輯器 Begin-End 之間補(bǔ)充代碼,計(jì)算并輸出對(duì)應(yīng)二次方程的根。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
- 選擇結(jié)構(gòu)基本概念
- 選擇結(jié)構(gòu)主要語(yǔ)句類型
- 比較操作
- 交換操作
1. 選擇結(jié)構(gòu)
選擇結(jié)構(gòu)是程序設(shè)計(jì)中的一種基本結(jié)構(gòu),用于根據(jù)給定條件決定程序執(zhí)行的不同分支路徑。其核心在于對(duì)條件表達(dá)式進(jìn)行求值判斷,當(dāng)條件滿足特定要求時(shí),程序執(zhí)行相應(yīng)的一組語(yǔ)句;若條件不滿足,則可能執(zhí)行其他分支語(yǔ)句或跳過當(dāng)前代碼塊繼續(xù)執(zhí)行后續(xù)程序。
?條件表達(dá)式通常由關(guān)系運(yùn)算符(如大于、小于、等于等)、邏輯運(yùn)算符(如與、或、非)以及其他能產(chǎn)生布爾值的表達(dá)式構(gòu)成。例如,在判斷一個(gè)數(shù)是否大于 10 的場(chǎng)景中,條件表達(dá)式為 “num> 10”,這里的 “num” 是程序中的變量,通過比較其值與 10 的大小關(guān)系來確定條件的真假。
?常見的選擇結(jié)構(gòu)形式包括 if 語(yǔ)句、if - else 語(yǔ)句和 switch 語(yǔ)句。if 語(yǔ)句是最基礎(chǔ)的形式,當(dāng)條件為真時(shí)執(zhí)行其內(nèi)部的語(yǔ)句塊;if - else 語(yǔ)句在 if 條件不成立時(shí)提供了另一個(gè)可執(zhí)行的語(yǔ)句塊,確保在兩種不同條件結(jié)果下程序都有明確的執(zhí)行路徑;switch 語(yǔ)句則適用于針對(duì)一個(gè)表達(dá)式的多個(gè)固定值進(jìn)行判斷,根據(jù)表達(dá)式的值與各個(gè) case 后的常量值匹配情況,執(zhí)行相應(yīng) case 分支下的語(yǔ)句,直到遇到 break 語(yǔ)句跳出 switch 結(jié)構(gòu),若沒有匹配值則執(zhí)行 default 分支(可選)。選擇結(jié)構(gòu)使得程序能夠模擬現(xiàn)實(shí)生活中的決策過程,對(duì)不同情況做出不同反應(yīng),從而實(shí)現(xiàn)復(fù)雜的邏輯和功能,增強(qiáng)程序的靈活性和適應(yīng)性,廣泛應(yīng)用于各類編程場(chǎng)景,如數(shù)據(jù)處理、算法實(shí)現(xiàn)、用戶交互邏輯處理等,是構(gòu)建有效程序邏輯的關(guān)鍵組成部分。
2. 主要語(yǔ)句類型
條件語(yǔ)句(if、if-else、switch)
- if 語(yǔ)句:
if
語(yǔ)句是 C 語(yǔ)言中用于實(shí)現(xiàn)條件判斷和分支執(zhí)行的基本結(jié)構(gòu)之一。其核心在于根據(jù)給定的條件表達(dá)式的真假來決定是否執(zhí)行特定的代碼塊。
- 條件表達(dá)式可以是任何能夠得出布爾值(真或假)的表達(dá)式,例如比較運(yùn)算(
>
、<
、>=
、<=
、==
、!=
)、邏輯運(yùn)算(&&
、||
、!
)以及函數(shù)調(diào)用(只要函數(shù)返回值能被隱式轉(zhuǎn)換為布爾值)等的組合。例如:if (a > 10 && b < 20) { /* 執(zhí)行語(yǔ)句 */ }
,這里只有當(dāng)a
大于10
并且b
小于20
這兩個(gè)條件同時(shí)滿足時(shí),花括號(hào)內(nèi)的代碼才會(huì)被執(zhí)行。- 執(zhí)行語(yǔ)句塊可以是一條或多條語(yǔ)句,如果只有一條語(yǔ)句,花括號(hào)可以省略,但為了增強(qiáng)代碼的可讀性和可維護(hù)性,通常建議加上花括號(hào)。例如:
if (x == 5) printf("x is 5\n");
?這種寫法在簡(jiǎn)單情況下可行,但如果后續(xù)需要添加更多語(yǔ)句,就容易出現(xiàn)錯(cuò)誤,而寫成?if (x == 5) { printf("x is 5\n"); otherFunctionCall(); }
?則更加清晰和安全。
- if - else 語(yǔ)句:
if - else
語(yǔ)句在if
語(yǔ)句的基礎(chǔ)上,為條件不成立的情況提供了另一個(gè)執(zhí)行路徑。當(dāng)if
后面的條件表達(dá)式為假時(shí),就會(huì)執(zhí)行else
后面的語(yǔ)句塊。
- 這種結(jié)構(gòu)在很多實(shí)際場(chǎng)景中非常有用,比如前面提到的判斷成績(jī)是否及格的例子,它確保了程序在任何情況下都有明確的輸出,避免了因條件不滿足而導(dǎo)致的不確定性。再比如在一個(gè)判斷數(shù)字正負(fù)性的程序中:
if (num > 0) { printf("正數(shù)\n"); } else if (num < 0) { printf("負(fù)數(shù)\n"); } else { printf("零\n"); }
,這里通過else if
進(jìn)一步細(xì)分了條件,對(duì)num
的三種可能情況(大于0
、小于0
、等于0
)都進(jìn)行了相應(yīng)的處理,使程序的邏輯更加嚴(yán)謹(jǐn)和完整。- 用于根據(jù)不同條件執(zhí)行不同的代碼塊。
例如,判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù):
int num; scanf("%d", &num); if (num % 2 == 0) {// 當(dāng)num除以2的余數(shù)為0時(shí),說明num是偶數(shù)printf("%d is even\n", num); } else {// 當(dāng)num除以2的余數(shù)不為0時(shí),說明num是奇數(shù)printf("%d is odd\n", num); }
- ?通過
scanf
函數(shù)從用戶輸入獲取一個(gè)整數(shù),并存儲(chǔ)在num
變量中。- ?使用
if
語(yǔ)句判斷num
是否為偶數(shù)。num % 2 == 0
這個(gè)條件表達(dá)式利用了取模運(yùn)算(%
),當(dāng)num
除以2
的余數(shù)為0
時(shí),條件為真,就會(huì)執(zhí)行if
語(yǔ)句塊內(nèi)的printf("%d is even\n", num);
,輸出num
是偶數(shù)的信息。- ?如果
num
除以2
的余數(shù)不為0
,即條件為假,那么就會(huì)執(zhí)行else
語(yǔ)句塊內(nèi)的printf("%d is odd\n", num);
,輸出num
是奇數(shù)的信息。
switch
語(yǔ)句
switch
語(yǔ)句主要用于處理多個(gè)固定的、離散的選項(xiàng)情況。它根據(jù)一個(gè)整型表達(dá)式(通常是一個(gè)變量)的值,與各個(gè)case
常量進(jìn)行匹配,一旦匹配成功,就執(zhí)行對(duì)應(yīng)的case
分支下的語(yǔ)句,直到遇到break
語(yǔ)句或者switch
語(yǔ)句結(jié)束。- 當(dāng)有多個(gè)固定的選項(xiàng)時(shí),可以使用
switch
語(yǔ)句。例如,在一個(gè)簡(jiǎn)單的菜單選擇程序中:
int choice; scanf("%d", &choice); switch (choice) {case 1:printf("打開文件\n");break;case 2:printf("保存文件\n");break;case 3:printf("退出程序\n");break;default:printf("無(wú)效的選擇,請(qǐng)重新輸入\n"); }
這里,
switch
表達(dá)式choice
的值會(huì)依次與case 1
、case 2
、case 3
進(jìn)行比較,如果choice
等于1
,就會(huì)執(zhí)行printf("打開文件\n");
,然后遇到break
語(yǔ)句,跳出switch
結(jié)構(gòu);如果choice
的值與所有case
常量都不匹配,就會(huì)執(zhí)行default
分支下的語(yǔ)句,提示用戶輸入無(wú)效。需要注意的是,
case
常量的值必須是唯一的,且在同一個(gè)switch
語(yǔ)句中不能重復(fù);break
語(yǔ)句的作用至關(guān)重要,如果遺漏break
,程序?qū)?huì)繼續(xù)執(zhí)行下一個(gè)case
分支的語(yǔ)句,這可能不是預(yù)期的行為,這種現(xiàn)象被稱為 “case 穿透”,在某些特定情況下可以利用這一特性來簡(jiǎn)化代碼,但在大多數(shù)情況下,需要謹(jǐn)慎使用break
來確保程序的正確性。
3. 比較操作
????????比較操作通過
if
語(yǔ)句及大于號(hào)(>
)比較運(yùn)算符實(shí)現(xiàn),例如if(a > b)
判斷a
與b
大小,if(a > c)
判斷a
與c
大小,if(b > c)
判斷b
與c
大小,依結(jié)果決定是否執(zhí)行后續(xù)代碼。
4. 交換操作
????????交換操作借助臨時(shí)變量
t
,以if(a > b)
為例,條件成立時(shí),先t = a
備份a
值,再a = b
將b
值賦給a
,最后b = t
完成a
、b
交換,其他兩次交換同理,通過比較與交換配合實(shí)現(xiàn)三個(gè)數(shù)從小到大排序并輸出。
測(cè)試說明
平臺(tái)會(huì)對(duì)你編寫的代碼進(jìn)行測(cè)試:
測(cè)試輸入:
6 10 2
預(yù)期輸出:
從小到大排序?yàn)?#xff1a;2,6,10
測(cè)試輸入:
12 -5 8
預(yù)期輸出:
從小到大排序?yàn)?#xff1a;-5,8,12
開始你的任務(wù)吧,祝你成功!
通關(guān)代碼
#include "stdio.h"
int main()
{int a,b,c,t;//printf("請(qǐng)輸入三個(gè)數(shù):");/*********Begin*********/scanf("%d %d %d",&a,&b,&c);if(a > b){t = a;a = b;b = t;}if (a > c){t = a;a = c;c = t;}if (b > c){t = b;b = c;c = t;}printf("從小到大排序?yàn)?#xff1a;%d,%d,%d",a,b,c);return 0;/*********End**********/
}