C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解
C++順序結(jié)構(gòu)程序
【例】求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運(yùn)行時(shí)由鍵盤輸入,它們的值滿足b2-4ac≥0。根據(jù)求x1,x2的算法。它可以編寫出以下C++程序:
#include <iostream> #include <cmath> //由于程序要用到數(shù)學(xué)函數(shù)sqrt,故應(yīng)包含頭文件cmath using namespace std; int main( ) { float a,b,c,x1,x2; cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout<<"x1="<<x1<<endl; cout<<"x2="<<x2<<endl; return 0; }
運(yùn)行情況如下:
4.5 8.8 2.4 ↙ x1=-0.327612 x2=-1.17794
如果程序中要用到數(shù)學(xué)函數(shù),都要包含頭文件cmath(也可以用老形式的頭文件math.h,但提倡使用C++新形式的頭文件)。在寫程序時(shí),一定要注意將數(shù)學(xué)表達(dá)式正確地轉(zhuǎn)換成合法的C++表達(dá)式。
可以看到:順序結(jié)構(gòu)的程序中的各執(zhí)行語句是順序執(zhí)行的。這種程序最簡(jiǎn)單,最容易理解。
C++關(guān)系運(yùn)算和邏輯運(yùn)算(關(guān)系運(yùn)算符和邏輯運(yùn)算符)
往往要求根據(jù)某個(gè)指定的條件是否滿足來決定執(zhí)行的內(nèi)容。例如,購(gòu)物在1000元以下的打九五折,1000元及以上的打九折。
C++提供if語句來實(shí)現(xiàn)這種條件選擇。如:
if amount<1000 tax=0.95; //amount代表購(gòu)物總額,tax代表折扣 else tax=0.9; //若amount<1000,條件滿足,tax=0.95,否則tax=0.9 pay=amount*tax; //pay為實(shí)付款
關(guān)系運(yùn)算和關(guān)系表達(dá)式
上面if語句中的“amount<1000”實(shí)現(xiàn)的不是算術(shù)運(yùn)算,而是關(guān)系運(yùn)算。實(shí)際上是比較運(yùn)算,將兩個(gè)數(shù)據(jù)進(jìn)行比較,判斷比較的結(jié)果。“amount<1000”就是一個(gè)比較式,在高級(jí)語言中稱為關(guān)系表達(dá)式,其中“>”是一個(gè)比較符,稱為關(guān)系運(yùn)算符。
C++的關(guān)系運(yùn)算符有:
- < (小于)
- <= (小于或等于) 優(yōu)先級(jí)相同 (高)
- > (大于)
- >= (大于或等于)
- == (等于)
- != (不等于) 優(yōu)先級(jí)相同 (低)
關(guān)于優(yōu)先次序:
前4種關(guān)系運(yùn)算符(<,<=,>,>=)的優(yōu)先級(jí)別相同,后兩種也相同。前4種高于后兩種。例如,“>”優(yōu)先于“==”。而“>”與“<”優(yōu)先級(jí)相同。
關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。
關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。
例如:
- c>a+b 等效于 c>(a+b)
- a>b==c等效于(a>b)==c
- a==b<c等效于a==(b<c)
- a=b>c 等效于a=(b>c)
用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子,稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的一般形式可以表示為:
表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式
其中的“表達(dá)式”可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式?邏輯表達(dá)式?賦值表達(dá)式?字符表達(dá)式。例如,下面都是合法的關(guān)系表達(dá)式:
a>b, a+b>b+c,(a==3)>(b==5), 'a'<'b', (a>b)>(b<c)
關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。例如,關(guān)系表達(dá)式“5==3”的值為“假”,“5>=0”的值為“真”。在C和C++中都用數(shù)值1代表“真”,用0代表“假”。如果有以下賦值表達(dá)式:
- d=a>b 則d得到的值為1
- f=a>b>c f得到的值為0
邏輯常量和邏輯變量
C語言沒有提供邏輯型數(shù)據(jù),關(guān)系表達(dá)式的值(真或假)分別用數(shù)值1和0代表。C++增加了邏輯型數(shù)據(jù)。邏輯型常量只有兩個(gè),即false(假)和true(真)。
邏輯型變量要用類型標(biāo)識(shí)符bool來定義,它的值只能是true和false之一。如
bool found, flag=false; //定義邏輯變量found和flag,并使flag的初值為false found=true; //將邏輯常量true賦給邏輯變量found
由于邏輯變量是用關(guān)鍵字bool來定義的,因此又稱為布爾變量。邏輯型常量又稱為布爾常量。所謂邏輯型,就是布爾型。
設(shè)立邏輯類型的目的是為了看程序時(shí)直觀易懂。
在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時(shí),將false處理為0,將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。
如果將一個(gè)非零的整數(shù)賦給邏輯型變量,則按“真”處理,如
flag=123; //賦值后flag的值為true cout<<flag;
輸出為數(shù)值1。
邏輯運(yùn)算和邏輯表達(dá)式
有時(shí)只用一個(gè)關(guān)系表達(dá)式還不能正確表示所指定的條件。
C++提供3種邏輯運(yùn)算符:
(1) && 邏輯與(相當(dāng)于其他語言中的AND)
(2) || 邏輯或(相當(dāng)于其他語言中的OR)
(3) !邏輯非(相當(dāng)于其他語言中的NOT)
邏輯運(yùn)算舉例如下:
- a && b若a,b為真,則a && b為真。
- a||b 若a,b之一為真,則a||b為真。
- !a 若a為真,則!a為假。
在一個(gè)邏輯表達(dá)式中如果包含多個(gè)邏輯運(yùn)算符,按以下的優(yōu)先次序:
(1) !(非)→ &&(與)→ ?(或),即“!”為三者中最高的。
(2) 邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。
例如:
- (a>b) && (x>y) 可寫成 a>b && x>y
- (a==b) || (x==y) 可寫成 a==b || x==y
- (!a) || (a>b)可寫成 !a || a>b
將兩個(gè)關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來就成為一個(gè)邏輯表達(dá)式,上面幾個(gè)式子就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式可以表示為
表達(dá)式 邏輯運(yùn)算符 表達(dá)式
邏輯表達(dá)式的值是一個(gè)邏輯量“真”或“假”。前面已說明,在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)值1代表“真”,以0代表“假”,但在判斷一個(gè)邏輯量是否為“真”時(shí),采取的標(biāo)準(zhǔn)是: 如果其值是0就認(rèn)為是“假”,如果其值是非0就認(rèn)為是“真”。例如:
(1) 若a=4,則!a的值為0。因?yàn)閍的值為非0,被認(rèn)作“真”,對(duì)它進(jìn)行“非”運(yùn)算,得“假”,“假”以0代表。
(2) 若a=4,b=5,則a && b的值為1。因?yàn)閍和b均為非0,被認(rèn)為是“真” 。
(3) a,b值同前,a-b||a+b的值為1。因?yàn)閍-b和a+b的值都為非零值。
(4) a,b值同前,!a || b的值為1。
(5) 4 && 0 || 2 的值為1。
在C++中,整型數(shù)據(jù)可以出現(xiàn)在邏輯表達(dá)式中,在進(jìn)行邏輯運(yùn)算時(shí),根據(jù)整型數(shù)據(jù)的值是0或非0,把它作為邏輯量假或真,然后參加邏輯運(yùn)算。
通過這幾個(gè)例子可以看出: 邏輯運(yùn)算結(jié)果不是0就是1,不可能是其他數(shù)值。而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對(duì)象可以是0(“假”)或任何非0的數(shù)值(按“真”對(duì)待)。如果在一個(gè)表達(dá)式中的不同位置上出現(xiàn)數(shù)值,應(yīng)區(qū)分哪些是作為數(shù)值運(yùn)算或關(guān)系運(yùn)算的對(duì)象,哪些作為邏輯運(yùn)算的對(duì)象。
實(shí)際上,邏輯運(yùn)算符兩側(cè)的表達(dá)式不但可以是關(guān)系表達(dá)式或整數(shù)(0和非0),也可以是任何類型的數(shù)據(jù),如字符型?浮點(diǎn)型或指針型等。系統(tǒng)最終以0和非0來判定它們屬于“真”或“假”。例如'c ' && 'd'的值為1。
熟練掌握C++的關(guān)系運(yùn)算符和邏輯運(yùn)算符后,可以巧妙地用一個(gè)邏輯表達(dá)式來表示一個(gè)復(fù)雜的條件。例如,要判別某一年(year)是否為閏年。閏年的條件是符合下面兩者之一: ①能被4整除,但不能被100整除。②能被100整除,又能被400整除。例如2004? 2000年是閏年,2005? 2100年不是閏年。
可以用一個(gè)邏輯表達(dá)式來表示:
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
當(dāng)給定year為某一整數(shù)值時(shí),如果上述表達(dá)式值為真(1),則year為閏年;否則year為非閏年??梢约右粋€(gè)“!”用來判別非閏年:
!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
若表達(dá)式值為真(1),year為非閏年。也可以用下面的邏輯表達(dá)式判別非閏年:
(year % 4 != 0) || (year % 100 == 0 && year % 400 !=0)
若表達(dá)式值為真,year為非閏年。請(qǐng)注意表達(dá)式中右面的括號(hào)內(nèi)的不同運(yùn)算符(%,!,&&,==)的運(yùn)算優(yōu)先次序。
相關(guān)文章
基于C語言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11C++事件處理中__event與__raise關(guān)鍵字的用法講解
這篇文章主要介紹了C++事件處理中__event與__raise關(guān)鍵字的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01C++:函數(shù)對(duì)象,STL提供的函數(shù)對(duì)象,函數(shù)適配器詳解
這篇文章主要介紹了C++:函數(shù)對(duì)象,STL提供的函數(shù)對(duì)象,函數(shù)適配器的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-08-08C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出的相關(guān)資料,需要的朋友可以參考下2017-04-04C語言三分鐘精通時(shí)間復(fù)雜度與空間復(fù)雜度
算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度。其作用:?時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長(zhǎng)短;而空間復(fù)雜度是度量算法所需存儲(chǔ)空間的大小2022-02-02opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實(shí)現(xiàn)
本文主要介紹了opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02