1. 程式人生 > >C語言中操作符總結(下)

C語言中操作符總結(下)

  1. 邏輯操作符 常見的邏輯操作符: 邏輯與( && )、 邏輯或( || ) 邏輯操作運算中不看二進位制位,只看真假。 使用規則: 邏輯與( && ):操作符作用的兩個運算元全為 真 時結果為 “ 1 ” ,其他情況結果都為 “ 0 ”。 邏輯或( || ):操作符作用的兩個運算元全為 假 時結果為 “ 0 ”,其他情況結果都為 “ 1 ”。 在實際生活中的應用:判斷閏年等。
// 輸出1000-2000 年之間的閏年

#include<stdio.h>
int main()
{
	int count = 0;	
	int year = 0;
	for (year = 1000; year <= 2000; year++) {
		// 判斷閏年條件(能被 4 整除但不能被 100 整除,或者能被 400 整除)
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		{ 
			printf("%d ", year);	// 輸出閏年
			count++;	// 計數
		}
	}
	printf("\ncount = %d\n", count);	// 輸出1000-2000 年之間的閏年個數
	system("pause");
	return 0;
}

在這裡插入圖片描述 特別注意1: 邏輯與 和 按位與,邏輯或 和 按位或 的區別。 如:在這裡插入圖片描述 特別注意2: 邏輯與 和 邏輯或 的特點

//邏輯與
#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	system("pause");
	return 0;
}
// 程式輸出的結果是什麼?

首先來分析一下這段程式碼:這裡的i = a++ && ++b && d++;

是用兩個“ && ”連線,邏輯與的特點就是它的兩個運算元都為 真 時結果才為真,所以程式碼在執行時先判斷 a 是否為真,如果為真,執行 ++b,然後判斷 b 自增後的結果是否為真,若為真則執行a++ && ++b,如果a++ && ++b結果為真,繼續向後執行;否則程式碼只執行到判斷為假的那步,之後的程式碼一律不執行。 這裡由於 a 的初值等於 0,為假,所以程式碼執行到這裡就不再繼續向後執行,最終結果為:a = 0 , b = 2 , c = 3 , d = 4。 在這裡插入圖片描述

//邏輯或
#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	system("pause");
	return 0;
}
// 程式輸出的結果是什麼?

首先來分析一下這段程式碼:這裡的i = a++ && ++b && d++;是用兩個“ || ”連線,邏輯或的特點就是它的兩個運算元都為 假 時結果才為假,所以程式碼在執行在執行的過程中無論“ || ”的兩個運算元是否為真都會一直執行,直到最後一個程式碼之前的程式碼全部執行完才會判斷,如果前邊所有程式碼的執行結果為真,那麼最後一個程式碼就不再執行,否則執行最後一個程式碼。 這裡在執行i = a++ || ++b || d++;時,先執行a++ || ++b由於 b 的初值為 2,所以 ++b 的結果為真,即:a++ || ++b的結果為真,所以 d++就不再執行。最終結果為:a = 1 , b = 3 , c = 3 , d = 4。 在這裡插入圖片描述

  1. 條件操作符 exp1 ? exp2 : exp3 運算規則: 如果 exp1 為真,則結果為 exp2 ,否則結果為 exp3。 如:
#include<stdio.h>
int main()
{
	int a = 10;
	int b = 0;
	if (a > 5) {
		b = 3;
	}
	else{
		b = -3;
	}
	printf("b = %d\n", b);
	system("pause");
	return 0;
}

在這裡插入圖片描述 將上面程式碼轉換為條件表示式:

#include<stdio.h>
int main()
{
	int a = 10;
	int b = 0;
	(a > 5) ? (b = 3) : (b = -3);
	printf("b = %d\n", b);
	system("pause");
	return 0;
}

在這裡插入圖片描述 例:使用條件表示式實現找兩個數中的較大值。

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 9;
	int max = 0;
	max = (a > b) ? a : b;
	printf("max = %d\n", max);
	system("pause");
	return 0;
}

在這裡插入圖片描述

  1. 逗號表示式 exp1, exp2, exp3, … expN 逗號表示式就是用逗號隔開的多個表示式。 運算規則: 逗號表示式,從左向右依次執行,整個表示式的結果是 最後一個表示式 的結果。
#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);	// 逗號表示式
	printf("c = %d\n", c);
	system("pause");
	return 0;
}
// c 的結果是多少?

在這裡插入圖片描述

  1. 下標引用操作符 [ ] 運算元:一個數組名 + 一個索引值
int arr[4] = { 5,3,4,1 };	// 這裡的[ ] 不是下標引用操作符
arr[2] = 4;		// 這個 [ ] 才是下表引用操作符,arr 表示陣列首元素地址
				// [ ] 的兩個運算元是 arr 和 2
				// arr 表示陣列首元素地址,[2]表示陣列第三個元素
  1. 函式呼叫操作符 ( ) 接受一個或多個運算元:第一個運算元是函式名,剩餘的運算元都是傳遞給函式的引數。
#include<stdio.h>

//定義函式
int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int a = 10;
	int b = 5;
	Add(a, b);	// 呼叫函式,這裡的()就是函式引用操作符
				// 接收了三個運算元:Add、a、b
	system("pause");
	return 0;
}
  1. 結構體成員 .結構體.成員名 結構體物件訪問自己的成員。 在這裡插入圖片描述 ->結構體指標 ->成員名 結構體指標訪問它指向物件的成員。 在這裡插入圖片描述