- 零基礎學單片機C語言程序設計
- 趙建領 薛園園等編著
- 2188字
- 2018-12-31 21:41:36
3.9 C51的表達式
表達式是需要進行運算的各個量由運算符連接起來而構成的一個整體。表達式是由操作數和運算符組成的,其中操作數一般包括常量和變量,甚至也可以包括函數和表達式等。表達式也是C51語言中的基本組成部分。C51中主要有算術表達式、賦值表達式、逗號表達式、關系表達式和邏輯表達式等幾種表達式,下面分別對其進行介紹。
3.9.1 算術表達式
算術表達式是指用算術運算符將操作數連接起來的式子,其中也可以使用括號,例如(a-(b+c)*3)/2-12。算術表達式雖然比較簡單,但是在使用時要注意算術運算符的計算優先級和結合性,否則很容易使程序出現錯誤。算術表達式的程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int i,j,x,y; //聲明變量 i=105; //賦值 j=2; x=i+j*2; //算術運算 y=(i-j*2)%3; //算術運算 printf("x=%d\ny=%d\n",x,y); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下。
x=105 i-j=2
在該程序中,首先為變量i和j賦值,然后分別通過算術表達式來對x和y賦值,最后輸出算術表達式的計算結果。
3.9.2 賦值表達式
賦值表達式是指,由賦值運算符“=”將一個變量和一個常量或者表達式連接起來的式子。賦值表達式的一般形式介紹如下。
<變量><賦值運算符><表達式>
例如,“a=27”就是一個簡單的賦值表達式,表示將常量27賦值給變量a。賦值表達式在執行時,首先求解賦值運算符右邊的表達式的值,然后將該值賦給左邊的變量。賦值表達式的程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int i,j; //聲明變量 char a,b; float f; i=12; //賦值 j=i-5; a='A'; //變量賦值 b=a+1; f=17.5/2; printf("i=%d\nj=%d\n",i,j); //輸出結果 printf("a=%c\nb=%c\n",a,b); //輸出結果 printf("f=%f\n",f); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下。
i=12 j=7 a=A b=B f=8.750000
賦值語句比較簡單,讀者可以自行分析其運行結果。在C51語言中使用賦值表達式時,要注意數據類型的轉換。數據類型轉換是指不同類型的變量混用時,不同類型之間的轉化。賦值表達式中類型轉換的規則是等號右邊的值轉換為等號左邊的值所屬的類型。程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int i; //聲明變量 float f; i=5; f=5*2; //賦值 printf("f=%f\n",f); //輸出結果 f=i/2; //i/2的值賦值給f printf("f=%f\n",f); //輸出結果 f=i/2.0; // i/2.0的值賦值給f printf("f=%f\n",f); //輸出結果 f=(float)i/2; //使用強制類型轉換 printf("f=%f\n",f); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下。
f=10.000000 f=2.000000 f=2.500000 f=2.500000
本例中,5*2的值為整型數據,而f為浮點型變量,因此,賦值時自動轉換為浮點型數據。i/2即5/2按照除法的運算規則,除不盡時取整數部分,且等式左邊的f為浮點型變量,因此f=2.000000。而對于i/2.0即5/2.0,操作數2.0為浮點型,因此計算的結果為2.500000,保留了完整的結果。如果操作數均為整型數據,則可使用強制類型轉換(float)i/2,計算的結果為2.500000,同樣可以保留結果的完整性。
3.9.3 逗號表達式
逗號表達式是用逗號運算符“,”以及括號將兩個或多個表達式連接在一起的式子。其一般形式如下所示。
#include <stdio.h> //頭文件 void main() //主函數 { int a,b; //聲明變量
逗號表達式的應用示例如下。
表達式1,表達式2,表達式3,...表達式n b=(a=4*10,a*5,a/10); //逗號表達式 printf("a=%d\nb=%d\n",a,b); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下。
a=40 b=20
本例中,先求解a=4*10,則a的值為40,再求解a*5,結果為200,最后求解a/10=20作為整個表達式的值,即b的值為20。在使用逗號表達式時,需要注意以下幾點。
?一個逗號表達式還可以與另一個表達式組成新的逗號表達式,計算時同樣需要自左向右計算。示例如下。
(a=4*10,a*5,a/10), (a+10)
?程序中使用逗號表達式,有時并不一定為了求整個逗號表達式的值,而可能需要分別求出逗號表達式內各表達式的值。示例如下。
(a=3*4,a*5), (a+10);
本例中,整個逗號表達式沒有賦值給任何變量,主要是計算各個中間表達式的值。
?逗號表達式可以構成嵌套結構,即逗號表達式中的表達式也可以是逗號表達式,計算的順序仍然是自左向右,整個表達式的值為最后一個表達式的結果。
?在程序中,需要區分逗號表達式和逗號分隔符。例如,在變量聲明、函數參數表中的逗號只是用作變量之間的分隔符。示例如下。
int a,b,c;
3.9.4 關系表達式
關系表達式是指兩個表達式用關系運算符連接起來的式子。關系運算又稱為“比較運算”。示例如下。
x<(19+y) x!=y (x<5)>=7
關系表達式的計算結果是邏輯“真”(True)或者邏輯“假”(False)。當結果為真時,表達式的值為1;當結果為假時,表達式的值為0。關系表達式的程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int a,b,c,d; //聲明變量 a=27; //賦值 b=237; c=a>(b-200); //計算關系表達式 d=(a!=(b-100)); printf("c=%d\nd=%d\n",c,d); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下所示。
c=0 d=1
本例中,首先為變量a和b賦值,然后通過關系表達式為變量c和d賦值。程序比較簡單,讀者可以自行分析其運算結果。
3.9.5 邏輯表達式
邏輯表達式是指兩個表達式用邏輯運算符連接起來的式子。邏輯表達式中的操作對象可以是任何類型的數據,如整型、浮點型、字符型或指針型等。邏輯表達式的值是邏輯值,即“真”和“假”。當結果為真時,表達式的值為1;反之為0。邏輯表達式的程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int a,b,c,d,e; //聲明變量 float f1,f2; a=7; //變量賦值 b=9; c=!a; //計算邏輯表達式 d=a||b; f1=2.3; f2=5.7; e=(f1!=f2); printf("c=%d\nd=%d\ne=%d\n",c,d,e); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下所示。
c=0 d=1 e=1
關系表達式和邏輯表達式通常是結合在一起使用,常用于程序控制語句中控制流程運算。用于控制程序的流程時,要配合if、while和for等語句來完成。關系表達式和邏輯表達式用于程序流程控制的程序代碼示例如下。
#include <stdio.h> //頭文件 void main() //主函數 { int a,b,c; //聲明變量 a=5; //賦值 b=1; if(a>b) //判斷a>b=1,為真 c=(!a)||b; //執行此語句 else c=a||b; //不執行該語句 printf("c=%d\n",c); //輸出結果 }
該程序可在Keil μ Vision3集成開發環境中運行,執行結果如下所示。
c=1
該程序中,首先為變量a和b賦值,然后判斷關系表達式a>b的值,如果其為真,則執行if下面的語句,否則執行else下面的語句。這里執行邏輯表達式(!a)||b并賦值給變量c。
- Fundamentals of Linux
- Vue.js快速入門與深入實戰
- C#程序設計(慕課版)
- Ray分布式機器學習:利用Ray進行大模型的數據處理、訓練、推理和部署
- 深度強化學習算法與實踐:基于PyTorch的實現
- jQuery開發基礎教程
- Python機器學習基礎教程
- Mastering Android Game Development
- Mastering openFrameworks:Creative Coding Demystified
- Python語言實用教程
- Vue.js 2 Web Development Projects
- Groovy 2 Cookbook
- ASP.NET開發寶典
- Laravel Design Patterns and Best Practices
- Mastering Magento Theme Design