版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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程序掌握一個C程序的編輯、編譯、運(yùn)行和調(diào)試的一般過程1.1C語言的發(fā)展簡史C語言發(fā)源于著名的美國貝爾實(shí)驗(yàn)室,是由該實(shí)驗(yàn)室的研究人員DennisRitchie
和KenThompson兩人于二十世紀(jì)七十年代初在設(shè)計UNIX操作系統(tǒng)時開發(fā)出來的。在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的,原來的UNIX操作系統(tǒng)就是1969年由美國貝爾實(shí)驗(yàn)室的KenThompson和DennisRitchie利用匯編語言開發(fā)成功的。由于匯編語言程序依賴于計算機(jī)硬件,其可讀性和可移植性都很差;但一般的高級語言又難以實(shí)現(xiàn)對計算機(jī)硬件的直接操作,于是KenThompson于1970年設(shè)計出一種簡單而且接近硬件的高級語言——B語言,并用B語言寫了UNIX操作系統(tǒng)。1972年到1973年間,DennisRitchie在B語言基礎(chǔ)上又設(shè)計了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語言同時具有匯編語言和高級語言的優(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è)計語言;以函數(shù)為程序基本單位,容易實(shí)現(xiàn)模塊化程序設(shè)計。(5)語法不嚴(yán),程序設(shè)計自由。(6)具有直接對硬件進(jìn)行控制的功能。(7)可移植性好。
1.2C語言的特點(diǎn)(8)C語言的另一面:相對“難”學(xué)。[Return]1.3.1一個簡單的C程序
1.3認(rèn)識C程序
WelcometotheCworld!/*exam1_1*/#include<stdio.h>main(){printf(“WelcometotheCworld!\n”);}程序運(yùn)行結(jié)果:【例1-1】在屏幕顯示字符串“WelcometotheCworld!”【例1-2】計算兩個數(shù)的和并輸出結(jié)果。01
/*exam1_2*/02 #include<stdio.h>/*將stdio.h這個文件包含進(jìn)來*/03 main() /*主函數(shù)名,函數(shù)從這里開始*/04 {05 inta,b,sum;/*定義三個整形變量: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)
下面再來看另一個簡單的C程序,并從這個例子出發(fā)說明C程序的基本結(jié)構(gòu)。程序行最左邊的行號是為了方便介紹程序而添加的,實(shí)際輸入程序時是不需要的?!?1】第1行為注釋,C語言的注釋以“/*”和“*/”作為注釋內(nèi)容的分界符。注釋可增強(qiáng)程序的可讀性,幫助我們理解程序的含義?!?2】第2行是讓計算機(jī)系統(tǒng)把文件stdio.h“包含”進(jìn)來。C語言里有關(guān)輸入和輸出的函數(shù)都定義在這個文件里,要把結(jié)果輸出到屏幕上,就要調(diào)用輸出函數(shù),也就需要把stdio.h文件包含進(jìn)來?!?3】第3行為程序執(zhí)行的起點(diǎn),即main()函數(shù),我們把它稱為“主函數(shù)”。每一個C程序都由一個或多個函數(shù)組成,其中必須有一個名為main的函數(shù)。函數(shù)體由花括號括起來,main前的int是聲明main函數(shù)的返回值類型為整形,main右邊的園括號內(nèi)的void表示這個函數(shù)沒有參數(shù)?!?4】第4行的左花括號“{”為main()函數(shù)體的開始分界符。
下面我們逐行對這個程序進(jìn)行詳細(xì)解說?!?6】第6行是一個賦值語句,把整數(shù)5賦給a?!?7】第7行也是一個賦值語句,把整數(shù)10賦給b?!?8】第8行把運(yùn)算表達(dá)式a+b的計算結(jié)果賦給sum?!?9】第9行是調(diào)用系統(tǒng)函數(shù)printf(),按照雙引號(””)內(nèi)的指定格式輸出結(jié)果,在%d位置上用sum的值代替,引號內(nèi)的其余字符照原樣輸出,\n是換行符,告訴計算機(jī)在輸出完結(jié)果后將光標(biāo)移到下一行的開頭?!?0】第10行是右花括號“}”是main()函數(shù)的結(jié)束分界符?!?5】第5行聲明a、b和sum為整形變量。C語言在使用變量之前必須先聲明其類型,這是與Basic語言不同的。一個C程序基本包括以下幾個部分:1.#include宏命令及頭文件2.main()函數(shù)3.花括號{}、語句塊和函數(shù)體4.變量5.語句6.輸入和輸出
當(dāng)我們在程序中加入#include<filename>時,C編譯系統(tǒng)會自動把<>內(nèi)的頭文件的內(nèi)容全部包含進(jìn)來,并且放置在#include這行的位置上。有時我們需要將已經(jīng)編寫好的另一個程序包含到本程序中,或者在程序中需要調(diào)用系統(tǒng)庫函數(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]
一個C程序由一個或多個函數(shù)構(gòu)成,其中必須有且只有一個主函數(shù)main(),一個函數(shù)可以調(diào)用其他函數(shù),如上面例子中main函數(shù)調(diào)用printf函數(shù)。所有的C程序都是從main函數(shù)開始執(zhí)行,并在main函數(shù)中結(jié)束。[Return]C程序以函數(shù)為單位,編寫C程序就是編寫一個個函數(shù)。每個函數(shù)的主體都包括在一對花括號“{}”內(nèi)。有時把完成某個功能或操作的幾個語句用一對花括號括起來,組成一個語句塊(也叫復(fù)合語句)。若一個函數(shù)體內(nèi)有多對花括號,則最外層的一對是函數(shù)體的分界符。[Return]
變量是一個C程序不可缺少的最基本的部分,是用來存放數(shù)據(jù)的。概括地說,一個計算機(jī)程序包括兩個部分,第一部分是對數(shù)據(jù)的描述,第二部分是對操作的描述。變量就是用來描述數(shù)據(jù)的。C語言的變量必須先聲明后使用,聲明時要說明變量的數(shù)據(jù)類型和名字。C語言中的數(shù)據(jù)類型有整形(int)、浮點(diǎn)型(float)、字符型(char)等。[Return]每個C函數(shù)由若干個語句構(gòu)成,每個語句以“;”結(jié)束,可以一行書寫多個語句。C語言有表達(dá)式語句、函數(shù)調(diào)用語句、控制語句、變量定義語句等。如上面main()函數(shù)體有5個語句,第1個語句(【05】行)為變量定義語句,第2~4語句(【06】~【08】行)為賦值(表達(dá)式)語句,第5個語句(【09】行)為函數(shù)調(diào)用語句。[Return]每個程序必須有0個或多個輸入,有至少一個輸出。如果一個程序沒有輸出,我們就無從知道它的運(yùn)算和操作結(jié)果。C語言的輸入和輸出是通過調(diào)用系統(tǒng)提供的標(biāo)準(zhǔn)輸入輸出函數(shù)實(shí)現(xiàn)的。如上例中調(diào)用printf()函數(shù)以指定格式輸出計算結(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個字符。通常取前8個字符為有效字符,所以給變量或函數(shù)取名時最好保證前8個字符能夠區(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)非法字符<下面是三個不同的標(biāo)識符:count,Count,COUNT。[Return]
關(guān)鍵字是編譯系統(tǒng)本身提供給用戶使用的標(biāo)識符,用戶在進(jìn)行編程時必須按照系統(tǒng)規(guī)定的方式使用這些關(guān)鍵字,而不能更改或者重新定義它們。所以用戶自定義的變量名或函數(shù)名等標(biāo)識符不能與關(guān)鍵字相同,如上面的for和short都是關(guān)鍵字,所以不可用作標(biāo)識符。C語言提供的關(guān)鍵字共有32個,如表1-1所示?!⒁猓篊語言是大小寫敏感的!所有關(guān)鍵字都是小寫的,若把某個或全部字母寫成大寫形式,則系統(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)識符(花括號)、圓括號等等,在輸入時,可連續(xù)輸入這些起止標(biāo)識符,然后再在其中進(jìn)行插入來完成內(nèi)容的編輯。C語言的分界符是用來分隔特定的語法單位的。如,花括號“{}”用來界定函數(shù)體的范圍;圓括號“()”用來界定函數(shù)的參數(shù);中括號“[]”用來界定數(shù)組的下標(biāo);“/*”和“*/”用來界定注釋內(nèi)容的范圍;分號“;”用來表示一個語句的結(jié)束;等等。[Return]
一個C程序除了必需的關(guān)鍵字和用戶自定義的標(biāo)識符以外,一般還需要有一些輔助性的字符,如空格(space)、制表符、回車、換行、注釋等,這些字符起到使程序的版面的層次、段落分明,反映出程序的邏輯結(jié)構(gòu),從而提高程序的可讀性的作用。這些字符在編譯時不會被生成任何代碼,所以稱它們?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)算符由兩個“=”組成,即“==”,而賦值運(yùn)算符是一個“=”。千萬別寫錯!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語言的注釋格式為:/*……*/。注釋時要注意以下幾點(diǎn):(1)“/*”和“*/”
必須成對使用,且“/”和“*”、以及“*”和“/”之間不能有空格,否則都出錯。(2)注釋的位置,可以單占1行,也可以跟在語句的后面。(3)如果1行寫不下,可另起1行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運(yùn)行。(5)編寫程序時先編寫注釋、后編寫代碼;修改程序時先修改注釋、后修改代碼。(6)注釋不僅僅是只列出代碼執(zhí)行的功能,而且還應(yīng)給出為什么如此編寫代碼的原因或理由。[Return]
一個程序的可讀性與它的版面布局有很大關(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)空白的使用
在一個程序中適當(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]);一個采用4個空格的縮進(jìn)的例子:在圓括號旁使用空格和在分號的右側(cè)使用空格例子:[Return]1.4C程序的運(yùn)行與調(diào)試1.4.1C程序設(shè)計的基本步驟1.規(guī)劃程序——流程圖
2.編寫程序代碼及注釋——源程序(.C文件)3.編譯程序代碼——目標(biāo)程序(.obj文件)
4.鏈接與執(zhí)行程序——可執(zhí)行程序(.exe文件)
5.排錯與測試
6.程序代碼的優(yōu)化、修飾和保存[Return]下面以一個簡單的例子說明如何繪制程序流程圖。【例1-5】畫出求5!的程序流程圖。
(1)使result=1
(2)使i=2
(3)使result*i=>result(用=>表示存放)
(4)使i+1=>i
(5)如果i的值不大于5,返回(3)繼續(xù)執(zhí)行;否則輸出result(此時的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ī)劃得好,編寫程序時邏輯清晰,不容易產(chǎn)生邏輯上的錯誤,避免反復(fù)修改,從而提高效率。編寫代碼時,不要忘記加上注釋。加上注釋不但方便別人了解程序的功能,而且方便日后對程序的維護(hù)與擴(kuò)展??傊?,一個好的程序員應(yīng)該養(yǎng)成給編寫的代碼加上注釋的好習(xí)慣。
程序編寫完后,這些用計算機(jī)高級語言編寫出來的源代碼還不能直接被計算機(jī)執(zhí)行,我們知道計算機(jī)能夠理解的是由0和1所組成的二進(jìn)制代碼,所以還必須將寫好的源程序翻譯成為計算機(jī)能夠理解的目標(biāo)代碼文件(擴(kuò)展名為obj)。這個工作由高級語言系統(tǒng)提供的編譯程序來完成。[Return]
一個源程序經(jīng)過編譯后,若這個程序與庫函數(shù)或其它程序沒有任何聯(lián)系,便可以執(zhí)行了。否則,還必須經(jīng)過鏈接(link),才能夠生成可執(zhí)行文件(擴(kuò)展名為exe)。這時運(yùn)行這個可執(zhí)行文件,便可看到程序的運(yùn)行結(jié)果了。[Return]
程序通過了編譯和鏈接,執(zhí)行后得到的并不一定是期望的結(jié)果。這就說明程序雖然在語法上沒有問題,但是可能在邏輯上出了問題,從而導(dǎo)致輸出非預(yù)期的結(jié)果。這種情況下我們必須根據(jù)流程圖,逐個排除每個語句的邏輯錯誤。另外,有時程序在某種輸入數(shù)據(jù)條件下輸出正確結(jié)果,但是在其它一些輸入數(shù)據(jù)條件下得到不正確的結(jié)果。所以我們還必須使用各種可能的輸入數(shù)據(jù),對程序進(jìn)行測試,才能保證在任何情況下程序都能正常運(yùn)行,并得到正確結(jié)果,即確保程序的“健壯性”。[Return]
當(dāng)程序經(jīng)過測試證明結(jié)果完全正確后,有時我們還需要對程序進(jìn)行優(yōu)化,以提高程序的運(yùn)行效率。另外,還要對源程序進(jìn)行適當(dāng)?shù)呐虐妗⒃黾幼⑨尩刃揎椥圆僮?,使程序更加層次分明,更加易讀。最后,千萬別忘記把我們的勞動成果妥善保存起來。1.4.2如何使用TurboC/C++3.0運(yùn)行與調(diào)試C程序(1)啟動TC,進(jìn)入TC集成環(huán)境。(2)編輯(或修改)源程序。編輯一個新文件——選擇File菜單的New菜單項。圖1-5編輯一個新文件1.運(yùn)行一個C程序的一般步驟修改一個舊文件——選擇File菜單的load菜單項。圖1-9調(diào)入已經(jīng)存在的文件保存文件——選擇File菜單的save或write
to菜單項。
以原文件名進(jìn)行保存,選擇Save;以新的文件名保存,選擇Write
to。圖1-6以新文件名保存(3)編譯——選擇Compile菜單的CompiletoOBJ菜單項。圖1-9編譯(4)連接——選擇Compile菜單的LinkEXEfile菜單項。
圖1-10連接※注意:若想要一次性完成編譯和連接,可以直接按【F9】,也可以按【F10】或【Alt+C】后選擇Compile菜單的MakeEXEfile菜單項并回車即可。(5)運(yùn)行——選擇Run菜單的Run菜單項。
圖1-11運(yùn)行※注意:若想要一次性完成編譯、連接并運(yùn)行,可以直接按【Ctrl+F9】并回車即可。2.如何設(shè)置用戶文件存放目錄
選擇File菜單的Changedir項,在彈出的“NewDirectory”對話框中輸入已建立好的自己的工作目錄名即可(見圖1-18)。圖1-12設(shè)置用戶工作目錄3.如何設(shè)置TC工作環(huán)境
圖1-13TC工作環(huán)境設(shè)置圖1-14保存工作環(huán)境設(shè)置
假如安裝時系統(tǒng)文件存放在C:\Turboc2目錄下,而用戶的目標(biāo)文件和可執(zhí)行文件存放在C:\output目錄中,則各項內(nèi)容設(shè)置如圖1-13所示。4.常用快捷鍵及其功能
請看書中表1-2。[Return]本章結(jié)束
謝謝!第2章基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
2.1C語言的數(shù)據(jù)類型2.2
常量與變量2.3
整型數(shù)據(jù)2.4
實(shí)型數(shù)據(jù)2.5
字符型數(shù)據(jù)2.6
各類數(shù)據(jù)混合運(yùn)算2.7C語言的運(yùn)算符與表達(dá)式2.8
運(yùn)算符的優(yōu)先級及其結(jié)合性
[Return]本章學(xué)習(xí)目標(biāo)熟悉C語言的數(shù)據(jù)分類掌握常量的表示方法與變量賦初值的方法掌握不同類型數(shù)據(jù)間的混合運(yùn)算掌握基本運(yùn)算符及其表達(dá)式的使用2.1C語言的數(shù)據(jù)類型
C語言提供了以下一些主要數(shù)據(jù)類型:
說明:①
C語言為每個類型定義了一個標(biāo)識符,稱為類型名。例如:整型用int標(biāo)識、字符型用char標(biāo)識等。一個類型名由一個或幾個關(guān)鍵字組成,僅用于說明數(shù)據(jù)屬于哪一種類型。
②對于基本數(shù)據(jù)類型,按取值是否可改變分為常量和變量兩種。在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、字符常量、字符變量等。在程序中,常量是可以不經(jīng)過說明而直接引用的,而變量則必須先說明后使用。
[Return]2.2常量與變量
在程序運(yùn)行中,其值不改變的量稱為常量。常量區(qū)分為不同的類型,如:5、0、-7為整型常量3.2、-4.68為實(shí)型常量‘a(chǎn)’、’f’為字符常量常量從字面形式即可判別。也可用一個標(biāo)識符代表一個常量,稱為符號常量。習(xí)慣上,符號常量名用大寫,變量名用小寫字母表示,以示區(qū)別,例如:#definePI3.1415926[Return]2.2.1常量【例2-1】符號常量的使用。
已知圓半徑為r,求圓周長c和圓面積s的值。#definePI3.1415926main(){floatr,c,s;scanf(“%f”,&r);c=2*PI*r;s=PI*r*r;printf(“c=%6.2f,s=%6.2f\n”,c,s);}
在該程序中,用#define命令行定義PI,PI為定義的符號常量代表3.1415926,此后凡在程序中出現(xiàn)的PI都代表3.1415926。從上面的例子可以看出使用符號常量的好處:
一是含義清楚、見名知意。
看程序時從PI就可以知道它代表圓周率;
二是修改方便,一改全改。
如要“#definePI3.1415927”,則在程序中所有出現(xiàn)PI的地方值全部改為3.1415927。[Return]在程序運(yùn)行時其值可以改變的量稱為變量。變量是由變量名、變量值和存儲單元組成的。2.2.2變量1.變量名的命名規(guī)則:
變量名用標(biāo)識符表示。在C語言中,用來對變量、符號常量、函數(shù)、數(shù)組等數(shù)據(jù)對象命名的有效字符序列統(tǒng)稱為標(biāo)識符。C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須是字母或下劃線。下面列出的是合法的標(biāo)識符,可作為變量名:
abc,
sum,f4,student_1下面是不合法的標(biāo)識符:8h以數(shù)字開頭-5以減號開頭A*出現(xiàn)非法字符*x<y出現(xiàn)非法字符<在使用標(biāo)識符時須注意以下幾點(diǎn):(1)建議變量名的長度最好不要超過8個字符。(2)標(biāo)識符大小寫是有區(qū)別的。(3)標(biāo)識符命名時應(yīng)盡量有相應(yīng)的含義,增加程序的可讀性。2.變量的定義
在C語言中,要求對所有用到的變量必須先定義。
定義格式:類型說明符變量1,變量2,……;
其中,類型說明符是C語言中的一個有效的數(shù)據(jù)類型,如整型類型說明符int、字符型類型說明符char等。例如:inta,b,c;charcc;
在C語言中,要求對所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。
[Return]2.3整型數(shù)據(jù)2.3.1
整型常量
[Return]整型常量即整常數(shù)。C語言中的整常數(shù)可用以下3種形式表示:(1)十進(jìn)制整常數(shù)。十進(jìn)制整常數(shù)沒有前綴,其數(shù)碼為0~9。如:123、-234、0(2)八進(jìn)制整常數(shù)。八進(jìn)制整常數(shù)以0作為前綴。如:0123、-0234,后面只能是有效的八進(jìn)制數(shù)字0~7,若寫成09就錯了。(3)十六進(jìn)制整常數(shù)。十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為0~9,A~F或a~f。如:0x123、-0x234。2.3.2
整型變量
1.整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。例如,定義了一個整型變量a:inta;/*定義a為整型變量*/a=25;/*給a賦以整數(shù)25*/
十進(jìn)制數(shù)25的二進(jìn)制形式為11001,TurboC2.0和TurboC++3.0為一個整型變量在內(nèi)存中分配2個字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的),在這里我們假定每一個整型變量在內(nèi)存中占2個字節(jié)。2.整型變量的分類
整型變量的基本類型符為int。
可以根據(jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型。有以下3類整型變量:
基本整型,以int表示。短整型,以shortint表示。長整型,以longint表示。在int前可以加上以下類型修飾符,用來改變和擴(kuò)充基本類型的含義:long長short短signed有符號unsigned無符號這些修飾符與int可以組合成以下6種整型變量。即:有符號的基本整型[signed]int無符號的基本整型unsignedint有符號的短整型[signed]short[int]無符號的短整型unsignedshort[int]有符號的長整型[signed]long[int]無符號的長整型unsignedlong[int]上面的方括號表示其中的內(nèi)容是可選的。
【例2-2】下圖保存了整數(shù)14的各種整型數(shù)據(jù)類型。3.整型變量的定義
在C語言程序中所有用到的變量都必須在程序中定義。
格式:
數(shù)據(jù)類型名變量名;【例2-3】變量的定義與使用。/*exam2_3*/main(){inta,b,c,sum;/*定義整型變量a、b、c、sum*/a=3,b=-4,c=9;/*a、b、c分別賦初值*/sum=a+b+c;/*求a、b、c的和賦給變量sum*/printf(“\nsum=%d”,sum);/*換行輸出變量sum的值*/}程序運(yùn)行結(jié)果:sum=8[演示]4.整型數(shù)據(jù)的溢出
一個int型變量的最大允許值為32767,如果再加1,那么結(jié)果會是什么樣的呢?我們看下面這個例子?!纠?-4】整型數(shù)據(jù)的溢出。/*exam2_4*/main(){inta,b;a=32767;b=a+1;printf("\na=%d,a+1=%d\n",a,b);a=-32768;b=a-1;printf("\na=%d,a-1=%d\n",a,b);}程序運(yùn)行結(jié)果:a=32767,a+1=-32768a=-32768,a-1=32767[演示]5.整型常量的類型(1)一個整數(shù)如果其值在-32768~32767范圍內(nèi),則認(rèn)為是int型,可以賦給int型和longint型變量。(2)一個整數(shù)如果其值超過了上述范圍,在-2147483648~2147483647內(nèi),則認(rèn)為是longint型,可賦給longint型變量。(3)如果所使用的C語言版本確定shortint和int型數(shù)據(jù)在內(nèi)存中占據(jù)長度相同,則其表示范圍與int型相同。因此一個int型的常量也同時是一個shortint型常量,可以賦給int型或shortint型變量。(4)常量中無unsigned型,但可以將一個非負(fù)值且在取值范圍內(nèi)的整數(shù)賦給unsigned型變量。(5)在一個整常量后面加一個字母l或L,則認(rèn)為是longint型常量。[Return]2.4實(shí)型數(shù)據(jù)1.實(shí)型常量的表示方法2.4.1
實(shí)型常量C語言中的實(shí)數(shù)(浮點(diǎn)數(shù))有兩種表示形式:(1)十進(jìn)制小數(shù)形式由數(shù)字0~9和小數(shù)點(diǎn)和正負(fù)號組成(必須有小數(shù)點(diǎn))。(2)指數(shù)形式也稱為科學(xué)計數(shù)法,以冪的形式表示,以字母e或E后跟一個以10為底的冪數(shù)。其一般形式為:ae±b,表示a×10±b,其中a是十進(jìn)制數(shù),可以是整數(shù)或是小數(shù),字母e或E之前必須要有數(shù)字,且字母e或E后面的指數(shù)b必須為整數(shù),字母e或E的前后及數(shù)字之間不得有空格。[Return]2.實(shí)型常量的類型
許多C編譯系統(tǒng)將實(shí)型常量作為雙精度實(shí)數(shù)來處理。這樣可以保證較高的精度,缺點(diǎn)是運(yùn)算速度降低??梢栽趯?shí)數(shù)的后面加字符f或F,如1.65f、654.87F,使編譯系統(tǒng)按單精度處理實(shí)數(shù)。
實(shí)型常量可以賦值給一個float、double、longdouble型變量。根據(jù)變量的類型截取實(shí)型常量中相應(yīng)的有效數(shù)字?!纠?-5】顯示個人微機(jī)上不同類型變量所占的字節(jié)數(shù)。/*exam2_5*/#include<stdio.h>main(){printf(“thebytesofthevariablesare:\n”);printf(“int:%dbytes\n”,sizeof(int));printf(“char:%dbytes\n”,sizeof(char));printf(“short:%dbytes\n”,sizeof(short));printf(“l(fā)ong:%dbytes\n”,sizeof(long));printf(“float:%dbytes\n”,sizeof(float));printf(“double:%dbytes\n”,sizeof(double));printf(“l(fā)ongdouble:%dbytes\n”,sizeof(longdouble));}程序運(yùn)行結(jié)果:thebytesofthevariablesare:
int:2bytes
char:1bytes
short:2bytes
long:4bytes
float:4bytes
double:8bytes
longdouble:10bytes[演示]2.4.2
實(shí)型變量
1.實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式
一個實(shí)型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整數(shù)存儲方式不同,實(shí)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)將實(shí)型數(shù)據(jù)分為小數(shù)部分和指數(shù)部分,分別存放。2.實(shí)型變量的分類
C語言的實(shí)型變量,分為兩種:
(1)單精度型。類型關(guān)鍵字為float,一般占4字節(jié)(32位)、提供7位有效數(shù)字。(2)雙精度型。類型關(guān)鍵字為double,一般占8個字節(jié)、提供15~16位有效數(shù)字。3.實(shí)型數(shù)據(jù)的舍入誤差
實(shí)型變量是由有限的存儲單元組成的,因此提供的有效數(shù)字總是有限的。在有效位以外的數(shù)字將被舍去。由此可能會產(chǎn)生一些誤差。
【例2-6】實(shí)型數(shù)據(jù)的舍入誤差。/*exam2_6*/main(){floatx,y;x=123456.789e5;y=x+20;printf("x=%f,y=%f\n",x,y);}程序運(yùn)行結(jié)果:x=12345678848.000000,y=12345678848.000000
[演示]【例2-7】實(shí)型數(shù)據(jù)的定義和使用。/*exam2_7*/main(){
floatx;
doubley;
x=123456.1234;y=123456.1234;printf(“x=%f,y=%lf\n”,x,y);}程序運(yùn)行結(jié)果:x=123456.125000,y=123456.123400[演示]2.5 字符型數(shù)據(jù)
字符型常量是用一對單引號(′′)即撇號括起來的一個字符。只能用單引號括起來,不能用雙引號或其它括號。字符常量只能是單個字符,不能是字符串。注意:′a′和′A′是不同的字符常量。例如:′d′,′R′,′=′,′$′,′?′等都是合法字符常量。2.5.1字符常量1.定義[Return]2.轉(zhuǎn)義字符
轉(zhuǎn)義字符是一種特殊的字符常量,是以反斜杠\開頭的字符序列?!纠?-8】轉(zhuǎn)義字符的使用。/*exam2_8*/main(){printf(“\x4F\x4B”); }OK程序運(yùn)行結(jié)果為:[演示]2.5.2
字符變量1.變量值的存儲字符變量的定義形式如下:chara1,a2;
它表示a1和a2為字符型變量,各可以放一個字符,因此在本函數(shù)中可以用下面語句對a1、a2賦值:
a1=′x′;
a2=′y′;2.特性(1)一個字符型數(shù)據(jù),既可以字符形式輸出,也可以整數(shù)形式輸出。(2)允許對字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時就是對它們的ASCII碼值進(jìn)行算術(shù)運(yùn)算?!纠?-10】用字符形式和整數(shù)形式輸出字符變量。/*exam2_10*/main()
{charch1,ch2;ch1='a';ch2='b';printf(“ch1=%c,ch2=%c\n”,ch1,ch2);printf(“ch1=%d,ch2=%d\n”,ch1,ch2);}程序運(yùn)行結(jié)果:ch1=a,ch2=bch1=97,ch2=98[演示]【例2-11】字符數(shù)據(jù)的算術(shù)運(yùn)算。/*exam2_11*/main(){charch1,ch2;ch1=‘a(chǎn)’;ch2=‘B’;printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);/*字母的大小寫轉(zhuǎn)換*/}程序運(yùn)行結(jié)果:ch1=A,ch2=b[演示]2.5.3
字符串常量1.字符串常量的概念和字符串長度字符串常量是用一對雙引號“
”括起來的若干字符序列。這里的雙引號僅起到字符串常量邊界符的作用,它并不是字符串常量的一部分。字符串中字符的個數(shù)稱為字符串長度。長度為0的字符串(即一個字符都沒有的字符串)稱為空串,表示為“”(一對緊連的雙引號)。2.字符串的存儲
C語言規(guī)定:在存儲字符串常量時,由系統(tǒng)在字符串的末尾自動加一個‘\0’作為字符串的結(jié)束標(biāo)志。CHINA\0如有一個字符串為“CHINA”,則它在內(nèi)存中的實(shí)際存儲如下圖所示:(存儲長度為6)[Return]2.6各類數(shù)據(jù)混合運(yùn)算整型、實(shí)型、字符型數(shù)據(jù)之間可以混合運(yùn)算。運(yùn)算規(guī)則:不同類型的數(shù)據(jù)先轉(zhuǎn)換成同一類型,然后進(jìn)行計算。轉(zhuǎn)換方法:自動轉(zhuǎn)換(隱式轉(zhuǎn)換)、強(qiáng)制轉(zhuǎn)換。[Return]自動轉(zhuǎn)換(隱式轉(zhuǎn)換)
自動轉(zhuǎn)換發(fā)生在不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時,由編譯系統(tǒng)自動完成。
自動轉(zhuǎn)換規(guī)則:類型不同,先轉(zhuǎn)換為同一類型,然后進(jìn)行運(yùn)算。(1)圖中縱向的箭頭表示當(dāng)運(yùn)算對象為不同類型時轉(zhuǎn)換的方向。
(2)圖中橫向向左的箭頭表示必定的轉(zhuǎn)換。2.強(qiáng)制轉(zhuǎn)換:通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)。格式:(類型說明符)表達(dá)式功能:把表達(dá)式的結(jié)果強(qiáng)制轉(zhuǎn)換為類型說明符所表示的類型。例如:
(double)a/*將變量a的值轉(zhuǎn)換成double型*/(int)(x+y)/*將x+y的結(jié)果轉(zhuǎn)換成int型*/【例2-12】強(qiáng)制類型轉(zhuǎn)換。/*exam2_12*/main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}程序運(yùn)行結(jié)果:x=3.600000,i=3x的類型仍為float型,值仍等于3.6。[演示]2.7C語言的運(yùn)算符與表達(dá)式運(yùn)算符:表示各種運(yùn)算的符號。
表達(dá)式:使用運(yùn)算符將常量、變量、函數(shù)連接起來的式子。
[Return]C語言的運(yùn)算符有以下幾類:
算術(shù)運(yùn)算符(+-*/%++--)關(guān)系運(yùn)算符(<<===>>=!=)邏輯運(yùn)算符(!&&||)位運(yùn)算符(<<>>~|∧&)賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)條件運(yùn)算符(?:)逗號運(yùn)算符(,)指針運(yùn)算符(*&)求字節(jié)數(shù)運(yùn)算符(sizeof)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)分量運(yùn)算符(.->)下標(biāo)運(yùn)算符([])其它(如函數(shù)調(diào)用運(yùn)算符())C語言有以下類型的表達(dá)式:
賦值表達(dá)式,如:a=1算術(shù)表達(dá)式,如:1*2+3/4.5關(guān)系表達(dá)式,如:4>7邏輯表達(dá)式,如:8>4&&a<b條件表達(dá)式,如:a>b?a:b逗號表達(dá)式,如:a=1,b=2,c=3位表達(dá)式,如:0&1=0,1|1=1,1^0=12.7.1
算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.算術(shù)運(yùn)算符C語言提供的算術(shù)運(yùn)算符及功能如下:+加法運(yùn)算符或正值運(yùn)算符。如31+18,+2。-減法運(yùn)算符或負(fù)值運(yùn)算符。如6-3,21+(-57)。*乘法運(yùn)算符。如4*1.9。/除法運(yùn)算符。如5/3。%模運(yùn)算符或稱取余運(yùn)算符,要求%的兩邊必須為整型數(shù)據(jù)。如123%15,2%7都是正確的,而25%1.5,12.0%6.0都是錯誤的表示。2.算術(shù)表達(dá)式
用算術(shù)運(yùn)算符和括號將數(shù)據(jù)對象連接起來的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。例如:3+6*9(x+y)/2-aa*b+c-1.5+′a′
都是算術(shù)表達(dá)式。
算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇薄?/p>
【例2-13】將430分鐘換算成小時和分鐘表示,然后輸出。/*exam2_13*/main(){inti,h,m;i=430;h=i/60;m=i-60*h;printf(“\n%dminutes:%dhour%dminutes”,i,h,m);}程序運(yùn)行結(jié)果:430minutes:7hour10minutes[演示]【例2-14】求表達(dá)式2+d-10的值。(設(shè)a=64,d=6)/*exam2_14*/#include<math.h>/*調(diào)用標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)*/main(){floata,d,s;a=64,d=6;s=2*sqrt(a)+d-10;printf(“\n%6.2f”,s);}程序運(yùn)行結(jié)果:12.00[演示]2.7.2
自增與自減運(yùn)算符1.功能自增運(yùn)算符++的作用是使變量的值增1,自減運(yùn)算符--的作用是使變量的值減1。2.用法與運(yùn)算規(guī)則自增、自減運(yùn)算符都有兩種用法:(1)前置運(yùn)算──運(yùn)算符放在變量之前:++變量、--變量
(2)后置運(yùn)算──運(yùn)算符放在變量之后:變量++、變量--
【例2-16】自增、自減運(yùn)算符的用法。/*exam2_16*/main(){intx=6,y;printf("x=%d\n",x); /*輸出x的初值*/y=++x; /*前置運(yùn)算*/printf("y=++x:x=%d,y=%d\n",x,y);y=x--; /*后置運(yùn)算*/printf("y=x--:x=%d,y=%d\n",x,y);}程序運(yùn)行結(jié)果:x=6y=++x:x=7,y=7y=x--:x=6,y=7[演示]
※注意:在表達(dá)式中,連續(xù)使同一變量進(jìn)行自增或自減運(yùn)算時,很容易出錯,所以最好避免這種用法。[Return]2.7.3
賦值運(yùn)算符和賦值表達(dá)式1.賦值運(yùn)算符
賦值運(yùn)算符為“=”,它的作用是將一個數(shù)據(jù)賦給一個變量。
轉(zhuǎn)換原則:先將賦值號右邊表達(dá)式類型轉(zhuǎn)換為左邊變量的類型,然后賦值。
【例2-17】賦值運(yùn)算中類型轉(zhuǎn)換的規(guī)則。
/*exam2_17*/main(){
inti=5;
/*說明整型變量i并初始化為5*/
floata=3.5,a1;
/*說明實(shí)型變量a和a1并初始化a*/doubleb=123456789.123456789;
/*說明雙精度型變量b并初始化*/
charc='A';
/*說明字符變量c并初始化為'A'*/
printf("i=%d,a=%f,b=%f,c=%c\n",i,a,b,c);
/*輸出i,a,b,c的初始值*/
a1=i;i=a;a=b;c=i;
/*整型變量i的值賦值給實(shí)型變量a1*//*實(shí)型變量a的值賦給整型變量i*//*雙精度型變量b的值賦值給實(shí)型變量a*//*整型變量i的值賦值給字符變量c*/
printf("i=%d,a=%f,a1=%f,c=%c\n",i,a,a1,c);
/*輸出i,a,a1,c賦值以后的值*/
}程序運(yùn)行結(jié)果:i=5,a=3.500000,b=123456789.123457,c=Ai=3,a=123456792.000000,a1=5.000000,c=[演示]2.復(fù)合的賦值運(yùn)算符
在賦值符“=”前加上某些運(yùn)算符,可以構(gòu)成復(fù)合賦值運(yùn)算符。即+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=(共10種)
復(fù)合賦值運(yùn)算符均為雙目運(yùn)算符,右結(jié)合性。功能:對"變量名"和"表達(dá)式"進(jìn)行復(fù)合賦值運(yùn)算符所規(guī)定的運(yùn)算,并將運(yùn)算結(jié)果賦值給復(fù)合賦值運(yùn)算符左邊的"變量名"。3.賦值表達(dá)式
賦值表達(dá)式:由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。賦值表達(dá)式一般形式:
變量名賦值運(yùn)算符表達(dá)式賦值的含義:將賦值運(yùn)算符右邊的表達(dá)式的值存放到左邊變量名標(biāo)識的存儲單元中。例如:a=5+b;執(zhí)行賦值運(yùn)算,將5+b的值賦給變量a,同時整個表達(dá)式的值就是剛才所賦的值。賦值運(yùn)算符的功能:一是計算,二是賦值。[Return]2.7.4
關(guān)系運(yùn)算符及其表達(dá)式1.關(guān)系運(yùn)算符C語言提供了6種關(guān)系運(yùn)算符:<小于>大于<=小于或等于>=大于或等于==等于!=不等于2.關(guān)系表達(dá)式
用關(guān)系運(yùn)算符將兩個操作數(shù)連接起來的合法的C語言式子,稱為關(guān)系表達(dá)式。
例如,關(guān)系表達(dá)式”1==2”的值為“假”,
“4>3”的值為“真”。在C語言中以0表示邏輯假,以1表示邏輯真。當(dāng)輸出結(jié)果為邏輯真時,顯示1;當(dāng)輸出結(jié)果為邏輯假,顯示0。[Return]2.7.5
邏輯運(yùn)算符及其表達(dá)式1.邏輯運(yùn)算符C語言提供三種邏輯運(yùn)算符:|| 邏輯或(相當(dāng)于“OR”)&& 邏輯與(相當(dāng)于“AND”)! 邏輯非(相當(dāng)于“NOT”)邏輯運(yùn)算符的運(yùn)算規(guī)則:&&:當(dāng)且僅當(dāng)兩個運(yùn)算量的值都為“真”時,運(yùn)算結(jié)果為“真”,否則為“假”。||:當(dāng)且僅當(dāng)兩個運(yùn)算量的值都為“假”時,運(yùn)算結(jié)果為“假”,否則為“真”。!:當(dāng)運(yùn)算量的值為“真”時,運(yùn)算結(jié)果為“假”;當(dāng)運(yùn)算量的值為“假”時,運(yùn)算結(jié)果為“真”。邏輯運(yùn)算符的優(yōu)先級:“邏輯非”的優(yōu)先級最高“邏輯與”次之“邏輯或”最低2.邏輯表達(dá)式
邏輯表達(dá)式是指用邏輯運(yùn)算符將1個或多個表達(dá)式連接起來,進(jìn)行邏輯運(yùn)算的式子。在C語言中,用邏輯表達(dá)式表示多個條件的組合。[Return]2.7.6
逗號運(yùn)算符(,)及其表達(dá)式逗號運(yùn)算符的結(jié)合方向是“從左向右”,它的優(yōu)先級是所有運(yùn)算符中最低的。用逗號運(yùn)算符連接起來的表達(dá)式稱為逗號表達(dá)式。它的一般形式為:表達(dá)式1,表達(dá)式2,…,表達(dá)式n逗號表達(dá)式的運(yùn)算過程是:先算表達(dá)式1,再算表達(dá)式2,依次計算直到表達(dá)式n。整個逗號表達(dá)式的值是表達(dá)式n的值。2.7.7
位運(yùn)算符及其表達(dá)式
位運(yùn)算符是位運(yùn)算使用的運(yùn)算符;位運(yùn)算是指針對二進(jìn)制位進(jìn)行的運(yùn)算。
C語言提供以下6種位運(yùn)算符:
關(guān)系運(yùn)算符含義&按位與|按位或^按位異或~按位取反<<左移位>>右移位位運(yùn)算符優(yōu)先級別
:~高<<、>>&^|低[Return]2.8運(yùn)算符的優(yōu)先級及其結(jié)合性1.運(yùn)算符的優(yōu)先級一般而言,單目運(yùn)算符優(yōu)先級較高,賦值運(yùn)算符優(yōu)先級低,算術(shù)運(yùn)算符優(yōu)先級較高。2.運(yùn)算符的結(jié)合性多數(shù)運(yùn)算符具有左結(jié)合性,單目運(yùn)算符、賦值運(yùn)算符和復(fù)合賦值運(yùn)算符為右結(jié)合性。[Return]作業(yè)與實(shí)驗(yàn)作業(yè):[習(xí)題二]上機(jī)操作:[實(shí)驗(yàn)二][Return]第3章簡單的C程序設(shè)計本章學(xué)習(xí)目標(biāo)了解C語言的基本語句熟悉程序設(shè)計的三種基本結(jié)構(gòu)及其特點(diǎn)掌握賦值語句的使用方法掌握數(shù)據(jù)輸入、輸出函數(shù)的調(diào)用規(guī)則和格式控制字符的正確使用掌握順序結(jié)構(gòu)程序的設(shè)計方法[Return]3.1C語句概述
3.2程序的三種基本結(jié)構(gòu)
3.3賦值語句
3.4數(shù)據(jù)輸入輸出
3.5順序結(jié)構(gòu)的C程序設(shè)計舉例
一個C程序一般包含若干個C語句。C語句可以分為以下七類:1.控制語句
(1)條件語句:if~else(在第4章中介紹)(2)多分支選擇語句:switch~case(在第4章中介紹)(3)結(jié)束本次循環(huán)語句:continue(在第5章中介紹)(4)中止switch或循環(huán)語句:break(在第5章中介紹)(5)循環(huán)語句:for,while,do~while(在第5章中介紹)(6)轉(zhuǎn)向語句:goto(在第5章中介紹)(7)從函數(shù)返回語句:return(在第7章中介紹)2.表達(dá)式語句:在表達(dá)式后面加分號構(gòu)成。例如:a=3/*后面無分號,是表達(dá)式,不是語句*/a=3;/*后面有分號,是語句*/i++;/*為語句,相當(dāng)于賦值語句i=i+1;*/3.變量定義語句:定義指定類型的變量,也可同時給變量賦初值。例如:inta=8;/*定義整型變量a,并給它賦初值8*/charc;/*定義字符型變量c*/4.?dāng)?shù)據(jù)類型定義語句:定義新的類型名來代表已有的類型名,以方便用戶更好地使用C語言編寫程序。例如:typedefcharSTR[10];/*定義STR為字符數(shù)組*/STRa,b;/*定義a,b為字符數(shù)組*/5.空語句:僅包含一個分號的語句,語句中無實(shí)質(zhì)性內(nèi)容。例:;/*僅由一個分號組成*/6.復(fù)合語句:由大括號{}括起來的語句序列。例如:
{c=a+b;c=c/100;
printf("%f",);
}7.函數(shù)調(diào)用語句:是函數(shù)的具體執(zhí)行部分,用于完成對數(shù)據(jù)的操作。例如:printf("WelcometotheCworld.");/*該語句是調(diào)用printf函數(shù)實(shí)現(xiàn)字符串輸出*/※注意:C語言允許一行寫多個語句,每條語句后面必須要有分號;也允許一個語句寫多行。[Return]3.2程序的三種基本結(jié)構(gòu)C語言是理想的結(jié)構(gòu)化程序設(shè)計語言。結(jié)構(gòu)化程序的最大特點(diǎn)是以控制結(jié)構(gòu)為單位,每個單位只有一個入口和一個出口。結(jié)構(gòu)化程序中常見的基本結(jié)構(gòu)有三種:1.順序結(jié)構(gòu)2.選擇結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)
圖3-1順序結(jié)構(gòu)程序框圖在順序結(jié)構(gòu)程序中,一般包括以下幾個部分:(1)程序開頭的編譯預(yù)處理命令在程序中若要使用標(biāo)準(zhǔn)函數(shù)(又稱庫函數(shù)),除printf()和scanf()函數(shù)外,使用其它的標(biāo)準(zhǔn)函數(shù)都必須使用編譯預(yù)處理命令,將相應(yīng)的頭文件包含進(jìn)來。(2)順序結(jié)構(gòu)程序的函數(shù)體順序結(jié)構(gòu)程序的函數(shù)體中包括完成程序具體功能的各個語句,主要有以下四部分:①變量類型的說明部分;②數(shù)據(jù)的輸入部分;③數(shù)據(jù)的處理部分;④數(shù)據(jù)的輸出部分。[Return]
根據(jù)條件p成立與否來選擇執(zhí)行程序的某部分,即:當(dāng)條件P成立(“真”),執(zhí)行A操作,否則執(zhí)行B操作。但無論選擇哪部分,程序均將匯集到同一個出口。程序流程圖如圖3-2所示:圖3-2選擇結(jié)構(gòu)程序流程圖
選擇結(jié)構(gòu)還可以派生出“多分支選擇結(jié)構(gòu)”,程序框圖如圖3-3所示。根據(jù)k的值(k1、k2、...、kn)不同,來選擇執(zhí)行多路分支A1、A2、...、An之一。圖3-3多分支選擇結(jié)構(gòu)程序流程圖[Return](1)當(dāng)型循環(huán)結(jié)構(gòu)。當(dāng)條件p成立(“真”)時,反復(fù)執(zhí)行A操作,直到p為“假”時才停止循環(huán)。程序流程圖如圖3-4所示:圖3-4當(dāng)型循環(huán)結(jié)構(gòu)程序流程圖(2)直到型循環(huán)結(jié)構(gòu)。先執(zhí)行A操作,再判別條件p是否為“真”,若為“真”,再執(zhí)行A,如此反復(fù),直到p為“假”為止。程序流程圖如圖3-5所示:假真圖3-5直到型循環(huán)結(jié)構(gòu)程序流程圖
使用循環(huán)結(jié)構(gòu)時,在進(jìn)入循環(huán)前,應(yīng)設(shè)置循環(huán)的初始條件。同時,在循環(huán)過程中,應(yīng)修改循環(huán)條件,以便程序退出循環(huán)。如果不修改循環(huán)條件或循環(huán)條件錯誤修改,可能導(dǎo)致程序不能退出循環(huán),即進(jìn)入“死循環(huán)”。
三種基本結(jié)構(gòu)可以處理任何復(fù)雜的問題。[Return]3.3賦值語句1.一般格式:<變量名>=<表達(dá)式>;例如:c=a+b;2.功能:先計算賦值號右邊表達(dá)式的值,然后將計算得到的結(jié)果賦值給賦值號左邊的指定變量。3.說明:①C語言中的“=”作為賦值運(yùn)算符,又稱“賦值號”,不是“等號”。②賦值語句和賦值表達(dá)式是不同的概念,賦值表達(dá)式使C語言非常靈活。例如:if((a=b)>0)t=a;
if((a=b;)>0)t=a;[Return]3.4數(shù)據(jù)輸入輸出C語言不提供輸入輸出語句,輸入輸出由開發(fā)系統(tǒng)提供的函數(shù)實(shí)現(xiàn),其中:putchar()、printf()是輸出到終端(系統(tǒng)標(biāo)準(zhǔn)輸出設(shè)備,如顯示器)的函數(shù);getchar()、scanf()是從系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備(一般指鍵盤)輸入數(shù)據(jù)的函數(shù)。 輸入輸出庫函數(shù)的原型在文件stdio.h中定義,因此,使用輸入輸出函數(shù)時,應(yīng)在源程序的開頭使用如下語句:#include“stdio.h”
或#include<stdio.h>(關(guān)于編譯預(yù)處理命令的使用可參考第8章。)
stdio.h放在程序的開頭,稱為“頭文件”;由于使用#include(包含)命令,又稱為“包含文件”。
C語言開發(fā)系統(tǒng)提供很多庫函數(shù),它們的原型在不同的頭文件中定義,因此,在程序開頭總是包含需要的頭文件。最常用的頭文件如表3-1所示。
表3-1最常用的頭文件頭文件名作用stdio.h定
定義輸入輸出函數(shù)string.h定義字符串操作函數(shù)math.h定義sin、cos、sqrt等數(shù)學(xué)函數(shù)3.4.1printf()——格式化輸出函數(shù)1.一般形式(1)格式:printf("格式字符串"[,輸出項表]);(2)功能:向系統(tǒng)默認(rèn)的輸出設(shè)備(一般指終端或顯示器)格式化輸出一個或多個任意類型的數(shù)據(jù)。(3)說明:格式字符串:又稱“轉(zhuǎn)換控制字符串”,可以包含格式字符、轉(zhuǎn)義字符和普通字符三種字符。
輸出項表:輸出項表是可選的。如果要輸出的數(shù)據(jù)不止1個時,則相鄰2個數(shù)據(jù)之間有用逗號分開。
例如:
printf("a=%f,b=%5d,c=%c\n",a,b,c); /*a、b、c為輸出項表,中間用逗號隔開*/
“格式字符串”中的格式字符,必須與“輸出項表”中的輸出項的數(shù)據(jù)類型一致,否則會引起輸出錯誤。
2.格式字符輸出不同類型的數(shù)據(jù),printf()函數(shù)中可以使用不同的格式字符:(1)d格式符:以帶符號的十進(jìn)制整數(shù)形式輸出。
格式字符意義%d輸出數(shù)字長度為變量數(shù)值的實(shí)際長度%md輸出m位(不足補(bǔ)空格,大于m位時按實(shí)際長度輸出)%ld,%mldl(小寫字母L)表示輸出“長整型”數(shù)據(jù)%0md,%0mld0(數(shù)字0)表示位數(shù)不足m時補(bǔ)0【例3-1】
格式字符d的使用。/*exam3_1*/main(){ intnum1=123; longnum2=123456; printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1); printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2); printf("num1=%ld\n",num1);} 用4種不同格式,輸出int型數(shù)據(jù)num1的值用3種不同格式,輸出long型數(shù)據(jù)num2的值num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=11272315
程序運(yùn)行結(jié)果如下:(□表示空格)說明:a.對于整數(shù),還可用八進(jìn)制、無符號形式(%o)和十六進(jìn)制、無符號形式(%x)輸出。b.對于unsigned型數(shù)據(jù),也可用%u格式符,以十進(jìn)制、無符號形式輸出。(2)f格式:以小數(shù)形式,按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。格式字符意義%f按實(shí)數(shù)格式輸出,整數(shù)部分按實(shí)際位數(shù)輸出,6位小數(shù)%m.nf總位數(shù)m(含小數(shù)點(diǎn)),其中n位小數(shù),右對齊%-m.nf同上,左對齊【例3-2】
格式字符f的使用。/*exam3_2*/main(){ floatf=123.456; doubled1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f); printf("d1+d2=%f\n",d1+d2);}屏幕顯示運(yùn)行結(jié)果為:123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010float實(shí)數(shù)(單精度)的有效位數(shù)是7位,double實(shí)數(shù)(雙精度)的有效位數(shù)是16位,超過有效位數(shù)的輸出和輸入均無意義。說明:
a.對于實(shí)數(shù),也可使用格式符%e,以標(biāo)準(zhǔn)指數(shù)形式輸出:尾數(shù)中的整數(shù)部分大于等于1、小于10,小數(shù)點(diǎn)占一位,尾數(shù)中的小數(shù)部分占5位;指數(shù)部分占4位(如e-03),其中e占一位,指數(shù)符號占一位,指數(shù)占2位,共計11位。
b.也可使用格式符%g,讓系統(tǒng)根據(jù)數(shù)值的大小,自動選擇%f或%e格式、且不輸出無意義的零。(3)C格式:僅輸出一個字符(只占一列寬度)。一個整數(shù),若其值在0~255范圍內(nèi),可以用字符形式(c格式)輸出,也可以用整數(shù)形式(d格式)輸出。當(dāng)用字符形式輸出時,在輸出前,將該整數(shù)轉(zhuǎn)換為對應(yīng)的ASCII字符。【例3-3】格式字符c的使用。/*exam3_3*/main(void){ chara='A'; intb=65; printf("%c,%5c,%d\n",a,a,a); printf("%d,%c",b,b);}屏幕顯示運(yùn)行結(jié)果為:A,□□□□A,6565,A※注意:在C語言中,整數(shù)可以用字符形式輸出,字符數(shù)據(jù)也可以用整數(shù)
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年標(biāo)準(zhǔn)化離婚冷靜期合同樣本版
- 2024年度許可合同:藥品生產(chǎn)許可協(xié)議3篇
- 2024版吊車維修保養(yǎng)及備件銷售合同2篇
- 2024年度家電產(chǎn)品存貨質(zhì)押擔(dān)保合同3篇
- 2024年冷庫安裝合同模板2篇
- 2024年光伏電站涂料施工與光伏效率合同3篇
- 2024版住宅銷售居間代理與客戶關(guān)系管理合同3篇
- 2024全新房地產(chǎn)買賣合同糾紛起訴狀范本3篇
- 2024版商業(yè)地產(chǎn)開發(fā)單位間土地購置款借款合同集合3篇
- 2024年度機(jī)械設(shè)備出口融資租賃合同3篇
- GB/T 18367-2001公路收費(fèi)方式
- 新疆生產(chǎn)建設(shè)兵團(tuán)2022-2023學(xué)年數(shù)學(xué)七上期末質(zhì)量檢測試題含解析
- 2022年中山市房地產(chǎn)市場年度報告-世聯(lián)研究
- FZ/T 62039-2019機(jī)織嬰幼兒睡袋
- 【人類命運(yùn)共同體論文】淺談“人類命運(yùn)共同體”
- ARCGIS10基礎(chǔ)培訓(xùn)課件
- 課件:第一章 導(dǎo)論(《現(xiàn)代社會福利思想》課程)
- 第七章-期權(quán)的組合策略-《金融工程》課件
- 見證取樣和送檢見證人員備案表
- 明星志愿3及資料設(shè)定集總攻略打印版
- 鐵路專用線管理模式比較
評論
0/150
提交評論