if語句
if語句程式結構
- if (表達式)
- 語句 else if (表達式)
- 語句 else
- 語句
整除的判斷
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
if (n % 5)
puts("該整數不能被5整除。"); /*n不能被5整除時執行。*/
else
puts("該整數能被5整除。"); /*n能被5整除時執行。*/
return 0;
}
奇數·偶數的判斷
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
if (n % 2)
puts("該整數是奇數。"); /*n不能被2整除時執行。*/
else
puts("該整數是偶數。"); /*n能被2整除時執行。*/
return 0;
}
非0的判斷
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
if (n)
puts("該整數不是0。"); /*n不為0時執行。*/
else
puts("該整數是0。"); /*n為0時執行。*/
return 0;
}
相等運算符
== 運算符 | a == b | 如果a和b的值相等則為1,不等則為0(結果的類型是int) |
---|---|---|
!= 運算符 | a != b | 如果a和b的值不相等則為1,相等則為0(結果的類型是int) |
if (n1 == n2)
puts("它們相等。"); /*n1與n2相等時執行。*/
else
puts("它們不相等。"); /*n1與n2不相等時執行。*/
if (n1 != n2)
puts("它們不相等。"); /*n1與n2不相等時執行。*/
else
puts("它們相等。"); /*n1與n2相等時執行。*/
餘數的判斷
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
if ((n % 10) == 5) /*由于%的優先級比運算符==高,是以n % 10兩邊的()可以省略*/
puts("該整數的個位數是5。"); /*n的個位數是5時執行。*/
else
puts("該整數的個位數不是5。"); /*n的個位數不是5時執行。*/
return 0;
}
關系運算符
< 運算符 | a < b | a小于b時結果為1,反之為0(結果的類型是int) |
---|---|---|
> 運算符 | a > b | a大于b時結果為1,反之為0(結果的類型是int) |
<= 運算符 | a <= b | a小于等于b時結果為1,反之為0(結果的類型是int) |
>= 運算符 | a >= b | a大于等于b時結果為1,反之為0(結果的類型是int) |
注意:将<=運算符和>=運算符中的等号放在左側(=< 和 =>),或者在<與=之間有空格都是不對的。
if (n == 0)
puts("該整數為0。"); /*n等于0時執行。*/
else if(n > 0)
puts("該整數為正數。"); /*n大于0時執行。*/
else
puts("該整數為負數。"); /*n小于0時執行。*/
嵌套的if語句
if (n > 0) /*n大于0時執行。*/
{
if (n % 2 == 0) /*由于%的優先級比運算符==高,是以n % 10兩邊的()可以省略*/
puts("該整數為偶數。"); /*n能被2整除時執行。*/
else
puts("該整數為奇數。"); /*n不能被2整除時執行。*/
}
else
{
puts("您輸入的不是正數。"); /*n小于等于0時執行。*/
}
判斷
表達式(極少部分特殊情況除外)都有值。程式執行時會對表達式的值進行檢測,這就稱為判斷。
計算較大值
#include <stdio.h>
int main(void)
{
int n1, n2;
puts("請輸入兩個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
if (n1 > n2)
printf("較大的數是%d。\n",n1);
else
printf("較大的數是%d。\n",n2);
return 0;
}
程式中printf函數被調用了兩次,是以我們進行代碼優化。
#include <stdio.h>
int main(void)
{
int n1, n2, max; /*聲明一個儲存最大值的整形變量max*/
puts("請輸入兩個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
if (n1 > n2)
max = n1; /*若n1為最大值,則把n1的值指派給max*/
else
max = n2; /*若n2為最大值,則把n2的值指派給max*/
printf("較大的數是%d。\n",max); /*輸出max的值*/
return 0;
}
計算三個數的最大值
#include <stdio.h>
int main(void)
{
int n1, n2, n3, max; /*聲明一個儲存最大值的整形變量max*/
puts("請輸入三個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
printf("整數3:");
scanf("%d", &n3);
max = n1; /*把n1的值指派給max*/
if (n2 > max)
max = n2; /*若n2大于max,則把n2的值指派給max*/
if (n3 > max)
max = n3; /*若n3大于max,則把n2的值指派給max*/
printf("較大的數是%d。\n",max); /*輸出max的值*/
return 0;
}
條件運算符
條件運算符 | a ? b : c | 如果a不為0,則結果是b的值,否則結果為c的值 |
---|
#include <stdio.h>
int main(void)
{
int n1, n2, max; /*聲明一個儲存最大值的整形變量*/
puts("請輸入兩個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
max = (n1 > n2) ? n1 : n2; /*将較大的值賦給max*/
printf("較大的數是%d。\n",max); /*輸出max的值*/
return 0;
}
內插補點計算
#include <stdio.h>
int main(void)
{
int n1, n2;
puts("請輸入兩個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
printf("它們的差是%d。\n",(n1 > n2) ? n1 - n2 : n2 - n1);
/*如果n1 > n2,則判斷表達式n1 - n2所得的值。*/
/*否則為判斷表達式n2 - n1所得的值。*/
/*也就是說,最終結果為大值減去小值所得的結果。*/
return 0;
}
複合語句(程式塊)
#include <stdio.h>
int main(void)
{
int n1, n2, max, min;
puts("請輸入兩個個整數。");
printf("整數1:");
scanf("%d", &n1);
printf("整數2:");
scanf("%d", &n2);
if (n1 > n2)
{
max = n1; /*複合語句:在結構上被看作是單一的語句。*/
min = n2;
}
else
{
max = n2;
min = n1;
}
printf("較大的數是%d。\n", max);
printf("較小的數是%d。\n", min);
return 0;
}
{
max = n1;
min = n2;
}
像這樣的在大括号内并排書寫的語句稱為複合語句或者程式塊。其中不僅可以包含語句,也可以包含聲明(但是一定要把聲明放在最開始的位置)。
{} {}
{printf("你好!\n");} {語句}
{int x; x = 5;} {聲明 語句}
複合語句在結構上會被看作是單一的語句。
在需要單一語句的位置,如果一定要使用多個語句,可以把它們組合成複合語句(程式塊)來實作。
邏輯運算符
邏輯與運算符 | a && b | 如果a和b都不為0,則表達式的結果為1,否則結果為0(結果的類型為int) |
---|---|---|
邏輯或運算符 | a ll b | 如果a和b有一個不為0,則表達式的結果為1,否則結果為0(結果的類型為int) |
#include <stdio.h>
int main(void)
{
int month;
printf("請輸入月份:");
scanf("%d", &month);
if (month >= 3 && month <= 5) /*邏輯運算符:與的判斷*/
printf("%d月是春季。\n", month);
else if (month >= 6 && month <= 8)
printf("%d月是夏季。\n", month);
else if (month >= 9 && month <= 11)
printf("%d月是秋季。\n", month);
else if (month == 1 || month == 2 || month == 12) /*邏輯運算符:或的判斷*/
printf("%d月是冬季。\n", month);
else
printf("%d月份不存在!!!\n", month);
return 0;
}
短路求值
&&運算符在左操作數的判斷結果為0時不對右操作數進行判斷。
||運算符在左操作數的判斷結果為0時不對右操作數進行判斷。
像這樣,在僅根據左操作數的判斷結果就可知邏輯表達式的判斷結果的情況下,不會對右操作數進行判斷,這就稱為短路求值。
switch語句
switch語句的基本程式結構
- switch(條件)
-
- case 0 :
- 語句
- break;
-
- case 1 :
- 語句
- break;
-
- case 2 :
- 語句
- break;
-
- default :
- 語句
- break;
switch語句的文法結構如上所示,括号内的控制表達式必須是整數類型。
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
switch (n % 3)
{
case 0 :
puts("該數能被3整除。");
break;
case 1 :
puts("該數除以3的餘數是1。");
break;
case 2 :
puts("該數除以3的餘數是2。");
break;
}
return 0;
}
如果n%3的值為1,則程式會轉向case 1 :
像case 1:這樣用來表示程式跳轉的辨別稱為标簽。
标簽的值必須為常量,不可以為變量。另外,不允許多個标簽同為一個值。
break有"打破"、"脫離"之意。執行break語句之後,程式就會跳出将它圍起來的switch語句。
複雜的switch語句
#include <stdio.h>
int main(void)
{
int n;
printf("請輸入一個整數:");
scanf("%d", &n);
switch (n)
{
case 1 :
puts("A");
puts("B");
break;
case 2 :
puts("C"); /*沒有break語句*/
case 3 :
puts("D");
break;
case 4:
/*沒有語句*/
case 5:
puts("E");
break;
default :
puts("F");
break;
}
return 0;
}
當控制表達式的判斷結果與任何一個case都不一緻的時候,程式就會跳轉到default繼續執行。
在沒有break語句的時候,程式會落到下一條語句上。