C語言編程學(xué)習(xí):判斷語句與更多的運(yùn)算符

C語言是面向過程的,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言乡数,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)吃警。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型啄育,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域酌心,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣挑豌。之所以說C++比C更先進(jìn)安券,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣氓英。之所以說C++比C更先進(jìn)侯勉,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語言本身而言铝阐,在C中更多的是算法的概念址貌。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ)练对,好的設(shè)計(jì)如果沒有好的算法遍蟋,一樣不行。而且锹淌,“C加上好的設(shè)計(jì)”也能寫出非常好的東西匿值。

很多小伙伴都老是會(huì)碰到疑問,其實(shí)還是基礎(chǔ)沒打扎實(shí)赂摆,這些題如果你不看答案你能知道多少呢挟憔?如果還有很多不知道就證明基礎(chǔ)沒打扎實(shí),如果你還在入門糾結(jié)烟号,如果你還在苦惱怎么入門绊谭!小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零汪拥,五九六 】达传,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)迫筑!裙內(nèi)有開發(fā)工具宪赶,很多干貨和技術(shù)資料分享!

前面有新手問脯燃,為什么45/6=7搂妻?不是應(yīng)該等于7.5嗎,這里要說明一個(gè)問題辕棚,計(jì)算機(jī)世界里的運(yùn)算和運(yùn)算結(jié)果欲主,都是根據(jù)類型來進(jìn)行的,先確定類型逝嚎,再進(jìn)行相關(guān)的運(yùn)算扁瓢,整數(shù)運(yùn)算的結(jié)果就只能是整數(shù),小數(shù)部分會(huì)被直接舍棄掉补君。有人肯定要問怎樣才能得到正確結(jié)果呢引几?要使結(jié)果正確,必須修改這個(gè)語句挽铁,以浮點(diǎn)數(shù)的方式計(jì)算表達(dá)式她紫。要把數(shù)據(jù)從一種類型轉(zhuǎn)換為另一種類型,應(yīng)該把目標(biāo)類型放在數(shù)據(jù)前面的括號(hào)中屿储。因此正確的計(jì)算結(jié)果的表達(dá)式應(yīng)該是:(float)45/6贿讹,這就是我們需要的表達(dá)式:在正確的地方使用正確類型的數(shù)據(jù)。一種類型顯式轉(zhuǎn)換為另一種類型的過程稱為“強(qiáng)制類型轉(zhuǎn)換”够掠,這在C語言里是經(jīng)常會(huì)用到的民褂,尤其是以后學(xué)指針后可能經(jīng)常會(huì)看到各種類型的指針互相轉(zhuǎn)換。還有另外一種類型轉(zhuǎn)換叫自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換),在二元(就是有兩個(gè)操作數(shù))操作運(yùn)算中使用不同類型的操作數(shù)赊堪,編譯器就會(huì)把其中一個(gè)值域(就是取值范圍)較小的操作數(shù)類型轉(zhuǎn)換為另一個(gè)操作數(shù)的類型面殖,這就是隱式類型轉(zhuǎn)換。比如一個(gè)操作數(shù)類型是double哭廉,另一個(gè)是float脊僚,那么float類型的數(shù)據(jù)就會(huì)被自動(dòng)轉(zhuǎn)換為double類型;兩個(gè)操作數(shù)類型分別為float和int遵绰,那么int類型就會(huì)被自動(dòng)轉(zhuǎn)換為float類型辽幌。下面以一個(gè)程序來表現(xiàn)這種轉(zhuǎn)換。

第三章 判斷語句與更多的運(yùn)算符

本章我們會(huì)在編寫的程序種類和程序靈活性上邁出一大步椿访,我們要學(xué)習(xí)判斷語句乌企,在程序中作出判斷,就是選擇執(zhí)行一組程序語句成玫,而不執(zhí)行另一組程序語句加酵。在現(xiàn)實(shí)生活中,我們總要做判斷哭当。我們每天睡醒后猪腕,都要決定是否去工作(學(xué)生黨決定是否去上學(xué))。我們要回答如下問題:

今天是周末嗎钦勘?

如果答案是肯定的码撰,就躺在床上不動(dòng)。否則个盆,就去工作。

這是一個(gè)很簡單的判斷朵栖。吃完早餐后颊亮,我們要看看天氣。又要決定:

如果今天下雨陨溅,就帶雨傘终惑;如果雨還下的很多,就打的去上班门扇,否則雹有,就坐公交吧。

這是一個(gè)比較復(fù)雜的判斷過程臼寄。C中的比較涉及一些新運(yùn)算符霸奕,比較兩個(gè)值有6個(gè)關(guān)系運(yùn)算符

這些運(yùn)算只會(huì)得到兩種值。如果比較結(jié)果為真吉拳,每個(gè)操作的結(jié)果都是1(true)质帅,否則如果比較結(jié)果為假,則每個(gè)操作的結(jié)果都是0(false)。這些表達(dá)式稱為邏輯表達(dá)式或布爾表達(dá)式煤惩,因?yàn)槊總€(gè)表達(dá)式都只會(huì)得到兩個(gè)結(jié)果之一:true或false嫉嘀。需要注意的是等于運(yùn)算符是兩個(gè)連續(xù)的等號(hào),使用一個(gè)等號(hào)(賦值)是不對(duì)的魄揉。有了用于比較的關(guān)系運(yùn)算符后剪侮,就需要使用一個(gè)語句來做判斷了,最簡單的語句就是if語句洛退。if語句的一般形式或語法如下:

if(表達(dá)式)

語句1;

語句2;

注意瓣俯,在第一行的末尾沒有分號(hào),這是因?yàn)閕f關(guān)鍵字所在的一行代碼和其后的一行代碼組合在一起不狮,構(gòu)成了一個(gè)語句降铸,一條語句的末尾才會(huì)加分號(hào)。之前有個(gè)吧友在使用循環(huán)語句的時(shí)候也犯了這種錯(cuò)誤摇零,他在while(判斷語句){}的后面就加了一個(gè)分號(hào)while(判斷語句);{循環(huán)執(zhí)行語句}推掸,如果是這樣,那表示while語句和后面的一條空語句單獨(dú)組成了一條語句驻仅,后面的循環(huán)執(zhí)行語句就不屬于循環(huán)里的了谅畅。

下面我們來看一個(gè)程序,這個(gè)程序讓用戶輸入一個(gè)1~10之間的數(shù)字噪服,來確定該數(shù)字是多大毡泻。

這段代碼聲明一個(gè)整數(shù)變量number,并初始化為0粘优,接著提示用戶輸入一個(gè)1~10之間的數(shù)字仇味,使用scanf函數(shù)讀取這個(gè)數(shù)值,并存儲(chǔ)在變量number中雹顺。

下一條語句是一條判斷輸入值的if語句:

if(number > 5)

printf("You entered %d which is greater than 5 ",number);

比較number的值和5丹墨,如果number大于5,就執(zhí)行打印嬉愧。如果number不大于5贩挣,就跳過printf;接著是另一條if語句:

if(number < 6)

printf("You entered %d which is less than 6 ",number);

這條語句比較number的值和6没酣,如果number小于6王财,就執(zhí)行打印,否則裕便,跳過這個(gè)printf绒净,最后,使用return語句結(jié)束程序偿衰,將控制權(quán)返回給操作系統(tǒng)疯溺。

我們可以擴(kuò)展if語句论颅,提供更多的靈活性。這時(shí)就需要使用if-else語句了囱嫩,它的語法如下:

if(判斷語句1)

語句1;

...

else if(判斷語句2)

語句2;

...

else

語句3;

語句4;

這是一個(gè)多重選擇恃疯,中間的else if可以有0個(gè)或多個(gè),如果個(gè)數(shù)為0(就是省略else if)墨闲,

if(判斷語句1)

語句1;

else

語句3;

語句4;

那這就是一個(gè)雙重選擇今妄,如果判斷語句1為真,就執(zhí)行語句1鸳碧,之后程序繼續(xù)執(zhí)行語句4,盾鳞;如果判斷語句為假,就執(zhí)行語句3瞻离,之后程序繼續(xù)執(zhí)行語句4.

下面我們看一個(gè)三重選擇的程序:

邏輯運(yùn)算符:

有時(shí)執(zhí)行一個(gè)測試不足以作出判斷腾仅,而需要合并兩個(gè)或多個(gè)檢查,如果這些條件都為true套利,才執(zhí)行某個(gè)操作

1.邏輯與運(yùn)算符&&

邏輯與運(yùn)算符&&是一個(gè)二元運(yùn)算符推励,只有當(dāng)它的兩個(gè)操作數(shù)都為true時(shí),表達(dá)式的結(jié)果才為true肉迫,比如下面的例子验辞,

if(age > 12 && age < 20)

printf("You are officially a teenager.");

只有age的值在13~19之間時(shí),才執(zhí)行printf語句喊衫。當(dāng)然也可以使用&&來連接更多的表達(dá)式跌造,比如像下面這種:

if(age > 12 && age < 20 && savings > 5000)

printf("You are a rich teenager.");

上面三個(gè)條件都必須為true,printf才會(huì)執(zhí)行族购。

2.邏輯或運(yùn)算符壳贪,只要它連接的操作數(shù)中有一個(gè)是true,其結(jié)果就是true寝杖。比如下面的例子:

if(a < 10 || b > c || c > 50)

printf(At least one of the conditions is true.");

三個(gè)條件a<10违施、b>c和c>50中至少有一個(gè)是true,就執(zhí)行printf朝墩,例如,當(dāng)a伟姐、b收苏、c的值都是9時(shí),如果三個(gè)都為假愤兵,這時(shí)候才會(huì)跳過printf語句去執(zhí)行下一行語句鹿霸。

3.邏輯非運(yùn)算符!

最后一個(gè)是邏輯非運(yùn)算符,用“!”表示秆乳,!運(yùn)算符是一元運(yùn)算符懦鼠,因?yàn)樗挥幸粋€(gè)操作數(shù)钻哩,邏輯非運(yùn)算符很簡單,它會(huì)翻轉(zhuǎn)邏輯表達(dá)式的值肛冶,使true變?yōu)閒alse欺缘,false變成true累驮。假定有兩個(gè)變量a和b,其值分別是5和2,則表達(dá)式a>b是true蜂怎。如果使用邏輯非運(yùn)算符,表達(dá)式!(a>b)就是false躲叼。

下面我們使用邏輯運(yùn)算符&&來將我們輸入的某個(gè)大寫字符轉(zhuǎn)換成小寫字符:

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九蔬捷,四七零,五九六 】董习,無論你是大牛還是小白烈和,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具皿淋,很多干貨和技術(shù)資料分享招刹!

代碼中的這句letter += 'a' - 'A';是關(guān)鍵,這里用到了我們前面說的ascii碼表的知識(shí)沥匈,我們知道'a'和'A'在ascii碼表中表示的數(shù)值不同蔗喂,我們通過'a' - 'A'就得到了兩者的差值,在加上原來的letter就能將其轉(zhuǎn)換為小寫字符了高帖。注意其中的+=這是個(gè)縮寫形式缰儿,對(duì)于加減乘除取模運(yùn)算,都支持這種縮寫形式散址,這里就等同于letter = letter + 'a' - 'A';再比如result *= val;其實(shí)就是result = result * val;

條件運(yùn)算符

條件運(yùn)算符根據(jù)一個(gè)邏輯表達(dá)式等于true還是false,執(zhí)行兩個(gè)表達(dá)式中的一個(gè)乖阵。由于涉及三個(gè)操作數(shù)---一個(gè)邏輯表達(dá)式和另外兩個(gè)表達(dá)式---因此這個(gè)運(yùn)算符也成為三元運(yùn)算符,它也是C語言里唯一一個(gè)三元運(yùn)算符(?:)预麸。使用條件運(yùn)算符的表達(dá)式的一般形式如下:

邏輯表達(dá)式?表達(dá)式1:表達(dá)式2

一定要注意運(yùn)算符和操作數(shù)的相對(duì)位置瞪浸。?字符跟在邏輯表達(dá)式condition的后面,?的右邊是表示選項(xiàng)的兩個(gè)操作數(shù)表達(dá)式1和表達(dá)式2.如果邏輯表達(dá)式等于true吏祸,該操作的結(jié)果就是表達(dá)式1的值对蒲,如果邏輯表達(dá)式等于false,該操作的結(jié)果就是表達(dá)式2的值贡翘。注意只計(jì)算表達(dá)式1和表達(dá)式2中的一個(gè)蹈矮。比如在一條語句中使用條件運(yùn)算符,如下:

x = y > 7 ? 25 : 50;

執(zhí)行這條語句鸣驱,如果y大于7泛鸟,x就賦值為25,否則踊东,x就設(shè)置為50北滥,其實(shí)條件表達(dá)式就是判斷語句的快捷方式刚操,我們?nèi)绻门袛嗾Z句那就是這樣:

if(y > 7)

x = 25;

else

x = 50;

條件運(yùn)算符可以簡明地表達(dá)某些理念。比如使用它可以非常簡單地編寫出計(jì)算兩個(gè)變量中較小值或較大值的表達(dá)式再芋,我們以整型變量a和b為例菊霜,a > b ? a : b,這樣就可以很簡單得出a祝闻、b中的較大者占卧,得出較小值也很簡單a < b ? a : b.

下面我們來看使用條件運(yùn)算符的實(shí)際例子:

注意其中const修飾符表示不變的意思,就是const double就是定義一個(gè)雙精度變量联喘,但是變量不允許被改變华蜒。程序假定產(chǎn)品的單價(jià)為$3.50,提供了三個(gè)級(jí)別的折扣:購買數(shù)量超過50豁遭,折扣為15%叭喜;數(shù)量超過20,折扣為10%蓖谢;數(shù)量超過10捂蕴,折扣為5%,否則不打折闪幽。

判斷語句和循環(huán)語句有許多類似的地方啥辨,都可以使用語句塊(加大括號(hào){}),都可以使用嵌套盯腌,當(dāng)然判斷語句和循環(huán)語句也可以混合使用溉知,這樣也可以增加程序的多樣性。我們同樣使用例子來說明這點(diǎn):

#include

#include

#include

int main(void)

{

int chosen = 0;

int guess = 0;

int count = 3;

int limit = 20;

srand(time(NULL));

chosen = 1 + rand() % limit;

printf(" This is a guessing game.");

printf(" I have chosen a number between 1 and 20"

" whice you must guess. ");

for(;count > 0;--count)

{

printf(" You have %d tr%s left.",count,count == 1 ? "y" : "ies");

printf(" Enter a guess:");

scanf("%d",&guess);

//如果猜對(duì)了數(shù)字

if(guess == chosen)

{

printf(" Congratulations.You guessed it! ");

if(3 == count)

printf(" Brats, you are so lucky! ");

else if(2 == count)

printf(" Not bad ");

else

printf(" You almost fail! ");

return 0;

}

//如果輸入的是無效數(shù)字

else if(guess < 1 || guess > 20)

printf("I said the number is between 1 and 20. ");

//如果猜錯(cuò)了

else

printf("Sorry,%d is wrong.My number is %s than that. ",

guess,chosen > guess ? "greater" : "less");

}

printf(" You have had three tries and failed.The number was %ld ",

chosen);

return 0;

}

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九腕够,四七零级乍,五九六 】,無論你是大牛還是小白帚湘,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)玫荣!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享大诸!

其中可能有兩句大家之前沒有見過捅厂,srand(time(NULL));rand();rand函數(shù)就是用來產(chǎn)生隨機(jī)數(shù)的,但是它產(chǎn)生的整數(shù)只能是偽隨機(jī)數(shù)资柔,因?yàn)檎嬲碾S機(jī)數(shù)只能在自然的過程中產(chǎn)生焙贷,而不能通過運(yùn)算法則產(chǎn)生,它產(chǎn)生隨機(jī)數(shù)之前建邓,會(huì)被給一個(gè)種子盈厘,如果使用相同的種子睁枕,那它產(chǎn)生的隨機(jī)數(shù)永遠(yuǎn)是相同的官边,不信的話大家可以printf打印連續(xù)兩次調(diào)用rand()產(chǎn)生的結(jié)果沸手,正是因?yàn)槿绱耍晕覀兠看味家獮樗x不同的種子注簿,賦種子的操作就是srand函數(shù)契吉,我們這里會(huì)先調(diào)用time函數(shù),此函數(shù)會(huì)把自1970年1月1日起至今的總秒數(shù)返回為一個(gè)整數(shù)诡渴,因?yàn)闀r(shí)間一直在變化捐晶,所以每次執(zhí)行程序時(shí),都會(huì)得到不同的值妄辩,我們會(huì)把time的返回值作為srand函數(shù)的參數(shù)惑灵,這樣就可以生成不同的種子了。這個(gè)程序大家好好理解下眼耀,當(dāng)然也要自己敲代碼運(yùn)行出來英支,不要光用眼睛看不動(dòng)手。

這些是C/C++能做的

服務(wù)器開發(fā)工程師哮伟、人工智能干花、云計(jì)算工程師、信息安全(黑客反黑客)楞黄、大數(shù)據(jù) 池凄、數(shù)據(jù)平臺(tái)、嵌入式工程師鬼廓、流媒體服務(wù)器肿仑、數(shù)據(jù)控解、圖像處理桑阶、音頻視頻開發(fā)工程師柏副、游戲服務(wù)器、分布式系統(tǒng)蚣录、游戲輔助等

今天就講到這里割择,欲知后事如何且聽下回分解(手動(dòng)滑稽)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萎河,隨后出現(xiàn)的幾起案子荔泳,更是在濱河造成了極大的恐慌,老刑警劉巖虐杯,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玛歌,死亡現(xiàn)場離奇詭異,居然都是意外死亡擎椰,警方通過查閱死者的電腦和手機(jī)支子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來达舒,“玉大人值朋,你說我怎么就攤上這事叹侄。” “怎么了昨登?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵趾代,是天一觀的道長。 經(jīng)常有香客問我丰辣,道長撒强,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任笙什,我火速辦了婚禮飘哨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘琐凭。我一直安慰自己杖玲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布淘正。 她就那樣靜靜地躺著摆马,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸿吆。 梳的紋絲不亂的頭發(fā)上囤采,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音惩淳,去河邊找鬼蕉毯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛思犁,可吹牛的內(nèi)容都是我干的代虾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼激蹲,長吁一口氣:“原來是場噩夢啊……” “哼棉磨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起学辱,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乘瓤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后策泣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衙傀,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年萨咕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统抬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聪建,靈堂內(nèi)的尸體忽然破棺而出发侵,到底是詐尸還是另有隱情,我是刑警寧澤妆偏,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盅弛,受9級(jí)特大地震影響钱骂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挪鹏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一见秽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讨盒,春花似錦解取、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遂鹊,卻和暖如春振乏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秉扑。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工慧邮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舟陆。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓误澳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秦躯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忆谓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容