C程序設(shè)計總復(fù)習(xí)_第1頁
C程序設(shè)計總復(fù)習(xí)_第2頁
C程序設(shè)計總復(fù)習(xí)_第3頁
C程序設(shè)計總復(fù)習(xí)_第4頁
C程序設(shè)計總復(fù)習(xí)_第5頁
已閱讀5頁,還剩265頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、n第 1 章 導(dǎo)論n第 2 章 數(shù)據(jù)n第 3 章 運算與表達式n第 4 章 程序控制結(jié)構(gòu)n1. C語言的起源語言的起源n2. 如何學(xué)習(xí)如何學(xué)習(xí)C語言語言C語言的起源語言的起源nC語言的標準語言的標準q標準標準C、ANSI C、C89、C99nC語言的特點語言的特點q既有高級語言的特點,又有匯編語言的特點。既有高級語言的特點,又有匯編語言的特點。q程序的可移植性好。程序的可移植性好。q程序設(shè)計的自由度大。程序設(shè)計的自由度大。BCPL語言語言B語言語言C語言語言C+語言語言為編寫為編寫Unix操作系統(tǒng)而操作系統(tǒng)而設(shè)計的語言設(shè)計的語言C語言的學(xué)習(xí)階段語言的學(xué)習(xí)階段與學(xué)習(xí)方法與學(xué)習(xí)方法n入門階段入門階

2、段q掌握使用掌握使用C語言進行程序設(shè)計的基本方法語言進行程序設(shè)計的基本方法 n進階階段進階階段q寫出好的程序?qū)懗龊玫某绦?n實用階段實用階段q將程序設(shè)計用于到自己的工作中將程序設(shè)計用于到自己的工作中 nC語言的學(xué)習(xí)方法語言的學(xué)習(xí)方法q循序漸進循序漸進q上機實踐上機實踐第第2章章 數(shù)據(jù)數(shù)據(jù)n2.1 基本數(shù)據(jù)類型基本數(shù)據(jù)類型q2.1.1 整型數(shù)據(jù)整型數(shù)據(jù)q2.1.2 浮點型數(shù)據(jù)浮點型數(shù)據(jù)q2.1.3 指針型數(shù)據(jù)指針型數(shù)據(jù)n2.2-2.3 常量與變量常量與變量n2.4 輸出與輸入輸出與輸入n有符號數(shù)和無符號數(shù)有符號數(shù)和無符號數(shù) signed、unsigned n字符型字符型 charn短整型短整型

3、shortn標準整型標準整型 intn長整型長整型 longn注意數(shù)據(jù)的溢出注意數(shù)據(jù)的溢出2.1.1 整型數(shù)據(jù)整型數(shù)據(jù)n單精度浮點型、雙精度浮點型、高精度型單精度浮點型、雙精度浮點型、高精度型 qfloat、double、long double2.1.2 浮點型數(shù)據(jù)浮點型數(shù)據(jù)1.常量:在程序運行過程中,其值常量:在程序運行過程中,其值不能被改變的量(具體的不能被改變的量(具體的數(shù))數(shù))n整型常量整型常量:如:如1000,12345,0,-345n實型常量實型常量q十進制小數(shù)形式:如十進制小數(shù)形式:如0.34 -56.79 0.0q指數(shù)形式:如指數(shù)形式:如12.34e3 (代表代表12.34 1

4、03)n字符常量字符常量:q普通字符:單撇號括起來的一個字符,如普通字符:單撇號括起來的一個字符,如a, ?,存儲存儲其其ASCII碼值。碼值。q轉(zhuǎn)義字符:以轉(zhuǎn)義字符:以開頭的字符序列。如開頭的字符序列。如n。2.2-2.3 常量和變量常量和變量 n字符串常量:雙瞥號括起來的若干字符。字符串常量:雙瞥號括起來的若干字符。如如”boy”,”1234”等等n符號常量:用符號常量:用#define指令,指定用一個符指令,指定用一個符號名稱代表一個常量。如號名稱代表一個常量。如 #define PI 3.14159262. 變量:變量代表一個有名字的、具有特定屬性的變量:變量代表一個有名字的、具有特定

5、屬性的一個存儲單元。在程序運行期間,變量的值是可一個存儲單元。在程序運行期間,變量的值是可以改變的。以改變的。 int a=3;n變量必須變量必須先定義先定義,后使用后使用n定義變量時指定該變量的定義變量時指定該變量的名字名字和和類型類型n變量名變量名和和變量值變量值是兩個不同的概念:是兩個不同的概念: 變量名實際上是以一個名字代表的一個變量名實際上是以一個名字代表的一個存存儲地址儲地址;從變量中取值,實際上是通過變;從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。中讀取數(shù)據(jù)。2.2-2.3 常量和變量常量和變量 標識符命名規(guī)則:

6、標識符命名規(guī)則:n語言規(guī)定標識符只能由語言規(guī)定標識符只能由字母字母、數(shù)字數(shù)字和和下劃線下劃線3種字符組成,且種字符組成,且第一個字符必須為字母或下劃線第一個字符必須為字母或下劃線n合法的標識符:如合法的標識符:如sum,average, _total, Class, day, BASIC, li_lingn不合法的標識符:不合法的標識符:M.D.John,¥,¥123,33,3D64,ab大小寫字母是不同的字符大小寫字母是不同的字符nputchar() 輸出單個字符輸出單個字符q putchar(A); q char ch1; ch1=65; putchar(ch1); nprintf(格式控

7、制,輸出表列格式控制,輸出表列) qprintf(“a=%d b=%d”,a,b);2.4 輸入和輸出輸入和輸出 q格式符。用來輸出一個格式符。用來輸出一個有符號的十進制整數(shù)有符號的十進制整數(shù)n可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)?,如:可以在格式聲明中指定輸出?shù)據(jù)的域?qū)?,如?printf(”%5d%5dn”,12,-345);q格式符。用來輸出一個字符格式符。用來輸出一個字符q格式符。用來輸出一個字符串,如:格式符。用來輸出一個字符串,如: printf(”%s”,”CHINA”);nf格式符。用來輸出實數(shù),以小數(shù)形式輸出格式符。用來輸出實數(shù),以小數(shù)形式輸出不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用不指定數(shù)

8、據(jù)寬度和小數(shù)位數(shù),用%f,只能得到只能得到位小數(shù)位小數(shù)n指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%m.nf printf(%20.15fn,1/3); 輸出的數(shù)據(jù)向左對齊,用輸出的數(shù)據(jù)向左對齊,用%-m.nfngetchar() 輸入單個字符。輸入單個字符。nscanf(格式控制,地址表列格式控制,地址表列) qint x,y,z;qscanf(a=%d,b=%d,c=%d,&x,&y,&z); q1 3 2 q a=1,b=3,c=2 q a=1 b=3 c=2 n語言本身不提供輸入輸出語句,輸入和輸出操語言本身不提供輸入輸出語句,輸入和輸出操作是由作是由C標準函數(shù)庫中的函數(shù)來實

9、現(xiàn)的標準函數(shù)庫中的函數(shù)來實現(xiàn)的.n在使用輸入輸出函數(shù)時,要在程序文件的開頭用在使用輸入輸出函數(shù)時,要在程序文件的開頭用預(yù)編譯指令預(yù)編譯指令#include 或或#include stdio.h第第3章章 運算與表達式運算與表達式n3.1 算術(shù)運算算術(shù)運算n3.2 關(guān)系運算關(guān)系運算n3.3 邏輯運算邏輯運算n3.4 位運算位運算n3.5 指針運算指針運算n3.6 其它運算其它運算n3.7 賦值運算賦值運算n單目基本算術(shù)運算符單目基本算術(shù)運算符q+ -n雙目基本算術(shù)運算符雙目基本算術(shù)運算符 q+ - * %3.1 算術(shù)運算算術(shù)運算 n以下程序中,以下程序中, for循環(huán)體執(zhí)行的次數(shù)是循環(huán)體執(zhí)行的次

10、數(shù)是 _ 。#define N 2#define M N+1#define K M+1*M/2nmain() int i;for(i=1;iint-unsigned int-long-unsigned long-float=double-long doublen強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換q(類型名)(表達式)(類型名)(表達式) q舉例:舉例:(double)a (將轉(zhuǎn)換成(將轉(zhuǎn)換成double類型)類型)(int) (x+y) (將(將x+y的值轉(zhuǎn)換成的值轉(zhuǎn)換成int型)型) (float)(5%3) (將(將5%3的值轉(zhuǎn)換成的值轉(zhuǎn)換成float型)型)n自增、自減運算自增、自減運算n關(guān)系運算

11、關(guān)系運算 q= =!=、=、=、 算術(shù)運算符算術(shù)運算符 q關(guān)系運算符關(guān)系運算符 & |3.3 邏輯運算邏輯運算 n按位邏輯運算按位邏輯運算q表達式形式:表達式形式:n操作對象操作對象1 & 操作對象操作對象2 n操作對象操作對象q舉例舉例nchar x=5,y=12nx & y =?nx | y =?nx y = ?n! x = ?3.4 位運算位運算 n移位運算移位運算q雙目左移位和右移位雙目左移位和右移位q舉例舉例nchar x=5,y=12nx2 = ?nx2 = ?ny x = ?1. sizeof運算運算 n單目右結(jié)合運算符,運算結(jié)果是一個無符單目右結(jié)合運算符,運算結(jié)果是一個無符號的

12、整型。號的整型。sizeof表達式形式如下:表達式形式如下:sizeof(操作對象)n舉例:舉例:qint x;qx=sizeof(char); qx=sizeof(x);3.6 其他運算其他運算 2. 逗號運算逗號運算 n用逗號連接的表達式稱用逗號連接的表達式稱逗號表達式逗號表達式,其形式為:,其形式為:q表達式表達式1,表達式,表達式2,表達式,表達式3,表達式,表達式nn注意注意q求解過程:依次計算各表達式的值,表達式求解過程:依次計算各表達式的值,表達式n的值為逗的值為逗號表達式的值號表達式的值.q優(yōu)先級是所有運算符中最低的,結(jié)合性是自左向右。優(yōu)先級是所有運算符中最低的,結(jié)合性是自左向

13、右。n例如:例如:qint x;qx=(3*5,12),100; 3. 條件運算條件運算 n形式:形式:q表達式表達式1?表達式?表達式2:表達式:表達式3n執(zhí)行:執(zhí)行:q先計算表達式先計算表達式1:q如果表達式如果表達式1的值非的值非0,則執(zhí)行表達式,則執(zhí)行表達式2,表達,表達式式2的值作為整個條件表示的值;的值作為整個條件表示的值;q如果表達式如果表達式1為為0,則執(zhí)行表達式,則執(zhí)行表達式3,表達式,表達式3的的值作為整個條件表示的值。值作為整個條件表示的值。n賦值運算符和賦值表達式賦值運算符和賦值表達式n復(fù)合賦值運算復(fù)合賦值運算q*= a*=b等價于等價于a=a*b3.7 賦值運算賦值運

14、算 第第4 4章章 程序控制結(jié)構(gòu)程序控制結(jié)構(gòu)n4.1 程序語句程序語句n4.2 順序結(jié)構(gòu)順序結(jié)構(gòu)n4.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu)n4.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)三種程序控制結(jié)構(gòu)n順序結(jié)構(gòu)是最簡單的一種程序結(jié)構(gòu)形式,順序結(jié)構(gòu)是最簡單的一種程序結(jié)構(gòu)形式,它總是由一組順序執(zhí)行的語句構(gòu)成。它總是由一組順序執(zhí)行的語句構(gòu)成。4.2 順序結(jié)構(gòu)順序結(jié)構(gòu) nC語言有兩種選擇語句:語言有兩種選擇語句:(1)if語句語句,實現(xiàn)兩個分支的選擇結(jié)構(gòu),實現(xiàn)兩個分支的選擇結(jié)構(gòu)(2)switch語句語句,實現(xiàn)多分支的選擇結(jié)構(gòu),實現(xiàn)多分支的選擇結(jié)構(gòu)4.3.1 if語句 n形式形式1: if (表達式表達式) 語句語句n注意:注意:q表達式

15、以表達式以關(guān)系表達式關(guān)系表達式和和邏輯表達式邏輯表達式為主;為主;q括號不可省;括號不可??;q若控制多條語句,則加括號構(gòu)成復(fù)合語句。若控制多條語句,則加括號構(gòu)成復(fù)合語句。4.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu) n形式形式2if (表達式表達式) 語句語句1else 語句語句2例:有一函數(shù)例:有一函數(shù): 編一程序,輸入一個編一程序,輸入一個x值,要求輸出相應(yīng)的值,要求輸出相應(yīng)的y值。值。)0(1)0(0)0(1xxxyn解題思路:解題思路:方法方法1(1) 先后用先后用3個獨立的個獨立的if語句處理:語句處理:輸入輸入x若若 x 0, 則則y = 1輸出輸出x和和yscanf(%d,&x);if(x0) y

16、= 1;printf(x=%d,y=%dn,x,y);n解題思路:解題思路:方法方法2(2) 用一個嵌套的用一個嵌套的if語句處理:語句處理:輸入輸入x若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0 否則否則 y = 1輸出輸出x和和yscanf(%d,&x);if(x0) y=-1;else if(x=0) y=0; else y=1;printf(x=%d,y=%dn,x,y);n解題思路:解題思路:方法方法2(2) 用一個嵌套的用一個嵌套的if語句處理:語句處理:輸入輸入x若若x 0, 則則y = -1 否則否則 若若 x = 0, 則則y = 0 否則否則

17、 y = 1輸出輸出x和和yscanf(%d,&x);if(x=0) if (x0) y=1; else y=0;else y=-1;printf(x=%d,y=%dn,x,y);提倡內(nèi)嵌提倡內(nèi)嵌if放在放在else中中4.3.3 switch語句 nswitch語句的形式語句的形式switch (表達式表達式)case 常數(shù)表達式常數(shù)表達式1: 語句序列語句序列1case 常數(shù)表達式常數(shù)表達式n: 語句序列語句序列ndefault: 默認語句序列默認語句序列n【例例4.13】要求按照考試成績的等級輸出要求按照考試成績的等級輸出百分制分數(shù)段,百分制分數(shù)段,A等為等為85分以上,分以上,B等為等

18、為7084分,分,C等為等為6069分分 ,D等為等為 60分分以下。成績的等級由鍵盤輸入。以下。成績的等級由鍵盤輸入。#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); ret

19、urn 0; 值為值為A#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 不能少不能少#include int main() char grade; sca

20、nf(%c,&grade); printf(Your score:); switch(grade) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 值為值為C#include int main() char grade; scanf(%c,&grade); printf(Your score:); switch(grade

21、) case A: printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); return 0; 值為值為Fnswitch語句的作用是根據(jù)表達式的值,使語句的作用是根據(jù)表達式的值,使流程跳轉(zhuǎn)到不同的語句流程跳轉(zhuǎn)到不同的語句nswitch語句的一般形式:語句的一般形式:switch(表達式)(表達式) case 常量常量1 :語句:語句1 case 常量常量2 :語句:

22、語句2 case 常量常量n :語句:語句n default : 語句語句n+1整數(shù)類型整數(shù)類型(包括字符型包括字符型)nswitch語句的作用是根據(jù)表達式的值,使語句的作用是根據(jù)表達式的值,使流程跳轉(zhuǎn)到不同的語句流程跳轉(zhuǎn)到不同的語句nswitch語句的一般形式:語句的一般形式:switch(表達式)(表達式) case 常量常量1 :語句:語句1 case 常量常量2 :語句:語句2 case 常量常量n :語句:語句n default : 語句語句n+1不能相同不能相同 scanf(%c,&grade); printf(Your score:); switch(grade) case A:

23、 printf(85100n);break; case B: printf(7084n);break; case C: printf(6069n);break; case D: printf(60n);break; default: printf(enter data error!n); While, do while, for, goto 四種四種實現(xiàn)循環(huán)結(jié)構(gòu)的語句實現(xiàn)循環(huán)結(jié)構(gòu)的語句4.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 全班有全班有50個學(xué)生,統(tǒng)計各學(xué)生三門課個學(xué)生,統(tǒng)計各學(xué)生三門課的平均成績。的平均成績。用用while循環(huán)結(jié)構(gòu)實現(xiàn)循環(huán)結(jié)構(gòu)實現(xiàn)i=1i50輸入一個學(xué)生成績輸入一個學(xué)生成績求一個學(xué)生平均成

24、績求一個學(xué)生平均成績輸出一個學(xué)生平均成績輸出一個學(xué)生平均成績i增增1YNwhile(i=50) scanf ; aver= ; printf ; i+; while語句的一般形式如下:語句的一般形式如下: while (表達式表達式) 循環(huán)體循環(huán)體單條語句單條語句 或或括起來的復(fù)合語句括起來的復(fù)合語句 while語句的一般形式如下:語句的一般形式如下: while (表達式表達式) 循環(huán)體循環(huán)體“真真”時執(zhí)行循環(huán)體語句時執(zhí)行循環(huán)體語句“假假”時不執(zhí)行時不執(zhí)行循環(huán)條件表達式循環(huán)條件表達式n例:以下程序段的輸出結(jié)果是(例:以下程序段的輸出結(jié)果是( )。)。int k,n,m;n=10;m=1;k=

25、1;while(k=n) m*=10;printf(%dn,m);例例4.15 求求1+2+3+100,即,即n分析:分析:q累加問題,先后將累加問題,先后將100個數(shù)相加,重復(fù)個數(shù)相加,重復(fù)100次次加法運算,可用循環(huán)實現(xiàn)加法運算,可用循環(huán)實現(xiàn)q后一個數(shù)是前一個數(shù)加后一個數(shù)是前一個數(shù)加1而得,加完上一個數(shù)而得,加完上一個數(shù)i后,使后,使i加加1可得到下一個數(shù)可得到下一個數(shù)1001nn#include int main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); return 0;復(fù)合語句復(fù)合語句#inc

26、lude int main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum); return 0;不能丟,否則循環(huán)永不結(jié)束不能丟,否則循環(huán)永不結(jié)束do-while語句的特點:先無條件地執(zhí)語句的特點:先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立行循環(huán)體,然后判斷循環(huán)條件是否成立一般形式為:一般形式為: do 循環(huán)體循環(huán)體 while (表達式表達式);表達式表達式Y(jié)N循環(huán)體語句循環(huán)體語句printf(%d , i );i+i=100i=1for (i=1;ij共執(zhí)行了(共執(zhí)行了( )次。)次。 #include

27、main( )int i=0,j=8,k=2,s=0;for(;) i+=k; if(ij) printf(%d,s); break; s+=i;1 用用break語句提前終止循環(huán)語句提前終止循環(huán)2 用用continue語句提前結(jié)束本次循環(huán)語句提前結(jié)束本次循環(huán)3 break語句和語句和continue語句的區(qū)別語句的區(qū)別nbreak語句可以用來從循環(huán)體內(nèi)跳出循語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句下面的語句nbreak只能用于只能用于循環(huán)語句循環(huán)語句和和switch語句語句中中 例例4.25 編寫程序把能夠被編寫程序把能夠被5

28、整除的兩位整除的兩位正整數(shù)輸出,一行輸出正整數(shù)輸出,一行輸出5個數(shù)。個數(shù)。int i,c;printf(“The numbers which can be are:n”);for (i=10;i99;i+) if(i%5!=0) continue; printf(“%d “,i); c+; if(c%5=0) printf(“n”);ncontinue語句只結(jié)束本次循環(huán),而不是語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行終止整個循環(huán)的執(zhí)行nbreak語句結(jié)束整個循環(huán)過程,不再判語句結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立斷執(zhí)行循環(huán)的條件是否成立一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),一

29、個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為稱為循環(huán)的嵌套循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)循環(huán)3種循環(huán)種循環(huán)(while循環(huán)、循環(huán)、dowhile循環(huán)和循環(huán)和for循循環(huán)環(huán))可以互相嵌套可以互相嵌套例:輸出以下例:輸出以下4*5的矩陣。的矩陣。 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%

30、dt,i*j); printf(n); return 0;累計輸出數(shù)據(jù)的個數(shù)累計輸出數(shù)據(jù)的個數(shù)控制一行內(nèi)輸控制一行內(nèi)輸出出5個數(shù)據(jù)個數(shù)據(jù)#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;雙重循環(huán)雙重循環(huán)#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n

31、”); printf (%dt,i*j); printf(n); return 0;控制輸出控制輸出4行行#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;控制每行中輸控制每行中輸出出5個數(shù)據(jù)個數(shù)據(jù)#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”)

32、; printf (%dt,i*j); printf(n); return 0;i=1時時j由由1變到變到5i*j的值是的值是1,2,3,4,5#include int main() int i,j,n=0; for (i=1;i=4;i+) for (j=1;j=5;j+,n+) if (n%5=0) printf (“n”); printf (%dt,i*j); printf(n); return 0;i=2時時j也由也由1變到變到5i*j的值是的值是2,4,6,8,10(1)一般情況下,一般情況下,3種循環(huán)可以互相代替種循環(huán)可以互相代替(2) 在在while和和do-while循環(huán)中,循

33、環(huán)體應(yīng)包循環(huán)中,循環(huán)體應(yīng)包含使循環(huán)趨于結(jié)束的語句。含使循環(huán)趨于結(jié)束的語句。(3) 用用while和和do-while循環(huán)時,循環(huán)變量初循環(huán)時,循環(huán)變量初始化的操作應(yīng)在始化的操作應(yīng)在while和和do-while語句之前完語句之前完成。而成。而for語句可以在表達式語句可以在表達式1中實現(xiàn)循環(huán)變量中實現(xiàn)循環(huán)變量的初始化。的初始化。n第 5 5章 數(shù)組n第 6章 其他數(shù)據(jù)類型n第 7 章 函數(shù)第第5 5章章 數(shù)數(shù) 組組n5.1 一維數(shù)組 n5.2 多維數(shù)組 n5.3 字符數(shù)組與字符串 n5.4 指針數(shù)組 5.1 一維數(shù)組5.1.1 定義一維數(shù)組定義一維數(shù)組5.1.2 引用一維數(shù)組元素引用一維數(shù)組元

34、素5.1.3 一維數(shù)組的初始化一維數(shù)組的初始化5.1.4 一維數(shù)組程序舉例一維數(shù)組程序舉例n定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符 數(shù)組名常量表達式;如如 int a10;每個元素的數(shù)據(jù)類型每個元素的數(shù)據(jù)類型n定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符 數(shù)組名常量表達式;如如 int a10;q數(shù)組名的命名規(guī)則和變量名相同數(shù)組名的命名規(guī)則和變量名相同數(shù)組名數(shù)組名n定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符 數(shù)組名常量表達式;如如 int a10;數(shù)組長度數(shù)組長度n定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符 數(shù)組名常量表

35、達式;如如 int a10;10個元素:個元素:a0, a1, a2, , a9n定義一維數(shù)組的一般形式為:定義一維數(shù)組的一般形式為: 類型符 數(shù)組名常量表達式;int a4+6; int n=10; int an;不合法不合法合法合法n注意事項:注意事項:q數(shù)組名屬于標識符,應(yīng)遵循標識符命名規(guī)則。數(shù)組名屬于標識符,應(yīng)遵循標識符命名規(guī)則。q數(shù)組名作為變量名不能與其它變量名相同。數(shù)組名作為變量名不能與其它變量名相同。q數(shù)組的大小必須由數(shù)組的大小必須由常量或常量表達式常量或常量表達式定義定義q數(shù)組名如果出現(xiàn)在表達式中,它的值和含義是數(shù)組名如果出現(xiàn)在表達式中,它的值和含義是該數(shù)組首個元素的地址該數(shù)組

36、首個元素的地址。q數(shù)組名數(shù)組名+n的值是數(shù)組中第的值是數(shù)組中第n+1個元素的地址個元素的地址。q對數(shù)組名取地址,得到是對數(shù)組名取地址,得到是整個數(shù)組的地址整個數(shù)組的地址,其,其值雖然與值雖然與數(shù)組首個元素地址數(shù)組首個元素地址值相同,但類型不值相同,但類型不同、含義不同。同、含義不同。n【例例5.3】求變量地址的值和加求變量地址的值和加1后的值:后的值:/假設(shè)假設(shè)a、b在內(nèi)存中的地址分別為在內(nèi)存中的地址分別為1000、2000int a=0;int b10;n&a, &a+1 /nb, b+1 /n&b, &b+1 /1000, 10042000, 20042000, 2040n引用數(shù)組元素的表

37、示形式為:引用數(shù)組元素的表示形式為: 數(shù)組名下標 如如 a0=a5+a7-a2*3n注意事項:注意事項:q一個數(shù)組不能整體引用。一個數(shù)組不能整體引用。qC語言編譯器并不檢查數(shù)組元素的下標是否越語言編譯器并不檢查數(shù)組元素的下標是否越界,界,應(yīng)避免數(shù)組操作越界應(yīng)避免數(shù)組操作越界。n初始化賦值的一般形式為:初始化賦值的一般形式為:類型標識符類型標識符 數(shù)組名數(shù)組名整型常量表達式整型常量表達式 = 初值表初值表;n中的各數(shù)據(jù)值即為數(shù)組各元素的初值,中的各數(shù)據(jù)值即為數(shù)組各元素的初值,各值之間用逗號間隔。各值之間用逗號間隔。n一維數(shù)組的幾種初始化情形一維數(shù)組的幾種初始化情形 q完全初始化完全初始化 int

38、 a10 = 0,1,2,3,4,5,6,7,8,9;q部分初始化部分初始化int a10 = 0,1,2,3,4;相當(dāng)于相當(dāng)于int a10 = 0,1,2,3,4,0,0,0,0,0;q省略數(shù)組長度的完全初始化省略數(shù)組長度的完全初始化int a = 1,2,3,4,5; 可寫為可寫為int a5 = 1,2,3,4,5; 例:用數(shù)組處理求Fibonacci數(shù)列前20個數(shù)n解題思路:解題思路:q用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應(yīng)的數(shù)組元素個數(shù),依次求出各數(shù)并存放在相應(yīng)的數(shù)組元素中中#include int main(

39、) int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(“n”); printf(“%12d”,fi); printf(n); return 0;第第5 5章章 數(shù)數(shù) 組組n5.1 一維數(shù)組 n5.2 多維數(shù)組 n5.3 字符數(shù)組與字符串 n5.4 指針數(shù)組 5.2.1 定義二維數(shù)組定義二維數(shù)組5.2.2 引用二維數(shù)組的元素引用二維數(shù)組的元素5.2.3 二維數(shù)組的初始化二維數(shù)組的初始化5.2.4 二維數(shù)組程序舉例二維數(shù)組程序舉例n二維數(shù)組定義的一般形式為二維數(shù)組定義的一般形式為 類

40、型符 數(shù)組名常量表達式常量表達式; 如:如:float a34,b510;n二維數(shù)組可被看作是一種特殊的一維數(shù)組:二維數(shù)組可被看作是一種特殊的一維數(shù)組:它的元它的元素又是一個一維數(shù)組素又是一個一維數(shù)組n例如,把例如,把a看作是一個一維數(shù)組,它有看作是一個一維數(shù)組,它有3個元素:個元素: a0、a1、a2每個元素又是一個包含每個元素又是一個包含4個元素的一維數(shù)組個元素的一維數(shù)組a0a1a2n注意事項:注意事項:q二維數(shù)組名如果出現(xiàn)在表達式中,它的值及其二維數(shù)組名如果出現(xiàn)在表達式中,它的值及其含義是含義是該數(shù)組首個元素的地址該數(shù)組首個元素的地址。q數(shù)組名數(shù)組名+n的值是數(shù)組第的值是數(shù)組第n+1個元

41、素的地址。個元素的地址。q對數(shù)組名取地址,得到的是對數(shù)組名取地址,得到的是整個數(shù)組的地址整個數(shù)組的地址。n數(shù)組名數(shù)組名+n的值是的值是數(shù)組第數(shù)組第n+1個元素的地址個元素的地址。n對二維數(shù)組對二維數(shù)組aij,將其看成,將其看成i個元素的一維個元素的一維數(shù)組,每個數(shù)組,每個ai又包含又包含j個元素。個元素。n例例5.9中中 int a43qa+1的值即的值即a1的地址;的地址;qa0+1的值是的值是a01的值。的值。n【例例5.12】求變量地址的值和加求變量地址的值和加1后的值后的值nInt a34; /假定首地址為假定首地址為10000n&a, &a+1; n&a0, &a0+1;na, a+

42、1, a1;na0, a0+1, &a01;n&a00, &a00+110000, 1004810000, 1001610000, 10016, 1001610000, 10004, 1000410000, 10012整個二維數(shù)組占整個二維數(shù)組占48字節(jié)字節(jié)整型地址整型地址+1a即即a0地址,占地址,占16字節(jié)字節(jié)a0地址,占地址,占16字節(jié)字節(jié)n初始化一般形式為:初始化一般形式為:q類型 數(shù)組名整型常量表達式1整型常量表達式2 整型常量表達式3 = 初值表;n多維數(shù)組的初始化方法。多維數(shù)組的初始化方法。q完全初始化完全初始化 int a34=1, 2, 3, 4,5, 6, 7, 8, 9,

43、10,11,12;int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;q部分初始化部分初始化int a34=1, 5, 9;等價于等價于int a34=1,0,0,0,5,0,0,0,9,0,0,0;int a34=1,5,6;相當(dāng)于相當(dāng)于int a34=1,5,6,0;q省略數(shù)組長度的完全初始化省略數(shù)組長度的完全初始化 。int a34=1,2,3,4,5,6,7,8,9,10,11,12;等價于:等價于:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;可且只可省略一維方括號內(nèi)的常量表達式,可且只可省略一維方括號內(nèi)的常量表達式,此

44、時行下標數(shù)此時行下標數(shù)=初值個數(shù)初值個數(shù)/列標長度上取整。列標長度上取整。int a4=0,0,3, ,0,10; 合法合法Int a3=1, 2, 3, 4 例:將一個二維數(shù)組行和列的元素互換,存例:將一個二維數(shù)組行和列的元素互換,存到另一個二維數(shù)組中。到另一個二維數(shù)組中。654321a635241b#include int main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); 處理處理

45、a的一行中各元素的一行中各元素處理處理a中某一列元素中某一列元素輸出輸出a的各元素的各元素a元素值賦給元素值賦給b相應(yīng)元素相應(yīng)元素 printf(array b:n); for (i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); return 0; 輸出輸出b的各元素的各元素5.3 字符數(shù)組與字符串字符數(shù)組與字符串 5.3.1 字符數(shù)組與字符串的關(guān)系字符數(shù)組與字符串的關(guān)系5.3.2 字符串的輸入輸出字符串的輸入輸出5.3.3 字符串處理函數(shù)字符串處理函數(shù)5.3.4 程序舉例程序舉例char c10;c0=I; c1= ; c2=a;

46、 c3=m;c4= ; c5=h; c6=a; c7=p; c8=p; c9=y;c0c1c2c3c4c5c6c7c8c9char c10=I, ,a,m, ,h,a,p,p,y;char c10=c, ,p,r,o,g,r,a,m;c0c1c2c3c4c5c6c7c8c9c0c1c2c3c4c5c6c7c8c9char diamond55= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,* ;n在在C語言中,是將字符串作為語言中,是將字符串作為字符數(shù)組字符數(shù)組來處理的來處理的n關(guān)心的是字符串的關(guān)心的是字符串的有效長度有效長度而不是字符而不是字符數(shù)組的長度數(shù)組的長度n

47、為了測定字符串的實際長度,為了測定字符串的實際長度,C語言規(guī)語言規(guī)定了字符串結(jié)束標志定了字符串結(jié)束標志0char c10=”China”;可寫成char c10=”China”;從c5開始,元素值均為0只顯示printf(”%s”,c);5.3.2 字符串的輸入輸出字符串的輸入輸出n1. scanf函數(shù)整體輸入字符串函數(shù)整體輸入字符串n2. printf輸出字符串輸出字符串n3. gets函數(shù)輸入字符串函數(shù)輸入字符串n4. puts函數(shù)輸出字符串函數(shù)輸出字符串n調(diào)用形式調(diào)用形式 scanf(“%s”, 字符地址字符地址);n將輸入的一串字符依次存入所給起始將輸入的一串字符依次存入所給起始地址的

48、存儲單元中,最后補地址的存儲單元中,最后補0n回車鍵和空格鍵作為結(jié)束標志回車鍵和空格鍵作為結(jié)束標志,即不,即不能被輸入。能被輸入。nscanf函數(shù)中的輸入項函數(shù)中的輸入項c是已定義的字是已定義的字符數(shù)組名,輸入的字符串應(yīng)符數(shù)組名,輸入的字符串應(yīng)短于短于已定已定義的字符數(shù)組的長度。義的字符數(shù)組的長度。 char c6; scanf(”%s”,c); China 系統(tǒng)自動在系統(tǒng)自動在China后面加一個后面加一個0char str15,str25,str35;scanf(”%s%s%s”,str1,str2,str3);How are you? str1str2str3n一般形式一般形式print

49、f(“%s”, 字符地址字符地址) n輸出項是字符數(shù)組名輸出項是字符數(shù)組名(地址地址),不是數(shù),不是數(shù)組元素名組元素名n依次輸出各字符,直到遇到依次輸出各字符,直到遇到0。n【例5.21】printf輸出字符串.char str = “man”;printf(“%s”, str);.n其一般形式為:其一般形式為: gets(字符地址字符地址)n作用是輸入一個字符串到字符數(shù)組作用是輸入一個字符串到字符數(shù)組n以以回車鍵回車鍵結(jié)束,因而可以輸入帶空格結(jié)束,因而可以輸入帶空格的字符串。的字符串。 char str20; gets(str); Computerstrn其一般形式為:其一般形式為: put

50、s (字符地址字符地址)n作用是將所給地址開始的字符串輸出到終作用是將所給地址開始的字符串輸出到終端,遇端,遇0結(jié)束,并把其轉(zhuǎn)換為結(jié)束,并把其轉(zhuǎn)換為n。 char str20=”China”; puts(str); 輸出輸出Chinan【例5.23】puts輸出字符串.char str = “ABC DEF XYZ”;puts(str);puts(str+5).數(shù)組名數(shù)組名+n:數(shù)組中第:數(shù)組中第n+1個元素的地址個元素的地址5.3.3 字符串處理函數(shù)字符串處理函數(shù)n1. 字符串連接函數(shù)strcatn2. 字符串拷貝函數(shù)strcpyn3. 字符串比較函數(shù)strcmpn4. 字符串長度函數(shù)str

51、lenn一般形式為: strcat(字符地址1,字符地址2)n其作用是把兩個字符串連接起來,把字符串2接到字符串1的后面,結(jié)果放在字符串1中。n覆蓋字符串1后的0,返回字符地址1。注意:使用字符串函數(shù)時注意:使用字符串函數(shù)時,在程序開頭用在程序開頭用 #include char str130=”People”; char str2=”China”; printf(”%s”, strcat(str1,str2); 輸出:PeopleChina足夠大,否則越界足夠大,否則越界第第6 6章章 其他數(shù)據(jù)類型其他數(shù)據(jù)類型n6.1 結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義 n6.2 結(jié)構(gòu)體類型變量結(jié)構(gòu)體類型變量(定義

52、、初始化、引用定義、初始化、引用)n6.3 結(jié)構(gòu)體類型數(shù)組結(jié)構(gòu)體類型數(shù)組(定義、初始化、引用定義、初始化、引用) n6.4 位段類型位段類型n6.5 共用體類型n6.6 枚舉類型n6.7 自定義類型n基本數(shù)據(jù)類型:q整型、實型、指針型n自定義類型:q數(shù)組所有元素類型相同n用戶自己建立由用戶自己建立由不同類型數(shù)據(jù)組成的不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu),它稱為組合型的數(shù)據(jù)結(jié)構(gòu),它稱為結(jié)構(gòu)體。結(jié)構(gòu)體。n例如,同一個學(xué)生的學(xué)號、姓名、性例如,同一個學(xué)生的學(xué)號、姓名、性別、年齡、成績、家庭地址等項別、年齡、成績、家庭地址等項 組成組成一個組合數(shù)據(jù)。一個組合數(shù)據(jù)。struct Student int n

53、um; char name20; char sex; int age; float score; char addr30; ;u結(jié)構(gòu)體類型結(jié)構(gòu)體類型struct Studentu它包括它包括num, name, sex, age, score, addr等等不同類型不同類型的的成員成員n成員可以屬于另一個結(jié)構(gòu)體類型。成員可以屬于另一個結(jié)構(gòu)體類型。 struct Date int month; int day; int year; ; struct Stu int num; char name20; char sex; int age; struct Date birthday; char ad

54、dr30; ;三種形式:三種形式:n先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 n在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量 n直接定義結(jié)構(gòu)體類型變量直接定義結(jié)構(gòu)體類型變量6.2.1 結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義1. 先定義結(jié)構(gòu)體類型,再定義該類型變量struct 結(jié)構(gòu)體名 變量名表列;n如聲明結(jié)構(gòu)體類型struct Student,用它來定義兩個變量,形式如下: struct Student student1,student2;結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名 6.2.1 結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義1. 先定義

55、結(jié)構(gòu)體類型,再定義該類型變量 struct Student student1,student2;student1student26.2.1 結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義注意:注意: 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,不要混同。念,不要混同。只能對變量賦值、存取或運算,而不只能對變量賦值、存取或運算,而不能對一個類型賦值、存取或運算。能對一個類型賦值、存取或運算。在編譯時,對類型是不分配空間的,在編譯時,對類型是不分配空間的,只對變量分配空間。只對變量分配空間。6.2.1 結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義n例:把一個學(xué)生的信息(包括學(xué)號、姓名、性別、住址)放

56、在一個結(jié)構(gòu)體變量中,然后輸出這個學(xué)生的信息。#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%ldn name:%sn sex:%cn address:%sn, a.num, , a.sex, a.addr); return 0; n定義結(jié)構(gòu)體數(shù)組的一般形式:定義結(jié)構(gòu)體數(shù)組的一般形式:struct studentint num; *學(xué)號學(xué)號*char name20

57、; *姓名姓名*int sex; *性別性別*int age; *年齡年齡*float score; *成績成績*;struct student st3;6.3.1 結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義數(shù)組各元素在內(nèi)存中連續(xù)存放數(shù)組各元素在內(nèi)存中連續(xù)存放n將每個元素的數(shù)據(jù)分別用大括號括起來。struct student st3=1,”張三”,1,73.0, 2,”李四”,1,90.5, 3,”王五”,1,85.5;struct student st3=1,”張三”,1,73.0, 2,”李四”,1,90.5;6.3.2 結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化 例:有3個候選人,每個選民只能投票選一人

58、,要求編一個統(tǒng)計選票的程序,先后輸入被選人的名字,最后輸出各人得票結(jié)果。#include #include struct Person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0; 全局的結(jié)構(gòu)體數(shù)組全局的結(jié)構(gòu)體數(shù)組namecountleader0Li0Zhang0Sun0int main() int i,j; char leader_name20; for (i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name, leaderj.

59、name)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn“,, leaderi.count); return 0;leaderj.count=leaderj.count+1;int main() int i,j; char leader_name20; for (i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name, )=0) leaderj.count+; for(i=0;i3;i+) printf

60、(%5s:%dn“,, leaderi.count); return 0;指針1 指針指針2 指針變量指針變量3 通過指針引用數(shù)組通過指針引用數(shù)組n內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是“地址地址”,它相當(dāng)于旅館中的房間號。,它相當(dāng)于旅館中的房間號。n在地址所標識的內(nèi)存單元中存放在地址所標識的內(nèi)存單元中存放數(shù)據(jù)數(shù)據(jù),相當(dāng),相當(dāng)于旅館房間中居住的旅客。于旅館房間中居住的旅客。n由于通過地址能找到所需的變量單元,因此由于通過地址能找到所需的變量單元,因此說,說,地址指向該變量單元。地址指向該變量單元。n將地址形象化地稱為將地址形象化地稱為“

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論