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)滑稽)~