21天学通C语言-学习笔记(1)
C語(yǔ)言與程序概述
C語(yǔ)言是現(xiàn)在世界上應(yīng)用最廣泛、最受歡迎的計(jì)算機(jī)語(yǔ)言之一。C語(yǔ)言已經(jīng)經(jīng)歷了30多年的發(fā)展,并且仍在繼續(xù)進(jìn)步。
1.1 C語(yǔ)言的歷史沿革
本節(jié)將介紹C語(yǔ)言的誕生、標(biāo)準(zhǔn)化過(guò)程及重要特點(diǎn):
? 使用方便(32個(gè)關(guān)鍵字);
? 結(jié)構(gòu)化編程(函數(shù),控制語(yǔ)句);
? C語(yǔ)言是中級(jí)語(yǔ)言(結(jié)合了低級(jí)語(yǔ)言的直接訪問(wèn)物理內(nèi)存的優(yōu)點(diǎn),和高級(jí)語(yǔ)言的便于結(jié)構(gòu)化編程的優(yōu)點(diǎn));
? 執(zhí)行效率高(對(duì)代碼位級(jí)操作);
? C程序可移植性好(不同計(jì)算機(jī)和不同操作系統(tǒng))。
這個(gè)程序的功能是向屏幕打印一個(gè)字符串“Hello,world!”
范例1-1
#include <studio.h>int main(void){ /*main函數(shù)*/printf("Hello,world!\n"); /*輸出"Hello,world!"*/return 0; }【運(yùn)行結(jié)果】
【代碼解析】這是一個(gè)簡(jiǎn)單的C語(yǔ)言源程序,它必須在一個(gè)編譯環(huán)境中編譯鏈接后才能運(yùn)行。所有的C程序都有一個(gè)main函數(shù),即程序第3行。main函數(shù)是程序的入口,程序運(yùn)行時(shí),先進(jìn)入main函數(shù),然后依次執(zhí)行main函數(shù)體中的語(yǔ)句。在范例1-1中,進(jìn)入main函數(shù),先執(zhí)行第4行語(yǔ)句調(diào)用printf函數(shù),輸出字符串“Hello,world!”;再執(zhí)行第5行return語(yǔ)句,return語(yǔ)句會(huì)導(dǎo)致函數(shù)結(jié)束,程序隨之結(jié)束。
1.2 數(shù)據(jù)結(jié)構(gòu)與算法
一般來(lái)說(shuō),程序由 數(shù)據(jù)結(jié)構(gòu) 和 算法 兩個(gè)部分組成。數(shù)據(jù)結(jié)構(gòu)是一個(gè)個(gè)的實(shí)體,而算法是將它們聯(lián)系在一起的各種手段。
1.2.1 什么是數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是程序存儲(chǔ)、組織數(shù)據(jù)的方式。
數(shù)據(jù)結(jié)構(gòu)描述了數(shù)據(jù)元素之間的邏輯關(guān)系,數(shù)據(jù)必須存儲(chǔ)在內(nèi)存中。數(shù)據(jù)在內(nèi)存中的存儲(chǔ)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)形式,是數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中的物理表示。數(shù)據(jù)結(jié)構(gòu)是程序中處理數(shù)據(jù)的基本單位,在程序中作為一個(gè)整體來(lái)使用。
數(shù)據(jù)結(jié)構(gòu)1——數(shù)組結(jié)構(gòu):
數(shù)組是一種可以存放數(shù)據(jù)的容器,其數(shù)據(jù)在內(nèi)存中連續(xù)存放,訪問(wèn)數(shù)組時(shí),可 以直接使用數(shù)組名加下標(biāo)的形式,比如一數(shù)組存有42名學(xué)生的信息,數(shù)組名是stuArray,數(shù)組序號(hào)從0開(kāi)始排。
若要訪問(wèn)第三個(gè)學(xué)生的信息,只需使用stuArray[[2]]即可。這種數(shù)據(jù)結(jié)構(gòu)適用于頻繁讀取數(shù)據(jù)的情況。
數(shù)據(jù)結(jié)構(gòu)2——鏈表結(jié)構(gòu):
鏈表也是一種可以存放數(shù)據(jù)的容器,但其數(shù)據(jù)在內(nèi)存中分散存放的。鏈表中的相鄰元素間存在一些關(guān)系,這種關(guān)系有很多種形式,最典型的一種是每個(gè)鏈表元素都包含下一個(gè)元素的地址信息,通過(guò)該元素的信息就可以查找到下一個(gè)元素。
若同樣訪問(wèn)第三個(gè)同學(xué)的信息,需要先訪問(wèn)第一個(gè)同學(xué)的信息,從中獲得第二個(gè)同學(xué)的地址信息,然后訪問(wèn)第二個(gè)同學(xué)的內(nèi)存,從中獲得第三個(gè)同學(xué)的地址信息,之后才能訪問(wèn)第三個(gè)同學(xué)的信息。也就是說(shuō),在數(shù)組中訪問(wèn)一個(gè)元素,必須先按順序從第一個(gè)元素往后依次訪問(wèn),直至得到要訪問(wèn)的元素。這種數(shù)據(jù)結(jié)構(gòu)適用于刪除數(shù)據(jù)的操作。
1.2.2 什么是算法
算法就是解決一個(gè)問(wèn)題的完整的步驟描述,是指完成一個(gè)任務(wù)準(zhǔn)確而完整的步驟描述。
算法的優(yōu)劣有兩個(gè)判別標(biāo)準(zhǔn):
? 空間復(fù)雜度——執(zhí)行算法需要占用的內(nèi)存空間(代價(jià))
? 時(shí)間復(fù)雜度——執(zhí)行算法需要消耗的時(shí)間資源(效率)
1.3 程序設(shè)計(jì)概述
結(jié)構(gòu)化程序設(shè)計(jì)之設(shè)計(jì)方法——自頂向下、逐步細(xì)化,同時(shí)嚴(yán)格使用三種基本控制結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu))來(lái)構(gòu)造程序。
? 順序結(jié)構(gòu):按照它們出現(xiàn)的先后順序執(zhí)行的。
? 選擇結(jié)構(gòu):程序中存在一些分支,程序通過(guò)對(duì)一些條件的判斷選擇執(zhí)行的分支。
? 循環(huán)結(jié)構(gòu):反復(fù)執(zhí)行一系列操作,直到條件為假時(shí)跳出。
算法描述方法——算法語(yǔ)言、圖形描述、形式語(yǔ)言
? 算法語(yǔ)言:有偽代碼、各種程序設(shè)計(jì)語(yǔ)言、計(jì)算機(jī)語(yǔ)言等;
? 圖形描述:有流程圖、N-S圖,圖的描述應(yīng)與算法語(yǔ)言的描述對(duì)應(yīng);
? 形式語(yǔ)言:用數(shù)學(xué)的方法,可以避免自然語(yǔ)言的二義性。
偽代碼:介于程序語(yǔ)言和自然語(yǔ)言之間的算法描述。在編程時(shí),當(dāng)設(shè)計(jì)好一個(gè)算法后,都要先將它們使用偽代碼描述出來(lái),再使用程序語(yǔ)言來(lái)實(shí)現(xiàn),其作用就像寫(xiě)文章要先列好提綱一樣。
程序流程圖:算法的圖形描述方式。
N-S流程圖:按照結(jié)構(gòu)化設(shè)計(jì)的思想,N-S流程圖為三種基本結(jié)構(gòu)設(shè)計(jì)了特殊的結(jié)構(gòu)圖,并以它們?yōu)榛A(chǔ)來(lái)描述其余所有的算法。
練習(xí):使用偽代碼描述使用冒泡排序法將序列從混亂到達(dá)排序的算法,并畫(huà)出其程序流程圖或N-S流程圖。
偽代碼:
算法開(kāi)始:設(shè)i值為N-1;當(dāng)i>0{設(shè)j值為0;當(dāng)j<1{如果array[j] > array[j+1]{交換第j個(gè)元素和第j+1個(gè)元素;}j自增1;}i自減1;} 算法結(jié)束
小結(jié)
本筆記介紹了C語(yǔ)言的歷史,包括C語(yǔ)言的誕生和C語(yǔ)言的標(biāo)準(zhǔn)化過(guò)程。同時(shí),為學(xué)習(xí)C語(yǔ)言預(yù)備了一些基本知識(shí),包括數(shù)據(jù)結(jié)構(gòu)、算法和結(jié)構(gòu)化程序設(shè)計(jì)等。
總結(jié)
以上是生活随笔為你收集整理的21天学通C语言-学习笔记(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: emacs python debug_我
- 下一篇: XidianOJ 1099 A simp