C語(yǔ)言程序設(shè)計(jì)教案_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教案_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教案_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教案_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教案_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一篇:C語(yǔ)言程序設(shè)計(jì)教案(清華)

第1章C語(yǔ)言概述

學(xué)習(xí)內(nèi)容

1.1C語(yǔ)言出現(xiàn)的歷史背景1.2C語(yǔ)言的特點(diǎn)

1.3簡(jiǎn)單的C語(yǔ)言程序介紹1.4運(yùn)行C程序的步驟與方法

目的要求:

掌握C語(yǔ)言格式特點(diǎn)

熟悉C語(yǔ)言的編輯環(huán)境

重點(diǎn)難點(diǎn):

C語(yǔ)言格式特點(diǎn)

TC編輯器的運(yùn)行、操作

重點(diǎn)難點(diǎn)詳解:

【例1.3】通過(guò)調(diào)用子函數(shù)求兩個(gè)數(shù)的和。main()/*主函數(shù)*/

{inta,b,sum;/*定義變量*/a=3;b=4;/*變量賦值*/sum=add(a,b);/*調(diào)用add函數(shù)*/

printf("sum=a+b=%d.\n",sum);}intadd(intx,inty){intz;z=x+y;return(z);/*將z的值返回*/}C程序的組成規(guī)

則:

1、C程序是由函數(shù)構(gòu)成的。

C語(yǔ)言是函數(shù)的語(yǔ)言,一個(gè)程序是由一個(gè)或多個(gè)函數(shù)構(gòu)成的。

2、一個(gè)函數(shù)有兩部分組成:

(1)函數(shù)的首部(函數(shù)的第一行)。

(2)函數(shù)體即函數(shù)首部下面的大括弧內(nèi)的部分。

(3)一個(gè)C程序總是從main主函數(shù)開(kāi)始執(zhí)行。無(wú)論位置如何。(4)每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必

須有一個(gè)分號(hào)“;”。

(5)C語(yǔ)言本身沒(méi)有輸入/輸出語(yǔ)句,是庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成的。(6)用/**/作注

釋,以用于增加可讀性。TC編輯器的運(yùn)行、操作

1.編輯源文件——2.源文件的編譯——3.目標(biāo)程序的連接——4.執(zhí)行程序——查看結(jié)果操作步驟

Alt+F9Ctr+F9Alt+F5

第二章程序的靈魂—————算法

學(xué)習(xí)內(nèi)容

2.1算法的概念

2.2簡(jiǎn)單算法舉例2.3算法的特征2.4算法的表示方法

2.5結(jié)構(gòu)化程序設(shè)計(jì)方法

目的要求:

掌握算法的各種表示方法熟悉N-S流程圖

重點(diǎn)難點(diǎn):

N-S流程圖重點(diǎn)難點(diǎn)詳解:

用N-S流程圖描述算法

傳統(tǒng)的流程圖用流程線和流程元素表示各個(gè)處理的執(zhí)行順序,但對(duì)流程線的使用沒(méi)有嚴(yán)格的規(guī)定,因

此,使用者可以不受限制地使流程轉(zhuǎn)來(lái)轉(zhuǎn)去,這樣的流程圖使人難以理解算法的邏輯。為了解決這個(gè)問(wèn)題,

規(guī)定了算法的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。用這些基本結(jié)構(gòu)按一定的規(guī)律組成一個(gè)算

法,這樣的算法稱為結(jié)構(gòu)化算法。按照結(jié)構(gòu)化算法編寫(xiě)的程序稱為結(jié)構(gòu)化程序。為了設(shè)計(jì)結(jié)構(gòu)化算法,1973

年,美國(guó)學(xué)者I.Nassi和B.Shneiderman提出提出一種新的流程圖,稱為N-S流程圖。

條件p當(dāng)條件p成立操作A操作A成立不成立

操作A操作B操作A操作B直到條件p成立

當(dāng)型循環(huán)直到型循環(huán)

順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)

N-S流程圖基本符號(hào)0=>s

1=>i例如例2.3.1節(jié)的計(jì)算1+2+3+?+1000

s+i=>s的算法用N-S流程圖

i+1=>i

直到i>1000

輸出s

計(jì)算1+2+3+?+1000算法的N-S圖第三章

數(shù)據(jù)類型、運(yùn)算符與表達(dá)式

學(xué)習(xí)內(nèi)容

3.1C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)3.2常量與變量3.3整數(shù)類型3.4浮點(diǎn)型數(shù)據(jù)3.5字符型數(shù)據(jù)3.6變量賦初值

3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.9賦值運(yùn)算符和賦值表達(dá)式3.10逗

號(hào)運(yùn)算符及表達(dá)式

目的要求:

掌握整數(shù)類型與浮點(diǎn)型數(shù)據(jù)類型

掌握標(biāo)識(shí)符的命名規(guī)則

數(shù)據(jù)的儲(chǔ)存方式

字符型數(shù)據(jù)

標(biāo)識(shí)符、常量、變量及初始化

掌握運(yùn)算符及其表達(dá)式

掌握賦值運(yùn)算符和賦值表達(dá)式

重點(diǎn)難點(diǎn):

整數(shù)類型與浮點(diǎn)型數(shù)據(jù)類型

標(biāo)識(shí)符的命名規(guī)則

復(fù)合賦值運(yùn)算符

運(yùn)算符及其表達(dá)式

重點(diǎn)難點(diǎn)詳解:

整型數(shù)據(jù)

1.整型數(shù)據(jù)的在內(nèi)存中的存放形式2.整型變量的分類

1)基本整型一般為2字節(jié)2)短整型一般為2字節(jié)3)長(zhǎng)整型一般為4字節(jié)3.整型數(shù)據(jù)的溢出

如何判斷整型常量的類型。

①若在-32768—32767之間,可認(rèn)為是普通整型int型或短整型(short型)。

②若超出了-32768—32767,而在-2147483648—+2147483647之間,則認(rèn)為是長(zhǎng)整型(long型)。若認(rèn)為

是int類型的,系統(tǒng)不做檢查,但數(shù)據(jù)會(huì)丟失。4.整型常量的類型

(1)十進(jìn)制整型常量:28

9、-183等。每個(gè)數(shù)位都可以是(0~9)十個(gè)代碼。(2)八進(jìn)制整型常量:以o開(kāi)頭,如(128)10

=o200。(3)十六進(jìn)制整型常量:以ox開(kāi)頭,如(128)16=ox80。如何判斷整型常量的類型。

①若在-32768—32767之間,可認(rèn)為是普通整型int型或短整型(short型)。②若超出了-32768—32767,

而在-2147483648—+2147483647之間,則認(rèn)為是長(zhǎng)整型(long型)。若認(rèn)為是int類型的,系統(tǒng)不做檢查,但

數(shù)據(jù)會(huì)丟失。③若常量是無(wú)符號(hào)型(unsigned型),那么一個(gè)非負(fù)值的整數(shù)可以賦值給unsigned型變量,

但要注意其范圍。50000可賦給unsignedint型,70000卻不可以。(無(wú)符號(hào)整型變量最大值65535.)

④如一整型常量后有L或l則表示為longint型的。常用于函數(shù)的調(diào)用中。5.整型變量的定義

①變量定義的一般格式

[存儲(chǔ)類型]數(shù)據(jù)類型變量名[,變量名2??];

例如,intd,l,a;

定義變量時(shí)指定變量的類型,在編譯時(shí)好為其分配相應(yīng)的存儲(chǔ)單元。另外,還可在編譯時(shí)檢查該變量

所做運(yùn)算是否合法。

一般稱在定義變量的同時(shí)進(jìn)行賦初值的操作為變量初始化。

②變量初始化的一般格式

[存儲(chǔ)類型]數(shù)據(jù)類型變量名[=初值][,變量名2[=初值2,??]];

例如,intd=2,l=6,a;

浮點(diǎn)型數(shù)據(jù)類型

1浮點(diǎn)型常量的表示方法

(1)十進(jìn)制小數(shù)形式:由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分組成。

(2)指數(shù)形式:由實(shí)數(shù)部分、E(e)和整數(shù)部分組成。2.浮點(diǎn)型數(shù)據(jù)的在內(nèi)存中的存放形式3.浮

點(diǎn)型變量的分類

①單精度型:關(guān)鍵字float,一般占4字節(jié)(32位),提供7位有效數(shù)字。②雙精度型:關(guān)鍵字double,

一般占8?jìng)€(gè)字節(jié)、提供15~16位有效數(shù)字。③長(zhǎng)雙精度型:關(guān)鍵字longdouble,3.實(shí)型數(shù)據(jù)的舍入誤差

請(qǐng)注意有效為數(shù)。4.浮點(diǎn)型常量的類型

一個(gè)實(shí)型常量賦值給一個(gè)實(shí)型變量時(shí),只根據(jù)實(shí)型變量表示的有效數(shù)字的位數(shù),在實(shí)型常量中按從左

向右的方向截取數(shù)據(jù)。Float型的變量只能保存七位有效數(shù)字,double型的變量只能保存15~16位有效數(shù)字。

5.浮點(diǎn)型變量的定義

和前面整型變量的定義的方法一樣。標(biāo)識(shí)符的命名規(guī)則

標(biāo)識(shí)符是一個(gè)字符序列,用來(lái)標(biāo)識(shí)C語(yǔ)言程序中一個(gè)對(duì)象的名字。命名時(shí)應(yīng)注意以下幾點(diǎn):

1)標(biāo)識(shí)符是一串英文字母或下劃線開(kāi)頭的由字母、數(shù)字和下劃線組成的字符串。例如:aaBCx2zy_1_A

n0都是合法的標(biāo)識(shí)符;而3d#asd110A*C∏∑π都是非法標(biāo)識(shí)符。

2)C語(yǔ)言本身并沒(méi)有要求標(biāo)識(shí)符的長(zhǎng)度,不同的C編譯系統(tǒng)允許包含的字符個(gè)數(shù)有所不同,通常標(biāo)識(shí)

符的長(zhǎng)度可識(shí)別的標(biāo)識(shí)符長(zhǎng)度常限制為8個(gè)字符。

3)標(biāo)識(shí)符大小字母含義不同。比如abcAbcABC代表三個(gè)不同標(biāo)識(shí)符,這一點(diǎn)一定要牢記。復(fù)合賦值

運(yùn)算符

合賦值運(yùn)算符是由賦值運(yùn)算符之前再加一個(gè)雙目運(yùn)算符構(gòu)成的。

復(fù)合賦值運(yùn)算的一般格式為:

變量雙目運(yùn)算符=表達(dá)式└──┬──┘復(fù)合賦值運(yùn)算符

它等價(jià)于:變量=變量雙目運(yùn)算符(表達(dá)式)。

當(dāng)表達(dá)式為簡(jiǎn)單表達(dá)式時(shí),表達(dá)式外的一對(duì)圓括號(hào)才可缺省,否則可能出錯(cuò)。例如:x+=3/*等價(jià)于

x=x+3*/y*=x+6/*等價(jià)于y=y*(x+6),而不是y=y*x+6*/C語(yǔ)言規(guī)定的10種復(fù)合賦值運(yùn)算符如下:

+=,-=,*=,/=,%=;/*復(fù)合算術(shù)運(yùn)算符(5個(gè))*/&=,^=,|=,>=;/*復(fù)合位運(yùn)算符(5個(gè))*/其中

后五種是位運(yùn)算的運(yùn)算符,在位運(yùn)算那章介紹。運(yùn)算符及其表達(dá)式

算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.基本的算術(shù)表達(dá)式

+加法運(yùn)算符或正值運(yùn)算符-減法運(yùn)算符或負(fù)值運(yùn)算符*乘法運(yùn)算符

/除法運(yùn)算符TC2.0采取“向零取整”法

%模運(yùn)算符或稱求余運(yùn)算符該運(yùn)算符的兩邊只能是整型數(shù)據(jù)。2.算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)

合性左結(jié)合性、右結(jié)合性3.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符

除自動(dòng)轉(zhuǎn)換外,C語(yǔ)言也允許強(qiáng)制轉(zhuǎn)換。

數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換的一般格式為:(要轉(zhuǎn)換成的數(shù)據(jù)類型)(被轉(zhuǎn)換的表達(dá)式)(類型)(表達(dá)式)

例如:(int)(x+y)將x+y/*的結(jié)果轉(zhuǎn)換成int型*/(float)5/2(等價(jià)于(float)(5)/2)/*將5轉(zhuǎn)換成實(shí)型,再除

以2(=2.5)*/(float)(5/2)將5/*整除2的結(jié)果(2)轉(zhuǎn)換成實(shí)型(2.0)*/注意:強(qiáng)制轉(zhuǎn)換類型得到的是一

個(gè)所需類型的中間量,原表達(dá)式類型并不發(fā)生變化。例如,(double)a只是將變量a的值轉(zhuǎn)換成一個(gè)double

型的中間量,其數(shù)據(jù)類型并未轉(zhuǎn)換成double型。

4.自增、自減運(yùn)算符(++、--)

(1)作用

自增運(yùn)算使單個(gè)變量的值增1,自減運(yùn)算使單個(gè)變量的值減1。

(2)用法與運(yùn)算規(guī)則

自增、自減運(yùn)算符都有兩種用法。

a)前置運(yùn)算——運(yùn)算符放在變量之前:++變量、--變量

先使變量的值增(或減)1,然后再以變化后的值參與其它運(yùn)算,即先增減,后運(yùn)算。

b)后置運(yùn)算——運(yùn)算符放在變量之后:變量++、變量--

變量先參與其它運(yùn)算,然后再使變量的值增(或減)1,即先運(yùn)算,后增減。

例如:k=1;k=1;

演示1-9

j=++k;j=k++;左邊:k先變成2,j=2右邊:k為1,j=1然后k為2。

使用中的問(wèn)題說(shuō)明:

(1)這兩種、運(yùn)算符只能用于變量,而不能用于常量或表達(dá)式。(2)++、--運(yùn)算符的優(yōu)先相同,

但比算術(shù)運(yùn)算符優(yōu)先級(jí)要高。其結(jié)合性是“從右至左”的。

i=3;j=-(i++);i=3;(j=+++i);

printf(“%d,%d”,i,j);printf(“%d,%d”,i,j);

結(jié)果是:4,-3結(jié)果是:4,4

第四章順序結(jié)構(gòu)程序設(shè)計(jì)

學(xué)習(xí)內(nèi)容:

4.1C語(yǔ)句概述4.2賦值語(yǔ)句

4.3數(shù)據(jù)輸入輸出

4.4字符數(shù)據(jù)的輸入輸出4.5格式輸入和輸出

4.6順序結(jié)構(gòu)程序設(shè)計(jì)舉例

目的要求:

掌握順序結(jié)構(gòu)程序設(shè)計(jì)方法

掌握數(shù)據(jù)的輸入輸出

重點(diǎn)難點(diǎn):

數(shù)據(jù)的輸入輸出

重點(diǎn)難點(diǎn)詳解:

數(shù)據(jù)的輸入輸出

1.printf函數(shù)(格式輸出函數(shù))

printf()函數(shù)的作用:向計(jì)算機(jī)系統(tǒng)默認(rèn)的輸出設(shè)備(一般指終端或顯示器)輸出一個(gè)或多個(gè)任意類型的

數(shù)據(jù)。

(1)printf函數(shù)調(diào)用的一般形式為:printf(“格式字符串”,輸出表列);例如:

printf("radius=%f\nlength=%7.2f,area=%7.2f\n",r,l,a);格式字符串也稱格式控制字符串或格式轉(zhuǎn)換字符串,其

中可以包含下列三種字符:

①格式指示符:由“%”和格式字符組成,例如“%f”、“%7.2f”等,這總是由“%”字符開(kāi)始,到格式

字符終止。它的作用是將輸出的數(shù)據(jù)項(xiàng)轉(zhuǎn)換為指定的格式輸出。輸出表列中的每個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)一個(gè)格式指

示符。②轉(zhuǎn)義字符:這些字符通常用來(lái)控制光標(biāo)的位置。

③普通字符:除格式指示符和轉(zhuǎn)義字符之外的其他字符,這些字符輸出時(shí)原樣輸出,例如上面例子中

的“radius=”等。

(2)類型字符:

%d十進(jìn)制整數(shù)inta=567;printf(“%d”,a);567%o八進(jìn)制無(wú)符號(hào)整數(shù)inta=65;printf(“%o”,a);101%x

或X十六進(jìn)制無(wú)符號(hào)整數(shù)inta=65;printf(“%x”,a);ff%u不帶符號(hào)十進(jìn)制整數(shù)inta=567;printf(“%u”,a);

567%c單一字符chara=65;printf(“%c”,a);A%f小數(shù)形式浮點(diǎn)小數(shù)floata=456.789;printf(“%f”,a);

456.789000%s字符串printf(“%s”“,ABC”);ABC%e或E指數(shù)形式浮點(diǎn)小數(shù)floata=456.789;printf(“%e”,a);

4.567890e+02%g或Ge和f中較短一種floata=456.789;printf(“%g”,a);456.789說(shuō)明:

格式字符要用小寫(xiě)

格式字符與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先后順序一一對(duì)應(yīng)

輸出轉(zhuǎn)換:格式字符與輸出項(xiàng)類型不一致,自動(dòng)按指定格式輸出

2.scanf函數(shù)(格式輸入函數(shù))(1).scanf函數(shù)的一般形式

格式:scanf(“格式控制字符串”,地址表列);功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表

指定的存儲(chǔ)單元中,并按回車鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)

地址表列:變量的地址,常用取地址運(yùn)算符&格式字符:d,i,o,x,u,c,s,f,e使用scanf()時(shí)應(yīng)注意的一些問(wèn)題:

①scanf函數(shù)中沒(méi)有精度控制,不能企圖用格式控制符來(lái)規(guī)定輸入數(shù)據(jù)的精度scanf(“%5.2f”,&a)×

②scanf中要求給出變量地址,如給出變量名則會(huì)出錯(cuò)。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);

才是合法的。

③在輸入字符數(shù)據(jù)時(shí),若格式控制串中無(wú)非格式字符,則認(rèn)為所有輸入的字符均為有效字符。

④在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒(méi)有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或

回車作間隔。在輸入數(shù)據(jù)時(shí)遇到以下情況之一認(rèn)為一個(gè)數(shù)據(jù)輸入結(jié)束字符數(shù)據(jù)的輸入輸出

1.putchar函數(shù)(字符輸出函數(shù))

putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。其一般形式為:putchar(字符變量)

例如:

putchar('A');(輸出大寫(xiě)字母A)putchar(x);(輸出字符變量x的值)putchar('\n');(換行)

2.getchar函數(shù)(鍵盤輸入函數(shù))

getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。其一般形式為:getchar();通常把輸入的字符賦予一個(gè)

字符變量,構(gòu)成賦值語(yǔ)句,如:charc;c=getchar();

第五章選擇結(jié)構(gòu)程序設(shè)計(jì)

學(xué)習(xí)內(nèi)容:

5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式5.2邏輯運(yùn)算符和邏輯表達(dá)式5.3if語(yǔ)句

5.4switch語(yǔ)句

目的要求:

掌握關(guān)系運(yùn)算符邏輯、條件運(yùn)算符及其它們的表達(dá)式掌握if語(yǔ)句掌握switch語(yǔ)句

重點(diǎn)難點(diǎn):

If語(yǔ)句Switch語(yǔ)句

重點(diǎn)難點(diǎn)詳解:

If語(yǔ)句

用if語(yǔ)句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。C語(yǔ)言的if

語(yǔ)句有三種基本形式。

1.第一種形式為基本形式

if(表達(dá)式)語(yǔ)句;

其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。

2.第二種形式為if-else形式if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)

行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。3.第三種形式為if-else-if形式

前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一

般形式為:if(表達(dá)式1)語(yǔ)句1;

elseif(表達(dá)式2)語(yǔ)句2;

elseif(表達(dá)式3)語(yǔ)句3;

?

elseif(表達(dá)式m)語(yǔ)句m;else語(yǔ)句n;其語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則

執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。

然后繼續(xù)執(zhí)行后續(xù)程序。if-else-if語(yǔ)句的執(zhí)行過(guò)程如圖3—3所示。4.在使用if語(yǔ)句中還應(yīng)注意以下問(wèn)題

(1)在三種形式的if語(yǔ)句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,

但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如:

if(a=5)語(yǔ)句;

if(b)語(yǔ)句;

都是允許的。只要表達(dá)式的值為非0,即為“真”。如在if(a=5)?;中表達(dá)式的值永遠(yuǎn)為非0,所以其后

的語(yǔ)句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會(huì)出現(xiàn),但在語(yǔ)法上是合法的。

(2)在if語(yǔ)句中,條件判斷表達(dá)式必須用括號(hào)括起來(lái),在語(yǔ)句之后必須加分號(hào)。

(3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,

則必須把這一組語(yǔ)句用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在}之后不能再加分號(hào)。Switch語(yǔ)句

C語(yǔ)言還提供了另一種用于多分支選擇的switch語(yǔ)句,其一般形式為:

switch(表達(dá)式){

case常量表達(dá)式1:語(yǔ)句1;

case常量表達(dá)式2:語(yǔ)句2;

?

case常量表達(dá)式n:語(yǔ)句n;

default

:語(yǔ)句n+1;

}

其語(yǔ)義是:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式

的值相等時(shí),即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如表達(dá)式的值

與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。

在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):

1.在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。2.在case后,允許有多個(gè)語(yǔ)句,可以不

用{}括起來(lái)。

3.各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。4.default子句可以省略不用。

第六章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

學(xué)習(xí)內(nèi)容:

6.1概述

6.2goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)6.3while語(yǔ)句

6.4do?while語(yǔ)句

6.5for語(yǔ)句6.6循環(huán)的嵌套6.7幾中循環(huán)的比較

6.8break語(yǔ)句和continue語(yǔ)句

目的要求:掌握while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句掌握循環(huán)的嵌套

重點(diǎn)難點(diǎn):

for語(yǔ)句

Break和continue語(yǔ)句

重點(diǎn)難點(diǎn)詳解:

for語(yǔ)句

for語(yǔ)句是C語(yǔ)言中所提供的功能最強(qiáng)、使用最為靈活的一種循環(huán)語(yǔ)句。特別適用于循環(huán)次數(shù)固定而循

環(huán)條件不確定的情況。

for語(yǔ)句的一般形式如下:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{……

}

(1)表達(dá)式1通常是用來(lái)給循環(huán)變量賦初值,一般是賦值表達(dá)式。也允許在for語(yǔ)句之外給循環(huán)變量

賦初值,此時(shí)可省略該表達(dá)式;

(2)表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其它表達(dá)式;

(3)表達(dá)式3通??捎脕?lái)修改循環(huán)變量的值,一般是賦值表達(dá)式。

三個(gè)表達(dá)式都是可選項(xiàng),都可以省略。但特別提請(qǐng)注意的是,表達(dá)式1和表達(dá)式2后的分號(hào)“;”不能

省略。

for語(yǔ)句的執(zhí)行過(guò)程如下:

(1)首先計(jì)算表達(dá)式1的值;

(2)再計(jì)算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體語(yǔ)句一次,否則跳出循環(huán);(3)循環(huán)體

語(yǔ)句執(zhí)行完后,再計(jì)算表達(dá)式3的值,轉(zhuǎn)(2)步去執(zhí)行。在整個(gè)for循環(huán)過(guò)程中,表達(dá)式1只計(jì)算一次,

表達(dá)式2和表達(dá)式3則可能計(jì)算多次。

for語(yǔ)句的流程圖

for語(yǔ)句最主要的特點(diǎn)是:特別適合已知循環(huán)次數(shù)的循環(huán)語(yǔ)句,下面介紹一下for語(yǔ)句中循環(huán)次數(shù)的計(jì)

算方法。根據(jù)for循環(huán)的循環(huán)變量的變化情況。循環(huán)次數(shù)的計(jì)算可以用公式進(jìn)行計(jì)算:

n=(int)((終值-初值+步長(zhǎng))/步長(zhǎng))

其中,初值指循環(huán)變量的初始值,終值指循環(huán)變量滿足條件的最終值,步長(zhǎng)指循環(huán)變量每循環(huán)一次所

變化的量。

例如:循環(huán)語(yǔ)句for(n=1;n

n=(int)((100-1+1)/1)=100

又如:循環(huán)語(yǔ)句for(n=100;n

n=(int)((1-100-2)/(-2))=50

在使用for語(yǔ)句中要注意以下幾點(diǎn):

(1)for語(yǔ)句中的各表達(dá)式都可省略,但分號(hào)間隔符不能少;如:for(;表達(dá)式;表達(dá)式)省去了表達(dá)式1;

for(表達(dá)式;;表達(dá)式)省去了表達(dá)式2;for(表達(dá)式;表達(dá)式;)省去了表達(dá)式3;for(;;)省去了全部表達(dá)式。

(2)在循環(huán)變量已賦初值時(shí),可省去表達(dá)式1。如省去表達(dá)式2或表達(dá)式3則將造成無(wú)限循環(huán),這時(shí)應(yīng)在

循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán)。

(3)循環(huán)體可以是空語(yǔ)句。例如:從鍵盤輸入一行字符然后逐個(gè)輸出每一個(gè)字符。

(4)for語(yǔ)句也可與while,do-while語(yǔ)句相互嵌套,構(gòu)成多重循環(huán)。

Break和continue語(yǔ)句

break語(yǔ)句有兩種用法。第一種用法是在switch語(yǔ)句中,跳出switch結(jié)構(gòu),轉(zhuǎn)去執(zhí)行后面的程序,其用

法在第三章中已經(jīng)介紹;第二種用法是,繞過(guò)一般的循環(huán)條件檢驗(yàn),立即強(qiáng)制地中止一個(gè)循環(huán)。下面介紹

第二種用法:

break語(yǔ)句的一般形式如下:

break;

當(dāng)一個(gè)循環(huán)體內(nèi)的break語(yǔ)句被執(zhí)行時(shí),循環(huán)立即中斷,并轉(zhuǎn)向循環(huán)體外的下一條語(yǔ)句.Continue語(yǔ)句

有點(diǎn)像break語(yǔ)句。continue語(yǔ)句只能用在循環(huán)體內(nèi),不能用在其他位置。

其一般形式如下:

continue;

其功能是:結(jié)束本次循環(huán),即不再執(zhí)行該循環(huán)體中continue語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的

判斷與執(zhí)行,所以有時(shí)又稱短路語(yǔ)句。應(yīng)當(dāng)注意的是:break語(yǔ)句在循環(huán)體中的作用是結(jié)束整個(gè)循環(huán),而

continue語(yǔ)句只結(jié)束本次循環(huán),繼續(xù)下一次循環(huán),即并不退出循環(huán)。

計(jì)算機(jī)等級(jí)考試試題講解

熟練掌握程序設(shè)計(jì)的三種方法。怎么樣求解完全數(shù)、完備數(shù)求解同構(gòu)數(shù)、求解素?cái)?shù)的方法

求解Fibonacci數(shù)列、自然數(shù)的階乘

第七章數(shù)組

學(xué)習(xí)內(nèi)容:

7.1一維數(shù)組的定義和引用7.2二維數(shù)組的定義和引用7.3字符數(shù)組和字符串目的要求:

掌握一維數(shù)組定義初始化

掌握選擇排序、氣泡排序、插入排序的解題方法掌握二維數(shù)組定義初始化掌握字符數(shù)組和字符串的

區(qū)別如何利用字符數(shù)組來(lái)存放字符串

重點(diǎn)難點(diǎn):

二維數(shù)組使用字符數(shù)組的應(yīng)用字符串的存放

重點(diǎn)難點(diǎn)詳解:

二維數(shù)組使用

二維字符數(shù)組的每一行可以看作一維字符數(shù)組,即二維字符數(shù)組的每一行可以存放一個(gè)字符串,于是二

維字符數(shù)組又稱為字符串?dāng)?shù)組.

#includevoidmain(){inti,j;chardiamond[5][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};

for(i=0;i

一、字符數(shù)組的定義:chara[19],a[10][10];二.初始化:

1、將逐個(gè)字符賦給數(shù)組中個(gè)元素。

staticchara[4]={?h?,?o?,?w?,?!?}

2.可直接將一C字符串賦予某一字符數(shù)組。

staticcharstr[8]=”program”;三.字符數(shù)組的引用。

可以引用字符數(shù)組中每一個(gè)元素,得到一個(gè)字符。%c可以對(duì)整體處理。%s

四、字符串和字符串結(jié)束標(biāo)志字符串的結(jié)束標(biāo)志是‘\0’,這是系統(tǒng)自動(dòng)加上的。

在初始化時(shí),注意:staticcharc[4]={?b?,?o?,?y?};與staticcharc[4]=“boy”;有區(qū)別。字符串的存放

1、puts()函數(shù):輸出字符串(以'\0'結(jié)尾)。例、

staticcharc[6]="China";printf、puts均以'\0'結(jié)尾.printf("%s\n",c);printf需要格式控制符%sputs(c);puts

不需要格式控制符,且自動(dòng)換行

2、gets()函數(shù):輸入字符串到數(shù)組。例、staticcharstr[12];gets(str);注意:gets()、puts()一次只能輸入

輸出一個(gè)字符串。而scanf()、printf()可以輸入輸出幾個(gè)字符串。例:#include“stdio.h”main(){charstr[80];

gets(str);puts(str);}注意:scanf():輸入字符串使用“%s”,輸入的字符串中不能包含?\0?字符(空格),否則輸

入結(jié)束,輸入的字符數(shù)組名不要加入“&”,一個(gè)scanf()語(yǔ)句一次可以輸入多個(gè)字符串。

Printf():輸出字符串使用“%s”,輸出的字符串中不能包含?\0?字符,否則輸出結(jié)束,一個(gè)prinft()語(yǔ)句一

次可以輸出多個(gè)字符串。gets():使用gets(字符數(shù)組名)形式,輸入字符串中可以包含?\0?字符,但一個(gè)gets()

一次只可以輸入一個(gè)字符串。

puts():使用puts(字符數(shù)組名)形式,輸出字符串可以包含?\0?字符,但一個(gè)gets()一次只可以輸出一個(gè)字符

串。

3、strcat():連接字符串。strcat(字符串1,字符串2);把“字符串2”連接到“字符串1”的后面。

4、strcpy():字符串拷貝。strcpy(字符串1,字符串2);把“字符串2”的值拷貝到“字符串1”中

不能用賦值語(yǔ)句將一個(gè)字符串常量直接賦給一個(gè)字符數(shù)組,應(yīng)使用strcpy()函數(shù)。

5、strcmp():字符串比較。

比較“字符串1”、“字符串2”,例、strcmp(str1,str2);strcmp("China","Korea");strcmp(str1,"Beijing");比

較規(guī)則:逐個(gè)字符比較ASCII碼,直到遇到不同字符或?\0?,比較結(jié)果是該函數(shù)的返回值。

6、strlwr():將字符串中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母(lwr:lowercase小寫(xiě))。

7、strupr():將字符串中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母(upr:uppercase大寫(xiě))。

注意:以上函數(shù)均是庫(kù)函數(shù),使用時(shí)必須用#include語(yǔ)句包含頭文件。#include“string.h”

第八章函數(shù)

學(xué)習(xí)內(nèi)容:

8.1概述

8.2函數(shù)的定義

8.3函數(shù)參數(shù)和函數(shù)的值8.4函數(shù)的調(diào)用8.5函數(shù)的嵌套8.6函數(shù)的遞歸

8.8局部變量和全局變量8.9變量的存儲(chǔ)類型

8.10外部函數(shù)和內(nèi)部函數(shù)

目的要求:

怎么定義函數(shù)函數(shù)怎么樣調(diào)用掌握函數(shù)的嵌套掌握函數(shù)的遞歸調(diào)用熟悉c中四種存儲(chǔ)類別熟悉外

部函數(shù)和內(nèi)部函數(shù)

重點(diǎn)難點(diǎn):

函數(shù)的定義函數(shù)的調(diào)用函數(shù)的嵌套四種存儲(chǔ)類別

重點(diǎn)難點(diǎn)詳解:

函數(shù)的定義:1.函數(shù)定義的形式

根據(jù)前面函數(shù)的分類,我們知道函數(shù)中各種各樣的函數(shù)形式是有區(qū)別的,函數(shù)是存在有、無(wú)返回值,

有、無(wú)參數(shù)之分的。我們這里研究最復(fù)雜的形式,然后通過(guò)簡(jiǎn)化得到其它簡(jiǎn)單形式。根據(jù)使用方式一般有

二種定義形式。(1)傳統(tǒng)的定義形式

[類型標(biāo)識(shí)符]函數(shù)名([形參列表])形參說(shuō)明{聲明部分

語(yǔ)句/*功能實(shí)現(xiàn)部分*/[return表達(dá)式;]}(2)現(xiàn)代的定義形式

[類型標(biāo)識(shí)符]函數(shù)名([數(shù)據(jù)類型形式參數(shù),數(shù)據(jù)類型形式參數(shù),……]){聲明部分

語(yǔ)句/*功能實(shí)現(xiàn)部分*/[return表達(dá)式;]}函數(shù)的傳統(tǒng)定義形式和現(xiàn)代定義形式主要的區(qū)別是在形

式參數(shù)的定義形式上,當(dāng)沒(méi)有形式參數(shù)的時(shí)候是一致的。例如一個(gè)求2個(gè)數(shù)最大值的函數(shù)定義如下:/*傳

統(tǒng)定義形式*/intmax(x,y)intx,y;{if(x>y)returnx;elsereturny;}/*現(xiàn)代的定義形式*/intmax(intx,inty)

{if(x>y)returnx;elsereturny;}現(xiàn)在各種書(shū)中一般都采用現(xiàn)代的定義形式,以后例子中我們都是采用現(xiàn)代的

定義形式,針對(duì)現(xiàn)代定義形式,進(jìn)行說(shuō)明:

(1)定義形式中最上面的一行是函數(shù)的頭。函數(shù)的頭一般描述了這個(gè)函數(shù)的返回值類型、函數(shù)名和形

式參數(shù)。由一對(duì)花括號(hào)“{}”括起來(lái)的部分稱為函數(shù)

體,函數(shù)體是書(shū)寫(xiě)語(yǔ)句的地方,是函數(shù)的功能實(shí)現(xiàn)部分,在這里語(yǔ)句的書(shū)寫(xiě)方式和以前所講過(guò)的main函

數(shù)的書(shū)寫(xiě)方式是一樣的。

(2)函數(shù)名是唯一標(biāo)識(shí)一個(gè)函數(shù)的名字,它的命名規(guī)則與變量的命名規(guī)則相同。在一個(gè)程序中,除

main函數(shù)外,其它的自定義函數(shù)的名字都是由用戶指定的,命名時(shí)除了不要與系統(tǒng)的關(guān)鍵字、庫(kù)函數(shù)的名

字相同外,用戶要同變量命名一樣做到“見(jiàn)名知義”。(3)當(dāng)函數(shù)名前的類型標(biāo)識(shí)符指定為“void”時(shí),

這樣的函數(shù)是一個(gè)無(wú)返回值的函數(shù),對(duì)應(yīng)的函數(shù)體中是不需要return語(yǔ)句的。當(dāng)函數(shù)名前的類型標(biāo)識(shí)符為

一種類型的關(guān)鍵字或未指定(默認(rèn)為int)時(shí),函數(shù)體中的return語(yǔ)句是需要的,這就說(shuō)明這個(gè)函數(shù)是一個(gè)有

返回值的函數(shù),當(dāng)函數(shù)執(zhí)行完畢時(shí)將帶回一個(gè)類型為所指定(未指定時(shí)默認(rèn)為int)的值給主調(diào)函數(shù)。

當(dāng)定義了返回值類型,而在函數(shù)體中不用return語(yǔ)句,這樣函數(shù)會(huì)帶回一個(gè)不確定的值,這樣的值是

沒(méi)有用的,所以當(dāng)不需要一個(gè)函數(shù)的返回值時(shí),最好定義成無(wú)返回值的類型(用void指定)。

(4)函數(shù)名后面的一對(duì)圓括號(hào)中為函數(shù)的形式參數(shù)定義,當(dāng)括號(hào)為空的時(shí)候,表示這個(gè)函數(shù)是一個(gè)無(wú)

參數(shù)的函數(shù),調(diào)用時(shí)不需要提供參數(shù)。當(dāng)括號(hào)內(nèi)為非空時(shí),則代表調(diào)用這個(gè)函數(shù)時(shí)需要提供參數(shù),參數(shù)的

定義形式同定義一個(gè)變量是一樣的。當(dāng)有多個(gè)參數(shù)時(shí),各參數(shù)之間用逗號(hào)分割。函數(shù)的調(diào)用

1.函數(shù)的調(diào)用方式

當(dāng)函數(shù)定義好后,就可以在主函數(shù)中調(diào)用了,這是最簡(jiǎn)單的調(diào)用形式了。C語(yǔ)言中,函數(shù)調(diào)用的一般

形式為:

函數(shù)名([實(shí)際參數(shù)列表])在函數(shù)調(diào)用中,對(duì)于無(wú)參函數(shù)調(diào)用時(shí)是沒(méi)有實(shí)際參數(shù)列表。實(shí)際參數(shù)列表中的

參數(shù)可以是常數(shù),變量或其它構(gòu)造類型數(shù)據(jù)及表達(dá)式,各實(shí)際參數(shù)之間用逗號(hào)分隔。

(1)函數(shù)表達(dá)式:函數(shù)作為表達(dá)式中的一項(xiàng)出現(xiàn)在表達(dá)式中,這種形式是使用函數(shù)的返回值參與了表

達(dá)式的運(yùn)算,這種方式要求函數(shù)是有返回值的。當(dāng)是無(wú)參數(shù)函數(shù)調(diào)用時(shí)實(shí)際參數(shù)列表是空的,但后面的一

對(duì)圓括號(hào)是不能缺少的,當(dāng)有參數(shù)時(shí)要在圓括號(hào)中提供實(shí)際參數(shù)。例如:z=max(x,y)是一個(gè)賦值表達(dá)式,把

調(diào)用max函數(shù)的返回值賦給變量z。

(2)函數(shù)語(yǔ)句:函數(shù)調(diào)用的一般形式加上分號(hào)即構(gòu)成函數(shù)語(yǔ)句,這種調(diào)用形式可以是無(wú)返回值的函數(shù)

調(diào)用形式,或有返回值的并不使用這個(gè)函數(shù)返回值也可以這樣調(diào)用。例如:printf("%d",a);、print_star();都是

以函數(shù)語(yǔ)句的方式調(diào)用函數(shù)的。

(3)函數(shù)實(shí)參:一個(gè)函數(shù)調(diào)用作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作

為另外一個(gè)函數(shù)的實(shí)際參數(shù)進(jìn)行使用,因此要求該函數(shù)必須是有返回值的。函數(shù)的嵌套

C語(yǔ)言中不允許嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級(jí)函數(shù)和下一級(jí)函數(shù)的問(wèn)題。

但是C語(yǔ)言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)

函數(shù)中又調(diào)用其它函數(shù)。函數(shù)的嵌套調(diào)用為自頂向下、逐步求精及模塊化的結(jié)構(gòu)化程序設(shè)計(jì)提供了最基本

的支持。其關(guān)系可表示如圖。

main(){……①a();……⑤}

a(){……②b();……④}

函數(shù)嵌套調(diào)用的執(zhí)行過(guò)程

b(){……③}

圖表示了兩層嵌套的情形。main函數(shù)中調(diào)用a函數(shù),在a函數(shù)中又調(diào)用b函數(shù),嵌套調(diào)用程序的執(zhí)行

是一個(gè)逐層深入,然后再逐層退出的過(guò)程,具體過(guò)程如下:(1)程序開(kāi)始執(zhí)行main函數(shù),順序執(zhí)行main

函數(shù)中的語(yǔ)句,即第①步。(2)當(dāng)執(zhí)行到調(diào)用a函數(shù)時(shí),main函數(shù)停止執(zhí)行,轉(zhuǎn)而去執(zhí)行a函數(shù)。(3)

順序執(zhí)行a函數(shù)中的語(yǔ)句,即第②步。

(4)在a函數(shù)中遇到調(diào)用b函數(shù)的語(yǔ)句,a函數(shù)停止執(zhí)行,轉(zhuǎn)而去執(zhí)行b函數(shù)。(5)順序執(zhí)行b函

數(shù)中的語(yǔ)句,即第③步,如果還有函數(shù)調(diào)用,則繼續(xù)進(jìn)入執(zhí)行。(6)當(dāng)b函數(shù)執(zhí)行完畢,返回到主調(diào)函

數(shù)a函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行剩下的語(yǔ)句,即第④步。

(7)當(dāng)a函數(shù)執(zhí)行完畢,返回到主調(diào)函數(shù)main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行剩下的語(yǔ)句,直到main函數(shù)結(jié)束,

則程序結(jié)束。即第⑤步。

四種存儲(chǔ)類別C語(yǔ)言中對(duì)變量的存儲(chǔ)類型說(shuō)明有以下四種:auto

自動(dòng)變量register寄存器變量static靜態(tài)變量extern外部變量

自動(dòng)變量和寄存器變量屬于動(dòng)態(tài)存儲(chǔ)方式,外部變量和靜態(tài)變量屬于靜態(tài)存儲(chǔ)方式,在定義變量的時(shí)

候要加上變量的存儲(chǔ)類型定義。一般形式如下(即在數(shù)據(jù)類型前面加上存儲(chǔ)類型定義):

[存儲(chǔ)類型說(shuō)明符]數(shù)據(jù)類型說(shuō)明符變量列表;例如:

autointa,b;staticfloatc[4]={1,8,4,7};registerintw;externdoublex,y;1.自動(dòng)變量(auto)

自動(dòng)變量的說(shuō)明符為auto。這種存儲(chǔ)類型是C程序中最廣泛應(yīng)用的一種類型。C語(yǔ)言規(guī)定,在函數(shù)內(nèi)

凡未加存儲(chǔ)類型說(shuō)明的變量都視為自動(dòng)變量,即,自動(dòng)變量可以省去auto關(guān)鍵字。自動(dòng)變量有以下特點(diǎn):

(1)自動(dòng)變量只能定義在函數(shù)內(nèi)部,形參、返回值的數(shù)據(jù)類型前面不能加auto關(guān)鍵字,否則TURBOC

2.0提示錯(cuò)誤。

(2)自動(dòng)變量采用動(dòng)態(tài)存儲(chǔ)方式,當(dāng)程序執(zhí)行進(jìn)入它的作用域,就分配內(nèi)存,可以訪問(wèn),當(dāng)程序出了

它的作用范圍,變量?jī)?nèi)存就被回收,變量不可使用。

(3)自動(dòng)變量和我們以前使用的局部變量是等價(jià)的,使用方法也一樣,其實(shí)以前我們使用的局部變量

就是自動(dòng)變量。

如:autointb,c=3;等價(jià)于intb,c=3;(相當(dāng)于省略了auto關(guān)鍵字)2.寄存器變量(register)

我們知道當(dāng)前所用到的變量都是在內(nèi)存中開(kāi)辟空間的,當(dāng)一個(gè)變量頻繁的讀寫(xiě)就要反復(fù)不斷地訪問(wèn)內(nèi)

存,從而浪費(fèi)了大量的時(shí)間。眾所周知CPU中寄存器的存取速度是非??斓模瑸榱颂岣咝?,C語(yǔ)言允許

將局部變量存放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register聲明。使用寄存器變

量要注意的問(wèn)題:

(1)只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;

(2)一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;(3)局部靜態(tài)變量(下面講的)

不能定義為寄存器變量。3.外部變量(extern)

外部變量(即全局變量)是在函數(shù)的外部定義的,外部變量的存儲(chǔ)空間分配方法是靜態(tài)存儲(chǔ)分配方式,

即程序開(kāi)始運(yùn)行時(shí),就分配存儲(chǔ)空間,當(dāng)程序結(jié)束時(shí)才回收存儲(chǔ)空間。它的作用域?yàn)閺淖兞慷x處開(kāi)始,

到本程序文件的末尾,如果在定義點(diǎn)之前的函數(shù)或其它源文件中的函數(shù)想引用該外部變量,則應(yīng)該在引用

之前用關(guān)鍵字extern對(duì)該變量作“外部變量聲明”。表明該變量是一個(gè)已經(jīng)定義的外部變量。有了此聲明,

就可以從“聲明”處起,到文件結(jié)束,合法地使用該外部變量,即用extern可以擴(kuò)展外部變量的作用域。4.

靜態(tài)變量(static)

靜態(tài)變量的說(shuō)明符是static,用static關(guān)鍵字定義的變量才是靜態(tài)變量。靜態(tài)變量分配存儲(chǔ)空間采用的

是靜態(tài)存儲(chǔ)方式。即,當(dāng)程序運(yùn)行時(shí)就在用戶的靜態(tài)存儲(chǔ)區(qū)分配了空間,當(dāng)程序運(yùn)行結(jié)束的時(shí)候才回收內(nèi)

存。我們知道變量按作用域分是有全局變量和局部變量之分的。同樣,靜態(tài)的局部變量和靜態(tài)的全局變量

是不同的。(1)用static聲明的靜態(tài)局部變量

函數(shù)中的局部變量在調(diào)用函數(shù)后要回收空間,變量的值也隨之消失。有時(shí)希望函數(shù)中的局部變量的值

在函數(shù)調(diào)用結(jié)束后不消失而保留原值,當(dāng)下次再調(diào)用這個(gè)函數(shù)的時(shí)候繼續(xù)使用保留的值,這時(shí)就應(yīng)該指定

局部變量為“靜態(tài)局部變量”,即用關(guān)鍵字static進(jìn)行聲明。

1)靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,程序開(kāi)始運(yùn)行時(shí)(而不是函數(shù)發(fā)生調(diào)用時(shí),這一點(diǎn)一定要注意)

在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放,每次調(diào)用函數(shù)時(shí)靜態(tài)變量的值都是上次調(diào)

用后的值。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類別,在動(dòng)態(tài)存儲(chǔ)區(qū)內(nèi)分配空間,函數(shù)調(diào)用結(jié)束

后就釋放。

2)靜態(tài)局部變量的作用域和動(dòng)態(tài)局部變量的作用域是一致的,雖然靜態(tài)局部變量在整個(gè)程序運(yùn)行過(guò)程

中都存在,但在其它函數(shù)中并不能使用該變量。

3)靜態(tài)局部變量在程序開(kāi)始執(zhí)行前賦初值,即只賦一次初值;而自動(dòng)變量賦初值是在函數(shù)調(diào)用時(shí)進(jìn)行的,

每調(diào)用一次函數(shù)就對(duì)自動(dòng)變量重新賦一次初值。4)如果在定義局部變量時(shí)不賦初值,則對(duì)靜態(tài)局部變量來(lái)

說(shuō),運(yùn)行時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)。而對(duì)自動(dòng)變量來(lái)說(shuō),如果不賦初值則

它的值是一個(gè)不確定的值。

5)局部靜態(tài)變量不能定義為寄存器變量。(2)用static聲明靜態(tài)外部變量

外部變量雖然采用的是靜態(tài)存儲(chǔ)方式,但不能說(shuō)外部變量是靜態(tài)變量,當(dāng)外部變量使用static關(guān)鍵字定

義時(shí),這就是靜態(tài)外部變量。我們知道外部變量的作用域可以使用extern關(guān)鍵字進(jìn)行拓展,而靜態(tài)外部變

量是不能拓展,即使用了extern關(guān)鍵字也不能拓展它的作用域。外部變量和靜態(tài)外部變量都采用的是靜態(tài)

存儲(chǔ)方式,唯一不同的就是作用域。

第九章預(yù)處理命令

學(xué)習(xí)內(nèi)容:

9.1宏定義9.2文件包含9.3條件編譯

目的要求:

掌握常用的預(yù)處理命令與文件包含

重點(diǎn)難點(diǎn):

宏定義的應(yīng)用

重點(diǎn)難點(diǎn)詳解:

宏定義的應(yīng)用:

宏定義功能是定義符號(hào)常量和常參數(shù)的宏,宏定義編譯預(yù)處理語(yǔ)句的格式如下:

#define

字符串1

字符串2它把字符串1定義為字符串2,字符串1稱為字符串2的宏定義,例如,下面是符號(hào)常量的

宏定義:

#define

ON

#define

OFF

0

它把符號(hào)常量ON定義為1,OFF定義為0。符號(hào)常量經(jīng)過(guò)宏定義后,就可以在程序中作為常量使用。

在宏定義語(yǔ)句中,可以使用已經(jīng)定義過(guò)的符號(hào)常量定義新的符號(hào)常理。例如:

#define

WID

40

#define

LEN

(WID+20)

其中第二個(gè)宏定義中使用了第一個(gè)宏定義的符號(hào)常量WID。在執(zhí)行編譯預(yù)處理時(shí),程序中出現(xiàn)的所有

符號(hào)常量WID都將被40置換。

1、不帶參數(shù)的宏定義:用一個(gè)指定的標(biāo)識(shí)符(即名字)來(lái)代表一個(gè)字符串。一般形式:#define標(biāo)識(shí)符

字符串例:#definePI

3.14159說(shuō)明:

(1)宏名一般習(xí)慣用大寫(xiě)字母表示。

(2)使用宏名代替一個(gè)字符串,可以減少程序中重復(fù)書(shū)寫(xiě)某些字符串的工作量。(3)宏定義是用宏

名代替一個(gè)字符串,也就是作簡(jiǎn)單的置換,不作正確性檢查。(4)宏定義不是C語(yǔ)句,不必在行末加分

號(hào).

#definePI3.14159;

area=PI*r*r;

展開(kāi):

area=3.14159;*r*r;

出現(xiàn)語(yǔ)法錯(cuò)誤

(5)#define命令出現(xiàn)在程序中函數(shù)的外面,宏名的有效范圍為定義命令之后到本源文件結(jié)束。

(6)可以用#undef命令終止宏定義的作用域。

格式:#undef宏名

7)在進(jìn)行宏定義時(shí),可以引用已定義的宏名,可以層層置換。

#defineR3.0

#definePI3.14159

#defineL2*PI*R

#defineSPI*R*R

main()

{printf(“L=%f\nS=%f\n”,L,S);

}(8)對(duì)程序中用雙括號(hào)括起來(lái)的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。(9)宏定義

是專門用于預(yù)處理命令,只作字符替換。

2、帶參數(shù)的宏定義:

一般形式:#define宏名(參數(shù)表)字符串#define

MULT2(X)

X*X

其中,MULT2(X)稱為帶參數(shù)的宏,X是它的形式參數(shù)。該宏定義把MULT2(X)定義為X*X。在此定

義后,MULT2(X)就可以用在程序中代替定義它的運(yùn)算表達(dá)式X*X。它的形式參數(shù)的使用特性類似于函數(shù)

的形式參數(shù)。在程序中需要計(jì)算某個(gè)數(shù)的平方值時(shí),可以使用這個(gè)已定義的宏,例如:

a=10;

c=MULT2(a);

在進(jìn)行編譯預(yù)處理時(shí),帶參數(shù)的宏用它的定義置換,其中的形式參數(shù)用實(shí)際使用的實(shí)際參數(shù)置換。因

此,上面的賦值表達(dá)式置換后的形式是:

c=a*a;

其中定義式中的形式參數(shù)X被實(shí)際參數(shù)a置換,該運(yùn)算表達(dá)式的結(jié)果是100。當(dāng)程序中需要計(jì)算某兩個(gè)

變量和的平方時(shí),如果使用上面定義的帶參數(shù)的宏的話,如下所示:

w=6;v=4;

c=MULT2(w+v);

進(jìn)行編譯預(yù)處理后,上面的賦值表達(dá)式置換后的形式是:

c=w+v*w+v;

它的運(yùn)算順序與預(yù)定的順序完全不同,計(jì)算結(jié)果是34。如果上面的宏定義改為下列形式:

#defineMULT2(X)(X)*(X)上面的賦值表達(dá)式置換后就成為:

c=(w+v)*(w+v);

它的運(yùn)算結(jié)果就正確了。這里又一次看到在定義式中使用必要圓括號(hào)的重要性。

第十章指針

學(xué)習(xí)內(nèi)容:

10.1地址和指針的概念

10.2變量的指針10.3數(shù)組與指針10.4字符串與指針

目的要求:

掌握指針的基本定義以及應(yīng)用

掌握數(shù)組與指針、字符串與指針應(yīng)用

重點(diǎn)難點(diǎn):

指針的基本概念指針變量的運(yùn)算性質(zhì)

重點(diǎn)難點(diǎn)詳解:

指針的基本概念:指針:一個(gè)變量的地址。例:

inta=1,b=2;floatf1=1.1,f2=5.9;doubled=13.24;charc1='A',c2='B';變量都有具體的內(nèi)存地址。

內(nèi)存地址:內(nèi)存中存儲(chǔ)單元的編號(hào)

注意:內(nèi)存單元的地址和內(nèi)存單元的內(nèi)容的區(qū)別

變量的地址:系統(tǒng)分配給變量的內(nèi)存單元的起始地址指針變量的運(yùn)算性質(zhì)

指針變量:專門用來(lái)存放另一個(gè)變量的地址。指針變量的值:指針變量中存放的地址。指針變量的

說(shuō)明與初始化

“指針變量”專門用來(lái)存放地址的變量。定義形式:類型標(biāo)識(shí)符

*標(biāo)識(shí)符eg.float

*point;

int

*p;p=&i;point=&f;定義指針時(shí)需注意:

1.*表示是指針類型,指針變量名是p,point。

2.指針變量也有類型,根據(jù)它所指向的數(shù)據(jù)來(lái)確定的。Eg.point指向?qū)嵭?,p指向整型。1)與指針

變量相關(guān)的運(yùn)算符

“變量的指針”指變量的地址。

指針變量和它所指向的變量之間的聯(lián)系。

用“*”符號(hào)

*point便是point所指向的變量。

Eg.

point

*point

2000

i=3

*ponit=32)指針變量的運(yùn)算

“指針變量”專門用來(lái)存放地址的變量。它有兩類運(yùn)算符:*

&&I指向I的地址

*p指向p所指向的內(nèi)容。見(jiàn)183頁(yè)的例子。說(shuō)明:

指針變量在定義時(shí)無(wú)所指,只是定義了這樣一種類型。Point-1=&a

point-2=&b注意定義時(shí),*point-1與引用*point-1的含義不同。

第十一章結(jié)構(gòu)體與共同體

學(xué)習(xí)內(nèi)容:

11.2定義結(jié)構(gòu)體類型變量的方法11.3結(jié)構(gòu)體變量的應(yīng)用11.4結(jié)構(gòu)體變量的初始化11.8共同體

目的要求:

掌握結(jié)構(gòu)體的定義和使用掌握共同體的定義和使用

重點(diǎn)難點(diǎn):

結(jié)構(gòu)體的應(yīng)用

重點(diǎn)難點(diǎn)詳解:

結(jié)構(gòu)體的應(yīng)用:結(jié)構(gòu)體是由不同數(shù)據(jù)類型的若干數(shù)據(jù)集合而成。在程序中使用結(jié)構(gòu)體時(shí),一般不允許把

結(jié)構(gòu)體作為一個(gè)整體參加操作處理,而應(yīng)通過(guò)對(duì)結(jié)構(gòu)體的各個(gè)成員項(xiàng)的引用來(lái)實(shí)現(xiàn)各種運(yùn)算和操作。

1.引用結(jié)構(gòu)體變量中的一個(gè)成員

由于結(jié)構(gòu)體變量是一個(gè)整體,要訪問(wèn)其中一個(gè)成員,必須先找到這個(gè)結(jié)構(gòu)體變量,然后再?gòu)闹姓页銎?/p>

中的一個(gè)成員。引用的一般形式:

結(jié)構(gòu)體變量名.成員名

其中圓點(diǎn)符號(hào)稱為成員運(yùn)算符。例如上面定義的結(jié)構(gòu)中要想訪問(wèn)stud1項(xiàng),應(yīng)寫(xiě)成:stud1.age。

訪問(wèn)stud1.age的步驟如圖8-4所示:即第一步先訪問(wèn)結(jié)構(gòu)體變量stud1,找到該變量的起始地址后,

第二步從stud1所分配的內(nèi)存區(qū)間中找到age成員項(xiàng)對(duì)應(yīng)的數(shù)據(jù)。說(shuō)明:

(1)如果在同一函數(shù)中又另外定義了一個(gè)age簡(jiǎn)單變量,它將由系統(tǒng)另外分配存儲(chǔ)空間,與stud1.age

分屬不同的變量。

stud1.age表示結(jié)構(gòu)體變量中的age成員項(xiàng),而age表示簡(jiǎn)單變量age。

(2)若定義stud1,stud2均為同一結(jié)構(gòu)體類型structexaminees的兩個(gè)變量,則當(dāng)引用兩個(gè)變量中的age

成員項(xiàng)時(shí),應(yīng)分別用stud1.age和stud2.age,它們表示內(nèi)存中不同的存儲(chǔ)單元并且各自有不同的值。

(3)如果一個(gè)結(jié)構(gòu)體中又嵌套一個(gè)結(jié)構(gòu)體,則要訪問(wèn)一個(gè)成員時(shí),應(yīng)采取逐級(jí)訪問(wèn)的方法。

例如:圖8-3中所示的嵌套結(jié)構(gòu)體變量,若要訪問(wèn)考生l的出生年份時(shí),則用:stud1.birthday.year。而

不能寫(xiě)成:year或birthday.year或stud1.year。

(4)允許對(duì)結(jié)構(gòu)體變量的成員進(jìn)行各種相應(yīng)的運(yùn)算,但運(yùn)算的規(guī)則應(yīng)遵循定義結(jié)構(gòu)體時(shí)各成員項(xiàng)類型的

規(guī)則。例如:stud1.num的類型是長(zhǎng)整型,因此,它適合于長(zhǎng)整型簡(jiǎn)單變量所允許的所有運(yùn)算。如算術(shù)運(yùn)算、

關(guān)系運(yùn)算、邏輯運(yùn)算和賦值運(yùn)算等。2.結(jié)構(gòu)體類型變量的整體引用

可以將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦給另一個(gè)同類型的結(jié)構(gòu)體變量。例如:stud2=stud1;

執(zhí)行stud2=stud1這個(gè)賦值語(yǔ)句時(shí),完成將stud1變量中各成員項(xiàng)逐個(gè)依次賦給stud2中相應(yīng)的各成員。

當(dāng)然要求stud1和stud2必須具有完全相同的數(shù)據(jù)類型。但必須注意,不允許將一組常量直接賦給一個(gè)結(jié)構(gòu)

體變量。如下面賦值語(yǔ)句是非法的:

stud2={20102,“LiuHao”,?F?,20,?2P?,90}3.結(jié)構(gòu)體變量的輸入和輸出

結(jié)構(gòu)體變量的輸入輸出,同樣要求必須指明結(jié)構(gòu)體變量所對(duì)應(yīng)的各成員項(xiàng)。例如:

scanf("%ld,%s,%c,%d",&stud2.num,,

stud2.sex,&stud2.age);表示輸入stud2變量的各成員項(xiàng)的值;

printf("%ld,%s,%c,%d\n",stud1.num,,

studl.sex,studl.age);表示輸出studl變量的各成員項(xiàng)的值。

應(yīng)當(dāng)注意:C語(yǔ)言不允許把一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入輸出操作。因此下面的輸入輸出語(yǔ)句

均是錯(cuò)誤的。

scanf("%ld",&studl);

printf("%ld\n",studl);或者scanf("%ld,%s,%c,%d",&studl);

printf("%ld,%s,%c,%d\n",studl);

第十三章文件

學(xué)習(xí)內(nèi)容:

13.1文件的概念

13.3文件的打開(kāi)和關(guān)閉

目的要求:

掌握c語(yǔ)言對(duì)文件的操作是如何通過(guò)c語(yǔ)言的庫(kù)函數(shù)來(lái)實(shí)現(xiàn)問(wèn)題

重點(diǎn)難點(diǎn):

文件的操作

重點(diǎn)難點(diǎn)詳解:

文件的操作:所謂“文件”是指一組相關(guān)數(shù)據(jù)的有序集合。這個(gè)數(shù)據(jù)集有一個(gè)名稱叫做文件名。它是外

存中保存信息的最小單位。前面的各章中我們已經(jīng)多次使用了文件,例如源程序文件、目標(biāo)文件、可執(zhí)行

文件、庫(kù)文件(頭文件)等。從不同的角度可對(duì)文件作不同的分類。

1.從用戶的角度看,文件可分為普通文件和設(shè)備文件兩種。

普通文件是指駐留在磁盤或其它外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集,可以是源文件、目標(biāo)文件、可執(zhí)行程

序;也可以是一組待輸入處理的原始數(shù)據(jù),或者是一組輸出的結(jié)果。對(duì)于源文件、目標(biāo)文件、可執(zhí)行程序

可以稱作程序文件,對(duì)輸入輸出數(shù)據(jù)可稱作數(shù)據(jù)文件。2.從數(shù)據(jù)的組織來(lái)看,文件可分文本文件和二進(jìn)制

文件兩種。

文本文件也稱為ASCII文件,文件中的每個(gè)元素都是字符,文件在磁盤中存放時(shí)每個(gè)字符對(duì)應(yīng)一個(gè)字節(jié),

用于存放對(duì)應(yīng)的ASCII碼。3文件打開(kāi)與關(guān)閉函數(shù)

和其他高級(jí)語(yǔ)言一樣,對(duì)文件讀寫(xiě)之前應(yīng)該“打開(kāi)”該文件,在使用結(jié)束之后應(yīng)“關(guān)閉”該文件。

1)文件打開(kāi)函數(shù)——fopen函數(shù)

fopen函數(shù)用來(lái)打開(kāi)一個(gè)文件,其調(diào)用的一般形式為:

文件指針名=fopen(文件名及路徑,使用文件方式);

其中,“文件指針名”必須是被說(shuō)明為FILE類型的指針變量,“文件名及路徑”是被打開(kāi)文件的文件名,

是字符串常量或字符串?dāng)?shù)組,如文件不在當(dāng)前目錄中需指定文件路徑?!笆褂梦募绞健笔侵肝募念愋秃?/p>

操作要求。2)文件關(guān)閉函數(shù)——fclose函數(shù)

fclose函數(shù)用來(lái)關(guān)閉一個(gè)文件,其調(diào)用的一般形式為:

fclose(文件指針);

例如:fclose(fp);,為關(guān)閉fp指針?biāo)傅奈募?/p>

正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。如返回非零值則表示有錯(cuò)誤發(fā)生。

文件的打開(kāi)和關(guān)閉是對(duì)文件的讀和寫(xiě)是最常用的文件操作。我們經(jīng)常在使用文件前打開(kāi)文件,然后進(jìn)

行文件的讀寫(xiě)操作,最后還應(yīng)該養(yǎng)成在程序終止之前關(guān)閉所有文件的習(xí)慣,如果不關(guān)閉文件將會(huì)丟失數(shù)據(jù)。

因?yàn)椋谙蛭募?xiě)數(shù)據(jù)時(shí),是先將數(shù)據(jù)輸出到緩沖區(qū),待緩沖區(qū)充滿后才正式輸出給文件。如果當(dāng)數(shù)據(jù)未

充滿緩沖區(qū)而程序結(jié)束運(yùn)行,就會(huì)將緩沖區(qū)中的數(shù)據(jù)丟失。用fclose函數(shù)關(guān)閉文件,可以避免這個(gè)問(wèn)題,它

先把緩沖區(qū)中的數(shù)據(jù)輸出到磁盤文件,然后才釋放文件指針變量。

第二篇:《C語(yǔ)言程序設(shè)計(jì)》教案.

《C語(yǔ)言程序設(shè)計(jì)》教案

使用教材:譚浩強(qiáng),《C程序設(shè)計(jì)》,清華大學(xué)出版社,2005年7月第3

溫馨提示

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

評(píng)論

0/150

提交評(píng)論