C語言程序設(shè)計(jì)-期末復(fù)習(xí)_第1頁
C語言程序設(shè)計(jì)-期末復(fù)習(xí)_第2頁
C語言程序設(shè)計(jì)-期末復(fù)習(xí)_第3頁
C語言程序設(shè)計(jì)-期末復(fù)習(xí)_第4頁
C語言程序設(shè)計(jì)-期末復(fù)習(xí)_第5頁
已閱讀5頁,還剩129頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C程序設(shè)計(jì)復(fù)習(xí)——軟件學(xué)院萬琳大家開始復(fù)習(xí)了嗎?復(fù)習(xí)本學(xué)期所學(xué)章節(jié)C語言概述程序的靈魂——算法數(shù)據(jù)類型、運(yùn)算符與表達(dá)式最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)循環(huán)控制數(shù)組函數(shù)預(yù)處理命令指針結(jié)構(gòu)體與共同體位運(yùn)算文件常見錯(cuò)誤和程序調(diào)試第1章C程序概述1.1C語言出現(xiàn)的歷史背景1.2C程序的特點(diǎn)1.3簡(jiǎn)單的C語言程序介紹1.4運(yùn)行C程序的步驟和方法autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoIfintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile編輯鏈接編譯執(zhí)行C程序的上機(jī)步驟_C程序開發(fā)步驟程序代碼的錄入,生成源程序*.c語法分析查錯(cuò),翻譯生成目標(biāo)程序*.obj與其它目標(biāo)程序或庫鏈接裝配,生成可執(zhí)行程序*.exe第2章程序的靈魂——算法2.1算法的概念2.2簡(jiǎn)單算法舉例2.3算法的特性2.4怎樣表示一個(gè)算法2.5結(jié)構(gòu)化程序設(shè)計(jì)方法自然語言傳統(tǒng)流程圖結(jié)構(gòu)化流程圖偽代碼PAD圖

傳統(tǒng)流程圖美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(AmericanNationalStandardInstitute)規(guī)定了一些常用的流程圖符號(hào):起止框判斷框處理框輸入/輸出框注釋框流向線連接點(diǎn)傳統(tǒng)的程序流程圖例圖

例2.7

將例2.2的算法用流程圖表示。打印50名學(xué)生中成績(jī)?cè)?0分以上者的學(xué)號(hào)和成績(jī)。N-S圖例圖順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)的三種根本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)當(dāng)型(While型)循環(huán)結(jié)構(gòu)

直到型(Until型)循環(huán)

三種根本結(jié)構(gòu)的共同特點(diǎn):(1)只有一個(gè)入口。(2)只有一個(gè)出口?!舱?qǐng)注意:一個(gè)菱形判斷框有兩個(gè)出口,而一個(gè)選擇結(jié)構(gòu)只有一個(gè)出口。不要將菱形框的出口和選擇結(jié)構(gòu)的出口混淆。〕(3)結(jié)構(gòu)內(nèi)的每一局部都有時(shí)機(jī)被執(zhí)行到。(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。*第3章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式3.1C的數(shù)據(jù)類型3.2常量與變量3.3整型數(shù)據(jù)3.4浮點(diǎn)型數(shù)據(jù)運(yùn)行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)算符和逗號(hào)表達(dá)式3.1C的數(shù)據(jù)類型C語言提供了以下一些數(shù)據(jù)類型。

數(shù)據(jù)類型構(gòu)造類型指針類型空類型〔無值類型〕void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct聯(lián)合類型

union基本類型整型int字符型char實(shí)型(浮點(diǎn)型)單精度實(shí)型

float雙精度實(shí)型

double3.2常量和變量在程序運(yùn)行過程中,其值不能被改變的量稱為常量變量代表內(nèi)存中具有特定屬性的一個(gè)存儲(chǔ)單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。

變量命名的規(guī)定:C語言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。補(bǔ)充例如:(75)10=(1001011)27537189421011110002222222最低位最高位0.6不同計(jì)數(shù)制之間的轉(zhuǎn)換十進(jìn)制數(shù)轉(zhuǎn)換為非十進(jìn)制數(shù)補(bǔ)充進(jìn)位法:用十進(jìn)制小數(shù)乘基數(shù),當(dāng)積為0或到達(dá)所要求的精度時(shí),將整數(shù)局部由上而下排列。例如:(0.3125)10=(0.0101)20.3125×20.6250×20.

2500×20.00000.

5000×2最高位最低位0110十進(jìn)制數(shù)轉(zhuǎn)化為非十進(jìn)制數(shù)小數(shù)補(bǔ)充一位拆三位一位拆四位整數(shù)從右向左小數(shù)從左向右三位并一位四位并一位二進(jìn)制與八、十六進(jìn)制之間的轉(zhuǎn)換補(bǔ)充000110110110.0100

(1 B 7.4)16例如:100110110111.010100

(4 6 6 7.24)83.3整型數(shù)據(jù)整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。

如:123,-456.4。(2)八進(jìn)制整數(shù)。以0頭的數(shù)是八進(jìn)制數(shù)。

如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。(3)十六進(jìn)制整數(shù)。以0x開頭的數(shù)是16進(jìn)制數(shù)。

如:0x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)291。-0x12等于十進(jìn)制數(shù)-18。

3.3整型數(shù)據(jù)整型變量的分類和存儲(chǔ)3.3整型數(shù)據(jù)例3.3整型數(shù)據(jù)的溢出

#include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

printf(“%d,%d\n”,a,b);

}

說明:數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。運(yùn)行結(jié)果:

32767,-327680111111111111111int型:最大:327671000000000000000最小:-327681111111111111111unsignedint型:最大:655350000000000000000最小:03.4浮點(diǎn)型數(shù)據(jù)類型位數(shù)數(shù)的范圍有效數(shù)字float32

10-37~10386~7位double型64

10-307~1030815~16位longdouble12810-4931~10493218~19位浮點(diǎn)型變量分為單精度〔float型〕、雙精度〔double型〕和長(zhǎng)雙精度型〔longdouble〕三類形式。3.4浮點(diǎn)型數(shù)據(jù)單精度〔float型〕的存儲(chǔ)3130242322

0如:0.27E-2→+0.27*10-2階符階碼數(shù)符尾數(shù)階碼部分尾數(shù)部分

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

有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符\n換行,將當(dāng)前位置移到下一行開頭\t橫向跳格(跳到下一個(gè)Tab位置)\b退格,將當(dāng)前位置移到前一列\(zhòng)r回車,將當(dāng)前位置移到本行開頭\\反斜杠\\dddddd表示1到3位八進(jìn)制數(shù)字\xhhhh表示1到2位十六進(jìn)制數(shù)字3.5字符型數(shù)據(jù)例3.5轉(zhuǎn)義字符的使用

#include<stdio.h>

voidmain〔〕

{printf(″abc\tde\rf\tg\n″);

printf(″h\ti\b\bjk\n″);

printf(″\ta\018bc″);

打印機(jī)上的顯示結(jié)果:

fabcgdehjik顯示屏上的運(yùn)行結(jié)果:

fgde

hjkfabcgdefgdehjikhjk3.5字符型數(shù)據(jù)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。c197c298c10110001c201100010a01100001“%c”——a,“%d”——97附錄AASCII對(duì)照表3.5字符型數(shù)據(jù)字符串常量:一對(duì)雙撇號(hào)括起來的字符序列合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”C規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志。CHINA\0\0ASCII碼為0的字符空操作字符**3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算整型〔包括int,short,long〕、浮點(diǎn)型〔包括float,double〕可以混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的低高DoublefloatLongUnsignedIntchar,shortdoublefloatlongunsignedintchar,short低高說明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式主要是運(yùn)算符的運(yùn)算方法和優(yōu)先級(jí)的問題,詳細(xì)見課本P365**類型轉(zhuǎn)換問題一般形式:〔類型名〕〔表達(dá)式〕例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生3.9賦值運(yùn)算符和賦值表達(dá)式主要存在一個(gè)類型轉(zhuǎn)換的問題喪失精度〔截?cái)唷硵U(kuò)展〔符號(hào)擴(kuò)展,無符號(hào)擴(kuò)展〕符號(hào)擴(kuò)展——根據(jù)符號(hào)位無符號(hào)擴(kuò)展——直接補(bǔ)03.9賦值運(yùn)算符和賦值表達(dá)式賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。

如:a+=a-=a*a分析:此賦值表達(dá)式的求解步驟如下∶①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于a=a-a*a,a的值為12-144=-132。②再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于a=a+(-132),a的值為-132-132=-264。3.9賦值運(yùn)算符和賦值表達(dá)式設(shè)x,y,z均為int型變量,那么執(zhí)行語句x=(y=(z=10)+5)-5后,x,y,z的值是多少?設(shè)x和y均為float型變量,那么以下不合法的賦值語句是〔〕A)++x;B)y=(x%2)/10;C)x*=y+8;D)x=y=0;10,15,103.10逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)運(yùn)算符:將兩個(gè)表達(dá)式連接起來,又稱為“順序求值運(yùn)算符”

如:3+5,6+8

一般形式:

表達(dá)式1,表達(dá)式2求解過程:先求解表達(dá)式1,再求解表達(dá)式2。整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式2的值。

逗號(hào)表達(dá)式的值為14最簡(jiǎn)單的C程序設(shè)計(jì)4.1C語句概述4.2賦值語句4.3數(shù)據(jù)輸入輸出的概念及在c語言中的實(shí)現(xiàn)4.4字符數(shù)據(jù)的輸入輸出4.5格式輸入與輸出4.6順序結(jié)構(gòu)程序設(shè)計(jì)舉例4.4字符數(shù)據(jù)的輸入輸出putchar〔c〕getchar〔〕4.5格式輸入與輸出dx,Xoucse,Efg%%十六進(jìn)制無符號(hào)整數(shù)不帶符號(hào)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字符字符串八進(jìn)制無符號(hào)整數(shù)小數(shù)形式浮點(diǎn)小數(shù)e和f中較短一種百分號(hào)本身inta=567;printf("%d",a);inta=255;printf("%x",a);inta=65;printf("%o",a);inta=567;printf("%u",a);chara=65;printf("%c",a);printf("%s","ABC");floata=567.789;printf("%e",a);floata=567.789;printf("%f",a);floata=567.789;printf("%g",a);printf("%%");567ff101567AABC5.677890e+02567.789000567.789%說明 格式字符要用小寫格式字符與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先后順序一一對(duì)應(yīng)輸出轉(zhuǎn)換:格式字符與輸出項(xiàng)類型不一致,自動(dòng)按指定格式輸出4.5格式輸入與輸出幾種常見的格式符的修飾符:L:用于長(zhǎng)整型整數(shù),可加在格式符d,o,x,u前面M〔代表一個(gè)正整數(shù)〕:數(shù)據(jù)最小寬度N〔代表一個(gè)正整數(shù)〕:對(duì)實(shí)數(shù),表示輸出n位小數(shù);對(duì)字符串,表示截取的字符個(gè)數(shù)—:輸出的數(shù)字或字符在域內(nèi)向左靠4.5格式輸入與輸出格式輸入:地址表:變量的地址,常用取地址運(yùn)算符&格式字符:d,i,o,x,u,c,s,f,e例scanf("%d",&a);輸入:10那么a=10例scanf("%x",&a);輸入:11那么a=17格式:scanf("格式控制串",地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲(chǔ)單元中,并按回車鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)4.5格式輸入與輸出**輸入分隔符的規(guī)定例scanf("%d%o%x",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);

輸入123123123輸出a=123,b=83,c=291例scanf("%d:%d:%d",&h,&m,&s);輸入12:30:45那么12h,30m,45s一般以空格、TAB或回車鍵作為分隔符其它字符做分隔符:格式串中兩個(gè)格式符間字符4.5格式輸入與輸出scanf("%c%c%c",&c1,&c2,&c3);假設(shè)輸入abc那么ac1,c2,bc3如scanf("%d%c%f",&a,&b,&c);假設(shè)輸入1234a123o.26那么1234a,'a'b,123c用"%c"格式符時(shí),空格和轉(zhuǎn)義字符作為有效字符輸入:輸入數(shù)據(jù)時(shí),遇以下情況認(rèn)為該數(shù)據(jù)結(jié)束:遇空格、TAB、或回車遇寬度結(jié)束遇非法輸入4.5格式輸入與輸出例intx;charch;scanf("%d",&x);

ch=getchar();printf("x=%d,ch=%d\n",x,ch);執(zhí)行:123

輸出:x=123,ch=10輸入函數(shù)留下的"垃圾":*選擇結(jié)構(gòu)5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式5.2邏輯運(yùn)算符和邏輯表達(dá)式5.3if語句5.4switch語句5.5程序舉例*5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式1.關(guān)系運(yùn)算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)說明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符*5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式〔可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式,邏輯表達(dá)式,賦值表達(dá)式,字符表達(dá)式〕接起來的式子,稱關(guān)系表達(dá)式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。例:關(guān)系表達(dá)式”a>b”的值為“真”,表達(dá)式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假*5.2邏輯運(yùn)算符和邏輯表達(dá)式1.邏輯運(yùn)算符及其優(yōu)先次序(1)&&(邏輯與)相當(dāng)于其他語言中的AND(2)||(邏輯或)相當(dāng)于其他語言中的OR(3)!(邏輯非)相當(dāng)于其他語言中的NOT例:a&&b假設(shè)a,b為真,那么a&&b為真。a||b假設(shè)a,b之一為真,那么a||b為真。!a假設(shè)a為真,那么!a為假。優(yōu)先次序:!(非)->&&()->||()邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符*5.2邏輯運(yùn)算符和邏輯表達(dá)式2.邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯量“真”或“假”。例:設(shè)a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認(rèn)作“真”以下關(guān)系表達(dá)式中結(jié)果為假的是〔〕A)0!=1B)2<=8C)(a=2*2)==2D)y=(2+2)==4While(printf(“*”));〔〕A)循環(huán)1次B)循環(huán)0次C)死循環(huán)D)語法錯(cuò)5.3if語句if~else配對(duì)原那么:缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...if語句嵌套5.3if語句例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b)

{if(b==c)printf(“a==b==c”);

}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:加{}5.3if語句條件運(yùn)算符例:if〔a>b〕max=a;elsemax=b;當(dāng)a>b時(shí)將a的值賦給max,當(dāng)a≤b時(shí)將b的值賦給max,可以看到無論a>b是否滿足,都是向同一個(gè)變量賦值??梢杂孟旅娴臈l件運(yùn)算符來處理:max=〔a>b〕?a∶b;5.4switch語句switch語句的格式:switch〔表達(dá)式〕{case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2…case常量表達(dá)式n:語句ndefault:語句n+1}注意:break例:要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,用switch語句實(shí)現(xiàn):switch〔grade〕{case′A′∶printf〔″85~100\n″〕;case′B′∶printf〔″70~84\n″〕;case′C′∶printf〔″60~69\n″〕;case′D′∶printf〔″<60\n″〕;default∶〔printf″error\n″〕;}如果grade為‘A’,將輸出什么?*循環(huán)結(jié)構(gòu)6.1概述6.2goto語句以及用goto語句構(gòu)成循環(huán)6.3用while語句實(shí)現(xiàn)循環(huán)6.4用do-while語句實(shí)現(xiàn)循環(huán)6.5用for語句實(shí)現(xiàn)循環(huán)6.6循環(huán)的嵌套6.7幾種循環(huán)的比較6.8break語句continue和語句6.9程序舉例只能用于循環(huán)和switch語句只能用于循環(huán)語句例〔for)梯形法求數(shù)值積分0yxaa+ha+iha+(i+1)hbf(x)設(shè)有程序段:t=0;while(printf(“*”)){t++;If(t<3)break;}循環(huán)多少次?分析程序結(jié)束后t的值是多少?**數(shù)組7.1一維數(shù)組的定義和引用7.2二維數(shù)組的定義和引用7.3字符數(shù)組7.1一維數(shù)組的定義和引用類型說明符數(shù)組名[常量表達(dá)式];每個(gè)數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類型的字節(jié)數(shù)一個(gè)元素占4個(gè)字節(jié)一維數(shù)組:float

mark[100];mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.0低地址

高地址7.1一維數(shù)組的定義和引用數(shù)組元素的引用方式數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3]數(shù)組元素的初始化inta[10]={0,1,2,3,4,5,6,7,8,9};inta[]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};inta[]={0,1,2,3,4};inta[10];a={0,1,2,3,4,5,6,7,8,9};7.2二維數(shù)組的定義和引用二維數(shù)組定義的一般形式為類型說明符數(shù)組名[常量表達(dá)式][常量表達(dá)式]例如:定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。如下:floata[3][4],b[5][10]我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。7.2二維數(shù)組的定義和引用以下圖表示對(duì)a[3][4]數(shù)組存放的順序地址

數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3002H3004H3006H3008H300AH300CH300EH3010H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};1234567897.3字符數(shù)組如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,那么只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動(dòng)定為空字符。charc[10]={′c′,′′,′p′,′r′,′o′,′g′,′r′,′a′,′m′};7.3字符數(shù)組字符數(shù)組的輸入輸出可以有兩種方法:逐個(gè)字符輸入輸出。用格式符“%c”輸入或輸出一個(gè)字符。將整個(gè)字符串一次輸入或輸出。用“%s”格式符,意思是對(duì)字符串的輸入輸出。

charc[]={″China″};printf(″%s″,c);

例如在內(nèi)存中數(shù)組c的狀態(tài)7.3字符數(shù)組其它相關(guān)函數(shù)putsgetsstrcmpstrcpystrcatstrlenstruprstrlwr以下對(duì)一維數(shù)組a的正確說明是〔〕A)inta(10)B)intn=0,a[n];C)intn;scanf(“%d”,&n);inta[n];D)#defineSIZE10inta[size]假設(shè)有說明chars[10]={“abc”}〔〕A)字符數(shù)組有三個(gè)元素B)字符數(shù)組的第四個(gè)元素為’\0’,后面為空C)字符數(shù)組后面的元素都為’\0’下面程序段運(yùn)行的結(jié)果是〔〕Chara[7]=“abcdef”;Charb[4]=“ABC”;Strcpy(a,b);Printf(“%c”,a[5]);A)空格B)\0C)ED)f如果改為printf(“%s”,a)呢?**函數(shù)8.1概述8.2函數(shù)定義的一般形式8.3函數(shù)參數(shù)和函數(shù)的值8.4函數(shù)的調(diào)用8.5函數(shù)的嵌套調(diào)用8.6函數(shù)的遞歸調(diào)用

8.7數(shù)組作為函數(shù)參數(shù)8.8局部變量和全局變量8.9變量的存儲(chǔ)類別8.10內(nèi)部函數(shù)和外部函數(shù)根本知識(shí)定義:類型名函數(shù)名〔形參列表〕調(diào)用:函數(shù)名〔實(shí)參列表〕形式參數(shù):函數(shù)名后面括號(hào)中的變量名稱為“形式參數(shù)”〔簡(jiǎn)稱“形參”〕。實(shí)際參數(shù):主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)(可以是一個(gè)表達(dá)式)稱為“實(shí)際參數(shù)”〔簡(jiǎn)稱“實(shí)參”〕。函數(shù)返回值:return后面的括號(hào)中的值作為函數(shù)帶回的值〔稱函數(shù)返回值〕。通過函數(shù)調(diào)用,可使兩個(gè)函數(shù)中的數(shù)據(jù)發(fā)生聯(lián)系。8.5函數(shù)的嵌套調(diào)用嵌套定義就是在定義一個(gè)函數(shù)時(shí),其函數(shù)體內(nèi)又包含另一個(gè)函數(shù)的完整定義。8.6函數(shù)的遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。C語言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。例如:intf(intx){inty,z;z=f〔y〕;return〔2*z〕;}例8.8用遞歸方法求n!

求n!也可以用遞歸方法,即5!等于4!×5,而4!=3!×4…1?。剑?。可用下面的遞歸公式表示:n?。剑薄玻睿剑埃薄常睢ぁ玻睿薄?!〔n>1〕8.7數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實(shí)參用數(shù)組名作函數(shù)參數(shù)時(shí),此時(shí)形參應(yīng)當(dāng)用數(shù)組名或用指針變量〔形參數(shù)組問什么可以不定長(zhǎng)〕8.8局部變量和全局變量局部變量〔內(nèi)部變量〕全局變量〔外部變量〕例:floatf1(inta)/*函數(shù)f1*/{intb,c;…/*a、b、c有效*/}charf2(intx,inty)/*函數(shù)f2*/{inti,j;/*x、y、i、j有效*/}voidmain()/*主函數(shù)*/{intm,n;…/*m、n有效*/}

intp=1,q=5;/*外部變量*/floatf1(inta)/*定義函數(shù)f1*/{intb,c;…}charc1,c2;/*外部變量*/charf2(intx,inty)/*定義函數(shù)f2*/{inti,j;全局變量p,q的作用范圍

…全局變量c1,c2的作用范圍}voidmain()/*主函數(shù)*/{intm,n;…}

以下程序的運(yùn)行結(jié)果是〔〕Fun(intx){if(x/2)>0fun(x/2-2);printf(“%d”,x);}Main(){fun(20);Printf(“\n”);}A)2082-1B)2820C)8D)-128208.9變量的存儲(chǔ)類別自動(dòng)的〔auto〕;靜態(tài)的〔static〕;存放器的〔register〕;外部的〔extern〕例8.17考察靜態(tài)局部變量的值#include<stdio.h>voidmain〔〕{intf〔int〕;inta=2,i;for〔i=0;i<3;i++=printf〔″%d″,f〔a〕〕;}intf〔inta〕{autointb=0;staticc=3;b=b+1;c=c+1;return〔a+b+c〕;}8.9變量的存儲(chǔ)類別用static聲明外部變量在程序設(shè)計(jì)中,某些外部變量只限于被本文件引用,而不能被其他文件引用。這時(shí)可以在定義外部變量時(shí)加一個(gè)staitic聲明。例如:file1.cfile2.cstaticintA;externintA;voidmain()voidfun(intn){{……A=A*n;}8.10內(nèi)部函數(shù)和外部函數(shù)根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部函數(shù)和外部函數(shù)。如果一個(gè)函數(shù)只能被本文件中其他函數(shù)所調(diào)用,它稱為內(nèi)部函數(shù)。在定義內(nèi)部函數(shù)時(shí),在函數(shù)名和函數(shù)類型的前面加static。即static類型標(biāo)識(shí)符函數(shù)名(形參表)例如:staticintfun(inta,intb)8.10內(nèi)部函數(shù)和外部函數(shù)外部函數(shù)(1)定義函數(shù)時(shí),如果在函數(shù)首部的最左端加關(guān)鍵字extern,那么表示此函數(shù)是外部函數(shù),可供其他文件調(diào)用。例如,函數(shù)首部可以寫為externintfun(inta,intb),這樣,函數(shù)fun就可以為其他文件調(diào)用。如果在定義函數(shù)時(shí)省略extern,那么隱含為外部函數(shù)。(2)在需要調(diào)用此函數(shù)的文件中,用extern對(duì)函數(shù)作聲明,表示該函數(shù)是在其他文件中定義的外部函數(shù)。下面函數(shù)盜用語句含有實(shí)參的個(gè)數(shù)為〔〕func((exp1,exp2),(exp3,exp4,exp5));A)1B)2C)4D)5凡函數(shù)中未指定存儲(chǔ)類別的局部變量,其隱含的存儲(chǔ)類別為〔〕A)自動(dòng)B)靜態(tài)C)外部D)存放器編譯預(yù)處理9.1宏定義9.2“文件包含”處理9.3條件編譯9.1宏定義

宏定義一般形式為:#define標(biāo)識(shí)符字符串例如:#definePI3.1415926

帶參數(shù)的宏定義一般形式為:#define宏名〔參數(shù)表〕字符串字符串中包含在括弧中所指定的參數(shù)9.2“文件包含”處理所謂“文件包含”處理是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來。C語言提供了#include命令用來實(shí)現(xiàn)“文件包含”的操作。其一般形式為:#include"文件名"或#include<文件名>假設(shè)有宏定義如下:#defineX5#defineYX+1#defineZY*X/2那么執(zhí)行以下printf語句后,輸出結(jié)果是〔〕Inta;a=Y;Printf(“%d\n”,Z);Printf(“%d\n”,--a);A)7B)12C)12D)76655***指針10.1地址和指針的概念10.2變量的指針和指向變量的指針變量10.3數(shù)組與指針10.4字符串與指針10.5指向函數(shù)的指針10.6返回指針值的函數(shù)10.7指針數(shù)組和指向指針的指針10.8有關(guān)指針的數(shù)據(jù)類型和指針運(yùn)算的小結(jié)一個(gè)變量的地址稱為該變量的“指針”。例如,地址2000是變量i的指針。如果有一個(gè)變量專門用來存放另一變量的地址〔即指針〕,那么它稱為“指針變量”。上述的i_pointer就是一個(gè)指針變量。指針和指針變量的定義:10.2變量的指針和指向變量的指針變量

定義指針變量的一般形式為基類型*指針變量名;指針變量用作函數(shù)的參數(shù)例10.3對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出

#include<stdio.h>voidmain〔〕{voidswap〔int*p1,int*p2〕;inta,b;int*pointer_1,*pointer_2;scanf〔″%d,%d″,&a,&b〕;pointer_1=&a;pointer_2=&b;if〔a<b=swap〔pointer_1,pointer_2〕;printf〔″\n%d,%d\n″,a,b〕;}voidswap〔int*p1,int*p2〕{inttemp;temp=*p1;*p1=*p2;*p2=temp;}10.3數(shù)組與指針引用一個(gè)數(shù)組元素,可以用:〔1〕下標(biāo)法,如a[i]形式;〔2〕指針法,如*〔a+i〕或*〔p+i〕。其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=a。多維數(shù)組與指針表示形式含義地址a

二維數(shù)組名,指向一維數(shù)組a[0],即0行首地址2000a[0],*(a+0),*a0行0列元素地址2000a+1,&a[1]1行首地址2008a[1],*(a+1)1行0列元素a[1][0]的地址2008A[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的地址2012*(a[1]+2),*(*(a+1)+2),a[1][2]1行2列元素a[1][2]的值元素值為1310.5指向函數(shù)的指針函數(shù)在編譯時(shí)被分配給一個(gè)入口地址。這個(gè)函數(shù)的入口地址就稱為函數(shù)的指針。實(shí)參函數(shù)名f1f2↓↓voidsub〔int(*x1)(int),int(*x2)(int,int)〕{inta,b,i,j;a=〔*x1〕〔i〕;/*調(diào)用f1函數(shù)*/b=〔*x2〕〔i,j〕;/*調(diào)用f2函數(shù)*/…}10.6返回指針值的函數(shù)一個(gè)函數(shù)可以帶回一個(gè)整型值、字符值、實(shí)型值等,也可以帶回指針型的數(shù)據(jù),即地址。其概念與以前類似,只是帶回的值的類型是指針類型而已。這種帶回指針值的函數(shù),一般定義形式為類型名*函數(shù)名〔參數(shù)表列〕;例如:int*a〔intx,inty〕;10.7指針數(shù)組和指向指針的指針一個(gè)數(shù)組,假設(shè)其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,指針數(shù)組中的每一個(gè)元素都相當(dāng)于一個(gè)指針變量。一維指針數(shù)組的定義形式為:類型名*數(shù)組名[數(shù)組長(zhǎng)度];例如:int*p[4];10.7指針數(shù)組和指向指針的指針定義一個(gè)指向指針數(shù)據(jù)的指針變量:char**p;p的前面有兩個(gè)*號(hào)。*運(yùn)算符的結(jié)合性是從右到左,因此**p相當(dāng)于*〔*p〕,顯然*p是指針變量的定義形式。如果沒有最前面的*,那就是定義了一個(gè)指向字符數(shù)據(jù)的指針變量。現(xiàn)在它前面又有一個(gè)*號(hào),表示指針變量p是指向一個(gè)字符指針變量的。*p就是p所指向的另一個(gè)指針變量。10.8有關(guān)指針的數(shù)據(jù)類型和指針運(yùn)算的小結(jié)定義含義inti;定義整型變量iint*p;p為指向整型數(shù)據(jù)的指針變量inta[n];定義整型數(shù)組a,它有n個(gè)元素int*p[n];定義指針數(shù)組p,它由n個(gè)指向整型數(shù)據(jù)的指針元素組成int(*p)[n];p為指向含n個(gè)元素的一維數(shù)組的指針變量intf();f為帶回整型函數(shù)值的函數(shù)int*p();p為帶回一個(gè)指針的函數(shù),該指針指向整型數(shù)據(jù)int(*p)();p為指向函數(shù)的指針,該函數(shù)返回一個(gè)整型值int**p;p是一個(gè)指針變量,它指向一個(gè)指向整型數(shù)據(jù)的指針變量結(jié)構(gòu)體與共用體11.1概述11.2定義結(jié)構(gòu)體類型變量的方法11.3結(jié)構(gòu)體變量的引用11.4結(jié)構(gòu)體變量的初始化11.5結(jié)構(gòu)體數(shù)組11.6指向結(jié)構(gòu)體類型數(shù)據(jù)的指針11.7用指針處理鏈表11.8共用體11.9枚舉類型11.10用typedef定義類型結(jié)構(gòu)體嵌套的結(jié)構(gòu):structdate{intmonth;intday;intyear;};

struct{intnum;charname[20];charsex;structdatebirthday;floatscore;}boy1,boy2;結(jié)構(gòu)體引用結(jié)構(gòu)體變量中成員的方式為結(jié)構(gòu)體變量名.成員名例如,

student1.num表示student1變量中的num成員,即student1的num(學(xué)號(hào))項(xiàng)。可以對(duì)變量的成員賦值,例如:student1.num=10010;“.”是成員(分量)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級(jí)最高,因此可以把student1.num作為一個(gè)整體來看待。上面賦值語句的作用是將整數(shù)10010賦給student1變量中的成員num。

結(jié)構(gòu)體一個(gè)指針變量當(dāng)用來指向一個(gè)結(jié)構(gòu)變量時(shí),稱之為結(jié)構(gòu)指針變量。結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。通過結(jié)構(gòu)指針即可訪問該結(jié)構(gòu)變量,這與數(shù)組指針和函數(shù)指針的情況是相同的。結(jié)構(gòu)指針變量說明的一般形式為:

struct結(jié)構(gòu)名*結(jié)構(gòu)指針變量名例如,在前面的例題中定義了stu這個(gè)結(jié)構(gòu),如要說明一個(gè)指向stu的指針變量pstu,可寫為:

structstu*pstu;結(jié)構(gòu)體其訪問的一般形式為:(*結(jié)構(gòu)指針變量).成員名或?yàn)椋航Y(jié)構(gòu)指針變量->成員名例如:(*pstu).num或者:pstu->num應(yīng)該注意(*pstu)兩側(cè)的括號(hào)不可少,因?yàn)槌蓡T符“.”的優(yōu)先級(jí)高于“*”。如去掉括號(hào)寫作*pstu.num那么等效于*(pstu.num),這樣,意義就完全不對(duì)了。結(jié)構(gòu)體三種等價(jià)的形式:結(jié)構(gòu)體變量.變量名(*p).成員名p->成員名結(jié)構(gòu)體可在第一個(gè)結(jié)點(diǎn)的指針域內(nèi)存入第二個(gè)結(jié)點(diǎn)的首地址,在第二個(gè)結(jié)點(diǎn)的指針域內(nèi)又存放第三個(gè)結(jié)點(diǎn)的首地址,如此串連下去直到最后一個(gè)結(jié)點(diǎn)。最后一個(gè)結(jié)點(diǎn)因無后續(xù)結(jié)點(diǎn)連接,其指針域可賦為0。這樣一種連接方式,在數(shù)據(jù)結(jié)構(gòu)中稱為“鏈表”。以下圖為最一簡(jiǎn)單鏈表的示意圖。結(jié)構(gòu)體庫函數(shù)提供動(dòng)態(tài)地開辟和釋放存儲(chǔ)單元的有關(guān)函數(shù):malloc函數(shù)Calloc函數(shù)free函數(shù)共用體例如:uniondatauniondata

{inti;{inti;charch;或

charch;floatf;floatf;}a,b,c;};uniondataa,b,c;共用體共用體和結(jié)構(gòu)體的比較:結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。

(1)同一個(gè)內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時(shí)只能存放其中一種,而不是同時(shí)存放幾種。(2)共用體變量中起作用的成員是最后一次存放的成員,在存入一個(gè)新的成員后原有的成員就失去作用。

(3)共用體變量的地址和它的各成員的地址都是同一地址。

枚舉類型枚舉:將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。申明枚舉類型用enumenumweekday{sun,mon,tue,wed,thu,fri,sat};

定義變量:enumweekdayworkday,week-day;enum{sun,mon,tue,wed,thu,fri,sat}workday;變量值只能是sun到sat之一。用typedef定義類型用typedef聲明新的類型名來代替已有的類型名。聲明INTEGER為整型typedefintINTEGER聲明結(jié)構(gòu)類型Typedefstruct{intmonth;

intday;

intyear;}DATE;

位運(yùn)算12.1數(shù)值在計(jì)算機(jī)中的表示12.2位運(yùn)算12.3位段12.1數(shù)值在計(jì)算機(jī)中的表示存儲(chǔ)單元地址0000H0001H0002HFFFFH存儲(chǔ)體結(jié)構(gòu)圖存儲(chǔ)位存儲(chǔ)單元〔字節(jié)〕存儲(chǔ)體12.1數(shù)值在計(jì)算機(jī)中的表示在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼表示〔存儲(chǔ)〕,原因在于:使用補(bǔ)碼,可以將符號(hào)位和其它位統(tǒng)一處理;同時(shí),減法也可按加法來處理。另外,兩個(gè)用補(bǔ)碼表示的數(shù)相加時(shí),如果最高位〔符號(hào)位〕有進(jìn)位,那么進(jìn)位被舍棄。12.2位運(yùn)算

位運(yùn)算符分為兩類:1.只有一個(gè)變量參與運(yùn)算:~,<<,>>2.有兩個(gè)變量參與運(yùn)算:&,|,∧12.3位段所謂位段類型,是一種特殊的結(jié)構(gòu)類型,其所有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論