07-運算子和程式結構

Icer_Newer發表於2023-03-16

運算子與程式結構

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

相關文章