課件計(jì)算概論Lecture 20_第1頁(yè)
課件計(jì)算概論Lecture 20_第2頁(yè)
課件計(jì)算概論Lecture 20_第3頁(yè)
課件計(jì)算概論Lecture 20_第4頁(yè)
課件計(jì)算概論Lecture 20_第5頁(yè)
已閱讀5頁(yè),還剩91頁(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)介

1、計(jì)算概論 (Introduction to Computing),主講人:馬思偉 北京大學(xué)數(shù)字媒體研究所 ,第二十講 復(fù)習(xí),關(guān)于考試,內(nèi)容:C程序設(shè)計(jì) 題型 選擇、填空、判斷、程序閱讀、程序補(bǔ)充、編程 時(shí)間:1.8(星期三) 二教203 下午 2:00-4:00 計(jì)算概論成績(jī): 期中30% 平時(shí)成績(jī)20% 期末50%,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第

2、十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),機(jī)器語(yǔ)言,機(jī)器指令采用二進(jìn)制代碼形式,它們符合具體計(jì)算機(jī)的指令系統(tǒng),可以由計(jì)算機(jī)直接執(zhí)行。因此機(jī)器指令實(shí)際上也是一種可以在程序設(shè)計(jì)中使用的語(yǔ)言,被稱為“機(jī)器語(yǔ)言”。每一條機(jī)器指令包括兩個(gè)主要方面:操作(指出計(jì)算機(jī)應(yīng)做什么)和被操作的對(duì)象(指出處理的數(shù)據(jù)或它的地址)。 機(jī)器指令 格式:操作碼 操作數(shù)操作數(shù) 分類:數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算、控制轉(zhuǎn)移,匯編語(yǔ)言,從人的思維方式而言更適合于用概念描述事物,對(duì)于煩瑣冗長(zhǎng)的數(shù)字編碼,由于它們不能與概念和概念之間的語(yǔ)義聯(lián)系產(chǎn)生任何提示作用,則顯然對(duì)設(shè)計(jì)思維沒(méi)有任

3、何幫助作用,純粹是一種累贅。人們顯然更希望用有幫助記憶作用的符號(hào)來(lái)書寫程序,例如用 ADD 表示加法操作,用 JMP 表示控制性轉(zhuǎn)移等。操作的對(duì)象(數(shù)據(jù)或數(shù)據(jù)的地址)最好也能用符號(hào)形式表示,例如用 X、Y代表兩個(gè)存儲(chǔ)數(shù)據(jù)的容器。顯然這樣做比直接采用二進(jìn)碼方便得多。這就是“匯編程序設(shè)計(jì)語(yǔ)言”的基本想法。 格式 助記符 操作數(shù)操作數(shù),高級(jí)程序設(shè)計(jì)語(yǔ)言,高級(jí)語(yǔ)言在對(duì)計(jì)算過(guò)程的描述方面,完全脫離了簡(jiǎn)單的指令方式,采用類似于數(shù)學(xué)公式的書寫方式描述由一些數(shù)據(jù)計(jì)算出結(jié)果的過(guò)程,用一些更高級(jí)程序流程描述結(jié)構(gòu)取代簡(jiǎn)單的跳轉(zhuǎn)指令方式,以更好地滿足書寫程序的需要。 程序存儲(chǔ)數(shù)據(jù)的空間處理數(shù)據(jù)的語(yǔ)句 4個(gè)核心概念 變

4、量 表達(dá)式、語(yǔ)句、賦值,C程序設(shè)計(jì)導(dǎo)引,程序的基本框架 編譯預(yù)處理: #include, #define 自定義函數(shù)的聲明 主函數(shù):main() 自定義函數(shù)的定義 程序的基本元素 標(biāo)識(shí)符和關(guān)鍵字 標(biāo)識(shí)符是以字母,下劃線( _ ) 開始的一個(gè)字符序列,后面可以跟字母,下劃線,數(shù)字 關(guān)鍵字:具有專門的意義和用途,不能當(dāng)作一般的標(biāo)識(shí)符使用 數(shù)據(jù)類型、常量和變量 基本數(shù)據(jù)類型:整型、短整型、長(zhǎng)整型、單精度浮點(diǎn)型、雙精度浮點(diǎn)型、字符型、空類型 常量:直接使用;#define定義 變量:內(nèi)存空間 運(yùn)算符和表達(dá)式 算術(shù)、關(guān)系、邏輯、位運(yùn)算、賦值、條件運(yùn)算 語(yǔ)句和控制流,字符數(shù)據(jù)類型,字符類型數(shù)據(jù)與整數(shù)(0-

5、255), 區(qū)別 char c1 = 0;賦初值為字符0 char c1= 0; 字符類型數(shù)據(jù)的運(yùn)算 char c2 = A; printf(“%c”, c2+1); 特殊類型字符 反斜線(Backslash) 退格(Backspace)b 回車(Carriage return)r 進(jìn)紙符(Form feed)f 制表符(Form feed)t 換行(New line)n 單引號(hào)(Single quote),數(shù)據(jù)類型轉(zhuǎn)換,兩種方式 強(qiáng)制轉(zhuǎn)換,使用 (DataType) 強(qiáng)制轉(zhuǎn)換,例 int a, b=1; float c=4.3; a = b + (int) c; 賦值表達(dá)式也會(huì)進(jìn)行強(qiáng)制轉(zhuǎn)換

6、a = b + c; 自動(dòng)轉(zhuǎn)換,表達(dá)式運(yùn)算中低精度變量自動(dòng)向高精度轉(zhuǎn)換 區(qū)別上面的a = b + (int) c;與a = b + c; 區(qū)別 c = 5/2; 與 c = 5.0/2; a = 5.0/2;與a = 5/2;,自加自減運(yùn)算,區(qū)別+在變量前后 j = +i; 表示先將i的值加1,再賦給j,如果i的值是5,則j的值是6。(先給變量加1,再使用變量) j = i+; 表示先將i的值賦給j,再把i的值加1,如果i的值是5,則j的值是5。(先使用變量,再給變量加1),位運(yùn)算與邏輯運(yùn)算,位運(yùn)算:逐位進(jìn)行邏輯運(yùn)算 邏輯運(yùn)算:非零為真,運(yùn)算結(jié)果為0/1分別表示真假 int a=1, b=2;

7、 if (a,運(yùn)算符優(yōu)先級(jí),最高優(yōu)先級(jí): .,-, , () /左右結(jié)合 單目運(yùn)算:-, , !, +, -, !(), sizeof /右結(jié)合 算術(shù)乘除運(yùn)算: *, /, % /左結(jié)合 算術(shù)加減運(yùn)算:+, - /左結(jié)合 移位運(yùn)算: , , = /左結(jié)合 相等關(guān)系運(yùn)算:=, != /左結(jié)合 按位與: 賦值語(yǔ)句,如:x = y + z; 函數(shù)調(diào)用語(yǔ)句,如:scanf(“%d”, 程序控制語(yǔ)句 空語(yǔ)句 ,三種結(jié)構(gòu)語(yǔ)句,程序控制語(yǔ)句及其控制說(shuō)明: 分支控制語(yǔ)句:if-else, switch-case/default 循環(huán)控制語(yǔ)句:while, do-while, for 此外,還有一些與程序轉(zhuǎn)移控

8、制有關(guān)的語(yǔ)句:break, continue, return 用大括號(hào)()把修飾性描述和語(yǔ)句組合在一起的,稱為復(fù)合語(yǔ)句。復(fù)合語(yǔ)句在語(yǔ)法上和簡(jiǎn)單語(yǔ)句是一樣的(代碼段:也包括不含有修飾性描述的情況),分支控制if-else,條件表達(dá)式加括號(hào),多條語(yǔ)句用 括起來(lái) 嵌套if-else, 最近鄰原則-else與最近的if語(yǔ)句共同構(gòu)成一句 if (i0) if (ji) x=j; else x=i; 區(qū)別 if (i0) if (ji) x=j; else x=i;,多分支語(yǔ)句switch-case/default,表達(dá)式帶括號(hào) Case 值后加冒號(hào) 表達(dá)式的值必須是整數(shù)或者字符 計(jì)算表達(dá)式選擇入口 遇到

9、break或switch語(yǔ)句結(jié)束停止,循環(huán)語(yǔ)句,循環(huán)控制語(yǔ)句包括: 當(dāng)型循環(huán)語(yǔ)句:for 當(dāng)型循環(huán)語(yǔ)句:while 直到型型循環(huán)語(yǔ)句:do-while,循環(huán)語(yǔ)句for,循環(huán)語(yǔ)句for(另一種當(dāng)型循環(huán)) for (初始條件表達(dá)式;循環(huán)控制表達(dá)式;循環(huán)操作表達(dá)式) 語(yǔ)句/語(yǔ)句組 一次for循環(huán)執(zhí)行過(guò)程 首先執(zhí)行初始條件表達(dá)式(第一次):可以為空 循環(huán)控制表達(dá)式:一定是一個(gè)數(shù)值表達(dá)式,也可以為空 如果表達(dá)式值為真,條件成立,執(zhí)行循環(huán)體一次 如果表達(dá)式值為假,條件不成立,退出循環(huán) 如果省略,默認(rèn)值為真,直到遇到break, return語(yǔ)句退出循環(huán) 循環(huán)操作表達(dá)式:也可為空,循環(huán)語(yǔ)句for,例,計(jì)算從

10、0到100的整數(shù)中有多少個(gè)數(shù)是偶數(shù)(包括),有多少數(shù)是的倍數(shù) #include int main() int i, n2=0, n3=0; for(i=0; i=100; i+) if (i%2=0) n2+; else if (i%3=0) n3+; printf(“n2=%d, n3=%dn”, n2, n3); return 0; ,循環(huán)語(yǔ)句while,循環(huán)語(yǔ)句while(當(dāng)型循環(huán)) while (表達(dá)式) 語(yǔ)句/語(yǔ)句組 表達(dá)式必須是數(shù)值表達(dá)式 一次循環(huán) 計(jì)算表達(dá)式的值 如果表達(dá)式值為真,執(zhí)行循環(huán)體,為假退出 循環(huán),循環(huán)語(yǔ)句do-while,循環(huán)語(yǔ)句do-while(直到型循環(huán)) do

11、語(yǔ)句/語(yǔ)句組 while (表達(dá)式); 一次循環(huán) 執(zhí)行一次循環(huán)體 計(jì)算表達(dá)式,條件成立再執(zhí)行一次循環(huán)體, 否則退出循環(huán),循環(huán)語(yǔ)句do-while,程序轉(zhuǎn)移語(yǔ)句,程序轉(zhuǎn)移相關(guān)語(yǔ)句包括: break continue,程序轉(zhuǎn)移語(yǔ)句break,break退出的是包含它的最內(nèi)層循環(huán)體 例: #include int main() int i, j; for (i=1; i10; i+) for (j=1; j=10; j+) if (i+j)%5=0) printf(“%d %d”, i, j ); break; return 0; ,程序轉(zhuǎn)移語(yǔ)句continue,continue語(yǔ)句用來(lái)結(jié)束本次循環(huán)

12、(while, do-while, for) ,跳過(guò)循環(huán)體中continue之后尚未執(zhí)行的語(yǔ)句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。注意:在進(jìn)行終止條件的判斷前,都應(yīng)先執(zhí)行迭代語(yǔ)句。它的格式為: continue;,輸入輸出,在標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)(stdio.h)中,提供了通過(guò)標(biāo)準(zhǔn)輸入輸出設(shè)備(鍵盤和顯示器)進(jìn)行數(shù)據(jù)的輸入輸出函數(shù): 單個(gè)字符輸入:int getchar(),返回的是字符的ASCII碼 單個(gè)字符輸出:int putchar(int) 格式化輸入:int scanf(constrol_string, arg1, arg2, ) 格式化輸出:int printf(const

13、rol_string, arg1, arg2, ),輸入輸出,getchar(), putchar(),輸入輸出,在scanf()中的格式控制中,還可以控制多個(gè)輸入數(shù)據(jù)之間的分隔標(biāo)記,如:scanf(“%c,%d,%f”, 如果n的值為10,則輸出效果為,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算

14、法、文件操作 第二十講 復(fù)習(xí),數(shù)組,數(shù)組 數(shù)組定義時(shí)數(shù)組的長(zhǎng)度是個(gè)常量,不能包含變量 數(shù)組的下標(biāo)從0開始,注意數(shù)組下標(biāo)越界使用 數(shù)組的初始化 例 int score5; char cards4 = a, 0, r, W;,數(shù)組,數(shù)組 數(shù)組元素的訪問(wèn):每個(gè)元素是一個(gè)變量 數(shù)組元素在內(nèi)存中的存放:連續(xù)存放,多維數(shù)組按行存放 int n2323=1,2,3,2,4,6;,多維數(shù)組的使用,計(jì)算全年級(jí)180名學(xué)生每個(gè)學(xué)生8門課的平均成績(jī)和每門課全年級(jí)平均成績(jī) 求解過(guò)程 定義一個(gè)1808的二維數(shù)組記錄各門課成績(jī) 錄入每個(gè)人各門課成績(jī) 計(jì)算每名學(xué)生的平均成績(jī)并打印出來(lái) 計(jì)算每門課程的平均成績(jī)并打印出來(lái),多維

15、數(shù)組的使用,多維數(shù)組的使用,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),字符數(shù)組與字符串,字符串 字符數(shù)組以0結(jié)尾,字符串長(zhǎng)度與字符數(shù)組長(zhǎng)度不等同 char str12 = “Beijing”; 另一種寫法 char str=“Beijing”; 字符串輸出 print

16、f(“%s”, str);,a9,字符串變量輸入,字符串變量初始化 定義時(shí)初始化 char s12 = “I am happy”; char *str=“I am happy”; 使用scanf(), gets()輸入 char name12; char *str; scanf(“%s”, name); scanf(“%s”, str); str = name; scanf(“%s”, str); gets(name);,字符串變量輸出,使用printf(), puts()輸出 printf(“%s”, s); printf(“%s”, str); puts(name);,字符串操作,字符串復(fù)

17、制 使用循環(huán)操作 #inlcude int main() char s12 = “I am happy”; char t20; int i; for (i=0; si!=0; i+) ti = si ti = 0; printf(“%sn%s”, s, t); return 0; ,字符串復(fù)制 使用指針操作 #inlcude #inlcude int main() char s12 = “I am happy”; char t20; char *ps=s, *pt=t; for (; *ps!=0; ps+, pt+) *pt = *ps; *pt = 0; printf(“%sn%s”, s

18、, t); return 0; ,字符串處理函數(shù),頭文件: strcat(字符數(shù)組1,字符串2):連接字符串 字符串2的第一個(gè)字符覆蓋第一個(gè)字符串的0 strcpy(字符數(shù)組1,字符串2):復(fù)制字符串 strcmp(字符串1,字符串2):比較字符串 strlen(字符串):求字符串長(zhǎng)度 不包括0 strlwr(字符數(shù)組):把字符串中字符都變小寫 strupr (字符數(shù)組):把字符串中字符都變大寫,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講

19、函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),函數(shù)說(shuō)明和定義,int multiple(int x,int y); / 函數(shù)說(shuō)明 void main() int a=0,b=0; scanf(“%d %d”, ,函數(shù)的調(diào)用,調(diào)用分類 函數(shù)語(yǔ)句 printf(“ Hello world!”); 函數(shù)表達(dá)式 c=2*max(a, b); 函數(shù)參數(shù) m = max(a, max(b, c);,形參和實(shí)參,在函數(shù)調(diào)用前不占內(nèi)存,只在發(fā)生函數(shù)調(diào)用時(shí)才給形參分配內(nèi)存單元 傳值調(diào)用

20、時(shí),形參與實(shí)參是不同的內(nèi)存單元,void swap(int a, int b) int tmp=0; tmp = a; a = b; b = tmp; ,void main( ) int a=0, b=0; a = 20; b = 45; if (a1時(shí), age(n) = age(n-1)+2; 當(dāng)n=1時(shí), age(n) = 10; int age (int n) if (n=1) return 10; else return (age(n-1)+2); ,age(5),age(4)+2,age(3)+2,age(2)+2,age(1)+2,age(1),輸出age(5),n=5,n=4,

21、n=3,n=2,n=1,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),內(nèi)存中的資源地址,0 x0012FF70 0 x0012FF74 0 x0012FF78 0 x0012FF7C 0 x0012FF80 0 x0012FF84,void main( ) int a =

22、 15; int b = 2; int c = 76; int i = 30; int j = 126; int k = 5; ,內(nèi)存中的資源地址,/images/content/166502.jpg,N49 Nebula,把某個(gè)變量的地址稱為“指向該變量的指針”,76,0 x0012FF78,c,我們能不能拿到、看到地址?,可以利用 取地址運(yùn)算符“ /定義int型變量c,并賦值76; int *pointer; /定義名字為pointer的指針變量; /“*”表示變量pointer的類型為指針類型; pointer = /將變量c的地址賦值給指針變量poi

23、nter; /賦值后,稱指針變量pointer指向了變量c,指針變量的定義、賦值,定義一個(gè)指向int型變量c的指針變量 int *pointer ; pointer = ,能不能寫成: int *pointer ; pointer = c ;,絕對(duì)不行! 因?yàn)閜ointer是存放地址的變量,所以只能存放地址!,指針變量的使用,則*pointer: 為“pointer所指向的存儲(chǔ)單元的內(nèi)容”; “pointer所指向的存儲(chǔ)單元的內(nèi)容” 是 變量c,若有:,0 x0012FF74 0 x0012FF75 0 x0012FF76 0 x0012FF77 0 x0012FF78 0 x0012FF79

24、 0 x0012FF7A 0 x0012FF7B,int c = 76;, ,0 x0012FF78,pointer,int c = 76; int *pointer = ,可以利用 指針運(yùn)算符* 實(shí)現(xiàn),動(dòng)態(tài)數(shù)組 申請(qǐng)空間,使用前要在文件的開始包含文件。例如: #include void main( ) double *pd; pd = (double *)malloc(sizeof(double) * 50); ,動(dòng)態(tài)數(shù)組 賦值,與靜態(tài)數(shù)組相同,動(dòng)態(tài)數(shù)組的元素下標(biāo)也是從0開始的。所以對(duì)上面pi所指的數(shù)組可以用如下的循環(huán)將全部元素賦初值為0: int j; for(j=0; j100; j+)

25、 *(pi+j) = 0;,動(dòng)態(tài)數(shù)組 申請(qǐng)空間,申請(qǐng)結(jié)構(gòu)體動(dòng)態(tài)數(shù)組 struct point int x, y; struct point *pp; pp = (struct point *)malloc(sizeof(struct point)*100); float *pf; pf = (float *)malloc(sizeof(float)*20);,動(dòng)態(tài)數(shù)組 空間回收,靜態(tài)數(shù)組是數(shù)組變量定義時(shí)分配空間的,它的空間在該變量失效時(shí)由系統(tǒng)自動(dòng)回收。動(dòng)態(tài)數(shù)組是用malloc()函數(shù)動(dòng)態(tài)申請(qǐng)的,需要在程序中調(diào)用free()函數(shù)主動(dòng)釋放。如: char *pc; /定義字符指針pc pc = (

26、int *)malloc(sizeof(char) * 2); / 兩個(gè)數(shù)組元素,每個(gè)元素類型為char free(pc);,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),數(shù)組與指針,指向數(shù)組元素的指針 例: int a10; /定義一個(gè)包含10個(gè)整型數(shù)據(jù)的數(shù)組 int

27、*p; /定義一個(gè)指向整型變量的指針變量 p=,數(shù)組與指針,通過(guò)指針引用數(shù)組元素 地址偏移,取得相應(yīng)元素的地址 p+i 和a+i就是ai的地址 p+1=1004不是1001! p+1所代表的地址實(shí)際上是 p+1*d, d表示一個(gè)數(shù)組元素所占的字節(jié)數(shù) 累加地址,p+ 取地址(指針)內(nèi)容,獲得相應(yīng)的數(shù)組元素 *p, *(p+i),*(a+i)表示p+i, a+i所指向的數(shù)組元素即ai, 可視為變址運(yùn)算符,即按a+i計(jì)算地址,然后找出此地址單元的值 指向數(shù)組的指針變量也可以帶下標(biāo),pi與*(p+i)等價(jià) pi *(p+i),a0,a9,ai,數(shù)組與指針,通過(guò)指針引用數(shù)組元素 方法1:下標(biāo)法,即ai

28、方法2:地址法,即*(a+i),相應(yīng)于計(jì)算a+i*d地址 方法3:指針?lè)ǎ?p, pi, *(p+i) 方法比較:輸出一個(gè)有10個(gè)整數(shù)元素的數(shù)組的值 指針?lè)?*p)效率最高 數(shù)組名不允許進(jìn)行a+運(yùn)算(形參除外),void main() for(i=0; i10; i+) printf(“%d “,ai); . ,void main() for(i=0; iage. (*p).name, (*p).age -指向運(yùn)算符 struct student *p; for (p=stu; pnum, p-name, p-sex, p-age);,復(fù)習(xí),第五講 程序設(shè)計(jì)簡(jiǎn)介及編程環(huán)境 第六講 C程序設(shè)計(jì)導(dǎo)

29、引-變量與數(shù)據(jù)類型 第七講 程序結(jié)構(gòu)設(shè)計(jì)選擇結(jié)構(gòu) 第八講 程序結(jié)構(gòu)設(shè)計(jì)循環(huán)結(jié)構(gòu) 第九講 數(shù)組 第十講 數(shù)組 第十二講 數(shù)組與字符串 第十三講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十四講 函數(shù)與結(jié)構(gòu)化設(shè)計(jì) 第十五講 指針 第十六講 指針 第十七講 數(shù)組、指針與函數(shù) 第十八講 結(jié)構(gòu)體 第十九講 排序查找算法、文件操作 第二十講 復(fù)習(xí),查找,查找是利用給出的關(guān)鍵值,在一個(gè)數(shù)據(jù)集合或數(shù)據(jù)序列中找出與關(guān)鍵值匹配的一個(gè)或一組數(shù)據(jù)的過(guò)程。 順序查找:最簡(jiǎn)單的查找算法。 程序從數(shù)據(jù)序列的第一個(gè)數(shù)據(jù)開始,逐個(gè)與關(guān)鍵值比較,直到找到一個(gè)或所有的匹配數(shù)據(jù)為止(也可能找不到)。順序查找不要求待查找的數(shù)據(jù)序列已經(jīng)排好序。但當(dāng)待查找數(shù)據(jù)

30、序列中數(shù)據(jù)比較多時(shí),順序查找的效率將十分低。 二分查找:二分查找可以提高查找效率,但要求待查找的數(shù)據(jù)序列已經(jīng)排好序。 以序列中間數(shù)據(jù)為界將待查找的數(shù)據(jù)序列分成兩個(gè)子序列,比較匹配關(guān)鍵值與中間數(shù)據(jù)的大小,再確定去哪個(gè)子序列中繼續(xù)查找。這樣逐步縮小范圍,直到找到所需數(shù)據(jù)。,順序查找,void main int numbers10 = 4, 6, 9, 11, 79, 52, 34, 1, 25, 17; int key; / 待查找整數(shù) int j; / 循環(huán)變量 int count = 0; / 記錄找到的出現(xiàn)數(shù) scanf(%d, ,二分查找,#define MAX_NUM 10 void m

31、ain int numbersMAX_NUM=1, 4, 6, 9, 11, 17, 25, 34, 52, 79; int key; / 待查找的整數(shù) int curMin= 0, curMax= MAX_NUM-1; int answer = 0; / 記錄待查找數(shù)是否出現(xiàn)在數(shù)組中 scanf(%d, ,例 9 第一次 9 numbers4=11 0, 9 第二次 9 numbers1= 4 0, 3 第三次 9 numbers2 = 6 2, 3 第四次 9 numbers3= 9 3, 3,插入排序,#define NUMBER 100 Int arrayNUMBER; Int mai

32、n() int j, r; for(j=0; jNUMBER; j+) scanf(“%d”, arrayj); return 0; ,for(j=1; j=0; r- -) if(tmparrayr) arrayr+1 = arrayr; arrayr = tmp; else arrayr+1 = tmp; break; ,選擇排序,#include #include void main() int n; int* numbers; int i,j; int tempNum; int tempIndex; numbers = (int*)malloc( n*sizeof(int) ); if

33、( !numbers ) return;,for( i=0; in; i+ ) j=i; tempNum = numbersj; tempIndex = j; for( j=i+1; jn; j+ ) if( numbersj tempNum ) tempNum = numbersj; tempIndex = j; numberstempIndex = numbersi; numbersi = tempNum; free( numbers ); ,冒泡排序法(程序),#include void main( ) int number, *array; int j, r; printf(“please input the number”); scanf(“%d”, ,文件的打開與關(guān)閉,文件打開 FILE *fp; fp = fopen(“文件名”,使用文件方式) 打開方式 “r”只讀打開一個(gè)文本文件 “w”只寫打開一個(gè)文本文件 “rb”只讀打開一個(gè)二進(jìn)制文件 “wb”只寫打開一個(gè)二進(jìn)制文件 “a”向文本文件追加數(shù)據(jù) “ab”向二進(jìn)制文件追加數(shù)據(jù),文件的讀寫,fputc(ch, fp) fputc(ch, fp) 把一個(gè)字符寫到磁盤文件上去 fgetc() ch=fget

溫馨提示

  • 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)論