C語言全套課件_第1頁
C語言全套課件_第2頁
C語言全套課件_第3頁
C語言全套課件_第4頁
C語言全套課件_第5頁
已閱讀5頁,還剩447頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言概述1.1C語言的發(fā)展簡史與特色1.1.1C語言發(fā)展簡史

C語言是目前世界上最廣泛使用的通用電腦語言。用它既可編寫電腦系統(tǒng)軟體,也可編寫各種應(yīng)用軟體,所以在數(shù)百種電腦語言中,C語言仍然是目前最流行、最受歡迎的電腦語言?,F(xiàn)在,Windows已成為電腦的主要操作系統(tǒng),相應(yīng)的基於Windows的程式開發(fā)多採用C++,它雖是一種面向?qū)ο蟮恼Z言,但其核心內(nèi)容仍是標(biāo)準(zhǔn)C。

C語言是在早期的B語言基礎(chǔ)上發(fā)展起來的。

C語言於1972年~1973年間,誕生於美國的貝爾實驗室,由Denis.M.Ritchie創(chuàng)建。

C語言的產(chǎn)生基於兩個方面的需要。一是為滿足UNIX操作系統(tǒng)開發(fā)的需要。UNIX操作系統(tǒng)是一個通用的、複雜的電腦管理系統(tǒng)。二是為拉近高級語言與硬體之間距離的需要。

C語言集高級語言與組合語言優(yōu)點於一身。

C語言面對實際應(yīng)用的需要而產(chǎn)生,直至今日仍不改初衷。1.1.2C語言的特點

1.它的語言簡潔、緊湊,使用方便、靈活。

2.C語言運算豐富,將括弧、賦值、強(qiáng)制類型轉(zhuǎn)換、取量地址等都以運算實現(xiàn)。3.運算符多樣。

4.函數(shù)是程式的主體。函數(shù)是程式的基本單位,是C語言的靈魂。5.C語言語法限制不太嚴(yán)格,程式書寫自由度大,對程式員要求不高。

6.C語言允許直接訪問物理地址。能進(jìn)行位運算,能實現(xiàn)組合語言的大部分功能,能直接對硬件進(jìn)行操作,它是高級語言中的低級語言。

7.C語言編譯系統(tǒng)小,生成目標(biāo)代碼品質(zhì)高,程式執(zhí)行效率高。8.可移植性好。

1.2C語言的關(guān)鍵字和語句形式1.關(guān)鍵字關(guān)鍵字又稱為保留字,由系統(tǒng)提供,用以表示特定的語法成份,是構(gòu)成C語言的語法基礎(chǔ)。常見關(guān)鍵字有32個。①程式控制語句關(guān)鍵字(12個)

if else for do while continue switch break case default goto return ②類型定義說明關(guān)鍵字(12個)

int charfloatdoublelongshort signed unsignedenumstruct union void③存儲類別定義說明關(guān)鍵字(4個)auto register static extern④常量、變數(shù)定義和自定義類型關(guān)鍵字(3個)const volatile typedef⑤位元組測試關(guān)鍵字(1個)sizeof[注意]關(guān)鍵字有特定的語法含義,不允許用戶重新定義。關(guān)鍵字在程式中像國家的名字一樣,絕對不能拼錯。2.語句形式①控制語句

if(~)~else~ /*選擇分支語句*/

switch(~)case…;/*多分支語句*/

for(~;~;~)~ /*for迴圈語句*/

while(~)~ /*while迴圈語句*/

do~;while(~); /*dowhile迴圈語句*/

continue; /*無條件進(jìn)行下一次迴圈語句*/

break;/*無條件結(jié)束當(dāng)前層迴圈或跳出switch語句*/

goto~ /*無條件跳轉(zhuǎn)到程式指定處語句*/

return~ /*函數(shù)調(diào)用結(jié)束返回語句*/②函數(shù)調(diào)用語句函數(shù)名(實參運算式表);③運算式語句運算式;④空語句;或{} /*不做任何操作*/⑤複合語句(分程式){~}⑥注釋語句/*~*/ /*注釋的部分不參加程式編譯和運行*/其中“~”代表一個或多個運算式或語句,括弧內(nèi)為運算式,括弧外為語句。1.3簡單的C程式介紹【例1】計算運算式1-1/2+1/3-1/4+……+1/99-1/100的值?!挤治觥剑罕締栴}要計算的是100個分?jǐn)?shù)的和,其中分子都是1,分母分別從1遞增排到100,又奇數(shù)項的值為負(fù),偶數(shù)項的值為正。這樣,只要我們計算出每一項的值,然後進(jìn)行累加即可,這個問題,關(guān)鍵在於解決符號的事。〖演算法〗:i).初始化各量:n=1,用於迴圈計數(shù),同時參與每一項的計算;s=0,用於累加計算出的各項,得到最終所求。ii).計算中間項:n為奇數(shù),t=1/n;否則,t=-1/n。iii).累加各項:s=s+t。iv).重複ii和iii,直到n>100,s即為所求和值。

〖程式〗:#defineN100main(){intn=1;floats=0.0,t;while(n<=100){if(n%2!=0)t=1.0/n;

elset=-1.0/n;

s=s+t;n=n+1;}printf("s=%f\n",s);}〖程式運行結(jié)果〗:s=0.688172【例2】給定半徑,計算圓的面積。#include"stdio.h"/*檔包含*/#definePI3.1415926/*宏定義*/main()/*主函數(shù)*/{floatarea(floatx);/*函數(shù)引用說明*/

floatr,s;/*變數(shù)定義*/

printf("Inputradius:");/*提示資訊*/

scanf("%f",&r);/*鍵盤輸入半徑值*/

s=area(r);/*函數(shù)調(diào)用語句*/

printf("Radius:%f\tArea:%f\n",r,s);/*顯示或列印輸出結(jié)果*/}floatarea(floatx)/*計算面積函數(shù)*/{floaty;y=PI*x*x;returny;/*返回計算結(jié)果*/}〖運行結(jié)果〗:Inputradius:10↙Radius:10.000000 Area:314.159271帶下劃線的資訊表示用戶從鍵盤輸入的資訊,“↙”表示回車。從上面的程式可以大概看出以下幾點:①一個程式可以由多個檔構(gòu)成,每個檔可以由多個函數(shù)構(gòu)成。每個函數(shù)完成一個特定的功能,它由一組語句構(gòu)成。②一個C程式中有且僅有一個主函數(shù),名為main()。③程式中用到的各種各樣的量要先定義後使用,有時還要加上變數(shù)引用說明和函數(shù)聲明。④由“#”開頭的行稱為宏定義或文件包含,末尾無分號。像這樣的語句還有後面要介紹的條件編譯,它們都是C語言中的編譯預(yù)處理命令,而不是真正的語句。語句必須以分號結(jié)束。⑤C語言識別字區(qū)分大小寫字母,系統(tǒng)關(guān)鍵字都是小寫字母構(gòu)成,用戶起的變數(shù)名、函數(shù)名等識別字一般也用小寫字母,宏名通常用大寫字母表示,以區(qū)別於變數(shù)名。標(biāo)識標(biāo)的起名字符集是:大小寫字母、數(shù)字、下劃線;規(guī)則為:不能以數(shù)字開頭,名稱要儘量有一定意義,做到“見名知義”。1.4C程式的實現(xiàn)1.4.1實現(xiàn)步驟

C程式在電腦上的實現(xiàn)與其它高級語言程式的實現(xiàn)一樣,一般要經(jīng)過編輯、編譯、連接、運行四個步驟,如圖1-1所示。圖1-11.編輯

編輯是將C語言的根源程式輸入電腦,並以文本檔的形式存儲在磁片。編輯是建立C根源程式檔的過程,根源程式檔的擴(kuò)展名為.C或.CPP。

編輯可以用任何文字處理軟體完成,一般用編譯器本身集成的編輯器進(jìn)行編輯。2.編譯

C語言是以編譯方式實現(xiàn)的高級語言,C程式的實現(xiàn)必須經(jīng)過編譯程序?qū)Ω闯淌竭M(jìn)行編譯,生成目標(biāo)代碼程式。目標(biāo)代碼程式的擴(kuò)展名為.OBJ。

編譯前先進(jìn)行預(yù)處理。編譯過程主要進(jìn)行詞法分析和語法分析。編譯有錯時,在螢?zāi)簧狭谐鲥e誤的位置和種類。此時,要返回到編輯步驟修改根源程式,修改后,再進(jìn)行編譯。3.連接

編譯形成的目標(biāo)代碼程式機(jī)器可以識別,但還不能直接執(zhí)行,還需要將目標(biāo)代碼程式與庫檔進(jìn)行連接處理,連接工作由連接程式完成。經(jīng)過連接,生成可執(zhí)行檔。可執(zhí)行檔的擴(kuò)展名為.EXE。

連接有錯同樣需返回到編輯步驟修改根源程式,修改後,再進(jìn)行編譯、連接。4.運行

一個C根源程式經(jīng)過編譯、連接後生成了可執(zhí)行檔。運行可執(zhí)行檔,可通過編譯系統(tǒng)下的運行功能,也可像執(zhí)行DOS的外部命令一樣,輸入執(zhí)行檔案名運行。程式運行後,一般在螢?zāi)簧巷@示運行結(jié)果。根據(jù)運行結(jié)果可以判斷程式是否還有演算法方面的錯誤。編譯時產(chǎn)生的錯誤是語法錯誤,運行時出現(xiàn)的錯誤是邏輯錯誤。出現(xiàn)邏輯錯誤時需要修改算法,重新編輯、編譯、運行程序。1.4.2程式的執(zhí)行

C程式的執(zhí)行總是從主函數(shù)main()開始,不管主函數(shù)在程式中什麼位置。主函數(shù)中的語句依先后順序執(zhí)行,除非改變了程序的執(zhí)行流程。其它函數(shù)通過被調(diào)用執(zhí)行。1.4.3TURBOC上機(jī)操作1.啟動TURBOC

只需執(zhí)行TC.EXE檔,即可啟動TURBOC進(jìn)入TURBOC的操作介面。如使用中文,需先將電腦置於中文操作系統(tǒng)管理之下。用TC加根源程式檔案名可快速啟動TURBOC,立即進(jìn)入編輯操作。2.TURBOC操作介面啟動TURBOC後,主操作介面如圖1-2所示。圖1-21)組成

TURBOC主操作介面由主菜單區(qū)、編輯窗口、資訊窗口、熱鍵區(qū)四部分組成。

TURBOC的操作採用菜單驅(qū)動,主菜單包括File(檔操作)、Edit(編輯操作)、Run(運行操作)、Compile(編譯操作)、Project(工程檔)、Options(編譯選擇)及Debug(跟蹤排錯)各項。熱鍵區(qū)提供常用操作的快速功能鍵方式,如F1(幫助)、F2(保存檔)、F3(裝入檔)、F5(縮放窗口)、F6(切換窗口)、ALT+F5(用戶螢?zāi)唬?、ALT+X(退出TURBOC)等。2)主窗口當(dāng)前操作窗口為主窗口(工作窗口),主窗口為雙線框表示,按F6可切換主窗口,按F5可縮放主窗口。3)菜單選擇方式一:按F10進(jìn)入主菜單區(qū),通過菜單項的大寫字母選擇相應(yīng)菜單項,或通過游標(biāo)控制鍵(→、←、↑、↓)移動高亮度光棒至相應(yīng)菜單項,按回車選擇相應(yīng)菜單項。方式二:用熱鍵ALT加相應(yīng)菜單項的大寫字母,選擇相應(yīng)菜單項。對子菜單項的選擇,操作方法類似。3.編輯

編輯在編輯窗口中進(jìn)行,有多種方式進(jìn)入編輯環(huán)境:方式一:選擇Edit項。方式二:選擇File項的子項New,用於編輯新程式。方式三:選擇File項的子項Load,裝入要修改的程式,用於修改程式。方式四:啟動時採用快速啟動方式。

TURBOC的編輯操作是Wordstar、WPS等字處理軟體編輯操作的子集,它與Wordstar、WPS的編輯操作完全類似。

4.編譯

TURBOC將編譯、連接一道完成。按熱鍵F9或選擇Compile項進(jìn)入編譯。編譯時發(fā)生錯誤,返回編輯步驟,修改程式後,再編譯程序。

5.運行按熱鍵CTRL+F9或選擇Run項下的子項Run,運行電腦中的程式。按ALT+F5鍵或選擇Run項下的子項UserScreen進(jìn)入用戶螢?zāi)?查看程式運行結(jié)果。運行時發(fā)生錯誤,返回編輯步驟,修改程式後,再編譯、運行程式。對於沒編譯的程式,選擇運行會先自動進(jìn)行編譯操作,再運行程式。識別字是一個字元序列,在程式中用來標(biāo)識變數(shù)名、函數(shù)名、數(shù)組名、類型名、檔案名等。識別字又分為系統(tǒng)識別字和用戶識別字,其中系統(tǒng)識別字是系統(tǒng)預(yù)先定義的,如32個關(guān)鍵字。用戶識別字是用戶自己定義的。TurboC中標(biāo)識符的取名規(guī)則是:1.只能由大小寫英文字母(A~Z,a~z)、數(shù)字(0~9)和下劃線(_)組成。2.第一個字元不能為數(shù)字。3.TurboC中標(biāo)識符長度不能超過31個字元(有的系統(tǒng)不能超過8個字元)。2.1識別字如:a_b、_ab、a123是合法的識別字1ab、#ab、a%b是不合法的識別字。說明:1.C語言中區(qū)分英文字母的大小寫。如:a1和A1是兩個不同的識別字。2.用戶不能定義與關(guān)鍵字同名的識別字。3.用戶在定義識別字時,為了增加程式的可讀性,儘量做到“見名知義”,並且儘量不用下劃線開頭(因為系統(tǒng)內(nèi)部使用了一些以下劃線開頭的識別字)。2.2數(shù)據(jù)類型2.3常量和變數(shù)

1.常量在程式執(zhí)行過程中,其值不能被改變,即不能進(jìn)行賦值運算的量稱為常量。C語言中,常量的類型有整型常量、實型常量、字元常量和字串常量四種。常量的數(shù)據(jù)類型一般從字面形式就可以判斷。如:12、-10為整型常量,3.14、-8.9為實型常量,’a’為字元常量。另外,在C語言中可以用一個識別字代表一個常量,稱為符號常量。其定義的一般形式為:#define識別字常量值習(xí)慣上,符號常量用大寫字母表示,以便與其他識別字相區(qū)別。

【例2.1】計算以r為半徑的圓的周長、圓的面積和球的體積#definePI3.1415926main(){floatr,l,s,v;scanf("r=%f",&r); l=2*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%fs=%fv=%f\n",l,s,v);}〖運行結(jié)果〗:r=3↙l=18.849556s=28.274334v=113.0973362.變數(shù)在程式執(zhí)行過程中,其值可以被改變,即可以進(jìn)行賦值運算的量稱為變數(shù)。變數(shù)通常用來保存程式運行過程中的數(shù)據(jù)輸入,中間結(jié)果和最終結(jié)果。C語言中,變數(shù)必須先定義後使用。(1)變數(shù)定義的一般形式為:類型識別字

變數(shù)名表;其中,類型識別字表示變數(shù)的數(shù)據(jù)類型,可以是任意數(shù)據(jù)類型。如整型、實型和字元型等。變數(shù)名要符合識別字的取名規(guī)則。變數(shù)名表可以是一個或多個識別字名,中間用逗號分隔,最後以分號結(jié)束。以下是一些變數(shù)定義的例子:

inti,j,num;

floata,b,sum;unsignedintui;charc,ch,name;doublex,total;(2)說明①變數(shù)必須“先定義後使用”。如果沒有定義或說明而使用變數(shù),編譯時系統(tǒng)會給出錯誤資訊。②

區(qū)分變數(shù)和類型。變數(shù)是屬於某一種數(shù)據(jù)類型的變數(shù),在編譯時編譯程序會根據(jù)變數(shù)的類型為變數(shù)分配記憶體單元,不同類型的變數(shù)在內(nèi)存中分配的位元組數(shù)不同。

③變數(shù)可以在程式內(nèi)的三個地方定義:在函數(shù)內(nèi)部,在函數(shù)的參數(shù)(形參)定義中或在所有的函數(shù)外部。由此定義的變數(shù)分別稱為局部變數(shù),形式參數(shù)和全局變數(shù)。在不同地方定義的變數(shù),其作用範(fàn)圍不同。在同一層次定義的變數(shù),不能與數(shù)組、指針、函數(shù)和其他變數(shù)同名。④在函數(shù)內(nèi)部或函數(shù)外部定義變數(shù)時,可以為變數(shù)賦初值,稱為變量的初始化??梢詫θ孔兞砍跏蓟部蓪Σ糠肿兞砍跏蓟?。對變數(shù)初始化的目的是為了使某些變數(shù)在程式開始執(zhí)行時就具有確定的值。如:inta1=10,b1=100;/*對全部變數(shù)初始化,a1、b1都為整型變數(shù),初值分別為10和100*/floata2=3.14,b2;/*對部分變數(shù)初始化,a2、b2都為單精度實型變數(shù),只對變數(shù)a2初始化,其值為3.14,b2沒有初始化,其值為隨機(jī)值。*/如果對同時定義的兩個整型變數(shù)a、b都初始化為100,必須對每個變數(shù)分別初始化。如:inta=100,b=100;不能寫成:inta=b=100;⑤同一個變數(shù)不能在同一個作用域重複定義,因為編譯程序不能對已分配記憶體單元的變數(shù)重新分配記憶體單元。⑥變數(shù)具有存儲類別,根據(jù)變數(shù)定義的位置和形式的不同,可分為自動變數(shù)、靜態(tài)變數(shù)、外部變數(shù)和寄存器變數(shù)。詳見第四章。2.4整型數(shù)據(jù)1.整型常量整型常量就是整數(shù),包括正整數(shù)、負(fù)整數(shù)和0。C語言中整型常量可以用以下三種形式表示:①十進(jìn)位整數(shù):有效數(shù)字為0~9。如正整數(shù)20。②八進(jìn)制整數(shù):有效數(shù)字為0~7,且以0開頭。如020表示八進(jìn)制數(shù)20,等於十進(jìn)位數(shù)16,-020表示八進(jìn)制數(shù)-20,等於十進(jìn)位數(shù)-16。③十六進(jìn)制整數(shù):有效數(shù)字為0~9和a~f(或A~F),且以0x開頭。如0x20表示十六進(jìn)制數(shù)20,等於十進(jìn)位數(shù)32,-0x20表示十六進(jìn)制數(shù)20,等於十進(jìn)位數(shù)-32。2.整型變數(shù)整型變數(shù)用來存放整型數(shù)值。整型變數(shù)類型標(biāo)識符、內(nèi)存中分配的字節(jié)數(shù)和值域見表2-1。根據(jù)變數(shù)的定義形式,可定義整型變數(shù)。如:inti1=10;/*i1為整型變數(shù),初值為10,在內(nèi)存中占2個連續(xù)的位元組*/longl1,l2;/*l1和l3為長整型變數(shù),在內(nèi)存中各占4個連續(xù)的位元組*/unsignedu1;/*u1為無符號整型變數(shù),在內(nèi)存中占2個連續(xù)的位元組*/說明:①在TurboC中,把短整型變數(shù)作為整型變數(shù)處理,把無符號短整型變數(shù)作為無符號整型變數(shù)處理②如果整型常量的範(fàn)圍是-215~215-1,則認(rèn)為它是int型,可以把它賦給int型或longint型變數(shù)。③如果整型常量的範(fàn)圍是-231~-215+1或215~231-1,則認(rèn)為它是longint型,可以把它賦給longint型變數(shù)。④在一個整型常量的後面加字母l或L,則認(rèn)為是longint常量。如:0l、123l、345L等。在賦值時,如果不是值域範(fàn)圍的值,在編譯時不會出錯,但得不到原值,這種現(xiàn)象稱為溢出。

2.5實型數(shù)據(jù)

1.實型常量

實型常量也稱“浮點數(shù)”,也就是帶小數(shù)點的數(shù)。C語言中,實型常量只使用十進(jìn)位,它有以下兩種形式表示:①十進(jìn)位小數(shù)形式由正負(fù)號、數(shù)字0~9和小數(shù)點組成。如:3.140.80.0-36.625+100.00其中正號“+”可以省略。若整數(shù)部分為0,則整數(shù)部分可以省略,但小數(shù)點不能省略。若小數(shù)部分為0,則小數(shù)部分可以省略,但小數(shù)點不能省略。如:0.8與.8等價,100.00與100.等價②指數(shù)形式(或稱科學(xué)記數(shù)法)由正負(fù)號、數(shù)字0~9、小數(shù)點和字母e(或E)組成。它的組織形式為: me±n或mE±n。表示m×10±n,其中m為整型數(shù)或?qū)嵭蛿?shù),n為整型數(shù),m和n缺一不可,即使m是1或n是0也不能省略,格式中的“+”可以省略。如: 3.14e5123e-41e5.89e90.78e-6是正確的而

e3123e4.0.e54.5ee是錯誤的。2.實型變數(shù)實型變數(shù)分為單精確度型和雙精度型兩種,其類型識別字、記憶體中分配的位元組數(shù)、有效數(shù)字位數(shù)和值域見表2-2。

根據(jù)變數(shù)的定義形式,可定義實型變數(shù)。如:floatf1,f2;/*f1和f2為單精確度實型變數(shù),在內(nèi)存中各占4個連續(xù)位元組*/doubled1=3.4;/*d1為雙精度實型變數(shù),初值為3.4,在內(nèi)存中占8個連續(xù)位元組*/C語言中的實型常量在內(nèi)存中以雙精度形式存儲,一個實型常量既可以賦給一個單精確度實型變數(shù),也可賦給一個雙精度實型型,系統(tǒng)會根據(jù)變數(shù)的類型自動截取實型常量中相應(yīng)的有效位數(shù)字。

2.6字元型數(shù)據(jù)

1.字元常量C語言中,用一對單引號括起來的一個字元稱為字元常量,如’a’、’7’、’#’等。一個字元常量的值就是該字元的ASCII碼。如字元常量’a’的ASCII碼為97,字元常量’A’的ASCII碼為65,由此可知’a’和’A’是兩個不同的字元常量。除了以上形式的字元常量外,C語言中還允許使用一種特殊形式的字元常量,即以“\”開頭的字元序列,稱為“轉(zhuǎn)義字元”,用來表示一些難以用一般形式表示的字元。常用的轉(zhuǎn)義字元見表2-3。轉(zhuǎn)義字元開頭的“\”,並不代表一個斜杠字元,其含義是將後面的字元或數(shù)字轉(zhuǎn)換成另外的意義;另外,轉(zhuǎn)義字元仍然是一個字元,仍然對應(yīng)於一個ASCII值。如“\n”中的“n”不代表字母n,而是代表“換行”符,其ASCII值為10。2.字元變數(shù)字元型變數(shù)分為有符號字元型(簡稱字元型)和無符號字元型兩種,其類型識別字、記憶體中分配的位元組數(shù)和ASCII碼範(fàn)圍見表2-4根據(jù)變數(shù)的定義形式,可定義字元型變數(shù)。如:charc1,c2,c3;/*c1、c2和c3為字元型變數(shù),在內(nèi)存中各占1個位元組*/unsignedcharch1,ch2;/*ch1和ch2為無符號字元型變數(shù),在內(nèi)存中各占1個位元組*/在對字元變數(shù)賦值時,可以把字元常量(包括轉(zhuǎn)義字元)賦給字元變數(shù)。如:

c1=’a’;c2=’\376’;3.字元數(shù)據(jù)和整型數(shù)據(jù)的關(guān)係

把一個字元常量賦給一個字元變數(shù),實際上將該字元常量對應(yīng)的ASCII碼存放到為變數(shù)所分配的記憶體單元。在C語言中字元型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用:①字元常量與其對應(yīng)的ASCII碼通用。②帶符號字元變數(shù)和值在-128~127之間的整型變數(shù)通用。③無符號字元變數(shù)和值在0~255之間的整型變數(shù)通用。一個字元數(shù)據(jù)既可以以字元形式輸出,也可以以整數(shù)形式輸出。以字元形式輸出時,需要先將存儲單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字元,然後再輸出。以整數(shù)形式輸出時,直接將ASCII碼作為整型數(shù)輸出。字元型數(shù)據(jù)可以進(jìn)行算術(shù)運算,此時是對它的ASCII碼進(jìn)行算術(shù)運算。【例2.2】main(){inti=65;charch=’A’;printf("i=%dch=%c\n",i,ch);/*輸出:i=65ch=A*/printf("i=%cch=%d\n",i,ch);/*輸出:i=Ach=65*/i=’A’;/*把字元常量賦給整型變數(shù)*/

ch=65;/*把整型常量賦給字元變數(shù)*/

printf("i=%dch=%c\n",i,ch);/*輸出:i=65ch=A*/printf("i=%cch=%d\n",i,ch);/*輸出:i=Ach=65*/}2.7字串常量C語言中,用一對雙引號括起來的一個字元序列。字元序列可以是零個、一個或多個字元。字元序列中含有字元個數(shù)稱為字串的長度。如:

"china"長度為5 "a"長度為1

"□□"空格串,長度為2 ""空串,長度為0說明:①字串常量在存儲時除了存儲雙引號中的字元序列外,系統(tǒng)還會自動在最後一個字元的後面加上一轉(zhuǎn)義字元’\0’,所以一個字串常量在內(nèi)存中所占的位元組數(shù)是字串長度加1。如"china"的長度為5,而在內(nèi)存中占的位元組數(shù)為6。②’\0’是ASCII碼為0的空操作字元,C語言規(guī)定用’\0’作為字串的結(jié)束標(biāo)誌,目的是以便系統(tǒng)據(jù)此判斷字串是否結(jié)束。③區(qū)別’A’和"A",前者為字元常量,後者是以’\0’結(jié)束的字串常量。④字串常量中的字元可以是轉(zhuǎn)義字元,但它只代表一個字元。如:字串"ab\n\\cd\e"的長度是7,而不是10。⑤不能將字串常量賦給字元變數(shù)。如下面的賦值是錯誤的:c1="a"; c2="china";C語言中沒有專門的字串變數(shù),字串如果需要存放在變數(shù)中,需要用字符數(shù)組來存放,即用一個字元型數(shù)組來存放一個字串。2.8變數(shù)及指針

記憶體中每一個位元組都有一個確定其位置的地址,而每個變數(shù)在編譯時都在內(nèi)存分配連續(xù)的一定位元組數(shù)的存儲單元,變數(shù)分配的存儲單元的第一位元組的地址就是該變數(shù)的地址。一個變數(shù)的地址值可以通過取地址符&得到,其一般格式為:&變數(shù)名。C允許通過定義一個變數(shù)來存放另一變數(shù)的地址,這樣的變數(shù)就稱作指針變數(shù)。1.指針變數(shù)的定義和初始化

指針是一種存放地址值的變數(shù),像其他變數(shù)一樣,必須在使用前定義。指針變數(shù)的命名遵守與其它變數(shù)相同的規(guī)則,

即必須是唯一的識別字。指針定義的格式如下:類型名*指針名;如:int*p1;/*p1是一個指針變數(shù),用來存放整型變數(shù)的地址*/在函數(shù)內(nèi)或函數(shù)外可以同時定義多個指針變數(shù),也可以同時定義普通變數(shù)和指針變數(shù)。如:int*p1,*p2,a1;其中,a1是普通變數(shù),用來存放整型數(shù)。p1和p2是指針變數(shù),用來存放整型變數(shù)的地址。可以對指針變數(shù)初始化。如:inta=10,*p=&a;等價於:inta=10,*p;p=&a;把變數(shù)a的地址賦給了指針變數(shù)p,此時稱指針變數(shù)p“指向”整型變數(shù)a。如果要把一個變數(shù)的指針初始化給一個指針變數(shù),該變數(shù)必須在指針變數(shù)定義之前定義。如下列初始化錯誤的:int*p1=&a;inta=10;其道理很簡單,變數(shù)只有定義後才被分配一定的記憶體單元。需要注意的是:定義指針變數(shù)時的數(shù)據(jù)類型不是指針變數(shù)中存放的數(shù)據(jù)類型,而是它要指向的變數(shù)的數(shù)據(jù)類型。也就是說定義成某種數(shù)據(jù)類型的指針變數(shù),將來只能用來指向該類型的其他變數(shù)。

2.指針變數(shù)的引用訪問指針變數(shù)所指向的變數(shù)用間接訪問運算符“*”。其一般格式為:*指針變數(shù)名若有定義:inta=10,*p=&a;則*p為指針變數(shù)p所指向的變數(shù),即變數(shù)a,其值為10?!纠?.3】main(){inta=10;int*p;p=&a;printf("%d%d",a,*p);}〖運行結(jié)果〗1010說明:①定義變數(shù)時,變數(shù)名前加“*”,表示該變數(shù)為指針變數(shù),使用指針變數(shù)時,指針變數(shù)前加“*”,表示該指針變數(shù)所指向的變數(shù)。如:例2.3第三行的*p表示定義指針變數(shù)p,p前面的“*”只表示p為指針變數(shù)。第五行printf()函數(shù)中的*p則代表p所指向的變數(shù),即變數(shù)a。②指針變數(shù)在使用前一定要賦予一定的地址值,如果指針變數(shù)在使用前沒有賦值,其值不確定,使用時容易出錯,嚴(yán)重時會造成系統(tǒng)癱瘓。③不能將普通類型數(shù)據(jù)(0除外)直接賦給指針變數(shù)。若p是指針變數(shù),下麵的賦值是不合法的:p=100;④指針變數(shù)賦值時,類型一定要匹配,不能將一個指針直接賦給與它類型不同的指針變數(shù)。若有定義:inta,*p1=&a;floatp2;則下麵的賦值是不合法的:

p1=p2;若想賦值,必須通過強(qiáng)制類型轉(zhuǎn)換,如:

p2=(float*)p1;其原因是:不同類型的指針變數(shù),它們訪問的存儲單元的大小不同。如:char型指針為1個位元組,int型指針為連續(xù)2個位元組,float型指針為連續(xù)4個位元組,double型指針為連續(xù)8個位元組。3.1運算式基礎(chǔ)3.1.1運算式的組成1.運算符

運算符又稱操作符,是一個符號,它指示在一個或多個運算元上完成某種運算操作或動作。

C語言中,除了輸入、輸出及程式流程控制操作以外的所有基本操作都作為運算處理。如,賦值運算符“=”、逗號運算符“,”、括弧運算符“()”。①算術(shù)運算符有+、—、*、/、%、++、--②關(guān)係運算符有<、<=、==、!=、>、>=③邏輯運算符有!、&&、||④位運算符有<<、>>、~、|、^、&⑤賦值運算符有=、+=、-=、*=、/=、%=⑥條件運算符有?:⑦逗號運算符有,⑧指針運算符有*、&⑨求位元組數(shù)運算符有sizeof10強(qiáng)制類型轉(zhuǎn)換運算符有(類型)11其他運算符有.、→、()、[]等2.運算元

運算元是運算符的操作對象,可以是常量、變數(shù)、函數(shù)與運算式。常量、變數(shù)、函數(shù)本身就是簡單運算式,從一般意義上講,C語言中所有運算元都是表達(dá)式。復(fù)雜表達(dá)式由運算符連接簡單表達(dá)式形成。3.1.2運算式的書寫

C語言的運算式雖然來源於數(shù)學(xué)運算式,是數(shù)學(xué)運算式在電腦中的表示,但在書寫時應(yīng)該注意遵循C語言運算式書寫的原則:(1)C語言的運算式只能採用線性的形式書寫。例如:①應(yīng)寫成1/3+i+j*j*j。②應(yīng)寫成(a+b)/(c+d)*e+f。(2)C語言的運算式只能使用C語言中合法的運算符和運算元,對有些操作必須調(diào)用庫函數(shù)完成,而且運算符不能省略。例如:①πr2應(yīng)寫成3.14159*r*r。②應(yīng)寫成0.5*a*b*sin(alph)。③|x-y|應(yīng)寫成fabs(x-y)。④y+2X

應(yīng)寫成y+pow(2,x)。3.1.3運算式的分類

C語言運算式種類很多,有多種分類方法。我們一般依據(jù)運算的特徵將運算式分為:①算術(shù)運算式,如a+b*2.0-3.0/5.0。②關(guān)係運算式,如x>=y,關(guān)係運算式可以認(rèn)為是邏輯運算式的特殊情況。③邏輯運算式,如(x>=2)&&(x<=8)。④賦值運算式,如a=b=c=1。⑤條件運算式,如(a>b)?a:b。⑥逗號運算式,如a=2,b=a*a,c=sqrt(b)。3.1.4運算式的計算1.運算符優(yōu)先順序

C語言將運算符的優(yōu)先順序劃分為15級,初等運算()、[]、→、.優(yōu)先順序最高,單目運算!、~、++、--、-、(類型)、*、&、sizeof優(yōu)先順序次高,算術(shù)運算+、-、*、/、%再次之,然後是關(guān)係運算<、<=、==、![KG-*4]=、>、>=,再然後是邏輯運算&&、||,條件運算式?:,賦值運算=、+=、-=、*=、/=、%=,逗號運算優(yōu)先順序最低,位運算優(yōu)先順序比較分散。2.運算符的結(jié)合性

運算符的結(jié)合性是指,優(yōu)先順序相同的運算從左到右進(jìn)行(左結(jié)合性)還是從右至左進(jìn)行(右結(jié)合性),左結(jié)合性是人們習(xí)慣的計算順序。

C語言中,只有單目運算(!、~、++、--、-、*、&)、條件運算(?:)、賦值運算(=、+=、-=、*=、/=、%=)的結(jié)合性是右結(jié)合,其余運算為左結(jié)合。3.2算術(shù)運算式1.自增運算

自增運算符:++自增運算是單目運算,運算元只能是整型變數(shù),有前置、後置兩種方式:++i,在使用i之前,先使i的值增加1,俗稱先增後用。

i++,先使用i的值,然後使i的值增加1,俗稱先用後增。如:i=1999;j=++i;/*先將i的值增1,變?yōu)?000,後使用。j的值也為2000*/

j=i++;/*先使用,j的值為1999。後增,將i的值增1,變?yōu)?000*/自增運算優(yōu)先順序處於第2級,結(jié)合自右向左。

2.自減運算

自減運算符:--自減運算與自增運算一樣也是單目運算,運算元也只能是整型變數(shù)。同樣有前置、後置兩種方式:--i,在使用i之前,先使i的值減1,俗稱先減後用。

i--,先使用i的值,然後使i的值減1,俗稱先用後減。如:i=2000;j=--i;/*先減,將i的值減1,變?yōu)?999。後使用,j的值也為1999*/

j=i--;/*先使用,j的值為2000。後減,將i的值減1,i的值變?yōu)?999*/自減運算的優(yōu)先級、結(jié)合性同自增運算。請?zhí)貏e注意:(1)自增、自減運算只能用於整型變數(shù),不能用於常量或運算式。(2)自增、自減運算比等價的賦值語句生成的目標(biāo)代碼更高效。(3)該運算常用於迴圈語句中,使迴圈控制變數(shù)自動加、減1,或用於指針變數(shù),使指針指向下一個或上一個地址。(4)運算式中包含有自增、自減運算時,容易出錯,務(wù)請小心。如:i=1;(++i)+(++i)+(++i)的值為多少呢?有的計算出9(=2+3+4),其實這是錯誤的。計算時先對整個運算式掃描,i先自增3次,由1→2→3→4,如此計算結(jié)果為4+4+4,等於12。(i++)+(i++)+(i++)的值又是多少呢?類似上面分析,應(yīng)為3,當(dāng)然運算式計算完成后i的值同樣改變?yōu)?。3.運算符的組合問題

C語言的運算符一般為一個字元,有的由兩個字元組成,在運算式中出現(xiàn)多個字元時如何組合呢?C編譯系統(tǒng)在處理時原則上盡可能自左而右將若干字元組合成一個運算符,識別字、關(guān)鍵字也按同樣的原則進(jìn)行處理。如i+++j,解釋為(i++)+j,非i+(++j)。如要表示i+(++j),必須加括弧。例3–2自增自減運算。/*程式3-2,自增自減運算*/#include″stdio.h″main(){inti,j;i=j=5;printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i++=%d,j--=%d\n″,i++,j--);printf(″++i=%d,--j=%d\n″,++i,--j);printf(″i=%d,j=%d\n″,i,j);}運行結(jié)果:i++=5,j--=5++i=7,--j=3i++=7,j--=3++i=9,--j=1i=9,j=13.3賦值運算式3.3.1賦值運算賦值運算符:=賦值運算是雙目運算,一個運算元為變數(shù),一個運算元為運算式。賦值運算符的右邊是運算式,左邊是變數(shù)。賦值運算時先計算右邊運算式的值,然後將右邊運算式的值賦給左邊變數(shù),即送給左邊變數(shù)對應(yīng)的存儲單元,并以此作為整個賦值表達(dá)式的值。如:inti;i=3+5%2;/*先計算3+5%2,得到4,然後將4賦給i*/。

賦值運算的優(yōu)先順序為第14級,次低,結(jié)合自右向左。賦值運算中的運算式運算元最簡單的形式是一個常量,這時讓變數(shù)得到一個初值。如:inti;floatx;charch;i=100;x=12.345;ch=′A′;

賦值運算中表達(dá)式運算元又可以是賦值運算式,如此可輾轉(zhuǎn)賦值。如:intx,y,z;x=y=z=0.0;/*相當(dāng)於x=(y=(z=0.0)),x、y、z都得到值0.0*/③②①3.3.2賦值類型轉(zhuǎn)換(1)將實型數(shù)據(jù)賦給整型變數(shù)時,捨棄實數(shù)的小數(shù)部分。如:inti;i=1.23;/*結(jié)果i的值為1*/(2)將整型數(shù)據(jù)賦給單、雙精度型變數(shù)時,數(shù)值大小不變,但以浮點形式存儲到變量中。(3)將字元型數(shù)據(jù)賦給整型變數(shù)時,由於字元數(shù)據(jù)只占一個位元組,而整型變數(shù)為兩個位元組,將字元的數(shù)據(jù)放整型變數(shù)的低8位,而對整型變數(shù)的高8位進(jìn)行擴(kuò)充。(4)將基本整型數(shù)據(jù)賦給長整型變數(shù)時,基本整型數(shù)據(jù)放長整型變數(shù)低16位,高16位用符號位擴(kuò)充。反之將長整型數(shù)據(jù)賦給整型變數(shù)時,只需將長整型數(shù)據(jù)的低16位原封不動送整型變量中。例如:①inti=-1;longintj;j=i;i的二進(jìn)位形式:1000000000000001j的二進(jìn)位形式:11111111111111111000000000000001②longinti=-1;intj;j=i;i的二進(jìn)位形式:10000000000000000000000000000001j的二進(jìn)位形式:0000000000000001(5)將無符號整型數(shù)據(jù)賦給長整型變數(shù)時,不存在符號擴(kuò)展的問題,只需將高位補(bǔ)0即可。將無符號整型數(shù)據(jù)賦給一個占位元組數(shù)相同的整型變數(shù)時,將無符號整型數(shù)據(jù)原樣送整型變數(shù)中,並將最高位當(dāng)作符號位,如果數(shù)據(jù)超出相應(yīng)的整型範(fàn)圍,將產(chǎn)生數(shù)據(jù)錯誤。如果將整型數(shù)據(jù)賦給占位元組數(shù)相同的無符號整型變數(shù),也是原樣照賦,最高位作數(shù)值處理。例如:①unsignedinti=65535;intj;j=i;/*j的值為-1*/②inti=-1;unsignedintj;j=i;/*i的值為65535*/

3.3.3複合賦值運算在基本賦值運算符“=”之前加上任一雙目算術(shù)運算符及位運算符可構(gòu)成複合賦值運算符,又稱帶運算的賦值運算符。算術(shù)複合賦值運算符:+=、-=、*=、/=、%=位複合賦值運算符:&=、|=、^=、>>=、<<=一般形式:變數(shù)☆=運算式等價於:變數(shù)=變數(shù)☆運算式☆代表任一雙目算術(shù)運算符或位運算符。複合賦值運算先進(jìn)行所帶運算,再進(jìn)行賦值運算。複合賦值運算的優(yōu)先順序同賦值運算。(1)inta=3;a+=2等價於a=a+2(2)floatx=1.2,y=2.1;y*=x+3.4等價於y=y*(x+3.4)(3)inta=1,b=2;b/=a+=1,等價於b=b/(a=a+1)例3–3賦值運算。/*程式3-3,賦值運算*/#include″stdio.h″main(){inti,j;floatx,y;i=j=1;x=y=1.1;printf(″i=%d,j=%d\n″,i,j);x=i+j;y+=1;printf(″x=%4.2f,y=%4.2f\n″,x,y);i=i+++j;x=2*x+y;printf(″i=%d,x=%4.2f\n″,i,x);}運行結(jié)果:i=1,j=1x=2.00,y=2.10i=2,x=6.103.4邏輯運算式3.4.1關(guān)係運算式關(guān)係運算式是邏輯運算式中的一種特殊情況,關(guān)係運算式由關(guān)係運算符和運算元組成,關(guān)係運算用於完成數(shù)的比較運算。關(guān)係運算有<、<=、==、!=、>、>=,<、<=、>、>=的優(yōu)先順序相同,==、!=的優(yōu)先順序相同,前者的優(yōu)先順序高於後者。關(guān)係運算符的優(yōu)先順序低於算術(shù)運算,高於邏輯運算&&、||,也高於賦值運算。邏輯運算式由邏輯運算符和關(guān)係運算式或邏輯量組成,邏輯運算式用於程式設(shè)計中的條件描述。

C語言有!、&&、||等三種邏輯運算。!運算的優(yōu)先順序高於算術(shù)運算,&&運算高于||運算,&&、||運算低于關(guān)系運算,高于賦值運算。3.4.2邏輯運算式&&和||是一種短路運算。所謂短路運算,是指在計算的過程中,只要運算式的值能確定,便不再計算下去。如邏輯與運算時計算到某個運算元為假,可確定運算式的值為假,剩餘的運算元不再考慮;邏輯或運算時計算到某個運算元為真,可確定運算式的值為真,剩餘的運算元也不再需要考慮。例如:(1)e1&&e2,若e1為0,可確定運算式的值為0,不再計算e2。(2)e1||e2,若e1為真,則可確定運算式的值為真,也不再計算e2。例3—4用邏輯運算式描述下列條件:(1)x是3的倍數(shù)。x%3==0(2)x是偶數(shù)。x%2==0(3)x是3的倍數(shù)且x是偶數(shù)。(x%3==0)&&(x%2==0)(4)100<x<200。(x>100)&&(x<200)(5)x等於2或8。(x==2)||(x==8)(6)某年是否為閏年。(year%400==0)||((year%4==0)&&(year%100!=0))3.5位運算運算式3.5.1位邏輯運算1.按位取反運算

運算符:~按位取反運算用來對一個二進(jìn)位數(shù)按位取反,即0位變1,1位變0。例如:~25,25的二進(jìn)位表示為:0000000000011001按位取反得結(jié)果:1111111111100110,即-26。~運算常用於產(chǎn)生一些特殊的數(shù)。如高8位全1低8位全0的數(shù)0xFF00,按位取反後變?yōu)?x00FF?!?,在16位與32位的系統(tǒng)中,都代表只有最低位為0的整數(shù)?!\算是位運算中唯一的單目運算,也是唯一具有右結(jié)合性的位運算。2.按位與運算

運算符:&按位與運算的規(guī)則是運算元的對應(yīng)位都為1,則該位的運算結(jié)果為1,否則為0。例如:0x29&0x37,0x29與0x37的二進(jìn)位表示為:0000000000101001與0000000000110111按位與結(jié)果為:00000000000100001,即0x21。

按位與運算主要用途是清零及取數(shù)的某些位或保留數(shù)的某些位。例如:(1)a&0,將a清0。(2)a&0xFF00,取數(shù)a的高8位,低8位清0。(3)a&0x00FF,取數(shù)a的低8位,高8位清0。3.按位或運算運算符:|按位或運算的規(guī)則是運算元的對應(yīng)位都為0,則該位的運算結(jié)果為0,否則為1。例如:0x29|0x37,0x29與0x37的二進(jìn)位表示為:0000000000101001與0000000000110111按位或結(jié)果為:0000000000111111,即等於0x3f。

利用|運算可將數(shù)的部分位或所有位置1。例如:a|0x000F,a的低4位全置1,其他位保留。a|0xFFFF,a的每一位全置1。4.按位異或運算運算符:^按位異或運算的規(guī)則是運算元的對應(yīng)位相同,則該位的運算結(jié)果為0,否則為1。例如:0x29^0x37,0x29與0x37的二進(jìn)位表示為:0000000000101001與0000000000110111按位異或結(jié)果為:0000000000011110,即等於0x1e。

利用^運算將數(shù)的特定位翻轉(zhuǎn),保留原值,不用臨時變數(shù)交換兩個變數(shù)的值。例如:(1)a^0x00FF,將數(shù)a的低8位翻轉(zhuǎn),高8位不變。(2)a^0,保留數(shù)a的原值。(3)a=a^b,b=b^a,a=a^b,不用臨時變數(shù)交換a#,b的值。位邏輯運算自身的優(yōu)先順序由高到低依次是~、&、|、^,在整個運算體系中~運算的優(yōu)先順序位於第二級,&、|、^運算低於關(guān)係運算,高於邏輯運算。位邏輯運算意義與邏輯運算一樣,但位邏輯運算對二進(jìn)位位而言,且必須對數(shù)的所有二進(jìn)位位進(jìn)行,而且運算元只能為整數(shù)。如果參與運算的數(shù)據(jù)長度不同,將對短的數(shù)據(jù)先進(jìn)行高位符號擴(kuò)展後再進(jìn)行位運算。3.5.2移位運算1.左移位運算運算符:<<移位運算的左運算元是要進(jìn)行移位的整數(shù),右運算元是要移的位數(shù)。左移位運算規(guī)則是高位左移後溢出,捨棄,空出的右邊低位補(bǔ)0。例如,15<<2,15的二進(jìn)位表示為:0000000000001111左移2位結(jié)果為:0000000000111100,等於60。左移1位相當(dāng)於該數(shù)乘以2,左移2位相當(dāng)於該數(shù)乘以4(22)。使用左移位運算可以實現(xiàn)快速乘2運算。2.右移位運算

運算符:>>右移位運算規(guī)則是低位右移後被捨棄,空出的左邊高位對無符號數(shù)移入0。如果是有符號數(shù),對正數(shù)空出的左邊高位移入0;如果是負(fù)數(shù),則左邊移入0還是1,要取決於所用編譯系統(tǒng),有的移入0(邏輯右移),有的移入1(算術(shù)右移)。例如,15>>2,右移2位,等於0000000000000011,即3。右移1位相當(dāng)於該數(shù)除以2,右移2位相當(dāng)於該數(shù)除以4(22)。使用右移位運算可以快速實現(xiàn)除2運算。移位運算低於算術(shù)運算,高於關(guān)係運算。位運算與賦值運算可組合成複合賦值運算&=、|=、^=、<<=、>>=。例3—5取一個整數(shù)a的從右端開始的4~7位。/*程式3—5,取一個整數(shù)a的從右端開始的4~7位*/#include″stdio.h″main(){unsigneda,b,c,d;scanf(″%o″,&a);/*八進(jìn)制形式輸入*/b=a>>4;/*a右移4位*/c=~(~0<<4);/*得到一低4位全為1,其餘位為0的數(shù)*/d=b&c;/*取b的0~3位,即得到a的4~7位*/printf(″a=%o,a(4~7)=%o″,a,d);}輸入數(shù)據(jù):331運行結(jié)果:a=331,a(4~7)=153.6其他運算式3.6.1條件運算式條件運算式由條件運算符和運算元組成,用以將條件語句以運算式的形式出現(xiàn),完成選擇判斷處理。條件運算符由“?”和“:”組成。條件運算是三目運算,有三個運算元,一般形式如下:運算式1?運算式2:運算式3運算式1必須為邏輯運算式,如運算式1為真,計算運算式2,並以此作為整個運算式的值。如表達(dá)式1為假,計算表達(dá)式3,并以此作為整個表達(dá)式的值。(1)a>b?a:ba大於b,運算式的值為a;a小於b,運算式的值為b。實際上求a、b的最大值。(2)a>0?a:-aa大於0,運算式的值為a;a小於等於0,運算式的值為-a。實際上求a的絕對值。條件運算的優(yōu)先順序為倒數(shù)第3級,高於賦值運算,低於邏輯運算,結(jié)合從右至左。如a>b?a:c>d?c:d,相當(dāng)於a>b?a:(c>d?c:d)例3—6判斷整數(shù)的正負(fù)。/*程式3—6,判斷整數(shù)的正負(fù)*/#include″stdio.h″main(){intx;scanf(″%d″,″&x″);x>0?printf(″%s″,″正數(shù)″):printf(″%c″,″負(fù)數(shù)″);}3.6.2逗號運算式逗號運算式由逗號運算符和運算元組成,用以將多個運算式連接成一個運算式。逗號運算符:,逗號運算是雙目運算,一般形式如下:運算式1,運算式2先計算運算式1,再計算運算式2,並以此作為整個運算式的值。如a=2,a*6,先計算a=2,再計算a*6,並以此作為整個運算式的值,運算式的值為12。逗號運算的優(yōu)先順序最低,結(jié)合自左向右。逗號運算式的更一般使用形式為:運算式1,運算式2,運算式3,……,運算式n

先計算運算式1,再計算運算式2,再計算運算式3,…,再計算運算式n的值,並以此作為整個運算式的值。如運算式x=a=3,6*x,6*a,a+x的值為6。逗號運算又稱順序求值運算。3.6.3其他運算

1.取地址運算

運算符:&取地址運算是單目運算,運算元只能是變數(shù),得到變數(shù)的地址。C語言程式設(shè)計中許多場合要使用到地址數(shù)據(jù)。如輸入函數(shù)scanf(),輸入?yún)?shù)就要求是地址表,將讀入的數(shù)據(jù)送變數(shù)對應(yīng)的存儲單元中。取地址運算的優(yōu)先順序次高。

C語言還提供一個指針運算“*”,用於取存儲單元的內(nèi)容.2.求位元組數(shù)運算運算符:sizeof

求位元組數(shù)運算是單目運算,運算元可以是類型名,也可以是變數(shù)、運算式,用以求得相應(yīng)類型或數(shù)據(jù)所占的位元組數(shù)。此運算的優(yōu)先順序與取地址運算優(yōu)先順序相同。4.1C語句概述

C語言是函數(shù)式語言,每一個函數(shù)是由數(shù)據(jù)說明部分和執(zhí)行語句部分組成。C語言中的所有語句均是執(zhí)行語句,沒有非執(zhí)行語句。根據(jù)C語言的句法,語句可分為單個語句,複合語句和空語句。根據(jù)結(jié)構(gòu)化程式設(shè)計的三個模組大致可分為:用於順序結(jié)構(gòu)中的運算式語句、賦值語句、函數(shù)調(diào)用語句等;用於分支結(jié)構(gòu)中的if語句、switch語句、轉(zhuǎn)移語句、標(biāo)號語句等;用於迴圈結(jié)構(gòu)中的while語句、for語句、do-while語句。另外在後兩種結(jié)構(gòu)中還可出現(xiàn)break語句、continue語句、複合語句和空語句等作為其中的一部分。(1)邏輯上每個語句最後都必須有一個分號(;),一個語句可分寫成幾行,幾個語句也可合寫成一行(但不提倡,因其不利於單步調(diào)試)。(2)空語句直接由分號(;)組成,常用於控制語句中必須出現(xiàn)語句之處,它不做任何操作,只在邏輯上起到有一個語句的作用。(3)複合語句由花括弧{}括起的若干個語句,語法上可以看成是一個語句。複合語句中最後一個語句的分號不能省略。如下面是一個複合語句:{z=x+y;y=x/z;x=z-y;}(4)運算式語句是在各種運算式後加一個分號(;)形成一個語句。如賦值語句由賦值運算式加一個分號構(gòu)成:

x=x+y;再如運算式x++後加一個分號構(gòu)成運算式語句:

x++;

運算式和運算式語句的區(qū)別是運算式後無分號,可以出現(xiàn)在其他語句中允許出現(xiàn)運算式的地方;而運算式語句後有分號,自己獨立成一個語句,不能再出現(xiàn)在其他語句的運算式中。如:

if((a=b)<0)min=a;(5)控制語句有條件判斷語句(if、switch),迴圈語句(for、while、do-while),轉(zhuǎn)移語句(goto、continue、break、return)。4.2基本輸入輸出函數(shù)

4.2.1字元輸出函數(shù)—putchar()一般調(diào)用格式:putchar(參數(shù))其中,參數(shù)可以是任意類型運算式,一般為算術(shù)運算式。功能:向顯示器輸出一個字元。返回值:如果輸出成功,返回值就是輸出的字元,否則返回EOF(-1)。如:putchar(’a’)/*輸出字元a*/putchar(65)/*輸出ASCII碼為65的字元A*/putchar(’a’+2)/*輸出字元c*/putchar(’\n’)/*輸出一個換行符*/說明:1.putchar()函數(shù)一次只能輸出一個字元,即該函數(shù)有且只有一個參數(shù)。2.putchar()函數(shù)可以輸出轉(zhuǎn)義字元。3.在使用函數(shù)putchar()前,一定要使用檔包含:

#include"stdio.h"或#include<stdio.h>

【例4.1】#include"stdio.h"main(){chara,b,c;

a=’o’;b=’u’;c=’t’;putchar(a);putchar(b);putchar(c);putchar(’\n’);putchar(65);putchar(’\t’);putchar(’B’);putchar(a-10);}〖運行結(jié)果〗:outA□□□□□□□Be(□代表空格)4.2.2字元輸入函數(shù)—getchar()

一般調(diào)用格式:getchar()功能:從鍵盤讀入一個字元。返回值:如果讀入成功,返回值就是讀入的字元,否則返回EOF(-1)。說明:1.getchar()函數(shù)一次只能接收一個字元,即使從鍵盤輸入多個字元,也只接收第一個??崭窈娃D(zhuǎn)義字元都作為有效字元接收。2.接收的字元可以賦給字元型變數(shù)或整型變數(shù),也可以不賦給任何變數(shù),作為運算式的一部分。3.getchar()函數(shù)是無參函數(shù)。4.從鍵盤上輸入的字元不能帶單引號,輸入以回車結(jié)束。5.在使用函數(shù)getchar()前,一定要使用檔包含: #include"stdio.h"

或#include<stdio.h>【例4.2】#include"stdio.h"main(){charch1,ch2,ch3;ch1=getchar();ch2=getchar()ch3=getchar();putchar(ch1);putchar(ch2);putchar(ch3);}在運行時,若從鍵盤上輸入:C↙G↙則第一個getchar()接收的是C,第二個getchar()接收的是回車,第三個getchar()接收的是G。輸出結(jié)果為:C(輸出ch1的值)G(輸出ch3的值)4.2.3格式輸出函數(shù)—printf()一般調(diào)用格式:printf("格式控制字串",輸出表列)功能:按指定格式向顯示器輸出數(shù)據(jù)。返回值:輸出成功,返回輸出位元組數(shù);否則返回EOF(-1)。輸出表列:是要輸出的數(shù)據(jù),可以沒有,有兩個或兩個以上時,用逗號(,)分隔。輸出表列中的輸出項可以是常量,可以是變數(shù),也可以是運算式。格式控制字串:由普通字元和格式說明兩部分組成。普通字元,即需要原樣輸出的字符,包括轉(zhuǎn)義字元;格式說明是以%開始,以一個格式字元結(jié)束,中間可以插入附加格式說明符,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出,其一般形式為: %[附加格式說明符]格式字元

printf()函數(shù)的格式字元和常用的附加格式說明符分別見表4-1和表4-2。表4-1printf()函數(shù)格式字元

按%f格式輸出實型數(shù)據(jù)時,整數(shù)部分全部輸出,小數(shù)部分保留六位。

在TurboC中,按%e格式輸出實型數(shù)據(jù)時,輸出占十一位,其中整數(shù)部分占一位,小數(shù)部分占五位,指數(shù)部分占四位,小數(shù)點占一位。如:printf("%f",123.4);的輸出結(jié)果為:123.400000

printf("%e",123.4);的輸出結(jié)果為:1.23400e+02

表4-2printf()函數(shù)常用的附加格式說明符【例4.3】main(){charch=’A’;inta=1234;floatb=123.4562222;printf("ch=%c\n",ch);/*輸出:ch=A*/printf("ch=%3c\n",ch);/*輸出:ch=□□A*/printf("a=%6d\n",a);/*輸出:a=□□1234*/printf("a=%2d\n",a);/*輸出:a=1234*/printf("a=%#o\n",a);/*輸出:a=02322*/printf("a=%#x\n",a);/*輸出:a=0x4d2*/printf("b=%f\n",b);/*輸出:b=123.456223*/printf("b=%8.2lf\n",b);/*輸出:b=□□123.46*/printf("b=%-8.2f\n",b);/*輸出:b=123.46□□*/

printf("b=%.2f\n",b);/*輸出:b=123.46*/printf("b=%e\n",b);/*輸出:b=1.23456e+02*/printf("b=%8.2e\n",b);/*輸出:b=□1.2e+02*/printf("b=%-8.2le\n",b);/*輸出:b=1.2e+02*/printf("b=%.2e\n",b);/*輸出:b=1.2e+02*/printf("str=%s\n","china");/*輸出:china*/printf("str=%8.3s\n","china");/*輸出:□□□□□chi*/printf("str=%-6

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論