C程序設(shè)計(第四版)總結(jié)——基于課本、條理清晰_第1頁
C程序設(shè)計(第四版)總結(jié)——基于課本、條理清晰_第2頁
C程序設(shè)計(第四版)總結(jié)——基于課本、條理清晰_第3頁
C程序設(shè)計(第四版)總結(jié)——基于課本、條理清晰_第4頁
C程序設(shè)計(第四版)總結(jié)——基于課本、條理清晰_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、煜兒出品,必屬精品你只管精彩,生命自有安排。C程序設(shè)計課本總結(jié)一、 概述(一) 程序:所謂程序,就是一組計算機(jī)能識別和執(zhí)行的指令。(二) 計算機(jī)語言1. 機(jī)器語言· 機(jī)器指令:計算機(jī)能直接識別和接受的二進(jìn)制代碼稱為機(jī)器指令。· 機(jī)器語言:機(jī)器指令的集合就是該計算機(jī)的機(jī)器語言。2. 符號語言(符號匯編語言、匯編語言)· 符號語言:用一些英文字母和數(shù)字表示一個指令。· 一般一條符號語言的指令對應(yīng)轉(zhuǎn)換為一條機(jī)器指令。· 不同型號的計算機(jī)的機(jī)器語言和匯編語言是互不通用的。· 機(jī)器語言和符號語言稱為計算機(jī)低級語言。3. 高級語言· 高

2、級語言:以人類日常語言為基礎(chǔ)的一種編程語言。· 高級語言的語言功能很強(qiáng)。· 高級語言的一個語句往往對應(yīng)多條機(jī)器指令。· 高級語言寫出的程序?qū)θ魏涡吞柕挠嬎銠C(jī)都適用。· 通用語言:fortran;basic;c數(shù)據(jù)庫語言:foxbase;FoxPro網(wǎng)頁制作語言:HTML;Java(三) C語言特點(diǎn)1. 語言簡潔、緊湊,使用方便、靈活。C語言一共只有37個關(guān)鍵字、9種控制語句。· C語言中的37個關(guān)鍵字auto、break、case、char、const、continue、default、do、double、else、enum、extern、fl

3、oat、for、goto、if、inline、int、long、register、restrict、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while、_bool、_Complex、_Imaginary關(guān)鍵字分類關(guān)鍵字功能數(shù)據(jù)類型關(guān)鍵字(12)char聲明字符型變量或函數(shù)double聲明雙精度變量或函數(shù)enum聲明枚舉類型float聲明浮點(diǎn)型變量或函數(shù)int聲明整型變量或函數(shù)long聲明長整型變量或函數(shù)short聲明短整型變量或函數(shù)signed聲明有符號類型變量或函

4、數(shù)struct聲明結(jié)構(gòu)體變量或函數(shù)union聲明共用體(聯(lián)合)數(shù)據(jù)類型unsigned聲明無符號類型變量或函數(shù)void聲明函數(shù)無返回值或無參數(shù),聲明無類型指針控制語句關(guān)鍵字(12)循環(huán)語句fordo循環(huán)語句的循環(huán)體while循環(huán)語句的循環(huán)條件break跳出當(dāng)前循環(huán)continue結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)條件語句if條件語句else條件語句否定分支goto無條件跳轉(zhuǎn)語句開關(guān)語句switch用于開關(guān)語句case開關(guān)語句分支default開關(guān)語句中“其他”分支返回語句return子程序返回語句儲蓄類型關(guān)鍵字(4)auto聲明自動變量extern聲明變量是在其他文件正聲明register聲明寄存器

5、變量static聲明靜態(tài)變量其他關(guān)鍵字(4)const聲明只讀變量sizeof計算數(shù)據(jù)類型長度typedef用已給數(shù)據(jù)類型取別名volatile說明變量在程序執(zhí)行中可被隱含地改變C99新增(5)inline用來定義一個類的內(nèi)聯(lián)函數(shù)restrict用于限定指針_Bool表示布爾值_Complex and _Imaginary定義的復(fù)數(shù)類型· 9種控制語句goto語句(轉(zhuǎn)向語句)、if語句(條件語句)、while語句(循環(huán)語句)、do-while語句(循環(huán)語句)、for語句(循環(huán)語句)、break語句(中止執(zhí)行switch語句或循環(huán)語句)、continue語句(結(jié)束本次循環(huán)語句)、swi

6、tch語句(多分支選擇語句)、return語句(從函數(shù)返回語句)2. 運(yùn)算符豐富。C語言共有34種運(yùn)算符3. 數(shù)據(jù)類型豐富。4. 具有結(jié)構(gòu)化的控制語句。5. 語法限制不太嚴(yán)格,程序設(shè)計自由度大。6. C語言允許直接訪問物理地址,能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對硬件進(jìn)行操作。7. 用C語言編寫的程序可移植性好。8. 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。(四) C語言程序的結(jié)構(gòu)1. 一個程序由一個或多個源程序文件組成。· 在一個源程序文件中可以包括3個部分:a) 預(yù)處理指令。如#include<stdio.h>指令是將stdio.h頭文件的內(nèi)容讀

7、進(jìn)來,放在#include指令行。(stdio是standard input & output的縮寫,h是header的縮寫)b) 全局聲明。即在函數(shù)之外進(jìn)行的數(shù)據(jù)聲明。·在函數(shù)外面聲明的變量稱為全局變量。在函數(shù)中聲明的變量是局部變量,只在函數(shù)范圍內(nèi)有效。c) 函數(shù)定義。2. 函數(shù)是C程序的主要組成部分。1) 一個C程序有且只有一個main函數(shù)。程序總是從main函數(shù)開始執(zhí)行的。不論main函數(shù)在整個程序中的位置。2) 一個函數(shù)包括兩個部分。a) 函數(shù)首部。即函數(shù)的第1行,包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)名、參數(shù)類型。·注:一個函數(shù)名后面必須跟一對圓括號(

8、),括號內(nèi)寫函數(shù)的參數(shù)名及其類型。如果函數(shù)沒有參數(shù),可以在括號中寫void或者是空括號。b) 函數(shù)體。即函數(shù)首部下面的花括號內(nèi)的部分。·函數(shù)體一般包括聲明部分(定義在本函數(shù)中所用到的變量+對本函數(shù)所調(diào)用函數(shù)進(jìn)行聲明)和執(zhí)行部分。3) 程序中對計算機(jī)的操作是由函數(shù)中的C語句完成的。4) 在每個數(shù)據(jù)聲明和語句的最后必須有一個分號“;”(且必須是英文輸入狀態(tài)下的分號)5) C語言本身不提供輸入輸出語句。輸入和輸出操作是由C標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)實(shí)現(xiàn)的。a) 標(biāo)準(zhǔn)輸入輸出函數(shù):putchar(輸出字符)、getchar(輸入字符)、printf(格式輸出)、scanf(格式輸入)、puts(輸出

9、字符串)、gets(輸入字符串)。b) printf函數(shù)i. 一般形式printf(格式控制,輸出表列)ii. 格式控制(轉(zhuǎn)換控制字符串、格式字符串):用雙撇號括起來的一個字符串。iii. 格式控制=格式聲明(% 附加字符 格式字符)+普通字符(原樣輸出地字符)printf函數(shù)中用到的格式字符格式字符說明d,i以帶符號的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號)o以八進(jìn)制無符號形式輸出整數(shù)x,X以十六進(jìn)制無符號形式輸出整數(shù)u以無符號十進(jìn)制形式輸出整數(shù)c以字符形式輸出,只輸出一個字符s輸出字符串f以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)e,E以指數(shù)形式輸出實(shí)數(shù)g,G選用%f或%e格式中輸出寬度較短

10、的一種格式,不輸出無意義的0printf函數(shù)中用到的格式附加字符字符說明l用于長整型整數(shù),可加在格式符d、o、x、u前面m(正整數(shù))數(shù)據(jù)最小寬度n(正整數(shù))對實(shí)數(shù),表示輸出n位小數(shù);對字符串,表示截取的字符個數(shù)-輸出的數(shù)字或字符在域內(nèi)向左靠iv. 如果想輸出字符“%”,則在“格式控制字符串”中用連續(xù)兩個“%”表示。c) scanf函數(shù)i. 一般形式scanf(格式控制,地址表列)ii. 地址表列是變量地址,不是變量名。記得加“&”取地址。iii. 輸入數(shù)據(jù)時應(yīng)在對應(yīng)位置上輸入除了格式聲明以外的其他字符。(一一對應(yīng),必須對應(yīng))iv. 輸入數(shù)值時,在兩個數(shù)值之間需要插入空格(或其他分隔符)

11、;連續(xù)輸入字符是,在兩個字符之間不要插入空格或其他分隔符。v. 輸入數(shù)值數(shù)據(jù)時,輸入空格、回車、Tab鍵或遇到非法字符(不屬于數(shù)值的字符),認(rèn)為該數(shù)據(jù)結(jié)束。d) putchar函數(shù)(輸出一個字符)i. 一般形式putchar(c)ii. putchar輸出一個字符。c可以是字符常量、整型常量、字符變量、整型變量(其值在字符的ASCII代碼范圍內(nèi))。iii. putchar也可以輸出轉(zhuǎn)義字符。e) gerchar( )函數(shù)(輸入一個字符)i. 一般形式getchar( )ii. gerchar函數(shù)沒有參數(shù),從計算機(jī)終端輸入一個字符。iii. 只能接收一個字符,想輸入多個字符要用多個getchar

12、函數(shù)。f) puts函數(shù)(輸出一個字符串)i. 一般形式puts(字符數(shù)組)ii. 用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。g) gets函數(shù)(輸入一個字符串)i. 一般形式gets(字符數(shù)組)ii. 向字符數(shù)組輸入一個字符串。送給數(shù)組的0占一個字符。3. 程序應(yīng)當(dāng)包含注釋。· C語言允許用兩種注釋方式:1) 以/開始的單行注釋。這種注釋的范圍從/開始,以換行符結(jié)束。這種注釋不能跨行。注釋內(nèi)容一行寫不下,可以用多個單行注釋。2) 以 /*開始,以*/結(jié)束的塊式注釋。編譯系統(tǒng)在發(fā)現(xiàn)一個/*后,開始找注釋結(jié)束符*/,把二者間的內(nèi)容作為注釋。· 注釋只給人看,計算機(jī)不執(zhí)行。

13、(在程序進(jìn)行預(yù)編譯處理時將每個注釋替換為一個空格,在編譯時注釋部分不產(chǎn)生目標(biāo)代碼。)(五) 運(yùn)行C程序源程序目標(biāo)程序可執(zhí)行程序內(nèi)容程序設(shè)計語言機(jī)器語言機(jī)器語言可執(zhí)行否否是文件名后綴.c.obj.exe二、 算法算法+數(shù)據(jù)結(jié)構(gòu)=程序求解問題的步驟分析問題算法分析程序設(shè)計程序調(diào)試運(yùn)行與維護(hù)分類計算計算法分為數(shù)值運(yùn)算算法和非數(shù)值運(yùn)算算法。特點(diǎn)1. 有窮性。一個算法應(yīng)包含有限的操作步驟,不能是無限的。2. 確定性。算法中的每一個步驟應(yīng)當(dāng)是確定的,不能含糊不清。3. 有零個或多個輸入。4. 有一個或多個輸出。沒有輸出的算法是沒有意義的。5. 有效性。(比如不能讓0做除數(shù))表示方法1. 自然語言2. 流程

14、圖1) 流程圖符號起止框輸入輸出框處理框判斷框連接點(diǎn)流程線注釋框2) 三種基本結(jié)構(gòu)· 順序結(jié)構(gòu)· 選擇結(jié)構(gòu)· 循環(huán)結(jié)構(gòu)當(dāng)型(while型)循環(huán)結(jié)構(gòu) 直到型(until型)循環(huán)結(jié)構(gòu)3) N-S流程圖4) 偽代碼·偽代碼是用介于自然語言和計算機(jī)語言之間的文字和符號來描述算法。(只要把意思表達(dá)清楚就行)5) 計算機(jī)語言三、 數(shù)據(jù)類型(一) 常量1. 直接常量1) 整型常量2) 實(shí)型常量(a) 十進(jìn)制小數(shù)形式(b) 指數(shù)形式 (e或E之前必須有數(shù)字,之后必須為整數(shù))3) 字符常量(a) 普通字符。用單撇號括起來的一個字符。如a(b) 轉(zhuǎn)義字符轉(zhuǎn)義字符及

15、其作用轉(zhuǎn)義字符字符值輸出結(jié)果'一個單撇號(')具有此八進(jìn)制碼的字符"一個雙撇號(")輸出此字符?一個問號(?)輸出此字符一個反斜線()輸出此字符a警告(alert)產(chǎn)生聲音或視覺信號b退格(backspace)將當(dāng)前位置后退一個字符f換頁(form feed)將當(dāng)前位置移到下一頁的開頭n換行將當(dāng)前位置移到下一行的開頭r回車(carriage return)將當(dāng)前位置移到本行的開頭t水平制表符將當(dāng)前位置移到下一個tab位置v垂直制表符將當(dāng)前位置移到下一個垂直制表對齊點(diǎn)o,oo,oo其中o代表一個八進(jìn)制數(shù)字與該八進(jìn)制碼對應(yīng)的ASCII字符與該八進(jìn)制碼對應(yīng)的字符x

16、hh其中h代表一個十六進(jìn)制數(shù)字與該十六進(jìn)制碼對應(yīng)的ASCII字符與該十六進(jìn)制碼對應(yīng)的字符4) 字符串常量。用雙撇號把若干個字符括起來,字符串常量是雙撇號中的全部字符(不包括雙撇號本身)。如:”boy”2. 符號常量。用#define指令,指定用一個符號名稱代表一個常量。如:#definePI3.1416/注意行末沒有分號好處: “見名知意”“一改全改”· 符號常量在程序中不能重新賦值。· 注:區(qū)分符號常量和變量。符號常量不占內(nèi)存,只是一個臨時符號,在預(yù)編譯后這個符號就不存在了,不能對符號常量賦新值。(二) 變量1. 定義:在程序運(yùn)行過程中,其值可以改變的量稱為變量。變量代表

17、一個有名字、具有特定屬性的一個儲存單元。2. 2個要素變量名:以一個名字代表的一個儲存地址。變量值:變量值儲存在內(nèi)存中。3. 變量必須先定義、后使用。(三) 常變量如:const int a=3表示a被定義為一個整型變量,指定其值為3,而且在變量存在期間其值不能改變。1. 常變量具有變量的基本屬性:有類型,占儲存單元,便于在程序中被引用。2. 常變量與常量的區(qū)別常變量是有名字的不變量,常量是沒有名字的不變量。(四) 標(biāo)識符1. 定義:在計算機(jī)高級語言中,用來對變量、符號常量名、函數(shù)、數(shù)組、類型等命名的有效字符序列統(tǒng)稱為標(biāo)識符。2. 規(guī)定:標(biāo)識符只能由字母、數(shù)字和下劃線3中字符組成。(五) 數(shù)據(jù)

18、類型1. 定義:類型是對數(shù)據(jù)分配儲存單元的安排,包括儲存單元的長度和數(shù)據(jù)的儲存形式。2.3. 整型數(shù)據(jù)1) 基本整型、短整型、長整型、雙長整型,變量值在儲存單元中以補(bǔ)碼形式儲存,儲存單元中的第1個二進(jìn)位制代表符號。整型數(shù)據(jù)常見的儲存空間和值的范圍類型字節(jié)數(shù)取值范圍int(基本整型)2-32768327674-231(231-1)unsigned int(無符號基本整型)20(216-1)40(232-1)short(短整型)2-215(215-1)unsigned short(無符號短整型)20(216-1)long(長整型)4-231(231-1)unsigned long(無符號長整型)4

19、0(232-1)long long(雙長整型)8-263(263-1)unsigned long long(無符號雙長整型)60(264-1)4. 字符型數(shù)據(jù)1) 字符是按其代碼(整數(shù))形式儲存的。指定用1個字節(jié)(8位)儲存一個字符。2) 大寫英文字母A065小寫英文字母a097數(shù)字00483) 一個字符型數(shù)據(jù),既可以字符形式輸出,也可以整數(shù)形式輸出。字符型數(shù)據(jù)常見的儲存空間和值的范圍類型字節(jié)數(shù)取值范圍signed char(有符號字符型)1-128127unsigned char(無符號字符型)102555. 浮點(diǎn)型數(shù)據(jù)1) 浮點(diǎn)型數(shù)據(jù)用來表示具有小數(shù)點(diǎn)的實(shí)數(shù)。浮點(diǎn)數(shù):實(shí)數(shù)的指數(shù)形式。規(guī)范化

20、的指數(shù)形式:小數(shù)部分中小數(shù)點(diǎn)前的數(shù)字為0、小數(shù)點(diǎn)后第1位數(shù)字不為0的指數(shù)表示形式。浮點(diǎn)型數(shù)據(jù)常見的儲存空間和值的范圍類型字節(jié)數(shù)有效數(shù)字?jǐn)?shù)值范圍float(單精度浮點(diǎn)型)46-3.4*1038-1.2*10(-38)、0、1.2*10(-38)3.4*1038double(雙精度浮點(diǎn)型)815-1.7*10308-2.7*10(-308)、0、2.7*10(-308)1.7*10308long double(長雙精度)815-1.7*10308-2.7*10(-308)、0、2.7*10(-308)1.7*103081619-1.1*104932-3.4*10(-4932)、0、3.4*10(-

21、4932)1.1*104932四、 運(yùn)算符運(yùn)算符和結(jié)合性優(yōu)先級運(yùn)算符含義要求運(yùn)算對象的個數(shù)結(jié)合方向1()圓括號自左至右下標(biāo)運(yùn)算符->指向結(jié)構(gòu)體成員運(yùn)算符.結(jié)構(gòu)體成員運(yùn)算符2!邏輯非運(yùn)算符1(單目運(yùn)算符)自右至左按位取反運(yùn)算符+自增運(yùn)算符-自減運(yùn)算符-負(fù)號運(yùn)算符(類型)類型轉(zhuǎn)換運(yùn)算符*指針運(yùn)算符&取地址運(yùn)算符sizeof長度運(yùn)算符3*乘法運(yùn)算符2(雙目運(yùn)算符)自左至右/除法運(yùn)算符%求余運(yùn)算符4+加法運(yùn)算符2(雙目運(yùn)算符)自左至右-減法運(yùn)算符5<<左移運(yùn)算符2(雙目運(yùn)算符)自左至右>>右移運(yùn)算符6<小于運(yùn)算符2(雙目運(yùn)算符)自左至右<=小于等于運(yùn)算

22、符>大于運(yùn)算符>=大于等于運(yùn)算符7=等于運(yùn)算符2(雙目運(yùn)算符)自左至右!=不等于運(yùn)算符8&按位與運(yùn)算符2(雙目運(yùn)算符)自左至右9按位異或運(yùn)算符2(雙目運(yùn)算符)自左至右10|按位或運(yùn)算符2(雙目運(yùn)算符)自左至右11&&邏輯與運(yùn)算符2(雙目運(yùn)算符)自左至右12|邏輯或運(yùn)算符2(雙目運(yùn)算符)自左至右13?:條件運(yùn)算符3(三目運(yùn)算符)自右至左14=賦值運(yùn)算符2(雙目運(yùn)算符)自右至左+=加后賦值運(yùn)算符-=減后賦值運(yùn)算符*=乘后賦值運(yùn)算符/=除后賦值運(yùn)算符%=取余后賦值運(yùn)算符>>=右移后賦值運(yùn)算符<<=左移后賦值運(yùn)算符&=按位與后賦值運(yùn)算

23、符=按位異或后賦值運(yùn)算符|=按位或后賦值運(yùn)算符15,逗號運(yùn)算符(順序求值運(yùn)算符)自左至右(一) ·兩個整數(shù)相除的結(jié)果為整數(shù),舍去小數(shù)部分。 兩個實(shí)數(shù)相除的結(jié)果是雙精度實(shí)數(shù)。·除數(shù)或被除數(shù)中有一個為負(fù)值,舍入的方向不固定。C編譯系統(tǒng)采取“向零取整”。· %運(yùn)算要求參加運(yùn)算的對象為整數(shù),結(jié)果也是整數(shù)。(二) 自增運(yùn)算符+i(在使用i之前,先使i的值加1)-i(在使用i之前,先使i的值減1)i+(在使用i之后,使i的值加1)i-(在使用i之后,使i的值減1)· 注:自增自減運(yùn)算符只能用于變量,不能用于常量或表達(dá)式。(三) 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符1. 一般形式(類型

24、名)(表達(dá)式)2. 表達(dá)式應(yīng)用括號括起來(int)(x+y)(將x+y的值轉(zhuǎn)換成int型)(int)x+y(將x的值轉(zhuǎn)換成int型,然后與y相加)3. 強(qiáng)制類型轉(zhuǎn)換得到的是臨時數(shù)據(jù),原來變量的類型未發(fā)生變化。(四) 邏輯運(yùn)算符邏輯運(yùn)算的真值表ab!a!ba&&ba|bTRUE TRUE FALSEFALSETRUE TRUE TRUE FALSEFALSETRUE FALSETRUE FALSETRUETRUE FALSEFALSETRUE FALSEFALSETRUE TRUE FALSEFALSE1. 優(yōu)先次序高低!(非)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&和|賦值運(yùn)算

25、符記憶:!(非) (+、-、- )(* / %)(+ -)(< <= > >=)(= !=) (&& |)(=)五、 表達(dá)式(一) 算術(shù)表達(dá)式(二) 賦值表達(dá)式1. 一般形式變量賦值運(yùn)算符表達(dá)式2. 不能給算術(shù)表達(dá)式或常量賦值。3. 表達(dá)式具有計算和賦值的雙重功能。4. 表達(dá)式也有值。如:賦值表達(dá)式a=3*5,表達(dá)式的值和變量a的值都是15。5. 可以在定義變量時對變量賦以初值。如:int a=3,b=3,c=3;但不能寫int a=b=c=3;(三) 關(guān)系表達(dá)式1. 關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個數(shù)值表達(dá)式連接起來的式子。2. 關(guān)系表達(dá)式的值:關(guān)系表達(dá)

26、式的值是一個邏輯值,即“真”或“假”?!罢妗北磉_(dá)式的值為1,“假”表達(dá)式的值為0.3. 特別注意:判斷必須一步一步來。關(guān)系運(yùn)算符是自左至右的結(jié)合方向。· a<b<c先判斷“a<b”得值為1或0,再用“1或0<c”得值為1或0。(四) 邏輯表達(dá)式1. 判斷一個“量”的真假:非0代表“真”,0代表“假”;判斷一個邏輯表達(dá)式的真假:1代表“真”,0代表“假”。邏輯運(yùn)算的真值表ab!a!ba&&ba|b非0非00011非0001010非010010011002. 邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運(yùn)算符才能求出

27、表達(dá)式的解時,才執(zhí)行該運(yùn)算符。a) a&&b&&c。如果a為假,就不必判別b和c,此時整個表達(dá)式已經(jīng)為假。如果a為真,b為假,不判別c。b) a|b|c。只要a為真,就不必判別b和c。a為假,才判別b。a和b都為假才判別c。3. 量、關(guān)系表達(dá)式、邏輯表達(dá)式都有真假,可以作為if語句中的表達(dá)式。(五) 條件表達(dá)式1. 一般形式表達(dá)式1? 表達(dá)式2: 表達(dá)式3執(zhí)行順序(六) 逗號表達(dá)式1. 一般形式(表達(dá)式1,表達(dá)式2,表達(dá)式m)2. 在逗號表達(dá)式內(nèi)按自左至右順序求解,整個逗號表達(dá)式的值為最后邊的表達(dá)式的值。六、 語句(一)(二) 實(shí)現(xiàn)順序結(jié)構(gòu)的語句1. 賦值語句1

28、) 定義:由賦值表達(dá)式加上一個分號構(gòu)成。2) 一般形式變量名=表達(dá)式;2. 函數(shù)調(diào)用語句1) 一般形式函數(shù)名(參數(shù)表列);2) 分類:標(biāo)準(zhǔn)庫函數(shù),用戶定義函數(shù)。3. 復(fù)合語句1) 定義:由一組語句組成,并放在一對花括號“”中間。2) 一般形式說明部分;執(zhí)行部分;3) 復(fù)合語句是一個整體,在語法結(jié)構(gòu)上與一個單一語句相同。4) 在復(fù)合語句中的“內(nèi)部數(shù)據(jù)描述語句”中定義的變量是局部變量,僅在復(fù)合語句中有效。5) 復(fù)合語句結(jié)束的“ ”之后,不需要分號。(三) 實(shí)現(xiàn)選擇結(jié)構(gòu)的語句1. if語句1) 一般形式if(表達(dá)式)語句1else語句2) 變形形式a) if(表達(dá)式)語句1b) if(表達(dá)式)語句1

29、else語句2c) if(表達(dá)式1)語句1else if(表達(dá)式2)語句2else if(表達(dá)式m)語句melse語句m+13) if和else后面沒有分號“;”,語句后邊必須有分號“;”4) 復(fù)合語句要用花括號括起來。5) if語句的嵌套if( )if( )語句1else語句2elseif( )語句3else語句4· else總是與它上面的最近的未配對的if配對2. switch語句(多分支選擇語句)1) 一般形式switch(表達(dá)式)case常量1:語句1case常量2:語句2case常量n:語句ndefault:語句n+12) switch后面括號內(nèi)的“表達(dá)式”,其值的類型為整

30、數(shù)類型(包括字符型)。3) 每一個case常量必須互不相同。4) 一般情況下,在執(zhí)行一個case子句后,應(yīng)當(dāng)用break語句使流程跳出switch結(jié)構(gòu)。否則會不加判斷,從執(zhí)行完的case標(biāo)號后面依次執(zhí)行下面語句。5) 多個case標(biāo)號可以共用一組執(zhí)行語句。如:case常量1:case常量2:case常量3:語句3(四) 實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語句1. while語句1) 一般形式while(表達(dá)式)語句2) 只要循環(huán)條件表達(dá)式為真,就執(zhí)行循環(huán)體語句。先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句。3) 循環(huán)體中一般有改變循環(huán)變量的語句,不可以寫死循環(huán),記得賦初值。2. dowhile語句1) 一般形式do語句wh

31、ile(表達(dá)式);2) 先無條件執(zhí)行循環(huán)體,再判斷循環(huán)條件是否成立。表達(dá)式為真,執(zhí)行循環(huán)體語句;表達(dá)式為假,循環(huán)結(jié)束。特別注意和until循環(huán)結(jié)構(gòu)不同,until型是表達(dá)式為假,執(zhí)行循環(huán)體語句,表達(dá)式為真,循環(huán)結(jié)束。3) while語句和dowhile語句在while表達(dá)式一開始就為假時,兩種循環(huán)的結(jié)果不同。4) dowhile后面加分號;if for while后面不加。3. for語句1) 一般形式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句即for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句執(zhí)行順序2) 表達(dá)式1、2、3都可以省略,但省略后表達(dá)式之間的分號“;”不能省略。·表達(dá)

32、式1可以省略,即不設(shè)置初值。表達(dá)式1省略應(yīng)在for語句之前賦初值。· 表達(dá)式2 可以省略,即不判斷循環(huán)條件,循環(huán)無終止進(jìn)行。· 表達(dá)式3可以省略,但應(yīng)保證循環(huán)能正常結(jié)束。3) 表達(dá)式1、2、3可以是逗號表達(dá)式。4) 所有定義的變量的有效范圍只限于for循環(huán)中。4. 終止循環(huán)1) 用break語句提前終止循環(huán)· break語句只能用于循環(huán)語句和switch語句中,不能單獨(dú)使用。· 循環(huán)的嵌套中,一個break只能終止一個內(nèi)循環(huán)2) 用continue語句提前結(jié)束本次循環(huán)七、 數(shù)組(一) 數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型。(二

33、) 定義數(shù)組1. 定義一維數(shù)組1) 一般形式類型符數(shù)組名常量表達(dá)式2) 定義數(shù)組時,方括號中的常量表達(dá)式表示元素的個數(shù),即數(shù)組長度。它可以是常量和符號常量,不能包含變量。注意:下標(biāo)是從0開始的。定義a10數(shù)組不存在數(shù)組元素a10。2. 定義二維數(shù)組1) 一般形式類型說明符數(shù)組名常量表達(dá)式常量表達(dá)式2) 二維數(shù)組中元素排列的順序是按行存放的3. 定義字符數(shù)組一般形式char數(shù)組名常量表達(dá)式(三) 引用數(shù)組1. 引用一維數(shù)組的元素1) 表示形式數(shù)組名下標(biāo)注意:只能引用數(shù)組元素二不能一次整體調(diào)用整個數(shù)組全部元素的值。2) 下標(biāo)可以是整型常量或整形表達(dá)式。2. 引用二維數(shù)組的元素1) 表示形式數(shù)組名下

34、標(biāo)下標(biāo)2) 引用數(shù)組元素時,下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。注意行列的下標(biāo)都從0開始。3. 引用字符數(shù)組的元素(四) 初始化數(shù)組1. 一維數(shù)組的初始化(“初始化列表”方法)1) 在定義數(shù)組時對全部數(shù)組元素賦予初值。2) 給數(shù)組中的一部分元素賦值,系統(tǒng)自動給之后的元素賦初值為0(字符型數(shù)組初始化為0,指針型數(shù)組初始化為NULL).3) 對全部數(shù)組元素賦初值,可以不指定數(shù)組長度。2. 二維數(shù)組的初始化1) 分行給二維數(shù)組賦初值。(每行數(shù)據(jù)用一個花括號括起來)2) 按數(shù)組元素在內(nèi)存中的排列順序?qū)€元素賦初值。3) 對部分元素賦初值。其余元素值自動為0。4) 對全部元素賦初值,則可以省略行的長度,

35、但不能省略列的長度。3. 字符數(shù)組的初始化1) 逐個元素初始化若提供的初值個數(shù)與預(yù)定的數(shù)組長度相同,定義時可以省略數(shù)組長度。若提供的初值個數(shù)大于數(shù)組長度,則出現(xiàn)語法錯誤。若提供的初值個數(shù)小于數(shù)組長度,其余的元素自動為空字符(0)2) 字符串初始化(五) 字符數(shù)組的輸入輸出1. 字符數(shù)組存儲字符串常量時會自動加一個0作為結(jié)束符。(此時數(shù)組長度是看到的字符串長度+1,增加的存放字符0其ASCII值為0) 2. 字符串的輸入輸出1) 用“%c”格式符,逐個字符輸入輸出。2) 用“%s”格式符,整個字符串輸入輸出。scanf(“%s”,c);printf(“%s”,c);² 注意:i. pr

36、intf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,不是數(shù)組元素名。如:printf(“%sn”,c)正確,printf(“%sn”,c0)錯誤。ii. 用“%s”格式輸出字符數(shù)組時,遇0結(jié)束輸出,且輸出字符中不包含0。iii. 若數(shù)組中包含一個以上0,則遇第一個0時即結(jié)束輸出。用“%s”格式輸入字符數(shù)組時, scanf函數(shù)中的輸入項(xiàng)是字符數(shù)組名,它是該數(shù)組的起始地址地址,前面不再加地址符“&”。iv. 用函數(shù)scanf輸入多個字符串,輸入時應(yīng)以空格鍵或回車鍵作為字符串間的分隔。輸入遇到空格或回車就結(jié)束。3) 使用字符串處理函數(shù)puts函數(shù)、gets函數(shù)(之前介紹過)3. 字符串處理函數(shù)(使用時在程序

37、頭文件出添加聲明#include<string.h>)1) strcat函數(shù)字符串連接函數(shù)i. 功能:把字符數(shù)組2連到字符數(shù)組1后面。ii. 一般形式strcat(字符數(shù)組1,字符數(shù)組2)iii. 返值:返回字符數(shù)組1的首地址。iv. 注意:·字符數(shù)組1必須足夠大。·連接前,兩字符串均以0結(jié)束;連接后,字符串1后面的0取消,只在新字符串最后保留0。2) strcpy函數(shù)字符串復(fù)制函數(shù)i. 功能:將字符串2復(fù)制到字符數(shù)組1中。ii. 一般形式strcpy(字符數(shù)組1,字符串2)iii. 返值:返回字符數(shù)組1的首地址。iv. 注意:·字符數(shù)組1必須足夠大。

38、·字符數(shù)組1必須寫成字符數(shù)組名,字符串2可以是字符數(shù)組名或字符串常量。· 拷貝時0一同拷貝。· 不能使用賦值語句為一個字符數(shù)組賦值,只能用strcpy函數(shù)。3) strncpy函數(shù)字符串復(fù)制函數(shù)i. 功能:將字符串2中前面n個字符復(fù)制到字符數(shù)組1中。ii. 一般形式strncpy(字符數(shù)組1,字符串2,n)iii. n不應(yīng)多于字符數(shù)組1中原有的字符(不包括0)。4) strcmp函數(shù)字符串比較函數(shù)i. 功能:比較字符串1和字符串2。ii. 比較規(guī)則:將兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到0為止。·如果全部字

39、符相同,則認(rèn)為兩個字符串相等。·若出現(xiàn)不相同的字符,則以第1對不相同的字符的比較結(jié)果為準(zhǔn)。iii. 返值:·字符串1=字符串2,則函數(shù)值為0;·字符串1>字符串2,則函數(shù)值為一個正整數(shù);·字符串1<字符串2,則函數(shù)值為一個負(fù)整數(shù)。5) srelen函數(shù)測字符串長度的函數(shù)i. 功能:測試字符串長度。ii. 一般形式strlen(字符數(shù)組)iii. 返值:字符串中的實(shí)際長度(不包括0)。6) strlwr函數(shù)轉(zhuǎn)換為小寫的函數(shù)i. 功能:將字符串中大寫字母換成小寫字母。ii. 一般形式strlwr(字符串)7) strupr函數(shù)轉(zhuǎn)換為大寫的函數(shù)i.

40、 功能:將字符串中小寫字母換成大寫字母。ii. 一般形式strupr(字符串)八、 函數(shù)(一) 概述1. C語言用函數(shù)實(shí)現(xiàn)程序模塊化。2. 一個源程序文件由一個或多個函數(shù)組成;一個程序由一個或多個源程序文件組成。3. 函數(shù)就是功能。每一個函數(shù)用來實(shí)現(xiàn)一個特定的功能。4. C程序的執(zhí)行從main函數(shù)開始,并回到main函數(shù)結(jié)束。5. 函數(shù)之間可以相互調(diào)用,或調(diào)用自身。不能調(diào)用main函數(shù)。6. 函數(shù)之間相互獨(dú)立,不存在從屬關(guān)系。(二) 分類(三) 函數(shù)的定義1. 定義無參函數(shù)1) 一般形式函數(shù)類型函數(shù)名(void)函數(shù)體(聲明部分+語句部分)2) 函數(shù)類型指函數(shù)返回值的類型。若無返回值,則定義返

41、回類型為void。若省略此項(xiàng),則認(rèn)為返回類型是int。void表示”空”,沒有函數(shù)值??梢允÷?。2. 定義有參函數(shù)1) 一般形式函數(shù)類型函數(shù)名(形式參數(shù)表列)函數(shù)體(聲明部分+語句部分)2) 形式參數(shù)定義格式:類型形參名,類型形參名,3. 定義空函數(shù)1) 一般形式函數(shù)類型函數(shù)名() 例:dummy()/* does nothing & returns nothing */(四) 函數(shù)的調(diào)用1. 一般形式函數(shù)名(實(shí)參表列)2. 數(shù)據(jù)傳遞1) 實(shí)際參數(shù):在主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面括號中的參數(shù)。形式參數(shù)(虛擬參數(shù)):在定義函數(shù)時函數(shù)名后面括號中的變量名稱。2) 單向值傳遞:函數(shù)調(diào)

42、用過程中,系統(tǒng)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參。且只能由實(shí)參傳給形參。3) 形參在函數(shù)被調(diào)用前不占內(nèi)存。函數(shù)調(diào)用時為形參分配內(nèi)存。調(diào)用結(jié)束,內(nèi)存釋放。4) 實(shí)參必須有確定的值??梢允浅A?、變量或表達(dá)式。形參必須指定類型。形參與實(shí)參類型一致,個數(shù)相同。若形參與實(shí)參類型不一致,自動按照形參類型轉(zhuǎn)換。5) 數(shù)組元素只能作函數(shù)實(shí)參,采用“值傳遞”從實(shí)參傳到形參。數(shù)組名作函數(shù)實(shí)參,向形參(數(shù)組名或指針變量)傳遞的是數(shù)組首元素的地址。形參的值改變,實(shí)參的值也改變。6) return語句(函數(shù)返回語句)i. 功能:結(jié)束函數(shù)調(diào)用;函數(shù)返回語句;帶回函數(shù)返回值。ii. 函數(shù)返回值的類型在定義函數(shù)時制定。函數(shù)返回

43、值通過函數(shù)中的return語句獲得。iii. return語句后的表達(dá)式類型,與函數(shù)返回值類型不同時,自動按函數(shù)類型轉(zhuǎn)換。函數(shù)類型決定返回值的類型。iv. 函數(shù)需要返回值時,若缺少return語句或return語句未帶返回值,則返回一個不確定值。 (注意看有沒有return語句)v. 對于不帶回值的函數(shù),應(yīng)當(dāng)用定義函數(shù)為”void”函數(shù)。此時函數(shù)體中不得出現(xiàn)return語句。(五) 調(diào)用函數(shù)的條件1. 被調(diào)用的函數(shù)是已經(jīng)定義的函數(shù)。1) 如果使用庫函數(shù),應(yīng)在本文件開頭用#include指令將調(diào)用有關(guān)庫函數(shù)的信息包含到本文件中。2) 如果使用用戶自己定義的函數(shù),且被調(diào)函數(shù)的位置在主調(diào)函數(shù)的后面(

44、同一個文件中),應(yīng)該在主調(diào)函數(shù)中對被調(diào)用的函數(shù)作聲明。(六) 函數(shù)的聲明1. 一般形式函數(shù)類型函數(shù)名(參數(shù)類型1參數(shù)名1,參數(shù)類型2參數(shù)名2,參數(shù)類型n,參數(shù)名n);函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2,參數(shù)類型n)(七) 函數(shù)的嵌套調(diào)用(在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù))和遞歸調(diào)用(在調(diào)用一個函數(shù)的過程中直接或間接地調(diào)用該函數(shù)本身)(八) 局部變量與全局變量1. 定義:在函數(shù)內(nèi)定義的變量是局部變量,在函數(shù)外定義的變量是全局變量。2. 全局變量作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。同一文件中的所有函數(shù)都能引用全局變量的值,如果在一個函數(shù)中改變了全局變量的值,就能影響到其他函數(shù)中全局變量的值

45、。3. 通過全局變量使函數(shù)調(diào)用能得到一個以上的值。4. 全局變量可以被局部變量屏蔽。5. 變量的儲存方式九、 指針(一) 指針:一個變量的地址。指針變量:專門存放變量地址的變量。它的值是某個內(nèi)存單元的地址。指向:指針變量指向變量。(二) 定義指針變量1. 一般形式類型名*指針變量名2. 定義指針變量必須指定基類型。指向整型數(shù)據(jù)的指針類型表示為”int*” 指向int的指針、int指針(int*),(float*),(char*)是不同類型3. 指針變量前面的*表示該變量類型為指針型變量。(只在定義時)例:int *p;變量名是p。(三) 指針變量的引用1. 給指針變量賦值。如p=&a

46、把a(bǔ)的地址賦給指針變量p,指針變量p的值是變量a的地址,p指向a。2. 引用指針變量指向的變量。如果已執(zhí)行“p=&a;”,即指針變量p指向了整型變量a,則printf(“%d”,*p);其作用是以整數(shù)形式輸出指針變量p所指向的變量的值,即變量a的值。如有以下賦值語句:*p=1;表示將整數(shù)1賦給p當(dāng)前所指向的變量,如果p指向變量a,則相當(dāng)于把1賦給了a,即“a=1;”。3. 引出指針變量的值。如: printf(“%o”,p);作用是以八進(jìn)制數(shù)形式輸出變量p的值,如果p指向了a,就是輸出了a的地址,即&a。4. & 取地址運(yùn)算符 * 指針運(yùn)算符(間接訪問運(yùn)算符) 5. 注

47、意1) 指針變量必須先賦值,再使用,只能保存地址。2) 一個指針變量只能指向同一類型的變量。3) &和*運(yùn)算符互為逆運(yùn)算。若:int a=10,*pt=&a; 則: &a、pt 、 &*pt是等價的 則: *&a、*pt、a 是等價的(四) 通過指針引用數(shù)組1. 數(shù)組元素的指針就是數(shù)組元素的地址。2. 指向數(shù)組元素的指針例:int a10;int *p;p=a;數(shù)組名a不代表整個數(shù)組,上述“p=a;”的作用是把a(bǔ)數(shù)組的首元素的地址賦給指針變量p,而不是把數(shù)組a各元素的值賦給p;3. 對應(yīng)關(guān)系1) p+i a+i &ai2) *(p+i) *(a+

48、i) ai3) 指向數(shù)組元素的指針變量也可帶下標(biāo): pi *(p+i) 。 即有*(p+i) *(a+i)ai pi注:數(shù)組名是數(shù)組的首地址,因此 p=&a0 與 p=a 等價。 指針變量可以實(shí)現(xiàn)使本身的值改變,數(shù)組名不可以。 例: p+正確 a+不正確 要注意指針變量的當(dāng)前值,指針變量可以指到數(shù)組后的內(nèi)存單元。即指針變量的越界問題。4. 指針變量的運(yùn)算例:int a10;int *p;p=a;i. p+ (或p+=1) 指向下一個元素。ii. *p+等價于*(p+)先得到p指向的變量的值,p再加1。iii. *(p+)與*(+p)作用不同,前者先取*p,后使p加1;后者相反。iv.

49、(*p)+表示p所指向的元素值加1。v. 若p當(dāng)前指向a數(shù)組第i個元素,則: *(p-)相當(dāng)于ai-,先取p值作"*"運(yùn)算,再使p自減; *(+p)相當(dāng)于a+i,先使p自加,再作"*"運(yùn)算; *(-p)相當(dāng)于a-i,先使p自減,再作"*"運(yùn)算。5. 通過指針引用多維數(shù)組1) int *p,a10;p=a;一維數(shù)組a的有關(guān)指針表示形式含義a一維數(shù)組名,數(shù)組首元素的地址,指針型常量&ai,a+i,p+i元素ai的地址ai,*(a+i),*(p+i)元素ai的值2) int *p,a34;p=a;二維數(shù)組a的有關(guān)指針表示形式含義a二

50、維數(shù)組名,指向一維數(shù)組a0,即0行首地址a0,*(a+0),*a0行0列元素地址a+i,&aii行首地址ai+j,*(a+i)+j,&aiji行j列元素aij的地址*(ai+j),*(*(a+i)+j),aiji行j列元素aij的值(五) 通過指針引用字符串1) 字符指針:基類型是char類型的指針,可以指向一個字符串,即保存字符串首字符的地址2) 字符指針變量與字符數(shù)組的區(qū)別字符指針變量中存放的是地址,決不是將字符串放到字符指針變量中。賦初值的方式:對數(shù)組可以在變量定義時整體賦初值,但不能在賦值語句中整體賦值。 指針變量的值是可以改變的,而數(shù)組名所指的地址是固定的。 八、 應(yīng)

51、用舉例(一) 兩個數(shù)對換 t=a;a=b;b=t;(二) 數(shù)組的輸入和輸出數(shù)組的輸入和輸出要用循環(huán) int a10,i; for(i=0;i<10;i+) scanf("%d",&ai); for(i=0;i<10;i+) printf("%dt",ai);(三) 逆序輸出數(shù)組元素注意逆序的時候,終止條件是i>=0; int a10,i; for(i=0;i<10;i+) scanf("%d",&ai); for(i=9;i>=0;i-) printf("%dt",ai

52、); return 0;(四) 數(shù)組處理輸出斐波那契數(shù)列前20項(xiàng) int i,f20=1,1; /對最前面兩個元素f0和f1賦初值1 for(i=2;i<20;i+) fi=fi-2+fi-1; /從f2開始,每一項(xiàng)是前兩項(xiàng)的和 for(i=0;i<20;i+) printf("%8dt",fi);(五) 11000累加或累乘用累加器 long int s,i; s=0; /累加器s賦初值 for(i=1;i<=1000;i+) s+=i;/累加器當(dāng)前值=累加器原值+循環(huán)變量當(dāng)前值 printf("s=%ldn",s);(六) 求11000中3的倍數(shù)和 long int s=0; int i; for(i=1;i<=1000;i+) if(i%3=0)/判斷i是否為是3的倍數(shù),注意=而非= s+=i; printf("s=%ldn

溫馨提示

  • 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

提交評論