運算子與程式結構
1.常用的運算子
運算子型別 | 作用 |
---|---|
算術運算子 | 用於處理四則運算 |
賦值運算子 | 用於將表示式的值賦給變數 |
比較運算子 | 用於表示式的比較,並返回一個真值或假值 |
邏輯運算子 | 用於根據表示式的值返回真值或假值 |
位運算子 | 用於處理資料的位運算 |
sizeof運算子 | 用於求位元組數長度 |
1.1算術運算子
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
+ | 正號 | +3 | 3 |
- | 負號 | -3 | -3 |
+ | 加 | 10 + 5 | 15 |
- | 減 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取餘) | 10 % 3 | 1 |
++ | 前自增 | a=2; b=++a; | a=3; b=3; |
++ | 後自增 | a=2; b=a++; | a=3; b=2; |
-- | 前自減 | a=2; b=--a; | a=1; b=1; |
-- | 後自減 | a=2; b=a--; | a=1; b=2; |
- 整型與整型運算,得到的是整型
- 除法,如果兩數相除,得到小數,必須有一個是double型別
- 除數不能為0
#include <stdio.h>
int main()
{
// 除法
int a = 10;
int b = 20;
int c = 10.0;
int f = a/b; // 0
double e = a/b; // 0.5
// 求一個數的個位,十位,百位
// 求1234
//
int num = 1234;
// 個位
int a = num % 10;
// 十位
int b = num/10%10;
// 百位
int c = num/100%10;
// 千位
int d = num/1000%10;
system("pause");
return 0;
}
1.1.1 自加自減運算子
- 單獨使用a++和++a一樣
- 與其他表示式進行一起使用,++a,先自加再使用;a++,先使用,再加1
#include <stdio.h>
int main()
{
// a++ ++a
// 1.單獨進行使用
int a = 1;
a++;
// ++a;
printf("%d\n",a); // ++a 和a++ 都得到a = 2
// 2.與其他表示式進行結合,++a先計算表示式結果再賦值,a++先賦值後對a = a+1
int c = 1;
int d = 0;
d = c++;
printf("%d\n",d,c); // d = 1 c = 2
// 如果使用 d = ++c;
printf("%d\n",d,c); // d = 2 c = 2
// 3.單獨使用
int c = 2;
printf("%d\n",c++); // 列印2
printf("%d\n",++c); // 列印3
system("pause");
return 0;
}
1.2.賦值運算子
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
= | 賦值 | a=2; b=3; | a=2; b=3; |
+= | 加等於 | a=0; a+=2; | a=2; |
-= | 減等於 | a=5; a-=3; | a=2; |
*= | 乘等於 | a=2; a*=2; | a=4; |
/= | 除等於 | a=4; a/=2; | a=2; |
%= | 模等於 | a=3; a%2; | a=1; |
1.3.比較運算子
C 語言的比較運算中, “真”用數字“1”來表示, “假”用數字“0”來表示。
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
== | 相等於 | 4 == 3 | 0 |
!= | 不等於 | 4 != 3 | 1 |
< | 小於 | 4 < 3 | 0 |
> | 大於 | 4 > 3 | 1 |
<= | 小於等於 | 4 <= 3 | 0 |
>= | 大於等於 | 4 >= 1 | 1 |
#include <stdio.h>
int main()
{
printf("%d",3<4);
system("pause");
return 0;
}
1.4.邏輯運算子
2.流程控制結構
C語言支援最基本的三種程式執行結構:順序結構、選擇結構、迴圈結構。
- 順序結構:程式按順序執行,不發生跳轉。
- 選擇結構:依據是否滿足條件,有選擇的執行相應功能。
- 迴圈結構:依據條件是否滿足,迴圈多次執行某段程式碼。
2.1 選擇結構
2.1.1 if語句
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a > b)
{
printf("%d\n", a);
}
// if(非空的值) 判斷為條件成立
if(1)
{
printf("成立");
}
// if 後面不加分號,分號相當於空語句
if(a == 1);
{
print("%d\n",a); // 不管if是不是成立都執行,因為if後面加;成立相當於執行空語句,不成立跳過
}
// if後面的程式碼塊不加{}, 只有第一句屬於if程式碼塊,一般都會加上{}
// {}中的語句都屬於if
if(a == 1)
printf("%d\n",a); // 只有這句屬於if
printf("AAAAAA\n"); // 不屬於if,不管if成立與否都執行
return 0;
}
2.1.2 if...else語句
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a > b)
{
printf("%d\n", a); // 條件成立
}
else
{
printf("%d\n", b); // 條件不成立執行這裡面的程式碼
}
return 0;
}
2.1.3 if..else if ...else語句
進行多個條件判斷的時候使用這種方式
#include <stdio.h>
int main()
{
unsigned int a;
scanf("%u", &a);
if (a < 10)
{
printf("個位\n");
}
else if (a < 100)
{
printf("十位\n");
}
else if (a < 1000)
{
printf("百位\n");
}
else
{
printf("很大\n");
}
return 0;
}
2.1.4 三目運算子
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c;
if (a > b)
{
c = a;
}
else
{
c = b;
}
printf("c1 = %d\n", c);
a = 1;
b = 2;
c = ( a > b ? a : b );
printf("c2 = %d\n", c);
return 0;
}
2.1.5 switch語句
#include <stdio.h>
int main()
{
char c;
c = getchar();
switch (c) //引數只能是整型變數
{
case '1':
printf("OK\n");
break;//switch遇到break就中斷了
case '2':
printf("not OK\n");
break;
default://如果上面的條件都不滿足,那麼執行default
printf("are u ok?\n");
}
return 0;
}
2.2 迴圈結構
能夠用於重複執行的動作
2.2.1 while語句
#include <stdio.h>
int main()
{
int a = 20;
while (a > 10)
{
scanf("%d", &a);
printf("a = %d\n", a);
}
return 0;
// 計算1+2+3....+10
int i = 1;
int sum = 0;
while(a <= 100)
{
sum = sum + i;
i++;
}
printf("%d\n",sum);
}
2.2.2 do...while 迴圈
#include <stdio.h>
int main()
{
int a = 1;
do
{
a++;
printf("a = %d\n", a);
} while (a < 10);
return 0;
}
- do..while至少會執行一遍迴圈
2.2.3 for迴圈
for( A ; B ; C )
{
D
}
// A B C表示式都是可有可無的
// A表示式只會執行一次
// B執行條件
// C迴圈變數步階
// 執行順序:A->B->D->C->B->D->C
#include <stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 0; i <= 100; i++)
{
sum += i;
}
printf("sum = %d\n", sum);
return 0;
}
for迴圈不寫條件,預設為真
2.3.4 巢狀迴圈
迴圈語句之間可以相互巢狀:
#include <stdio.h>
int main()
{
int num = 0;
int i, j, k;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
for (k = 0; k < 10; k++)
{
printf("hello world\n");
num++;
}
}
}
printf("num = %d\n", num);
return 0;
}
2.3.5 跳轉語句break、continue、goto
1. break
在switch條件語句和迴圈語句中都可以使用break語句:
- 當它出現在switch條件語句中時,作用是終止某個case並跳出switch結構。
- 當它出現在迴圈語句中,作用是跳出當前內迴圈語句,執行後面的程式碼。
- 當它出現在巢狀迴圈語句中,跳出最近的內迴圈語句,執行後面的程式碼。
#include <stdio.h>
int main()
{
int i = 0;
while (1)
{
i++;
printf("i = %d\n", i);
if (i == 10)
{
break; //跳出while迴圈
}
}
int flag = 0;
int m = 0;
int n = 0;
for (m = 0; m < 10; m++)
{
for (n = 0; n < 10; n++)
{
if (n == 5)
{
flag = 1;
break; //跳出for (n = 0; n < 10; n++)
}
}
if (flag == 1)
{
break; //跳出for (m = 0; m < 10; m++)
}
}
return 0;
}
2. continue
在迴圈語句中,如果希望立即終止本次迴圈,並執行下一次迴圈,此時就需要使用continue語句。
#include<stdio.h>
int main()
{
int sum = 0; //定義變數sum
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 0) //如果i是一個偶數,執行if語句中的程式碼
{
continue; //結束本次迴圈
}
sum += i; //實現sum和i的累加
}
printf("sum = %d\n", sum);
return 0;
}
3. goto(無條件跳轉儘量少用)
#include <stdio.h>
int main()
{
goto End; //無條件跳轉到End的標識
printf("aaaaaaaaa\n");
End:
printf("bbbbbbbb\n");
return 0;
}