chapter 2 分支結構


大學C語言程序設計

chapter 2 分支結構

1. 三大結構的認識

編程語言的三大結構:

  1. 順序結構:從上至下,從左至右的執行;
  2. 分支結構(選擇結構):滿足條件就執行:if, switch;
  3. 循環結構:滿足條件就一直執行,直到不滿足時退出:for, while。

學習分支結構前,我們需要了解一個概念:什么叫條件?

條件:在這里是一個關系表達式,或者是一個布爾類型的變量,其結果表示成立與否,那么它就只有兩種結果:成立(true),不成立(false),而在計算機中成立用 '!0' 代替, 不成立用 '0' 代替。

當然布爾類型在C99並不存在,而在C++中是存在的,這里作為對條件這一概念的認識。

bool flag = true;// 1
bool flag = false;// 0

不過C99之前,人們也時常用 int 來表示布爾類型,畢竟它可以賦值為 1 and 0.

int flag=1;
int flag=0;

2. 關系表達式

等於 不等於 大於 小於 大於等於 小於等於
== != > < >= <=

3. 邏輯表達式

符號 名字 使用格式 備注 樣例 樣例
&& 邏輯與 a&&b 同真為真 1&&1=1 1&&0=0
|| 邏輯或 a||b 同假為假 1||0=1 0||0=0
! 邏輯非 !a 非假即真,非真即假 !0=1 !1=0
& 按位與 a&b 同真為真 1&0=0 1100 & 1001=1000
| 按位或 a|b 同假為假 1|0=1 1100 | 1001=1101
~ 按位取反 ~a 非假即真,非真即假 ~1=0 ~1010=0101

4. if語句

if(flag){} 、 if(flag)else{} 、if(flag){} else if(flag){} else{}、....
if...else...
bool flag = true;
布爾類型,只有兩種格式:true, false
也可以記作1和0,0表示false, 非0表示true

bool flag = true;
if(flag){  //如果flag為真,就執行{}中的內容,否則不執行
    //
}

bool flag=0;
if(flag){  //如果flag為真,就執行{}中的內容,否則不執行
    //
}else{   //如果if不執行,就執行else{}中的內容
    //
}

bool flag=0;
if(flag){//如果flag為真,就執行{}中的內容,否則不執行
    //
}else if(flag){//如果前面沒有if執行,並且滿足現在if的條件,就執行else{}中的內容
    //
}else if(flag){//如果前面沒有if執行,並且滿足現在if的條件,就執行else{}中的內容
    //
}else{ //如果沒有任何一個if執行,就執行else{}中的內容
    //
}

5. if案例練習

【題目描述】輸入一個整數,判斷其是奇數還是偶數

輸入樣例:10
輸出樣例:10是偶數

#include<stdio.h>
int main(){
    int n;  scanf("%d", &n);
    if(n%2==0){    //判斷兩個數相等用雙等於; 奇偶數的判斷還可以使用(n&1)
        printf("%d是偶數", n);
    }else{
        printf("%d是奇數", n);
    }
    return 0;
}

【題目描述】輸入年份year,輸出該年份是否為閏年。
判斷閏年的方法:年份能被4整除但不能被100整除或者年份能被400整除的稱為閏年。

輸入樣例:2020
輸出樣例:2020是閏年

輸入樣例:2021
輸出樣例:2021不是閏年

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

6. 條件表達式

格式:<表達式1>?<表達式2>:<表達式3>
條件表達式要求有三個操作對象,"?"和":"一起出現在條件表達式中,稱三目(元)運算符,它是C++中唯一的一個三目運算符。
條件表達式的運算規則:
(1)計算表達式1的值。
(2)若表達式1的值為真(或非0),則只計算表達式2,並將其結果作為整個表達式的值。
(3)反之,若表達式1 的值為假(或為0),則只計算表達式3,並將其結果作為整個表達式的值。

舉例:求a,b的最大值

int maxn = a>b ? a:b;

舉例:求a,b的最小值

int maxn = a<b ? a:b;

7. switch

本質上 switch 和 if 是相通的,滿足條件就執行。

int main() {
    int num; scanf("%d", &num);
    switch(num) {
        case  -1: printf("-1\n");   break; //退出
        case   1: printf("1\n");    break;
        case   0: printf("0\n");    break;
        default: //如果前面沒有case執行,就執行
            printf("ERROR\n");    break;
    }
    return 0;
}

【題目描述】根據輸入的表示星期幾的數字,對應輸出它的英文名稱。
1、星期一:Monday
2、星期二:Tuesday
3、星期三:Wednesday
4、星期四:Thursday
5、星期五:Friday
6、星期六:Saturday
7、星期日:Sunday
錯誤輸入請輸出:input error!

輸入格式:輸入的表示星期幾的數字。
輸出格式:對應輸出它的英文名稱。

輸入樣例:1
輸出樣例:Monday

#include<stdio.h>
int main(){
    int n; scanf("%d", &n);
    switch(n){
        case 1: printf("Monday");    break;
        case 2: printf("Tuesday");   break;
        case 3: printf("Wednesday"); break;
        case 4: printf("Thursday");  break;
        case 5: printf("Friday");    break;
        case 6: printf("Saturday");  break;
        case 7: printf("Sunday");    break;
        default: printf("input error!"); break;
    }
    return 0;
}

【題目描述】一個最簡單的計算器,支持 +, -, *, / 四種運算。

僅需考慮輸入輸出為整數的情況,數據和運算結果不會超過int表示的范圍。然而:

輸入格式:輸入三個參數,其中第 1、2 個參數為整數,第 3 個參數為操作符(+,-,*,/)。
輸出格式:輸出只有一行,一個整數,為 a 操作符 b 的運算結果。然而:

  1. 如果出現除數為0的情況,則輸出:Divided by zero!
  2. 如果除數不為0,則保留2位小數。
  3. 如果出現無效的操作符(即不為 +, -, *, / 之一),則輸出:Invalid operator!

輸入樣例1:1 2 +
輸出樣例1:3

輸入樣例2:1 2 /
輸出樣例2:0.5

#include<stdio.h>
int main(){
    int a,b; char c;
    scanf("%d %d %c", &a, &b, &c);//由於使用到字符輸入,所以加空格區分 
    switch(c){
        case '+': printf("%d", a+b); break;
        case '-': printf("%d", a-b); break;
        case '*': printf("%d", a*b); break;
        case '/': {
            if(b==0) printf("Divided by zero!");
            else printf("%.2lf", (double)a/b);
            break;
        }  // {}是一個整體
        default: printf("Invalid operator!"); break;
    }
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM