1. 程式人生 > >運算子、判斷與迴圈

運算子、判斷與迴圈

運算子、判斷與迴圈

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;
	}  
	```