程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記(四)--運算符與表達式(下)

C語言學習筆記(四)--運算符與表達式(下)

編輯:關於C語言

 

1逗號運算符和逗號表達式

 

1.1逗號表達式格式:表達式1,表達式2,表達式3,...,表達式n;

 

該表達式的功能是:先計算表達式1,再計算表達式2,最後計算表達式n,最後一個表達式的值為此逗號表達式的值。

 

1.2逗號表達式的優先級:最低。

 

1.3逗號表達式的值:

 

例子代碼:

 

 

#include "stdio.h" 

main(){ 

  int a,b,c; 

  a=1,b=2,c=a+b+3; 

  printf("%d,%d,%d\n",a,b,c); 

  c=(a++,a+=b,a-b);                     /*變量c保存逗號表達式的值*/ 

  printf("%d,%d,%d\n",a,b,c);           /*逗號表達式的作用為順序求值*/ 

輸出結果如下:

 

1,2,6

 

4,2,2

 

2關系運算符和關系表達式

 

2.1C語言中的真值和假值:C語言中沒有邏輯型數據,所以C語言規定,用整型常量1來表示真值,所有非0的表達式和常量的邏輯值都為1,用整型常量0表示假值,只有表達式的值為0的常量和表達式的邏輯值為0。

 

關系表達式例子代碼:

 

 

#include "stdio.h" 

main(){ 

  char x='m',y='n'; 

  int n; 

  n=x<y;                             /*取關系表達式x<y的值*/ 

  printf("%d\n",n); 

  n=x==y-1;                          /*取關系表達式x==y-1的值*/ 

  printf("%d\n",n); 

  n=('y'!='Y')+(5<3)+(y-x==1);       /*取關系表達式x==y-1的值*/ 

  printf("%d\n",n); 

 

程序運行結果:

 

1

 

1

 

2

 

關系表達式參加算術運算:

 

 

#include "stdio.h" 

main(){ 

  int a,b,c; 

  a=b=c=10;                             /*變量a,b,c賦初值*/ 

  a=b==c; 

  printf("a=%d,b=%d,c=%d\n",a,b,c);     /*注意等號與賦值號的區別*/ 

  a=(b+(c++>2)); 

  printf("a=%d,b=%d,c=%d\n",a,b,c); 

  /*關系表達式的值可以參加運算c++>2成立,值為1和b相加值放到a中存放*/ 

  a=b>c*100; 

  printf("a=%d,b=%d,c=%d\n",a,b,c); 

  /*利用關系表達式計算要注意運算的優先級*/ 

程序運行結果:

 

a=1,b=10,c=10

 

a=11,b=10,c=11

 

a=0,b=10,c=11

 

3邏輯運算符和邏輯表達式

 

3.1基本邏輯運算符包括:單目運算符!,雙目運算符&&、||。

 

邏輯與運算符例子代碼:

 

 

#include "stdio.h" 

#define PI 3.1415926 

main(){ 

   int  m,n; 

   int k; 

   k=(m=0)&&(m=1); 

   printf ("%d,%d\n",m,k); 

   k=(m=1)&&(m=0); 

   printf ("%d,%d\n",m,k); 

   k=(m=2)&&(m=1)&&(m=0);                   /*多層邏輯與運算的規則測試*/ 

   printf ("%d,%d\n",m,k); 

   m=0,k=0; 

   n=k++&&m++; 

   printf ("%d,%d,%d\n",k,m,n); 

   m=0,k=0; 

   n=m++&&k++;                             /*測試表達式k++&&m++與m++&&k++*/ 

   printf ("%d,%d,%d\n",k,m,n); 

程序運行結果:

 

0,0

 

0,0

 

0,0

 

1,0,0

 

0,1,0

 

邏輯或運算符例子代碼:

 

 

#include "stdio.h" 

main(){ 

  int  m,n; 

  int k; 

  k=(m=0)||(m=1);                        /*邏輯或運算的計算規則*/ 

  printf ("%d,%d\n",m,k); 

  k=(m=1)||(m=0); 

  printf ("%d,%d\n",m,k); 

  k=(m=2)||(m=1)||(m=0);                 /*多層邏輯或運算的規則測試*/ 

  printf ("%d,%d\n",m,k); 

  m=0,k=0; 

  n=++m||++k; 

  printf ("%d,%d,%d\n",k,m,n); 

  m=0,k=0; 

  n=++k||++m; 

  printf ("%d,%d,%d\n",k,m,n);          /*測試表達式++k||++m與++m||++k+*/ 

程序運行結果:

 

1,1

 

1,1

 

2,1

 

0,1,1

 

1,0,1

 

邏輯與和邏輯或混合運算例子代碼:

 

 

#include "stdio.h" 

main(){ 

  int m,k; 

  k=(m=0)||(m=1)&&(m=2);    /*表達式理解為(m=0)||((m=1 )&&(m=2))*/ 

  printf ("%d,%d\n",m,k); 

  k=(m=2)||(m=1)&&(m=0);     /*表達式理解為(m=2)||((m=1)&&(m=0))*/ 

  printf ("%d,%d\n",m,k); 

  k=(m=2)&&(m=1)||(m=0);     /*表達式理解為((m=2)&&(m=1))||(m=0)*/ 

  printf ("%d,%d\n",m,k); 

  k=(m=0)&&(m=1)||(m=2);     /*表達式理解為((m=0)&&(m=1))||(m=2)*/ 

  printf ("%d,%d\n",m,k); 

程序運行結果:

 

2,1

 

2,1

 

1,1

 

2,1

 

4條件運算符和條件表達式

 

4.1條件運算符"?:"是C語言中唯一的的三目運算符,優先級高於賦值運算

 

表達式語法: 表達式1?表達式2:表達式3

 

其執行順序是:先求解表達式1,若為0則執行表達式2,否則執行表達式3。

 

例子代碼:

 

 

#include "stdio.h" 

main(){ 

  char  ch; 

  scanf("%c" , &ch);     /*  輸入一個字符,賦給變量ch  */ 

  ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch;        /*  當字符為大寫字母時,將其變為小寫字母*/ 

  printf("\n%c",ch); 

5sizeof運算符

 

5.1sizeof是C語言的一種單目運算符,運算對象是變量名、表達式或數據類型標示符。功能是以字節形式給出操作數的存儲大小。

 

5.2語法格式:sizeof(表達式) 或sizeof 表達式 或sizeof(數據類型)

 

6取地址運算符

 

6.1取地址運算符的運算對象只能是變量,運算結果為變量的存儲地址。

 

7幾種運算混合運用

 

例子代碼:

 

 

#include "stdio.h" 

main(){ 

  int x,y=1,z; 

  x=((9+6)%5>=9%5+6%5)?1:0;  /*((9+6)%5>=9%5+6%5)等價於(((9+6)%5)>=(9%5+6%5))其值為0*/ 

  printf(" x=%d\n",x); 

  y+=z=x+3;                    /* y+=z=x+3等價z=x+3,y=y+z*/ 

  printf(" y=%d\t z=%d\n",y,z); 

  x=y=z=1; 

  --x&&++y||z++;               /*混合的邏輯與和邏輯或運算*/ 

  printf(" x=%d\t y=%d\t z=%d\n",x,y,z); 

程序運行結果:

 

  x=0

 

  y=4  z=3

 

  x=0  y=1 z=2


摘自 letthinking的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved