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