C語言程序設(shè)計(jì)課件第01章_第1頁
C語言程序設(shè)計(jì)課件第01章_第2頁
C語言程序設(shè)計(jì)課件第01章_第3頁
C語言程序設(shè)計(jì)課件第01章_第4頁
C語言程序設(shè)計(jì)課件第01章_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1章C語言概述1.1C語言的發(fā)展簡史1.2C語言的特點(diǎn)1.3認(rèn)識C程序1.4C程序的運(yùn)行與調(diào)試[Return]本章學(xué)習(xí)目標(biāo)了解C語言的發(fā)展簡史和特點(diǎn)掌握C語言的基本結(jié)構(gòu)及如何編寫可讀性良好的C程序掌握一個(gè)C程序的編輯、編譯、運(yùn)行和調(diào)試的一般過程1.1C語言的發(fā)展簡史C語言發(fā)源于著名的美國貝爾實(shí)驗(yàn)室,是由該實(shí)驗(yàn)室的研究人員DennisRitchie

和KenThompson兩人于二十世紀(jì)七十年代初在設(shè)計(jì)UNIX操作系統(tǒng)時(shí)開發(fā)出來的。在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的,原來的UNIX操作系統(tǒng)就是1969年由美國貝爾實(shí)驗(yàn)室的KenThompson和DennisRitchie利用匯編語言開發(fā)成功的。由于匯編語言程序依賴于計(jì)算機(jī)硬件,其可讀性和可移植性都很差;但一般的高級語言又難以實(shí)現(xiàn)對計(jì)算機(jī)硬件的直接操作,于是KenThompson于1970年設(shè)計(jì)出一種簡單而且接近硬件的高級語言——B語言,并用B語言寫了UNIX操作系統(tǒng)。1972年到1973年間,DennisRitchie在B語言基礎(chǔ)上又設(shè)計(jì)了C語言。后來,C語言又被多次改進(jìn),并出現(xiàn)了多種版本。80年代初,美國國家標(biāo)準(zhǔn)化協(xié)會(ANSI),根據(jù)C語言問世以來各種版本對C語言的發(fā)展和擴(kuò)充,制定了ANSIC標(biāo)準(zhǔn)(1989年再次做了修訂)。

本書的敘述以ANSIC新標(biāo)準(zhǔn)為基礎(chǔ)。本書選定的編譯環(huán)境是TurboCV3.0。

目前,在微機(jī)上廣泛使用的C語言編譯系統(tǒng)有MicrosoftC、TurboC、BorlandC等。雖然它們的基本部分都是相同的,但還是略有差異,所以請大家注意自己所使用的C編譯系統(tǒng)的特點(diǎn)和規(guī)定(參閱相應(yīng)的手冊)。[Return]C語言同時(shí)具有匯編語言和高級語言的優(yōu)勢。概括如下:(1)語言簡潔、靈活,程序執(zhí)行效率高。(2)運(yùn)算符極其豐富,能夠?qū)崿F(xiàn)在其他高級語言中難以實(shí)現(xiàn)的運(yùn)算功能。(3)數(shù)據(jù)類型豐富,可實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。(4)靈活的結(jié)構(gòu)化控制語句,是理想的結(jié)構(gòu)化程序設(shè)計(jì)語言;以函數(shù)為程序基本單位,容易實(shí)現(xiàn)模塊化程序設(shè)計(jì)。(5)語法不嚴(yán),程序設(shè)計(jì)自由。(6)具有直接對硬件進(jìn)行控制的功能。(7)可移植性好。

1.2C語言的特點(diǎn)(8)C語言的另一面:相對“難”學(xué)。[Return]1.3.1一個(gè)簡單的C程序

1.3認(rèn)識C程序

WelcometotheCworld!/*exam1_1*/#include<stdio.h>main(){printf(“WelcometotheCworld!\n”);}程序運(yùn)行結(jié)果:【例1-1】在屏幕顯示字符串“WelcometotheCworld!”【例1-2】計(jì)算兩個(gè)數(shù)的和并輸出結(jié)果。01

/*exam1_2*/02 #include<stdio.h>/*將stdio.h這個(gè)文件包含進(jìn)來*/03 main() /*主函數(shù)名,函數(shù)從這里開始*/04 {05 inta,b,sum;/*定義三個(gè)整形變量:a,b和sum*/06 a=5;/*給a賦值為5*/07 b=10;/*給b賦值為10*/08 sum=a+b;/*把a(bǔ)+b的值賦給sum*/09 printf(“sumis%d.\n”,sum);/*輸出sum的值*/10 }1.3.2C程序的基本結(jié)構(gòu)

下面再來看另一個(gè)簡單的C程序,并從這個(gè)例子出發(fā)說明C程序的基本結(jié)構(gòu)。程序行最左邊的行號是為了方便介紹程序而添加的,實(shí)際輸入程序時(shí)是不需要的?!?1】第1行為注釋,C語言的注釋以“/*”和“*/”作為注釋內(nèi)容的分界符。注釋可增強(qiáng)程序的可讀性,幫助我們理解程序的含義?!?2】第2行是讓計(jì)算機(jī)系統(tǒng)把文件stdio.h“包含”進(jìn)來。C語言里有關(guān)輸入和輸出的函數(shù)都定義在這個(gè)文件里,要把結(jié)果輸出到屏幕上,就要調(diào)用輸出函數(shù),也就需要把stdio.h文件包含進(jìn)來?!?3】第3行為程序執(zhí)行的起點(diǎn),即main()函數(shù),我們把它稱為“主函數(shù)”。每一個(gè)C程序都由一個(gè)或多個(gè)函數(shù)組成,其中必須有一個(gè)名為main的函數(shù)。函數(shù)體由花括號括起來,main前的int是聲明main函數(shù)的返回值類型為整形,main右邊的園括號內(nèi)的void表示這個(gè)函數(shù)沒有參數(shù)?!?4】第4行的左花括號“{”為main()函數(shù)體的開始分界符。

下面我們逐行對這個(gè)程序進(jìn)行詳細(xì)解說?!?6】第6行是一個(gè)賦值語句,把整數(shù)5賦給a?!?7】第7行也是一個(gè)賦值語句,把整數(shù)10賦給b。【08】第8行把運(yùn)算表達(dá)式a+b的計(jì)算結(jié)果賦給sum?!?9】第9行是調(diào)用系統(tǒng)函數(shù)printf(),按照雙引號(””)內(nèi)的指定格式輸出結(jié)果,在%d位置上用sum的值代替,引號內(nèi)的其余字符照原樣輸出,\n是換行符,告訴計(jì)算機(jī)在輸出完結(jié)果后將光標(biāo)移到下一行的開頭?!?0】第10行是右花括號“}”是main()函數(shù)的結(jié)束分界符?!?5】第5行聲明a、b和sum為整形變量。C語言在使用變量之前必須先聲明其類型,這是與Basic語言不同的。一個(gè)C程序基本包括以下幾個(gè)部分:1.#include宏命令及頭文件2.main()函數(shù)3.花括號{}、語句塊和函數(shù)體4.變量5.語句6.輸入和輸出

當(dāng)我們在程序中加入#include<filename>時(shí),C編譯系統(tǒng)會自動把<>內(nèi)的頭文件的內(nèi)容全部包含進(jìn)來,并且放置在#include這行的位置上。有時(shí)我們需要將已經(jīng)編寫好的另一個(gè)程序包含到本程序中,或者在程序中需要調(diào)用系統(tǒng)庫函數(shù),這時(shí)我們就需要使用#include命令。

如,上例中由于使用系統(tǒng)標(biāo)準(zhǔn)輸出函數(shù)printf(),所以要將含有該函數(shù)聲明信息的stdio.h文件包含進(jìn)來。

#include<stdio.h>main(){…}main(){…}char*_Cdeclgets(char*s);void_Cdeclperror(constchar*s);int_Cdeclprintf(constchar*format,...);[Return]

一個(gè)C程序由一個(gè)或多個(gè)函數(shù)構(gòu)成,其中必須有且只有一個(gè)主函數(shù)main(),一個(gè)函數(shù)可以調(diào)用其他函數(shù),如上面例子中main函數(shù)調(diào)用printf函數(shù)。所有的C程序都是從main函數(shù)開始執(zhí)行,并在main函數(shù)中結(jié)束。[Return]C程序以函數(shù)為單位,編寫C程序就是編寫一個(gè)個(gè)函數(shù)。每個(gè)函數(shù)的主體都包括在一對花括號“{}”內(nèi)。有時(shí)把完成某個(gè)功能或操作的幾個(gè)語句用一對花括號括起來,組成一個(gè)語句塊(也叫復(fù)合語句)。若一個(gè)函數(shù)體內(nèi)有多對花括號,則最外層的一對是函數(shù)體的分界符。[Return]

變量是一個(gè)C程序不可缺少的最基本的部分,是用來存放數(shù)據(jù)的。概括地說,一個(gè)計(jì)算機(jī)程序包括兩個(gè)部分,第一部分是對數(shù)據(jù)的描述,第二部分是對操作的描述。變量就是用來描述數(shù)據(jù)的。C語言的變量必須先聲明后使用,聲明時(shí)要說明變量的數(shù)據(jù)類型和名字。C語言中的數(shù)據(jù)類型有整形(int)、浮點(diǎn)型(float)、字符型(char)等。[Return]每個(gè)C函數(shù)由若干個(gè)語句構(gòu)成,每個(gè)語句以“;”結(jié)束,可以一行書寫多個(gè)語句。C語言有表達(dá)式語句、函數(shù)調(diào)用語句、控制語句、變量定義語句等。如上面main()函數(shù)體有5個(gè)語句,第1個(gè)語句(【05】行)為變量定義語句,第2~4語句(【06】~【08】行)為賦值(表達(dá)式)語句,第5個(gè)語句(【09】行)為函數(shù)調(diào)用語句。[Return]每個(gè)程序必須有0個(gè)或多個(gè)輸入,有至少一個(gè)輸出。如果一個(gè)程序沒有輸出,我們就無從知道它的運(yùn)算和操作結(jié)果。C語言的輸入和輸出是通過調(diào)用系統(tǒng)提供的標(biāo)準(zhǔn)輸入輸出函數(shù)實(shí)現(xiàn)的。如上例中調(diào)用printf()函數(shù)以指定格式輸出計(jì)算結(jié)果。上例中的“printf(“sumis%d\n”,sum);”指定以雙引號內(nèi)的格式輸出,%d處將代入相應(yīng)的sum的值,雙引號內(nèi)的所有其它字符照原樣輸出,“\n”是換行符。1.3.3C程序中的單詞

C語言的單詞可分為標(biāo)識符、關(guān)鍵字、分界符、空白、和運(yùn)算符幾類。1.C語言的標(biāo)識符2.C語言的關(guān)鍵字3.C語言的分界符4.C語言的空白5.C語言的運(yùn)算符

在C語言中,我們稱變量、函數(shù)的名稱、符號常量或者標(biāo)號為用戶標(biāo)識符。C語言的標(biāo)識符由英文大小寫字母、數(shù)字或下劃線所組成,首字母必須是英文字母或下劃線。標(biāo)識符的長度沒有限定,決定于使用的編譯系統(tǒng),如Turbo

C允許標(biāo)識符長度為32個(gè)字符。通常取前8個(gè)字符為有效字符,所以給變量或函數(shù)取名時(shí)最好保證前8個(gè)字符能夠區(qū)別不同。要注意的是,系統(tǒng)的保留字(又稱關(guān)鍵字),是不可以用作標(biāo)識符的。

以下是合法的標(biāo)識符例子:

min,t,SIZE,M1,x10,count_1,_myargument以下是不合法的標(biāo)識符例子:for 使用關(guān)鍵字8h以數(shù)字開頭-5以減號開頭A*出現(xiàn)非法字符*x<y出現(xiàn)非法字符<下面是三個(gè)不同的標(biāo)識符:count,Count,COUNT。[Return]

關(guān)鍵字是編譯系統(tǒng)本身提供給用戶使用的標(biāo)識符,用戶在進(jìn)行編程時(shí)必須按照系統(tǒng)規(guī)定的方式使用這些關(guān)鍵字,而不能更改或者重新定義它們。所以用戶自定義的變量名或函數(shù)名等標(biāo)識符不能與關(guān)鍵字相同,如上面的for和short都是關(guān)鍵字,所以不可用作標(biāo)識符。C語言提供的關(guān)鍵字共有32個(gè),如表1-1所示。※注意:C語言是大小寫敏感的!所有關(guān)鍵字都是小寫的,若把某個(gè)或全部字母寫成大寫形式,則系統(tǒng)不把它當(dāng)做關(guān)鍵字,而當(dāng)成普通標(biāo)識符。auto

break

case

char

const

continue

default

do

double

else

enum

extern

float for

goto

if

int

long register

return

short

signed

sizeof static

struct

switch

typedef union unsigned void

volatile while 表1-1C語言的關(guān)鍵字[Return]※注意:為避免遺漏必須配對使用的符號,例如注釋符號、函數(shù)體的起止標(biāo)識符(花括號)、圓括號等等,在輸入時(shí),可連續(xù)輸入這些起止標(biāo)識符,然后再在其中進(jìn)行插入來完成內(nèi)容的編輯。C語言的分界符是用來分隔特定的語法單位的。如,花括號“{}”用來界定函數(shù)體的范圍;圓括號“()”用來界定函數(shù)的參數(shù);中括號“[]”用來界定數(shù)組的下標(biāo);“/*”和“*/”用來界定注釋內(nèi)容的范圍;分號“;”用來表示一個(gè)語句的結(jié)束;等等。[Return]

一個(gè)C程序除了必需的關(guān)鍵字和用戶自定義的標(biāo)識符以外,一般還需要有一些輔助性的字符,如空格(space)、制表符、回車、換行、注釋等,這些字符起到使程序的版面的層次、段落分明,反映出程序的邏輯結(jié)構(gòu),從而提高程序的可讀性的作用。這些字符在編譯時(shí)不會被生成任何代碼,所以稱它們?yōu)榭瞻祝╞lank)。[Return]

運(yùn)算符在表達(dá)式中表示對數(shù)據(jù)執(zhí)行某類運(yùn)算。C語言的運(yùn)算符非常豐富,共有13類34種,其中最常用到的有,算術(shù)運(yùn)算符:加(+)、減(-)、乘(*)、除(/)、求余(%)5種,關(guān)系運(yùn)算符:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)6種,賦值運(yùn)算符(=),等等。各種運(yùn)算符的作用將分散在后面各章節(jié)分別作詳細(xì)介紹。※注意:C語言的等于運(yùn)算符由兩個(gè)“=”組成,即“==”,而賦值運(yùn)算符是一個(gè)“=”。千萬別寫錯(cuò)!1.3.4如何編寫可讀性良好的C程序1.命名風(fēng)格2.注釋風(fēng)格3.布局風(fēng)格

標(biāo)識符的命名習(xí)慣,盡量遵循如下原則:(1)含義明確(2)規(guī)范縮寫(3)規(guī)范分隔(4)限制長度(5)大小寫約定[Return]

C語言的注釋格式為:/*……*/。注釋時(shí)要注意以下幾點(diǎn):(1)“/*”和“*/”

必須成對使用,且“/”和“*”、以及“*”和“/”之間不能有空格,否則都出錯(cuò)。(2)注釋的位置,可以單占1行,也可以跟在語句的后面。(3)如果1行寫不下,可另起1行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運(yùn)行。(5)編寫程序時(shí)先編寫注釋、后編寫代碼;修改程序時(shí)先修改注釋、后修改代碼。(6)注釋不僅僅是只列出代碼執(zhí)行的功能,而且還應(yīng)給出為什么如此編寫代碼的原因或理由。[Return]

一個(gè)程序的可讀性與它的版面布局有很大關(guān)系。程序的版面布局又與花括號的格式和空白的使用密切相關(guān)。下面介紹常見的幾種花括號格式以及空白的使用:(1)花括號的格式1)

1TBS2)

Allman3)

Whitesmith4)

GNUfor(i=1;i<=100;i++){

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}[Return](2)空白的使用

在一個(gè)程序中適當(dāng)?shù)厥褂每瞻卓商岣叱绦虻目勺x性。下面重點(diǎn)說明一下縮進(jìn)的格式和標(biāo)識符周圍的空白。1)

縮進(jìn)for(

j=0;j<2;j++)sum=sum+a[j];2)標(biāo)識符周圍的空白for(j=0;j<2;j++)??for(k=0;k<3;k++)??scanf(“%d”,&a[j][k]);for(j=0;j<2;j++)??for(k=0;k<3;k++)??printf(“a[%d][%d]=%d\n”,j,k,a[j][k]);一個(gè)采用4個(gè)空格的縮進(jìn)的例子:在圓括號旁使用空格和在分號的右側(cè)使用空格例子:[Return]1.4C程序的運(yùn)行與調(diào)試1.4.1C程序設(shè)計(jì)的基本步驟1.規(guī)劃程序——流程圖

2.編寫程序代碼及注釋——源程序(.C文件)3.編譯程序代碼——目標(biāo)程序(.obj文件)

4.鏈接與執(zhí)行程序——可執(zhí)行程序(.exe文件)

5.排錯(cuò)與測試

6.程序代碼的優(yōu)化、修飾和保存[Return]下面以一個(gè)簡單的例子說明如何繪制程序流程圖?!纠?-5】畫出求5!的程序流程圖。

(1)使result=1

(2)使i=2

(3)使result*i=>result(用=>表示存放)

(4)使i+1=>i

(5)如果i的值不大于5,返回(3)繼續(xù)執(zhí)行;否則輸出result(此時(shí)的result的值就是5?。惴ńY(jié)束。用自然語言描述的算法(求解步驟)如下:繪制成流程圖如下:圖1-5求5!的流程圖結(jié)束1=>result開始2=>iresult*i=>resulti+1=>ii>5?輸出resultfalsetrue開始/結(jié)束程序前進(jìn)方向數(shù)據(jù)處理判斷預(yù)定義函數(shù)文件輸入/輸出連接點(diǎn)圖1-6常用的流程圖符號[Return]

在完成對程序的規(guī)劃之后,我們便可以根據(jù)程序流程圖編寫程序代碼了。在編寫代碼的過程中,我們會體會到先做規(guī)劃的好處。程序規(guī)劃得好,編寫程序時(shí)邏輯清晰,不容易產(chǎn)生邏輯上的錯(cuò)誤,避免反復(fù)修改,從而提高效率。編寫代碼時(shí),不要忘記加上注釋。加上注釋不但方便別人了解程序的功能,而且方便日后對程序的維護(hù)與擴(kuò)展??傊?,一個(gè)好的程序員應(yīng)該養(yǎng)成給編寫的代碼加上注釋的好習(xí)慣。

程序編寫完后,這些用計(jì)算機(jī)高級語言編寫出來的源代碼還不能直接被計(jì)算機(jī)執(zhí)行,我們知道計(jì)算機(jī)能夠理解的是由0和1所組成的二進(jìn)制代碼,所以還必須將寫好的源程序翻譯成為計(jì)算機(jī)能夠理解的目標(biāo)代碼文件(擴(kuò)展名為obj)。這個(gè)工作由高級語言系統(tǒng)提供的編譯程序來完成。[Return]

一個(gè)源程序經(jīng)過編譯后,若這個(gè)程序與庫函數(shù)或其它程序沒有任何聯(lián)系,便可以執(zhí)行了。否則,還必須經(jīng)過鏈接(link),才能夠生成可執(zhí)行文件(擴(kuò)展名為exe)。這時(shí)運(yùn)行這個(gè)可執(zhí)行文件,便可看到程序的運(yùn)行結(jié)果了。[Return]

程序通過了編譯和鏈接,執(zhí)行后得到的并不一定是期望的結(jié)果。這就說明程序雖然在語法上沒有問題,但是可能在邏輯上出了問題,從而導(dǎo)致輸出非預(yù)期的結(jié)果。這種情況下我們必須根據(jù)流程圖,逐個(gè)排除每個(gè)語句的邏輯錯(cuò)誤。另外,有時(shí)程序在某種輸入數(shù)據(jù)條件下輸出正確結(jié)果,但是在其它一些輸入數(shù)據(jù)條件下得到不正確的結(jié)果。所以我們還必須使用各種可能的輸入數(shù)據(jù),對程序進(jìn)行測試,才能保證在任何情況下程序都能正常運(yùn)行,并得到正確結(jié)果,即確保程序的“健壯性”。[Return]

當(dāng)程序經(jīng)過測試證明結(jié)果完全正確后,有時(shí)我們還需要對程序進(jìn)行優(yōu)化,以提高程序的運(yùn)行效率。另外,還要對源程序進(jìn)行適當(dāng)?shù)呐虐?、增加注釋等修飾性操作,使程序更加層次分明,更加易讀。最后,千萬別忘記把我們的勞動成果妥善保存起來。1.4.2如何使用TurboC/C+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論