前沿拓展:
win tc
我裝的 大地ghost win7 64位兼容不錯(cuò),日常用的東西還沒(méi)發(fā)現(xiàn)過(guò)問(wèn)題,
建議你多裝XP吧.裝雙統(tǒng),我也是這樣做,XP基本沒(méi)用過(guò)~~
一、分號(hào),大括號(hào)
分號(hào)。分號(hào)是表達(dá)式結(jié)束的標(biāo)志,一般表達(dá)式后面都要有。寫(xiě)“;”的時(shí)候一定要注意:是否要結(jié)束前面的語(yǔ)句 。注意:if,switch,for,while語(yǔ)句,數(shù)據(jù)類型定義,函數(shù)定義。
if(a>b) /*if語(yǔ)句,沒(méi)有分號(hào)*/
{…}
while(i+=10,i!=100); /*while語(yǔ)句循環(huán)體為空,依靠逗號(hào)語(yǔ)句實(shí)現(xiàn)循環(huán)*/
struct a /*結(jié)構(gòu)體數(shù)據(jù)定義,沒(méi)有分號(hào)*/
{…}b; /*結(jié)構(gòu)體變量,要有分號(hào)*/
int sum(…) /*函數(shù)定義,沒(méi)有分號(hào)*/
{….}
大括號(hào)。大括號(hào)是一個(gè)語(yǔ)句段的標(biāo)志。寫(xiě)大括號(hào)時(shí)最好一次寫(xiě)一對(duì),第二把光標(biāo)移到大括號(hào)里寫(xiě) 。避免遺漏。
二、運(yùn)算符號(hào)
“=”與“==”
“=”用于賦值,注意“=”左邊必須是變量,右邊可以是常量也可以是變量?!?=”用于判斷兩個(gè)量的大小,左右兩邊可以是常量也可以是變量( 盡量把常量寫(xiě)在左邊,這樣“==”誤寫(xiě)成“=”時(shí)編譯器就會(huì)報(bào)錯(cuò) )。 運(yùn)算表達(dá)式有它本身的值 。“=”語(yǔ)句值為“=”右邊的量的大?。弧?=”語(yǔ)句值為判斷結(jié)果,無(wú)外乎兩種,0(表示“==”兩邊不等)1(“==”兩邊相等)。
(i=1)==(3==4); /*i值為1,整個(gè)表達(dá)式值為0*/
“,”
逗號(hào)語(yǔ)句是從左到右計(jì)算,整個(gè)逗號(hào)語(yǔ)句的值為最后一個(gè)語(yǔ)句的值
i=(j=2,j+8,j++); /*先計(jì)算j=2,值為2,j+8不是運(yùn)算表達(dá)式,跳過(guò),計(jì)算j++得到整個(gè)括號(hào)內(nèi)的值3*/
“/”
“/”兩邊都是整型變量的時(shí)候結(jié)果也是整型,而且結(jié)果遵循向0靠攏的原則 。
運(yùn)算符的優(yōu)先級(jí)及結(jié)合方向
不多說(shuō)了,表格一定要背牢。想要一起學(xué)習(xí)C++的可以加群248894430,群內(nèi)有各種資料滿足大家
三、變量
命名
不要吝惜,能說(shuō)明白性質(zhì)盡量在變量的名字上說(shuō)明。避免老是使用一個(gè)字母,或者難以理解的變量名 。對(duì)于較長(zhǎng)的變量命名可以使用宏定義、類型定義。
#deine UP 0x4800 /*鍵碼的宏定義*/
typedef struct
{….}MEM; /*結(jié)構(gòu)體變量的類型定義*/
類型
注意變量的使用范圍。 當(dāng)不確定變量的范圍的時(shí)候盡量選用值域?qū)挼念愋?。雙目運(yùn)算符兩邊的變量一般類型要一致。不一致的時(shí)候需要使用類型轉(zhuǎn)換。
上回說(shuō)的是一些小問(wèn)題,真正編東西,學(xué)東西還有許多要注意的地方。
一、多看代碼
在有一定基礎(chǔ)以后一定要多看別人的代碼。注意代碼中的算法和數(shù)據(jù)結(jié)構(gòu)。 畢竟學(xué)C之后的關(guān)口就是算法和數(shù)據(jù)結(jié)構(gòu)。提到數(shù)據(jù)結(jié)構(gòu),指針是其中重要的一環(huán),絕大多數(shù)的數(shù)據(jù)結(jié)構(gòu)是建立在指針之上的,如鏈表、隊(duì)列、樹(shù)、圖等等,所以只有學(xué)好指針才能真正學(xué)好C。對(duì)于這些函數(shù)的用法就要牢牢記住。
二、要自己動(dòng)手
編程序是個(gè)實(shí)干的活,光說(shuō)不練不行。剛開(kāi)始學(xué)的時(shí)候可以多練習(xí)書(shū)上的習(xí)題。 對(duì)于自己不明白的地方,自己編個(gè)小程序?qū)嶒?yàn)一下是最好的方法,能給自己留下深刻的印象。自己動(dòng)手的過(guò)程中要不斷糾正自己不好的編程習(xí)慣和認(rèn)識(shí)錯(cuò)誤。有一定的基礎(chǔ)以后可以嘗試編一點(diǎn)小游戲,文曲星之類的電子詞典上小游戲很多,照著編作為練習(xí)?;A(chǔ)很扎實(shí)的時(shí)候,可以編一些關(guān)于數(shù)據(jù)結(jié)構(gòu)方面的東西,諸如最經(jīng)典的學(xué)生管理系統(tǒng)。之后…..學(xué)匯編、硬件知識(shí)。
三、選擇一個(gè)好的編譯器
英文版Turbo C v2.0,最經(jīng)典的C編譯器,推薦一個(gè)win-tc 1.91,支持windows下的編譯器。
四、關(guān)于養(yǎng)成良好的編程習(xí)慣
1、 在比較復(fù)雜的代碼后面要有注釋。 如果光溜溜一堆代碼,別人就不可能看懂你的代碼,而且也不利于查找錯(cuò)誤。除非你一直編東西給自己看。能在代碼里說(shuō)明白的就一定要在代碼里體現(xiàn)。比如變量名、函數(shù)名,在命名的時(shí)候盡量說(shuō)明是干什么用的。
2、注意語(yǔ)句的嵌套不能過(guò)長(zhǎng),一般來(lái)說(shuō),一段代碼里Tab要少于8個(gè)。 簡(jiǎn)單說(shuō)就是語(yǔ)句最多8個(gè)嵌套。 對(duì)于新手來(lái)說(shuō),這個(gè)標(biāo)準(zhǔn)還要下降。有一個(gè)好習(xí)慣是,把主函數(shù)盡量寫(xiě)簡(jiǎn)短。經(jīng)??吹絼e人的代碼是主函數(shù)只有幾行,幾個(gè)函數(shù)調(diào)用,而定義全在主函數(shù)外部。這樣一是減少了主函數(shù)內(nèi)部的嵌套,二是比較精簡(jiǎn),容易讀懂。
3、注意語(yǔ)句的選擇。并不是分支語(yǔ)句就用if循環(huán)就用while、for。在適當(dāng)?shù)那闆r下switch和do while語(yǔ)句也是要用的。在某些時(shí)候,switch語(yǔ)句比if語(yǔ)句更加精練明了,而do while比while少一個(gè)循環(huán)。
一.學(xué)好C語(yǔ)言的運(yùn)算符和運(yùn)算順序
下面我們通過(guò)幾個(gè)例子來(lái)說(shuō)明:
(1) 5*8/4%10 這個(gè)表達(dá)式中出現(xiàn)3種運(yùn)算符,是同級(jí)運(yùn)算符,運(yùn)算順序按從左至右結(jié)合,因此先計(jì)算5 *8=40,第二被4除,結(jié)果為10,最后是%(求余數(shù))運(yùn)算,所以表達(dá)式的最終結(jié)果為10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
對(duì)于c=++a*b來(lái)說(shuō),按表中所列順序,+ +先執(zhí)行,*后執(zhí)行,所以+ + a執(zhí)行后,a的值為4,由于+ +為前置運(yùn)算,所以a的值4參與運(yùn)算,C的值計(jì)算式為4*5=20而不是3*5=15了;而對(duì)于d=a++*b來(lái)說(shuō),由于a + +為后置運(yùn)算,所以a值為4參與運(yùn)算,使得d的值仍為20,而a參與運(yùn)算后其值加1,值為5。 這個(gè)例子執(zhí)行后,a的值為5,b的值為5,c的值為20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b*5)
例子中的“,”是逗號(hào)結(jié)合運(yùn)算,上式稱為逗號(hào)表達(dá)式,自左向右結(jié)合,最后一個(gè)表達(dá)式的結(jié)果值就是逗號(hào)表達(dá)式的結(jié)果,所以上面的逗號(hào)表達(dá)式結(jié)果為40,a的值為3,b的值為8,c的值為40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一個(gè)三目運(yùn)算,它的功能是先做關(guān)系運(yùn)算a>b部分,若結(jié)果為真,則取問(wèn)號(hào)后a的值,否則取冒號(hào)后b的值,因此c的值應(yīng)該為6,這個(gè)運(yùn)算可以用來(lái)代替if…else…語(yǔ)句的簡(jiǎn)單應(yīng)用。
二.學(xué)好C語(yǔ)言的四種程序結(jié)構(gòu)
(1)順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。例如;a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問(wèn)題就好象交換兩個(gè)杯子水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋?c = a; a= b; b = c; 執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫(xiě)成:a = b; c = a; b = c; 則執(zhí)行結(jié)果就變成a = b = c = 5,不能達(dá)到預(yù)期的目的,初學(xué)者最容易犯這種錯(cuò)誤。 順序結(jié)構(gòu)可以**使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見(jiàn)的輸入、計(jì)算,輸出三步曲的程序就是順序結(jié)構(gòu),例如計(jì)算圓的面積,其程序的語(yǔ)句順序就是輸入圓的半徑r,計(jì)算s = 3.14159*r*r,輸出圓的面積s。不過(guò)大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語(yǔ)句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。
(2) 分支結(jié)構(gòu)
下面我介紹幾種基本的分支結(jié)構(gòu)。
①if(條件)
{
分支體
}
這種分支結(jié)構(gòu)中的分支體可以是一條語(yǔ)句,此時(shí)“{ }”可以省略,也可以是多條語(yǔ)句即復(fù)合語(yǔ)句。它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過(guò)分支體,這時(shí)分支體就不會(huì)執(zhí)行。如:要計(jì)算x的絕對(duì)值,根據(jù)絕對(duì)值定義,我們知道,當(dāng)x>=0時(shí),其絕對(duì)值不變,而x<0時(shí)其絕對(duì)值是為x的反號(hào),因此程序段為:if(x<0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語(yǔ)句構(gòu)成。如:求ax^2+bx+c=0的根
分析:因?yàn)楫?dāng)b^2-4ac>=0時(shí),方程有兩個(gè)實(shí)根,否則(b^2-4ac<0)有兩個(gè)共軛復(fù)根。其程序段如下:
d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi\n”r, i);
printf(“x2=%8.4f-%8.4fi\n”r,i)
}
③嵌套分支語(yǔ)句:其語(yǔ)句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語(yǔ)句雖可解決多個(gè)入口和出口的問(wèn)題,但超過(guò)3重嵌套后,語(yǔ)句結(jié)構(gòu)變得非常復(fù)雜,對(duì)于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過(guò)3重可以用下面的語(yǔ)句。
④switch開(kāi)關(guān)語(yǔ)句:該語(yǔ)句也是多分支選擇語(yǔ)句,到底執(zhí)行哪一塊,取決于開(kāi)關(guān)設(shè)置,也就是表達(dá)式的值與常量表達(dá)式相匹配的那一路,它不同if…else 語(yǔ)句,它的所有分支都是并列的,程序執(zhí)行時(shí),由第一分支開(kāi)始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語(yǔ)句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語(yǔ)句在應(yīng)用時(shí)要特別注意開(kāi)關(guān)條件的合理設(shè)置以及break語(yǔ)句的合理應(yīng)用。
(3)循環(huán)結(jié)構(gòu):
循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書(shū)寫(xiě)的工作量,用來(lái)描述重復(fù)執(zhí)行某段算法的問(wèn)題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do –while循環(huán)和for循環(huán)。四種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因?yàn)閺?qiáng)制改變程序的順序經(jīng)常會(huì)給程序的運(yùn)行帶來(lái)不可預(yù)料的錯(cuò)誤,在學(xué)習(xí)中我們主要學(xué)習(xí)while、do…while、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,如把while循環(huán)的例題,用for語(yǔ)句重新編寫(xiě)一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)**循環(huán),這是初學(xué)者的一個(gè)常見(jiàn)錯(cuò)誤。
在學(xué)完這三個(gè)循環(huán)后,應(yīng)明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的**作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說(shuō)do…while的循環(huán)體最少被執(zhí)行一次,而while 循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán),而goto語(yǔ)句與if構(gòu)成的循環(huán),是不能用break和continue語(yǔ)句進(jìn)行控制的。
順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實(shí)不管哪種結(jié)構(gòu),我們均可廣義的把它們看成一個(gè)語(yǔ)句。在實(shí)際編程過(guò)程中常將這三種結(jié)構(gòu)相互結(jié)合以實(shí)現(xiàn)各種算法,設(shè)計(jì)出相應(yīng)程序,但是要編程的問(wèn)題較大,編寫(xiě)出的程序就往往很長(zhǎng)、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個(gè)問(wèn)題的方法是將C程序設(shè)計(jì)成模塊化結(jié)構(gòu)。
(4)模塊化程序結(jié)構(gòu)
C語(yǔ)言的模塊化程序結(jié)構(gòu)用函數(shù)來(lái)實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫(xiě)成一個(gè)C函數(shù),第二通過(guò)主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)一大型問(wèn)題的C程序編寫(xiě),因此常說(shuō):C程序=主函數(shù)+子函數(shù)。 因些,對(duì)函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過(guò)上機(jī)調(diào)試加以鞏固。
三.掌握一些簡(jiǎn)單的算法
如用選擇法對(duì)10個(gè)不同整數(shù)排序(從小到大),選擇法排序思路:設(shè)有10個(gè)元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進(jìn)行交換,即無(wú)任何**作;若a[2]~a[10] 中有一個(gè)比a[1]小,則將其中最大的一個(gè)(假設(shè)為a[i])與a[1]交換,此時(shí)a[1]中存放了10個(gè)中最小的數(shù)。第二輪將a[2]與a[3]~a[10]比較,將剩下9個(gè)數(shù)中的最小者a[i]與a[2]交換,此時(shí)a[2] 中存放的10個(gè)數(shù)中第2小的數(shù);依此類推,共進(jìn)行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數(shù)中的最小一個(gè),代碼如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j]
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
想要一起學(xué)習(xí)C++的可以加群248894430,群內(nèi)有各種資料滿足大家
拓展知識(shí):
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http://m.xiesong.cn/96305.html