運算子、判斷與迴圈
運算子、判斷與迴圈
1 C 運算子的種類、運算優先順序和結合性
1.1 常用運算子分類
運算子型別 | 作用 |
---|---|
算術運算子 | 用於處理四則運算 |
賦值運算子 | 用於將表示式的值賦給變數 |
比較運算子 | 用於表示式的比較,並返回一個真值或假值 |
邏輯運算子 | 用於根據表示式的值返回真值或假值 |
sizeof運算子 | 用於求位元組長度 |
1.1.1 算術運算子
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
+ | 加 | 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; |
重點說明
/ 運算子:兩個整數做除法得到的是整數,即小數部分捨去,只留下整數部分,比如5/3=1;
但除號兩側只要有一側是浮點型別資料,那得到的結果就有小數部分;
#include <stdio.h>
int main()
{
int a=5,b=3; //兩個整型變數
double c=5,d=3; //兩個浮點型變數
printf("%d\n",a/b); //結果:1
printf("%lf\n",1.0*a/b); //結果:1.66667
printf("%lf\n",c/d); //結果:1.66667
return 0;
}
% 運算子:運算子兩側要求必須是整型的;
#include<stdio.h>
int main()
{
int a=5,b=3;
printf("%d\n",a%b); //結果:2
return 0;
}
1.1.2 賦值運算子
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
= | 賦值 | a=2;b=3 | a=2;b=3 |
+= | 加等於 | a=0;a+=2 | a=2 |
-= | 減等於 | a=0;a-=2 | a=-2 |
*= | 乘等於 | a=2;a*=2 | a=4 |
/= | 除等於 | a=4;a/=2 | a=2 |
%= | 模等於 | a=3;a%=2 | a=1 |
1.1.3 比較運算子
c語言的比較運算子中,“真”用“1”表示,“假”用“0”表示
而凡是非“0”的都為“真”。
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
== | 相等於 | 4==3 | 0 |
!= | 不等於 | 4!=3 | 1 |
< | 小於 | 4<3 | 0 |
> | 大於 | 4>3 | 1 |
<= | 小於等於 | 4<=3 | 0 |
>= | 大於等於 | 4>=3 | 1 |
1.1.4 邏輯運算子
運算子 | 術語 | 示例 | 結果 |
---|---|---|---|
! | 非 | !a | 如果a為假,則!a為真;如果a為真,則!a為假 |
&& | 與 | a&&b | 如果a和b為都為真,則結果為真;否則為假 |
|| | 或 | a||b | 如果a和b有一個為真,則結果為真;二者都為假,則結果為假 |
?: | 條件運算子 | a>b?a:b | 如果a>b為真,則執行a;否則執行b |
1.1.5 sizeof運算子
該運算子用於求位元組長度,比如一個int形資料 4個位元組,那sizeof(int)=4,再比如一個double形資料 8個位元組,那sizeof(double)=8。
1.2 運算子的優先順序
類別 | 運算子 | 結合性 |
---|---|---|
(型別) | 強制轉換 | – |
乘除 | *,/,% | 從左往右 |
加減 | +,- | 從左往右 |
比較 | ==,!=,<,>,<=,>= | 從左往右 |
邏輯 | &&,|| | 從左往右 |
賦值運算子 | =,+=,-=,*=,=,%= | 從右往左 |
條件運算子 | ?: | 從右往左 |
逗號 | , | 從左往右 |
1.3 不同型別資料間的轉換與運算
轉換的方法有兩種:
*自動轉換(隱式轉換):遵循一定的規則,由編譯系統自動完成。
*強制型別轉換:把表示式的運算結果強制轉成所需的資料型別。
型別轉換的原則:佔用記憶體位元組數少(值域小)的型別,向佔用記憶體位元組數多(值域大)的型別轉換,以保證精度不降低。
隱式轉換:
#include <stdio.h>
int main()
{
int num = 5;
printf("s1=%d\n", num / 2); //結果仍是整型
printf("s2=%lf\n", num / 2.0); //結果為浮點型
return 0;
}
強制轉換:
#include <stdio.h>
int main()
{
float x = 0;
int i = 0;
x = 3.6;
i = x; //x為浮點型, i為整型,直接賦值會有警告
i = (int)x; //使用強制型別轉換
printf("x=%f, i=%d\n", x, i); //x=3.60,i=3
return 0;
}
2 判斷
2.1 if語句
2.1.1 if語句
描述:一個 if 語句 由一個布林表示式後跟一個或多個語句組成。
int a = 1;
int b = 2;
if (a < b)
{
printf("%d\n", a);
}
OJ題1007
2.1.2 if…else語句
int a = 1;
int b = 2;
if (a > b)
{
printf("%d\n", a);
}
else
{
printf("%d\n", b);
}
2.1.3 if…else if…else語句
#include<stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x<1)
y=x;
else if(x<10)
y=2*x-1;
else
y=3*x-11;
printf("%d\n",y);
return 0;
}
2.1.4 if巢狀語句
int a = 100;
int b = 200;
if( a == 100 )
{
if( b == 200 )
{
/* 如果條件為真,則輸出下面的語句 */
printf("a 的值是 100,且 b 的值是 200\n" );
}
}
printf("a 的準確值是 %d\n", a );
printf("b 的準確值是 %d\n", b );
3 迴圈
3.1 while和do-while迴圈結構
3.1.1 while迴圈
#include <stdio.h>
int main()
{
int a = 1;
while (a <= 10)
{
a++; //a+=1;
printf("%d ",a); //輸出1~10
}
return 0;
}
3.1.2 do-while迴圈結構
#include <stdio.h>
int main()
{
int a = 1;
do
{
a++;
printf("a = %d\n", a);
} while (a < 10);
return 0;
}
3.1.3 for迴圈結構
for迴圈語法:
for ( init; condition; increment )
{
statement(s); //主迴圈體
}
迴圈步驟:
*1.init 會首先被執行,且只會執行一次。這一步允許您宣告並初始化任何迴圈控制變數。您也可以不在這裡寫任何語句,只要有一個分號出現即可。
*2.接下來,會判斷 condition。如果為真,則執行迴圈主體。如果為假,則不執行迴圈主體,且控制流會跳轉到緊接著 for 迴圈的下一條語句。
*3.在執行完 for 迴圈主體後,控制流會跳回上面的 increment 語句。該語句允許您更新迴圈控制變數。該語句可以留空,只要在條件後有一個分號出現即可。
*4.條件再次被判斷。如果為真,則執行迴圈,這個過程會不斷重複(迴圈主體,然後增加步值,再然後重新判斷條件)。在條件變為假時,for 迴圈終止。
#include <stdio.h>
int main ()
{
/* for 迴圈執行 */
for( int a = 10; a < 20; a + + )
{
printf("a 的值: %d\n", a);
}
return 0;
}
3.2 迴圈控制語句break和continue
3.2.1 break
終止迴圈或 switch 語句,程式流將繼續執行緊接著迴圈或 switch 的下一條語句。
#include <stdio.h>
int main ()
{
int a = 10;
/* while 迴圈執行 */
while( a < 20 )
{
printf("a 的值: %d\n", a);
a++;
if( a > 15)
{
/* 使用 break 語句終止迴圈 */
break;
}
}
return 0;
}
3.2.1 continue
告訴一個迴圈體立刻停止本次迴圈迭代,重新開始下次迴圈迭代。
求100以內所有奇數的和:
#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;
}
```