計算機等級試二級C語言指導_第1頁
計算機等級試二級C語言指導_第2頁
計算機等級試二級C語言指導_第3頁
計算機等級試二級C語言指導_第4頁
計算機等級試二級C語言指導_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機等級考試二級C語言計算機二級考試指導

C語言程序設計主講人:黃海軍

QQ:113958033計算機科學與技術學院電話算機等級考試二級C語言主

內(nèi)

容計算機科學與技術學院一、試卷分析二、C語言概述三、數(shù)據(jù)類型及其運算四、語句五、數(shù)組六、函數(shù)七、編譯預處理八、指針九、結(jié)構(gòu)體與共用體十、文件十一、主要算法分析計算機等級考試二級C語言C語言復習考試的五大要點計算機科學與技術學院了解試卷,胸中有數(shù)深刻理解,強化概念歸納整理,適當記憶注重實踐,融會貫通多做練習,查漏補缺計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院語法:一、源程序結(jié)構(gòu)二、基本類型數(shù)據(jù)的表示和引用系統(tǒng)預定義數(shù)據(jù)類型基本類型常量的表示基本類型變量的聲明和直接引用基本類型變量的間接引用(指針應用)三、表達式四、標準輸入/輸出五、語句計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院難題:語法:單選,基本概念填空,閱讀程序部分算法和數(shù)據(jù)結(jié)構(gòu)的綜合應用:閱讀程序完善程序上機填空改錯:語法錯,語義錯,算法錯編程:主函數(shù),功能函數(shù)計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院語法:六、函數(shù)函數(shù)定義函數(shù)聲明函數(shù)直接調(diào)用、間接調(diào)用(指針應用)遞歸函數(shù)的定義與調(diào)用執(zhí)行流程標識符作用域規(guī)則七、構(gòu)造類型數(shù)據(jù)成員的引用數(shù)組聲明和數(shù)組元素的直接引用結(jié)構(gòu)定義、結(jié)構(gòu)變量聲明和結(jié)構(gòu)變量成員的直接引用數(shù)組元素、結(jié)構(gòu)變量成員的間接引用(指針應用)八、文件輸入/輸出九、預處理命令計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院一、常用算法

分類(排序)算法冒泡,選擇,插入檢索(查找)算法無序數(shù)據(jù)序列的查找(見遍歷算法)有序數(shù)據(jù)序列的查找:二分法遍歷算法一維數(shù)組和二維數(shù)組的遍歷單向鏈表的遍歷文件的遍歷其它基本算法遞推法,窮舉法,二分法,牛頓法求方程根,梯形法求定積分等.計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院二、典型問題·數(shù)值問題素數(shù)問題求因子整數(shù)拆位、反序數(shù)、回文數(shù)最大公約數(shù),最小公倍數(shù)求最值、平均值累加,累乘、階乘、級數(shù)(近似值計算)計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院三、典型問題·一維數(shù)組數(shù)據(jù)處理生成(數(shù)列)變換(編碼/解碼,壓縮/還原,循環(huán)移位等)查找(指定值,最大值,最小值)排序插入(一個數(shù))刪除(一個數(shù),重復的多個數(shù))更新(一個數(shù))統(tǒng)計合并(兩個數(shù)列)集合運算模擬高精度算術運算計算機等級考試二級C語言四、典型問題·字符串數(shù)據(jù)處理子串查找,子串統(tǒng)計,子串刪除,子串替換,整型/實型機器數(shù)與字符串表示相互轉(zhuǎn)換字符串變換(編碼/解碼,壓縮/還原)計算機科學與技術學院命題基本原則及考核點計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院五、典型問題·二維數(shù)組數(shù)據(jù)處理生成(矩陣)變換(改變數(shù)值,改變數(shù)據(jù)存儲位置)查找(指定值,最小值,最大值)排序(按行排序,按列排序)插入(一個數(shù),一行數(shù),一列數(shù))刪除(一個數(shù),一行數(shù),一列數(shù))更新(一個數(shù),一行數(shù),一列數(shù))統(tǒng)計合并(兩個矩陣)計算機等級考試二級C語言命題基本原則及考核點計算機科學與技術學院六、典型問題·一維結(jié)構(gòu)數(shù)組數(shù)據(jù)處理查找(直接查找,通過指向結(jié)構(gòu)數(shù)組的指針數(shù)組查找)排序(結(jié)構(gòu)數(shù)組排序,指向結(jié)構(gòu)數(shù)組的指針數(shù)組排序)插入(一條記錄)刪除(一條記錄)更新(一條記錄)統(tǒng)計計算機等級考試二級C語言無紙化考試:理論部分40+操作部分60(共4個大題)理論部分有:全部為單選題

公共基礎知識(數(shù)據(jù)結(jié)構(gòu)與算法3-5,程序設計基礎1-2分,軟件工程基礎2-3,數(shù)據(jù)庫設計基礎3-5分):10道選擇題,共10分;c語言程序設計,30道選擇題,共30分

操作部分:(程序填空題3*6=18,程序修改題2*9=18分,程序設計題24)共60分。

改錯題:改錯題中所存在的錯誤主要是語法錯誤(如數(shù)組的聲明錯誤、函數(shù)定義錯誤等)、運行錯誤(如包含不正確的頭文件)、邏輯錯誤等。

編程題:編程題程序中,通常都涉及一個有一定難度的算法,考生須按題目要求實現(xiàn)計算機科學與技術學院時間:130分鐘,滿分100分考試形式計算機等級考試二級C語言C語言程序設計計算機科學與技術學院C語言結(jié)構(gòu):選擇題1分,改錯題7%數(shù)據(jù)類型及運算:選擇題3分,3種題型均有55%基本語句:選擇題1分,3種題型均有35%選擇結(jié)構(gòu)程序設計:選擇題4分,3種題型均有35%循環(huán)結(jié)構(gòu)程序設計:選擇題6分,3種題型均有40%數(shù)組的定義與引用:選擇題2分,3種題型均有35%函數(shù):選擇題4分,3種題型均有40%編譯預處理:選擇題3分,帶參數(shù)的宏定義2%指針:選擇題4分,3種題型均有35%結(jié)構(gòu)體與共用體:選擇題3分,3種題型均有7%位運算:1分文件:選擇題2分,多以改錯和填空題,幾率低計算機等級考試二級C語言二、C語言概述1、C程序的結(jié)構(gòu)、main函數(shù)一個C程序可由多個函數(shù)構(gòu)成,其中必有唯一的一個主函數(shù)。它是整個程序的入口,也是整個程序的出口。2、標識符的命名規(guī)則規(guī)則:字母或下劃線開始的字母、下劃線和數(shù)字串。

C語句中的保留字不能作為標識符。(教材P375)所有的函數(shù)名可以作為標識符。3、C程序的上機過程編輯編譯連接運行計算機科學與技術學院計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算計算機科學與技術學院1、常量、變量常量:固定不變的量。整型常量:十進制(29)、八進制(029)和十六進制(0x29)實型常量:小數(shù)表示(123.456)、指數(shù)表示(1.23456e+002)字符常量:普通字符(‘A’

‘a(chǎn)’

‘2’

‘+’

‘,’)、轉(zhuǎn)義字符(‘\qqq’符號常量:‘\xhh’)(一般用大寫字符表示)#

define

PI

3.1415936計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)一)計算機科學與技術學院int

(

-32768--+32767

)unsigned

intlong

int

或(

0—65535

)longunsigned

long

int 或

unsigned

long4字節(jié)8字節(jié)變量:整型:基本整型:

2字節(jié)無符號基本整型:

2字節(jié)長整型:

4字節(jié)無符號長整型:

4字節(jié)實型:單精度:雙精度:字符型:有符號字符:無符號字符:floatdouble1字節(jié)1字節(jié)char

(

-128—127

)unsigned

char

(

0—255

)計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)二)計算機科學與技術學院2、不同類型數(shù)據(jù)之間的混合運算表達式值的類型由該式子中最長的數(shù)據(jù)類型決定。float型無條件轉(zhuǎn)換成double型。char型無條件轉(zhuǎn)換成int型。*注意強制類型轉(zhuǎn)換的用法。(類型名)(int)x+y

等價于

((int)x)+y參與運算的數(shù)據(jù)類型改變了,x的類型不變。3、算術運算符和運算表達式 (+

-

*

/

%)/

: a/b

a,b都是整型結(jié)果是整型% :a%b a,b都必須是整型計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)三)計算機科學與技術學院4、賦值運算符和賦值表達式(右結(jié)合性)‘=’號

左邊只能出現(xiàn)變量,具有強制類型轉(zhuǎn)換作用if

(

(c=getchar()

)

!=‘\n’)

…復合賦值運算

a*=x+y

等價于

a=a*(x+y)5、逗號運算符和逗號表達式加‘;’號構(gòu)成表達式語句作為其它語句的一部分或函數(shù)的參數(shù)時要加括號6、表達式的類型識別7、有關運算符功能:

優(yōu)先級:

結(jié)合性:

表達式的值:計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)四)計算機科學與技術學院8、關系運算符和關系表達式<

<=

>

>=

(6級)

==

!=

(7級)注意:等于零和不等于零的表示方式

a

!a兩個實數(shù)判相等和判不相等的方法a<x

&&

x<b

不能寫成

a<x<b

形式a==b

不能寫成

a=b

形式在多分枝if語句中的作用計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)五)計算機科學與技術學院9、邏輯運算符和邏輯表達式!(2級)

&&(11級)

||(12級)注意:a

&&

b

&&

c

和 a

||

b

||

c

表達式!優(yōu)先級比算術運算高!(a

&&

b

&&

c)

等價于 !a

||

!b

||

!c!

(a

||

b

|| c)等價于復雜邏輯表達式出現(xiàn)在算術表達式中!a

&&

!b

&&

!c計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)六)計算機科學與技術學院10、自增自減運算符(右結(jié)合性)++

--

(2級)注意:a++

和++a的區(qū)別對整型、實型和字符型都可進行在運算符為多個字符時,盡可能多地自左而右組成完整的運算符tc對含運算符++和--等表達式的處理形如

printf(“

%d

%d

\n”,i,i++);中函數(shù)參數(shù)求值出現(xiàn)在其它表達式中注意值的變化計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)七)計算機科學與技術學院11、條件運算符和條件表達式(右結(jié)合性)?

(13級)注意:唯一三目運算符不能和if語句完全等價右結(jié)合性12、位運算符~

(按位取反^

(按位異或a

>

b

?

x

:

y

?

m

:

ny應先與后面的運算符結(jié)合2級)

&(按位與

8級)9級)

|(按位或

10級)13、數(shù)學算式的C語言表示計算機等級考試二級C語言三、數(shù)據(jù)類型及其運算(續(xù)八)計算機科學與技術學院14、輸入輸出函數(shù)輸入函數(shù):getchar()gets()scanf()輸出函數(shù):putchar()puts()printf()注意:getchar()是無參函數(shù),從輸入設備讀取一個字符,包括不可顯示字符(一般形式

c=getchar())。gets()和puts()函數(shù)只有一個參數(shù),且為字符串的首地址。scanf()函數(shù)的格式控制符中的普通字符照原樣輸入。printf()函數(shù)中的實參的求值順序從右向左。計算機等級考試二級C語言四、語

句計算機科學與技術學院1、表達式語句2、函數(shù)調(diào)用語句3、復合語句4、空語句5、控制語句計算機等級考試二級C語言四、語

句(選擇語句)計算機科學與技術學院(一)if語句一般格式if

(表達式)

語句或if

(表達式)

語句1else

語句2注意:“表達式”應有括號,且可為各種類型的表達式“語句”如是復合語句應有括號“語句”還可以是

if

語句數(shù)學分段函數(shù)的求值問題繁瑣的二維數(shù)組填值問題(結(jié)合循環(huán)語句,幾乎每次都考)計算機等級考試二級C語言四、語

句(選擇語句_續(xù))(二)switch

語句一般格式switch{

casecase(表達式)常量表達式1:語句1;break;常量表達式2:語句2;break;…

…case

常量表達式n:語句n;break;default:語句n+1;}注意:執(zhí)行流程“語句”可為多個單個語句,此時不必加大括號default語句可缺省switch語句嵌套使用時,break語句只跳出它所處的哪層switch整型、字符型或枚舉類型根據(jù)需要選擇計算機科學與技術學院計算機等級考試二級C語言四、語

句(循環(huán)語句_1)(一)當型循環(huán)語句一般格式while

(表達式)

語句注意:“表達式”應有括號“語句”為復合語句時應加大括號在語句中應有使“表達式”趨于不成立的語句存在

在復合語句中含有break和continue語句時的情況:while

(表達式){

…break;…

…continue;}計算機科學與技術學院計算機等級考試二級C語言四、語

句(循環(huán)語句_2)(二)直到型循環(huán)語句一般格式do

語句

while

(表達式);注意:無論表達式是否成立,循環(huán)體至少執(zhí)行一遍

“表達式”應有括號,后面的“;”號不能丟“語句”為復合語句時應加大括號在語句中應有使“表達式”趨于不成立的語句存在

在復合語句中含有break和continue語句時的情況:do{

…break;…

…continue;}

while

(表達式);計算機科學與技術學院計算機等級考試二級C語言四、語

句(循環(huán)語句_3)(二)for型循環(huán)語句一般格式for

(表達式1;表達式2;表達式3)語句注意:“語句”為復合語句時應加大括號在語句中應有使“表達式2”趨于不成立的語句存在在復合語句中含有break和continue語句時的情況:繁瑣的二維數(shù)組填值問題(結(jié)合循環(huán)語句,幾乎每次都考)三種循環(huán)語句相互嵌套使用的情況計算機科學與技術學院計算機等級考試二級C語言五、數(shù)

組(一維數(shù)組)計算機科學與技術學院(一)一維數(shù)組定義:定義并初始化:或:類型名類型名

數(shù)組名〔常量表達式〕;類型名

數(shù)組名〔常量表達式〕={表達式列表};數(shù)組名〔〕={表達式列表};引用:

只能引用下標變量。注意:1、不能定義動態(tài)數(shù)組

如:int

n

;

int

a[n];2、只能在定義數(shù)組的時候初始化,以后不可整體賦值3、除字符數(shù)組外,不可整體引用數(shù)組4、一般用單循環(huán)語句引用數(shù)組元素5、內(nèi)存中連續(xù)存儲,數(shù)組名為其存儲的首地址計算機等級考試二級C語言五、數(shù)

組(二維數(shù)組)計算機科學與技術學院(二)二維數(shù)組定義:

類型名

數(shù)組名〔常量表達式1〕〔常量表達式2〕;定義并初始化:類型名

數(shù)組名〔〕〔常量表達式〕={…

…};引用:

只能引用下標變量。注意:1、不能定義動態(tài)數(shù)組2、只能在定義數(shù)組的時候初始化,以后不可整體賦值3、不可整體引用數(shù)組4、一般用雙重循環(huán)語句引用數(shù)組元素5、按行在內(nèi)存中連續(xù)存儲,數(shù)組名為0行的行地址,a[i]為第i行第1個元素的地址

如:

int

a[3][3]

引用

a[0][5]

正確6、與雙重循環(huán)語句一起應用(二維數(shù)組填值問題)計算機等級考試二級C語言五、數(shù)

組(字符數(shù)組)計算機科學與技術學院(三)字符數(shù)組(一維、二維)具有普通一維數(shù)組和二維數(shù)組的性質(zhì)。特點:1、可以定義時初始化,也可以后用strcpy()賦值。2、可以引用下標變量,也可整體引用(一維)3、一般用于存放字符串4、字符串的基本概念1)串結(jié)束符5、字符串操作函數(shù)的使用1)串長度(編程實現(xiàn))3)串拼接(編程實現(xiàn))2)內(nèi)存單元地址

字符串2)串復制(賦值)4)串比較(不能用關系運算符)6、字符串的輸入和輸出(char

c[20];)

1)gets(c);和scanf(“%s”,c);區(qū)別7、二維字符數(shù)組的引用有下標引用法和數(shù)組名加第一維下標引用法計算機等級考試二級C語言六、函

數(shù)計算機科學與技術學院主要內(nèi)容(一)、函數(shù)的定義(二)、函數(shù)的參數(shù)(三)、函數(shù)的返回值(四)、函數(shù)的調(diào)用(五)、數(shù)組作為函數(shù)的參數(shù)(六)、局部變量和全局變量(七)、變量的存儲類別計算機等級考試二級C語言六、函

數(shù)(函數(shù)的定義)計算機科學與技術學院(一)、函數(shù)的定義函數(shù)可理解為一個程序段,給予一定的輸入就會產(chǎn)生一定的輸出。函數(shù)的定義就是在使用函數(shù)前對函數(shù)功能的完整性描述。一般形式:函數(shù)類型

函數(shù)名(參數(shù)列表){

…函數(shù)體…

…}注意:1、函數(shù)的定義就是函數(shù)的說明1、函數(shù)由“頭部”和“函數(shù)體”構(gòu)成2、函數(shù)類型指函數(shù)返回值的類型(可以無返回值void)計算機等級考試二級C語言六、函

數(shù)(函數(shù)的參數(shù))計算機科學與技術學院(二)、函數(shù)的參數(shù)參數(shù)列表中的參數(shù)為形式參數(shù),它們和函數(shù)體中定義的變量一起構(gòu)成該函數(shù)的局部變量,形參是接受數(shù)據(jù)的通道,由于是第一次出現(xiàn),因此要作類型說明。注意:1、形參要一一說明2、實參和形參要做到類型、順序和數(shù)量一致3、實參和形參可以同名,但它們都是所處函數(shù)內(nèi)部的局部數(shù)據(jù)4、實參可以是常量、量變、函數(shù)和表達式,形參只能是變量

5、在發(fā)生函數(shù)調(diào)用時,實參是將值(或地址)賦給形參的計算機等級考試二級C語言六、函

數(shù)(函數(shù)的返回值)計算機科學與技術學院(三)、函數(shù)的返回值通過調(diào)用函數(shù),從被調(diào)函數(shù)中得到的值稱函數(shù)的返回值。注意:1、調(diào)用函數(shù)得到返回值有三種途徑:1)在被調(diào)用函數(shù)中用return語句可以(且只可)得到一個返回值2)使用全局變量,全局變量對所有函數(shù)都有效3)實參和形參采用地址復用的方法(考點)2、被調(diào)用函數(shù)有時沒有返回值,此時定義為

void

型3、被調(diào)用函數(shù)返回值類型由函數(shù)的類型確定4、return

表達式;5、被調(diào)用函數(shù)返回后,在主調(diào)函數(shù)中繼續(xù)執(zhí)行調(diào)用語句的下一個語句計算機等級考試二級C語言六、函

數(shù)(函數(shù)的調(diào)用)計算機科學與技術學院(四)、函數(shù)的調(diào)用函數(shù)調(diào)用是將程序的執(zhí)行流程轉(zhuǎn)向被調(diào)用函數(shù),被調(diào)用函數(shù)執(zhí)行完畢后再回到主調(diào)用函數(shù)繼續(xù)執(zhí)行。注意:1、根據(jù)被調(diào)用函數(shù)的類型函數(shù)調(diào)用有三種形式:1)函數(shù)調(diào)用作為表達式的一部分(被調(diào)用函數(shù)有返回值)2)函數(shù)調(diào)用作為其它函數(shù)的參數(shù)(被調(diào)用函數(shù)有返回值)3)函數(shù)調(diào)用加“;”號構(gòu)成函數(shù)調(diào)用語句(被調(diào)用函數(shù)無返回值)2、函數(shù)調(diào)用的形式1)嵌套調(diào)用2)遞歸調(diào)用:遞歸函數(shù)的編程特點遞歸函數(shù)的閱讀特點計算機等級考試二級C語言六、函數(shù)(數(shù)組作函數(shù)的參數(shù)_1)計算機科學與技術學院(五)、數(shù)組作為函數(shù)的參數(shù)由于可以從數(shù)組名得到數(shù)組在內(nèi)存儲單元存儲的起始位置,它是一個地址常量,因此在計論數(shù)組作為函數(shù)參數(shù)時結(jié)合指針一并討論。(1)一維數(shù)組(指向變量的指針)作為函數(shù)的參數(shù),在實參和形參位置上共有四種情況:

(假定

int a

[10]

;

int *p;

)實參(調(diào)用點)

形參(定義點)x=max(

a,10

)

;地址復用關系intmax

(

int

b[]

,

int

n

)x=max(

a,10

)

;賦值調(diào)用關系intmax

(

int

*p

,

int

n

)x=max(

p=a

,

10

)

;地址復用關系intmax

(

int

b[]

,

int

n

)x=max(

p=a

,

10

)

;賦值調(diào)用關系intmax

(

int

*p1,int

n

)計算機等級考試二級C語言六、函數(shù)(數(shù)組作函數(shù)的參數(shù)_2)計算機科學與技術學院(1)二維數(shù)組(指向行的指針)作為函數(shù)的參數(shù),在實參和形參位置上共有四種情況:

(假定

int a

[3][4]

;

int

(*p)[4]

;

)實參(調(diào)用點)形參(定義點)x=max(a,3,4);

地址復用關系x=max(a,3,4);

賦值調(diào)用關系x=max(p=a,3,4);地址復用關系int

max

(

int

b[][4],

int

m,intint

max(

int

(*p)[4]

,

int

m,inint

max

(

int

b[][4]

,

int

m,intint

max

(

int

(*p1)[4],int

m,ix=max(p=a,3,4);賦值調(diào)用關系計算機等級考試二級C語言六、函

數(shù)(局部和全局變量)計算機科學與技術學院(六)、局部變量和全局變量(變量的空間觀)局部變量1、某函數(shù)內(nèi)部定義的變量,只在該函數(shù)內(nèi)部有效2、分程序(復合語句)內(nèi)部定義的變量,只在分程序中有效3、形參屬于局部變量全局變量1、函數(shù)外部定義的變量,作用范圍從定義點開始到程序最后定義點之前的函數(shù)可用extern進行申明來擴展其作用范圍2、在全局變量的作用范圍內(nèi)如遇同名的宏定義,則在宏定義之后,同名應該用宏名置換(2004年秋選擇題26題)計算機等級考試二級C語言六、函

數(shù)(變量的存儲類別)計算機科學與技術學院(七)、變量的存儲類別(變量的時間觀)存儲方法分兩大類:1、靜態(tài)存儲區(qū):全局變量(程序開始執(zhí)行賦值)、局部靜態(tài)變量(編譯時賦初值,只賦一次)2、動態(tài)存儲區(qū):局部變量(含形參、函數(shù)內(nèi)定義的變量和分程序中定義的變量)具體分四種:1、自動變量

auto2、static申明的變量3、register變量4、extern申明變量動態(tài)局部變量靜態(tài)局部變量動態(tài)局部變量擴展全局變量作用范圍計算機等級考試二級C語言七、編譯預處理計算機科學與技術學院處理工作在編譯前完成。(一)、宏定義用宏體置換程序中的宏名。不要將宏體化簡后代入,有嵌套定義的宏名需逐層代入。(二)、文件包含<

>

“”的搜索包含文件區(qū)別:<>在C庫函數(shù)頭文件所在的目錄中尋找(標準方式)、“”先在用戶的當前目錄中尋找,找不至再按標準方式尋找。文件包含不但可以包含C函數(shù)的頭文件,也可包含*.c文件。(三)、條件編譯計算機等級考試二級C語言八、指

針(基本概念)i_point2000i2000(一)、地址和指針變量

i地址變量

i_point

(存儲其它變量地址的變量)指針變量作為函數(shù)的參數(shù)指針變量i_point指向變量i計算機科學與技術學院計算機等級考試二級C語言八、指

針(數(shù)組和指針)(二)、數(shù)組的指針和指向數(shù)組的指針變量由于數(shù)組連續(xù)存放的特性,當指針指向數(shù)組(即數(shù)組元素)時,通過指針指向的連續(xù)變化來指向數(shù)組中不同的元素以獲取對數(shù)組元

素的操作。例:int

a[5],*p;p=&a[3];*p

<==>

a[3]*&a[3]<==>a[3]&*p

<==>

&a[3]*p的計算結(jié)果找到了整型數(shù)組成員a[3]對a[3]的地址作間接存取運算,結(jié)果為變量a[3]對*p的計算結(jié)果進行取址運算得到a[3]的地址a[0]

a[1]

a[2]

a[3]

a[4]p計算機科學與技術學院計算機等級考試二級C語言八、指計算機科學與技術學院針(數(shù)組和指針_續(xù))數(shù)組名作函數(shù)參數(shù)

實參(調(diào)用點)x=max(

a,10

)

;形參(定義點)地址復用關系int

max

(

int

b[]

,

int

n

)x=max(

a,10

)

;賦值調(diào)用關系intmax

(

int

*p

,

int

n

)x=max(

p=a

,

10

)

;地址復用關系intmax

(

int

b[]

,

int

n

)x=max(

p=a

,

10

)

;賦值調(diào)用關系intmax

(

int

*p1,int

n

)指向多維數(shù)組的指針實參(調(diào)用點)形參(定義點)x=max(

a,3,4

)

;地址復用關系intmax

(

int

b[][4],

int

m,intx=max(

a,3,4

)

;賦值調(diào)用關系intmax(

int

(*p)[4]

,

int

m,inx=max(

p=a

,

3,4

)

;地址復用關系

intx=max(

p=a

,

3,4

)

;賦值調(diào)用關系

intmax

(

int

b[][4]

,

int

m,intmax

(

int

(*p1)[4],int

m,i計算機等級考試二級C語言八s指 針(表達式類型的判斷)如何判斷一個是數(shù)組元素s數(shù)組元素的地址?一s一維數(shù)組

int

a[N];1sa是該數(shù)組在內(nèi)存中的起始地址。2s取地址運算

&3s間接訪問運算

*4s下標運算

〔〕二s二維數(shù)組

int

a[M][N];1sa是該數(shù)組的行起始地址。2s*(a+i)或a[i]表示第i行的第一個元素地址2s取地址運算

&3s間接訪問運算

*4s下標運算

〔〕取地址間接訪問元素:

a[i]s*(a+i)s*&a[i]s*a地址:

asa+is&a[i]行地址:a+ii行第1個元素地址:*(a+i)sa[i]元素:a[i][j]s*(*(a+i)+j)s*(a[i]+j)s(*(a+i))[j]地址:&a[i][j]s*(a+i)+jsa[i]+js&(*(a+i))[j]計算機科學與技術學院計算機等級考試二級C語言八、指 針(字符串的指針)計算機科學與技術學院字符串概念1、以內(nèi)存某一起始字節(jié)開始到‘\0’字符結(jié)束的若干字節(jié)。2、字符‘\0’的ASCII碼值為0。3、字符串所占內(nèi)存空間為串長加1。4、從C語言角度對字符串的理解:從內(nèi)存某一起始字節(jié)開始,向地址值增大的方向以字節(jié)為單位連續(xù)尋找,如ASCII碼不等于0,則其所代表的字符為字符串中有效字符,如ASCII碼等于0,則字符串結(jié)束。5、內(nèi)存單元某一字節(jié)的地址。6、可用一維字符數(shù)組存放。7、可用指向字符變量的指針存放。8、看見常量字符串應將其理解為第一個字符的地址。計算機等級考試二級C語言八、指 針(字符串的指針_續(xù))計算機科學與技術學院例:main(){printf(“%s,%u,%c\n”,”We”,”love”,*”figs”);}運行結(jié)果:We,417,f說明:

“l(fā)ove”為指針,以%u格式輸出“l(fā)ove”的值,即輸出該字符串的首地址。*“figs”為該字符串的第一個字符。例:main(){

if(“abc”==“abc”)

printf(“Same!\n”);else

printf(“Not

same!\n”);

}運行結(jié)果:Not

same!說明:比較兩個字符串的起始地址,它們不可能相同。計算機等級考試二級C語言八、指 針(指針數(shù)組)(3)使用指針數(shù)組處理二維數(shù)組例:int

a[3][4],*p[3],i

;

(*p[3]是指針數(shù)組)for(i=0;i<3;i++)

p[i]=a[i];0]說明:p數(shù)組的三個元素分別是指向整型變量的指0]針(元素指針),指針數(shù)

組名p的增值為一維數(shù)組長度。a[0][a[1][a[2][0]p[0]p[1]p[2]pp+1p+2通過指針p引用數(shù)組元素的方式:p[i][j]*(p[i]+j)*(*(p+i)+j)(*(p+i))[j]注意:a為二維字符數(shù)組的情況P為地址的地址,即指針的指針計算機科學與技術學院計算機等級考試二級C語言八、指 針(指針的指針)指針的指針(二級間址訪問)指向指針數(shù)據(jù)的指針變量又稱為指針的指針,或指針鏈。其定義的一般格式:類型說明符**指針變量名例:static

char

*name[]={“book”,”print”,”gread”};char

**p

;p=name

;定義指針的指針p

p指向指針數(shù)組name則:*p即name[0]*(p+1)

即name[1]*(p+i)

即name[i]name[1]name[2]0book\0print

\gread

\0pname計算機科學與技術學院name數(shù)組

name[0]字符串計算機等級考試二級C語言八、指 針(指針的指針_續(xù))計算機科學與技術學院例:

main(){

char

**p

;static

char

*d[]={“up”,”down”,”left”,”rightint

i

;p=d

;for(i=0;i<4;i++)printf(“%s\n”,*p++);}計算機等級考試二級C語言八、指 針(返回指針值的函數(shù))計算機科學與技術學院返回指針值的函數(shù)(指針函數(shù))一個函數(shù)的返回值為某種數(shù)據(jù)類型的地址值,即指針類型數(shù)據(jù),稱該函數(shù)為指針型函數(shù)。說明返回指針型函數(shù)的格式:類型說明符*函數(shù)名(參數(shù)表);例:int

*a(x,y);計算機等級考試二級C語言八、指 針(返回指針值的函數(shù)_續(xù))void

main(){

static

float

score[][4]={

…………

};/*search()返回指向?qū)嵭蛿?shù)據(jù)的指針*//*

p為指向?qū)嵭蛿?shù)據(jù)的指針*/float

*search();float

*p;

int

i,m

;scanf(“%d”,&m);printf(“The

scores

of

No.%d

are:\n”,m);p=search(score,m);

/*

score為行指針*/for(i=0;i<4;i++)printf(“%5.2f\t”,*(p+i));}float

*search(float

(*pointer)[4],int

n){

float

*pt;pt=*(pointer+n);return(pt);

}pointer+n為第n行的首地址,行指針。*(pointer+n)將指針從行控制轉(zhuǎn)化為列控制,等價于pointer[n],元素指針。計算機科學與技術學院計算機等級考試二級C語言八、指 針(函數(shù)的指針)計算機科學與技術學院指針與函數(shù)(一)函數(shù)指針的定義和說明1、函數(shù)名表示函數(shù)代碼存儲區(qū)的首地址,又稱函數(shù)的入口地址。2、定義指針變量,使之指向函數(shù)入口地址,該指針稱為函數(shù)指針。3、函數(shù)指針定義格式:

類型說明符

(*函數(shù)指針名)(

);例:int

(*p)();

定義函數(shù)指針p指向返回值為整型數(shù)據(jù)的函數(shù)int

max();

已定義一個函數(shù)maxp=max;

將函數(shù)max的入口地址賦予指針變量p,p和max都指向函數(shù)的入口地址計算機等級考試二級C語言八、指 針(函數(shù)的指針_續(xù)1)計算機科學與技術學院幾點說明:函數(shù)指針指向程序代碼區(qū),一般數(shù)據(jù)變量指針指向數(shù)據(jù)區(qū)。(*p)(),注意運算符()優(yōu)先級高于*,*p兩側(cè)括號不能省。*p()表示返回指針值的函數(shù)。函數(shù)指針不能進行++、--、+、-等運算。

函數(shù)可以通過函數(shù)名調(diào)用,也可通過函數(shù)指針調(diào)用。如果函數(shù)指針p指向函數(shù)f1,則對函數(shù)f1的調(diào)用方式是:

(*p)(實參表);計算機等級考試二級C語言八、指 針(函數(shù)的指針_續(xù)2)計算機科學與技術學院(二)函數(shù)指針的使用用函數(shù)指針調(diào)用函數(shù)。函數(shù)指針作為函數(shù)參數(shù),實現(xiàn)兩個或多個函數(shù)之間的調(diào)用控制。使用函數(shù)指針使C

語言具有類似匯編語言的某些功能。計算機等級考試二級C語言八、指 針(函數(shù)的指針_續(xù)3)計算機科學與技術學院void

main(){

int

max(),(*p)();int

a,b,c;p=max;scanf(“%d,%d”,&a,&b);c=(*p)(a,b);printf(“a=%d,b=%d,max=%d”,a,b,c);}int

max(int

x,int

y){

int

zif(x>y)

z=x;else

z=y;return(z);}計算機等級考試二級C語言八、指 針(函數(shù)的指針_續(xù)4)/*函數(shù)max(),min(),add()定義略*/main(){

int

max(),min(),add();int

a,b

;printf(“Enter

a

and

b:”);scanf(“%d%d”,&a,&b);printf(“max=”);

process(a,b,max);printf(“min=”);

process(a,b,min);printf(“sum=”);

process(a,b,add);}process(int

x,int

y,int

(*fun)()){

int

result;result=(*fun)(x,y);printf(“%d\n”,result);

}三次調(diào)用傳遞了三個不同的函數(shù)入口地址利用函數(shù)指針調(diào)用不同的函數(shù),增加了函數(shù)調(diào)用的靈活性計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體結(jié)構(gòu)體一、結(jié)構(gòu)體變量的定義struct結(jié)構(gòu)體名{類型標識符類型標識符成員名1成員名2類型標識符

成員名n};只定義了結(jié)構(gòu)體類型struct結(jié)構(gòu)體名{類型標識符類型標識符成員名1成員名2類型標識符

成員名n}a

,

b

,

c[3];定義了結(jié)構(gòu)體類型和變量struct{類型標識符類型標識符成員名1成員名2.........................................................................類型標識符

成員名n}a

,

b

,

c[3];只定義了結(jié)構(gòu)體變量DATE a

,

b

,

c[3];定義a,b,c為結(jié)構(gòu)體變量計算機科學與技術學院typedef

struct{類型標識符類型標識符成員名1成員名2

注意:考試中多采用此種形式.....................................類型標識符

成員名n

(可嵌套定義)}DATE;定義DATE為結(jié)構(gòu)體類型計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體二、結(jié)構(gòu)體變量的引用只可引用最低級成員struct

data{

int

month;int

day;int

year;};struct{

int

num;char

name[20];char

sex;int

age;struct

data

birthday;char

addr[30];}

stud;

[0]串首地址正確引用stud.birthday.daystud.birthday.year注意:1、運算符“.”為左結(jié)合性,第一級2、成員類型決定引用類型3、引用結(jié)構(gòu)體成員可像普通變量一樣賦值、輸入、輸出、運算計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體三、指向結(jié)構(gòu)體類型數(shù)據(jù)的指針#

include

"string.h"main(){

struct

student{ long

int

num;char

name[20];char

sex;float

score;};structstudent

stu_1;structstudent

*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"Li

Lin");stu_1.sex="M";stu_1.score=89.5;定義結(jié)構(gòu)體變量stu_1定義結(jié)構(gòu)體類型指針P指向stu_1首地址計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體有了指向結(jié)構(gòu)體變量的指針,對結(jié)構(gòu)體變量中成員引用的三種方法:1、結(jié)構(gòu)體變量名.成員名2、(*p).成員名3、p->成員名“*”號運算低于“.”運算P->n++++p->n(++p)->n計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體四、用指針處理鏈表1、有關函數(shù)malloc(size);calloc(n,size);free(p);malloc(sizeof(數(shù)據(jù)類型))calloc(n,sizeof(數(shù)據(jù)類型))/*特殊成員鏈接需要*/2、鏈表結(jié)點的數(shù)據(jù)結(jié)構(gòu):struct

student{int

num;float

sco結(jié)r點e;自身需要struct

student

*next;};計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體計算機科學與技術學院3、鏈表的操作⑴鏈表創(chuàng)建⑵結(jié)點插入⑶結(jié)點刪除⑷鏈表輸出注意:⑴得到鏈表只要得到鏈首指針。⑵調(diào)用函數(shù)對已知鏈表實施操作只要傳遞鏈首指針⑶被調(diào)用函數(shù)都是返回指針值的函數(shù)計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體共用體一、共用體變量的定義union

data{

char

ch;float

f;int

i

;};union

data

a,b,c;union

data{

char

ch;float

f;int

i

;}

a,b,c;union{

char

ch;float

f;int

i

;}

a,b,c;union

data{

char

ch[10];float

f;int

b[5]

;}

a;計算機科學與技術學院占10個字節(jié)內(nèi)存空間計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體二、共用體變量的引用只可引用最低級成員

共用體變量名.成員名不能引用共用體變量,只能引用其成員。出現(xiàn)在結(jié)構(gòu)體的定義中。#include

"stdio.h"struct{

int

num;char

name[10];char

sex;char

job;union{int

class;}

category;}

person[2];同一內(nèi)存段放不同類型成員,某一char

position[10];時刻只有一個即最后存放的成員起作用。計算機科學與技術學院計算機等級考試二級C語言九、結(jié)構(gòu)體與共用體計算機科學與技術學院枚舉類型一、枚舉類型定義和枚舉變量:enum

weekday{sun,mon,tue,wed,thu,fri,sat}day;變量day只可取sun到sat之間的單個值二、枚舉類型的引用說明:1、枚舉元素是用戶自定義的常量,不可賦值。2、C語言按定義順序使枚舉元素的值為0,1,2....定義時可改變枚舉元素的值,后繼元素在其基礎上順序加1enum

week{sun=1,mon=7,tue

w

溫馨提示

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

評論

0/150

提交評論