# 選擇結構-if基本概念
## if第一種形式
- 表示如果表達式為真,執行語句塊1,否則不執行。
```
if(表達式)
{
語句塊1
}
后續語句;
```
示例:
```
if(age > 18)
{
printf("開網卡");
}
```
## if第二種形式
- 當條件表達式為真的時候會執行if后面的第一條語句
>注意點:在以后開發中盡量不要寫使用該格式
```
if (條件表達式)
語句1;
```
示例:
```
if(age > 18)
printf("開網卡");
```
## if第三種形式
- 如果表達式為真,則執行語句塊1,否則執行語句塊2
```
if(表達式)
{
語句塊1
}else{
語句塊2
}
后續語句;
```
- 示例:
```
if(age > 18)
{
printf("開網卡");
}else{
printf("喊你媽來");
}
```
## if第四種形式
- 如果表達式1為真,則執行語句塊1,否則判斷表達式2,如果為真執行語句塊2,否則再判斷 表達式3,如果真執行語句塊3, 當表達式1、2、3都不滿足,會執行最后一個else語句。
```
if(表達式1)
{
語句塊1
}else if(表達式2){
語句塊2
}else if(表達式3){
語句塊3
}else{
語句塊4
}
后續語句;
```
- 示例:
```
if(age>18)
{
printf("給網卡");
}else if(age>25){
printf("給名片");
}else if(age>40){
printf("給房卡");
}else{
printf("給好人卡");
}
```
- 特點:
+ 1.這么多大括號中只有一個大括號中的內容會被執行
+ 2.當執行到后面條件的時候證明前面的條件不滿足
## if嵌套
- if語句可以嵌套使用
```
int num = 8;
if (num > 5)
{
if(num<10)
{
printf("一個5~10之間的數")
}
}
```
## 選擇結構-if練習
### 判斷奇偶數
- 從鍵盤輸入一個整數,判斷其是否是偶數,如果是偶數就輸出YES,否則輸出NO;
```
// 1.提示輸入信息
printf("輸入一個整數\n");
// 2.接收輸入信息
int value;
scanf("%d", &value);
// 3.判斷是否能被2整除
if (value%2 == 0) {
// 輸出偶數
printf("yes");
}else{
printf("no");
}
```
### 輸出對應星期
- 接收用戶輸入的1~7的整數,根據用戶輸入的整數,輸出對應的星期幾
```
// 1.提示用戶輸入星期幾
printf("請輸入星期幾(1~7)\n");
// 2.接收用戶輸入的星期數
int day;
scanf("%d",&day);
// 3.輸出對應的星期
--》1.用屌絲做法 每天一個if
--》2.用高帥富做法 if else if
if(day == 1)
{
printf("星期1\n");
}
else if(day == 2)
{
printf("星期2\n");
}
else{
printf("地球不屬于你\n");
}
```
---
### 輸出對應季節
- 接收用戶輸入的一個整數month代表月份,根據月份輸出對應的季節
```
// 1.提示用戶輸入月份
printf("請輸入月份(\n");
// 2.接收用戶輸入的星期數
int month;
scanf("%d",&month);
// 3.輸出對應的月份
if (month >=3 && month <=5) {
printf("春季\n");
}else if (month >=6 && month <=8)
{
printf("夏季\n");
}else if (month >=9 && month <=11)
{
printf("秋季\n");
}else if(month == 12 || month == 1 || month == 2)
{
printf("春季\n");
}else
{
printf("地球不屬于你\n");
}
```
```
if(month >12 || month <1){
printf("地球不屬于你\n");
}
else if(month >=3 && month <=5)
{
printf("春季\n");
}
else if(month >=6 && month <=8)
{
printf("夏季\n");
}
else if(month >=9 && month <=11)
{
printf("秋季\n");
}
else
{
printf("冬季\n");
}
```
### 獲取兩個數最值
- 鍵盤輸入兩個整數,判斷大小后輸出較大的那個數
```
int num1, num2;
printf("輸入兩個整數并用逗號隔開\n");
scanf("%d,%d", &num1, &num2);
if (num1 > num2) {
printf("%d\n",num1);
}else{
printf("%d\n",num2);
}
printf("%d\n",num1 > num2 ? num1 : num2);
三元運算符好處:可以簡化if else代碼
弊端 :因為是一個運算符所以運算完必要要有一個結果。 簡單用三元 復雜用if(閱讀性好)
```
### 獲取三個數最值
- 從鍵盤輸入3個整數,判斷大小后輸出較大的那個數
- 方式1
```
int num1, num2, num3;
printf("輸入3個整數并用逗號隔開\n");
scanf("%d,%d,%d", &num1, &num2, &num3);
// 方式1
int max;
if (num1 > num2) {
max = num1;
}else{
max = num2;
}
if (max < num3) {
max = num3;
}
printf("%d\n",max);
```
- 方式2
```
int max1 = num1 > num2 ? num1 : num2;
int max = max1 > num3 ? max1 : num3;
printf("%d\n",max);
```
- 方式3
```
if (num1 >= num2 && num1 >= num3) {
printf("%d\n",num1);
}else if (num2 >= num1 && num2 >= num3) {
printf("%d\n",num2);
}else if (num3 >= num1 && num3 >= num2) {
printf("%d\n",num3);
}
```
- 方式4(先寫不省略括號)
```
if (number1 > number2) {
// 代表number1當前最大
if (number1 > number3) {
max = number1; // number1是最大
}else
{
max = number3; // number3是最大
}
}else if (number2 > number3) // 因為if條件不滿足, 所以此時此刻number2是最大的
{
// 代表number2當前最大
max = number2;
}else // 因為上面兩個條件都不滿足, 所以此時number3最大
{
max = number3;
}
printf("max = %i\n", max);
```
### 排序
- 從鍵盤輸入3個整數,排序后輸出
- 方式1
```
int a, b, c;
printf("輸入3個整數并用逗號隔開\n");
scanf("%d,%d,%d", &a, &b, &c);
// 方式1 寫出所有方式
if (a >= b && b >=c) {
printf("%d > %d > %d\n", a, b, c);
}else if (a >= c && c >= b) {
printf("%d > %d > %d\n", a, c, b);
}else if (b >= a && a >= c) {
printf("%d > %d > %d\n", b, a, c);
}else if (b >= c && c >= a) {
printf("%d > %d > %d\n", b, c, a);
}else if (c >= a && a >= b) {
printf("%d > %d > %d\n", c, a, b);
}else if (c >= b && b >= a) {
printf("%d > %d > %d\n", c, b, a);
}
```
- 方式2
```
int a, b, c;
printf("輸入3個整數并用逗號隔開\n");
scanf("%d,%d,%d", &a, &b, &c);
// 方式2(選擇排序,畫圖講解)
int temp;
if (a < b) {
temp = a;
a = b;
b = temp;
}
if (a < c) {
temp = a;
a = c;
c = temp;
}
if ( b < c) {
temp = b;
b = c;
c = temp;
}
printf("%d > %d > %d\n", a, b, c);
```
## 選擇結構-if注意點
### if語句的使用注意點
- “;” 空語句
+ if(條件) 可以直接寫分號 “;” 表示什么也不干
```
if(10 > 2);
{
printf("10 > 2"); // 輸出結果: 10 > 2
}
```
- 任何數值都有真假性
+ if(1)、if(-1) 表示永真 if(0) 表示為永假
```
if (0) {
printf("123\n");
}
```
- 判斷變量與常量問題
+ 但凡遇到比較一個變量等于或者不等于某一個常量的時候,把常量寫在前面
```
// if(a = 0) // 錯誤寫法, 但不會報錯
if (0 == a) {
printf("a的值是0\n");
}else{
printf("a的值不是0\n");
}
```
- 變量作用域問題
```
if (age > 10) {
printf("已經懂事了\n");
int num = 1000;
}
printf("num = %d\n",num);
```
- 作用域混亂
+ 想在if后面定義變量必須寫{}
```
if (0)
int a = 10; // 這句會報錯
printf("a = %d\n", a);
```
- 省略大括號問題
+ if else是一個整體, else匹配if的時候匹配離它最近的一個if
```
if(0)
if(1)
printf("A\n");
else
printf("B\n");
else
if (1)
printf("C\n");
else
printf("D\n");
```