版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針項(xiàng)目八八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)- -指針指針C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針【項(xiàng)目要求項(xiàng)目要求】借助于指針對(duì)上一章的的學(xué)生成績(jī)分析系統(tǒng)進(jìn)行優(yōu)化,對(duì)某班一門(mén)課的借助于指針對(duì)上一章的的學(xué)生成績(jī)分析系統(tǒng)進(jìn)行優(yōu)化,對(duì)某班一門(mén)課的成績(jī)進(jìn)行分析,要求有如下功能:成績(jī)進(jìn)行分析,要求有如下功能:1.1.查詢(xún)?nèi)砍煽?jī);查詢(xún)?nèi)砍煽?jī);2.2.查詢(xún)平均分;查詢(xún)平均分;3.3.查詢(xún)不及格率;查詢(xún)不及格率;4.4.查詢(xún)最高分;查詢(xún)最高分;5.5.按成績(jī)降
2、序排列;按成績(jī)降序排列;0.0.退出。退出。 為了保存一個(gè)班的為了保存一個(gè)班的C語(yǔ)言成績(jī)需要借助于一維數(shù)組,通過(guò)指針對(duì)其數(shù)語(yǔ)言成績(jī)需要借助于一維數(shù)組,通過(guò)指針對(duì)其數(shù)據(jù)進(jìn)行操作。將本項(xiàng)目分成兩部分,首先借助于指針對(duì)一維數(shù)組進(jìn)行據(jù)進(jìn)行操作。將本項(xiàng)目分成兩部分,首先借助于指針對(duì)一維數(shù)組進(jìn)行訪問(wèn),然后介紹一種新的排序算法訪問(wèn),然后介紹一種新的排序算法選擇排序。選擇排序?!卷?xiàng)目分析項(xiàng)目分析】C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針問(wèn)題情境及實(shí)現(xiàn)問(wèn)題情境及實(shí)現(xiàn)v 通過(guò)前面所學(xué)知道,可以通過(guò)下標(biāo)法訪問(wèn)數(shù)組元素,數(shù)組名代表數(shù)組通過(guò)前面所學(xué)知道,可以通過(guò)下標(biāo)法訪
3、問(wèn)數(shù)組元素,數(shù)組名代表數(shù)組的首地址,即指針,我們亦可通過(guò)其對(duì)數(shù)組元素進(jìn)行訪問(wèn)。的首地址,即指針,我們亦可通過(guò)其對(duì)數(shù)組元素進(jìn)行訪問(wèn)。v #define N 100#define N 100v #include #include v void main()void main()v v int sN,n,int sN,n,* *p;p;v printf(printf(請(qǐng)輸入該班人數(shù)請(qǐng)輸入該班人數(shù)););v scanf(%d,&n);scanf(%d,&n);v printf(printf(請(qǐng)錄入成績(jī)請(qǐng)錄入成績(jī)););v for(p=s;ps+n;p+)for(p=s;ps+n;p+)
4、v scanf(%d,p); scanf(%d,p);v printf(printf(該班的全部成績(jī)是該班的全部成績(jī)是:n);:n);v for(p=s;ps+n;p+)for(p=s;ps+n;p+)v printf(%6d, printf(%6d,* *p);p);v C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針4 4 4 4本講主要內(nèi)容本講主要內(nèi)容2. 指針與函數(shù)指針與函數(shù)1. 指針與字符串指針與字符串3. 指針數(shù)組指針數(shù)組4. 指針應(yīng)用舉例指針應(yīng)用舉例C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針
5、1 1 指針與字符串指針與字符串(1)(1)1.1 1.1 字符串的表示形式字符串的表示形式v用用字符數(shù)組字符數(shù)組存放一個(gè)字符串,并輸出該字符串。存放一個(gè)字符串,并輸出該字符串。 main()char string =I love China!;printf(%sn,string);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(2)(2)1.1 1.1 字符串的表示形式字符串的表示形式( (續(xù)續(xù)) )v用用字符串指針字符串指針指向一個(gè)字符串指向一個(gè)字符串 main()char *string=I love China
6、!;printf(%sn,string);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(3)(3)1.1 1.1 字符串的表示形式字符串的表示形式( (續(xù)續(xù)) )例例1 1 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果 #include void main() char *ptr1,*ptr2; ptr1=ptr2=abcde; while(*ptr2!=0) putchar(*ptr2+); putchar(n); while(-ptr2=ptr1) putchar(*ptr2); putchar(n);運(yùn)行結(jié)果:
7、運(yùn)行結(jié)果:abcdeedcbaC語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(4)(4)1.2 1.2 使用字符串指針變量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別字符數(shù)組由若干元素組成字符數(shù)組由若干元素組成,每個(gè)元素中放一,每個(gè)元素中放一個(gè)字符,個(gè)字符,而字符指針變量中存放的是地址而字符指針變量中存放的是地址(字(字符串的首地址)。符串的首地址)。賦值方式不同。賦值方式不同。對(duì)對(duì)字符數(shù)組字符數(shù)組只能對(duì)各個(gè)元素只能對(duì)各個(gè)元素賦值,賦值,不能用一個(gè)字符串給一個(gè)字符數(shù)組賦值不能用一個(gè)字符串給一個(gè)字符數(shù)組賦值,但對(duì)于
8、但對(duì)于字符指針變量可以用一個(gè)字符串給它賦字符指針變量可以用一個(gè)字符串給它賦值值。char str14;str=“ I love China”;char *pstr;pstr=“ I love China”;C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(5)(5)1.2 1.2 使用字符串指針變量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別( (續(xù)續(xù)) )例例2 2 分析下面程序的運(yùn)行結(jié)果分析下面程序的運(yùn)行結(jié)果 main() char *a=I Love China!; a=a+7; printf(“%sn,a)
9、;運(yùn)行結(jié)果:運(yùn)行結(jié)果:China!C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(6)(6)1.2 1.2 使用字符串指針變量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別( (續(xù)續(xù)) )例例3 3 分析下面程序的運(yùn)行結(jié)果分析下面程序的運(yùn)行結(jié)果 main()char *a=I Love China!; int i; printf(the sixth character is %cn,a5); for(i=0;ai!=0;i+) printf(%c,ai);運(yùn)行結(jié)果:運(yùn)行結(jié)果:the sixth character
10、is eI Love China!C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(1)(1)2.1 2.1 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù),實(shí)參變量實(shí)參變量和和形參變量形參變量的的傳遞方式為傳遞方式為地址傳遞地址傳遞void swap1(int x,int y)int z;z=x;x=y;y=z;void swap2(int *x,int *y)int z;z=*x;*x=*y;*y=z;值傳遞值傳遞地址傳遞地址傳遞C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系
11、統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(2)(2)2.1 2.1 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)( (續(xù)續(xù)) )例例4 4 程序填空,然后分析運(yùn)行結(jié)果。程序填空,然后分析運(yùn)行結(jié)果。( (輸入輸入5 5,6)6)#include main() int a,b; void swap1(int x,int y); void swap2(int *x,int *y); scanf(%d,%d,&a,&b); printf(a=%dtb=%dn,a,b); swap1( ); printf(a=%dtb=%dn,a,b); swap2( ); printf
12、(a=%dtb=%dn,a,b);運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=5 b=6a=5 b=6a=6 b=5C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(3)(3)2.1 2.1 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)( (續(xù)續(xù)) )例例5 5 一個(gè)自然數(shù)是素?cái)?shù),且它的數(shù)字位置經(jīng)過(guò)任一個(gè)自然數(shù)是素?cái)?shù),且它的數(shù)字位置經(jīng)過(guò)任意對(duì)換后仍為素?cái)?shù),則稱(chēng)為意對(duì)換后仍為素?cái)?shù),則稱(chēng)為絕對(duì)素?cái)?shù)絕對(duì)素?cái)?shù),例如,例如1313,試求所有兩位絕對(duì)素?cái)?shù)。試求所有兩位絕對(duì)素?cái)?shù)。解題思路解題思路使用哪種類(lèi)型的程序結(jié)構(gòu)?使用哪種類(lèi)型的程序結(jié)構(gòu)?給出一個(gè)數(shù),如何求任
13、意數(shù)字給出一個(gè)數(shù),如何求任意數(shù)字位置對(duì)換后的數(shù)?位置對(duì)換后的數(shù)?如何判斷一個(gè)數(shù)為素?cái)?shù)?如何判斷一個(gè)數(shù)為素?cái)?shù)?C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(4)(4)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量 在語(yǔ)言中,在語(yǔ)言中,一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存區(qū)區(qū),而,而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。我們可以把函數(shù)的這個(gè)首地址我們可以把函數(shù)的這個(gè)首地址(或稱(chēng)入口地址或稱(chēng)入口地址)賦賦予一個(gè)指針變量,使該指針變量指向該函數(shù)。然予一個(gè)指針變量,使該指針變量
14、指向該函數(shù)。然后通過(guò)指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我后通過(guò)指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我們把這種們把這種指向函數(shù)的指針變量指向函數(shù)的指針變量稱(chēng)為稱(chēng)為“函數(shù)指針變函數(shù)指針變量量”。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(5)(5)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量( (續(xù)續(xù)) )函數(shù)指針變量函數(shù)指針變量定義定義的一般形式為:的一般形式為:類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符 ( (* *指針變量名指針變量名)();)();表示被指函表示被指函數(shù)的返回值數(shù)的返回值的類(lèi)型的類(lèi)型“* *”后面的變后面的變量是定
15、義的指量是定義的指針變量針變量指針變量所指指針變量所指的是一個(gè)函數(shù)的是一個(gè)函數(shù)如:如:int (*pf)();C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(6)(6)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量( (續(xù)續(xù)) )用函數(shù)指針變量用函數(shù)指針變量調(diào)用函數(shù)調(diào)用函數(shù)的一般形式為:的一般形式為:( (* *指針變量名指針變量名)()(實(shí)參表實(shí)參表) )C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(7)(7)2.2 2.2 指向函數(shù)的指針變
16、量指向函數(shù)的指針變量( (續(xù)續(xù)) )例例6 6 將給出的程序修改為使用函數(shù)指針變量定義將給出的程序修改為使用函數(shù)指針變量定義的方式的方式 main() int max(int,int); int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(a=%d,b=%d,max=%d,a,b,c);max(int x,int y) int z; if(xy) z=x; else z=y; return(z);int (*p)();p=max;c=(*p)(a,b);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系
17、統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(8)(8)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量函數(shù)指針作為函數(shù)參數(shù)函數(shù)指針作為函數(shù)參數(shù)例例7 7 分析下面程序的執(zhí)行過(guò)程分析下面程序的執(zhí)行過(guò)程#include main() int add(int a,int b); int sub(int a,int b); fun(int (*)p(),int a,int b); int (*ps)(),x,y,z; scanf(%d,%d,&x,&y); if(xy) z=fun(add,x,y); else ps=sub;z=fun(ps,x,y); printf(x=%d,y=
18、%d,z=%dn,x,y,z);add(int a,int b) return (a+b);sub(int a,int b) return (a-b);fun(int (*pf)(),int a,int b) return (*pf)(a,b);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(9)(9)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量返回值為指針的函數(shù)返回值為指針的函數(shù)定義定義返回值為指針變量類(lèi)型的函數(shù)返回值為指針變量類(lèi)型的函數(shù)的一般形式為:的一般形式為:類(lèi)型符類(lèi)型符 * *函數(shù)名函數(shù)名( (參數(shù)表參數(shù)
19、表) )C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(10)(10)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量返回值為指針的函數(shù)返回值為指針的函數(shù)例例8 8 分析給出程序的運(yùn)行結(jié)果分析給出程序的運(yùn)行結(jié)果#include int *f(int *x,int *y)if (*x*y)return x;elsereturn y;void main()int a=17,b=18,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf(%d,%d,%dn,*p,*q,*r);運(yùn)行結(jié)果:運(yùn)行結(jié)
20、果:17,18,17C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針3 3 指針數(shù)組指針數(shù)組 (1)(1)3.1 3.1 指針數(shù)組指針數(shù)組指針數(shù)組的定義形式為:指針數(shù)組的定義形式為:類(lèi)型符類(lèi)型符 * *指針數(shù)組名指針數(shù)組名 常量表達(dá)式常量表達(dá)式;課堂練習(xí),分析下面語(yǔ)句的含義:課堂練習(xí),分析下面語(yǔ)句的含義:int *p4;Int (*p)4;指針數(shù)組,有指針數(shù)組,有4個(gè)元素,個(gè)元素,每個(gè)元素每個(gè)元素都是指向整型變量指針變量都是指向整型變量指針變量由由4個(gè)整型變量組成的數(shù)組的指針個(gè)整型變量組成的數(shù)組的指針C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)
21、分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針3 3 指針數(shù)組指針數(shù)組 (2)(2)3.1 3.1 指針數(shù)組指針數(shù)組( (續(xù)續(xù)) )#include main() static int a34=11,22,33,44,55,66,77,88,99,110,122,133; int *p3=a0,a1,a2; int i,j; for(i=0;i3;i+) for(j=0;j4;j+) printf(a%d%d=%dt,i,j,pij); printf(n); 133133122122110110999988887777666655554444333322221111p0p1p2C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)
22、計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針3 3 指針數(shù)組指針數(shù)組 (3)(3)3.1 3.1 指針數(shù)組指針數(shù)組( (續(xù)續(xù)) )#include main() static int a34=11,22,33,44,55,66,77,88,99,110,122,133; int *p3=a0,a1,a2; int (*q)4; int i,j; q=a; for(i=0;i3;i+) for(j=0;j4;j+)printf(a%d%d=%dt,i,j,(*(q+i)j); printf(n); 13313312212211011099998888777766665555
23、4444333322221111qq+1q+2(*q)0(*q)1(*q)2(*q)3C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針3 3 指針數(shù)組指針數(shù)組(4)(4)C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針4 4 指針應(yīng)用舉例指針應(yīng)用舉例(1)(1)例例9 編寫(xiě)程序,編寫(xiě)程序,利用系統(tǒng)提供的圖形庫(kù)函數(shù)在屏利用系統(tǒng)提供的圖形庫(kù)函數(shù)在屏幕上畫(huà)一個(gè)圖形幕上畫(huà)一個(gè)圖形,方法是將一個(gè)半徑為,方法是將一個(gè)半徑為r1的圓周的圓周等分等分n份,再以每個(gè)等分點(diǎn)為圓心,以半徑份,再以每個(gè)等分點(diǎn)為圓心,以半徑rs畫(huà)畫(huà)n個(gè)
24、圓,要求在命令方式下給出個(gè)圓,要求在命令方式下給出r1,rs的值及環(huán)的顏的值及環(huán)的顏色值。色值。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針4 4 指針應(yīng)用舉例指針應(yīng)用舉例(2)(2)例例10 編寫(xiě)程序,采用冒泡法對(duì)一組整數(shù)進(jìn)行升序編寫(xiě)程序,采用冒泡法對(duì)一組整數(shù)進(jìn)行升序或降序排序,然后輸出排序結(jié)果。要求:由計(jì)算或降序排序,然后輸出排序結(jié)果。要求:由計(jì)算機(jī)生成機(jī)生成10100以?xún)?nèi)的以?xún)?nèi)的隨機(jī)整數(shù)隨機(jī)整數(shù)50個(gè)個(gè),放入數(shù)組。,放入數(shù)組。通過(guò)通過(guò)函數(shù)指針,完成對(duì)數(shù)組的升序或者降序的排函數(shù)指針,完成對(duì)數(shù)組的升序或者降序的排序。序。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)
25、項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針27272727本講小結(jié)本講小結(jié)v掌握字符指針的使用掌握字符指針的使用v掌握指針作為函數(shù)參數(shù)的使用掌握指針作為函數(shù)參數(shù)的使用v了解指向函數(shù)的指針變量的使用了解指向函數(shù)的指針變量的使用v了解指針數(shù)據(jù)的使用了解指針數(shù)據(jù)的使用C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針【項(xiàng)目要求項(xiàng)目要求】借助于指針對(duì)上一章的的學(xué)生成績(jī)分析系統(tǒng)進(jìn)行優(yōu)化,對(duì)某班一門(mén)課的借助于指針對(duì)上一章的的學(xué)生成績(jī)分析系統(tǒng)進(jìn)行優(yōu)化,對(duì)某班一門(mén)課的成績(jī)進(jìn)行分析,要求有如下功能:成績(jī)進(jìn)行分析,要求有如下功能:1.1.查詢(xún)?nèi)砍煽?jī);
26、查詢(xún)?nèi)砍煽?jī);2.2.查詢(xún)平均分;查詢(xún)平均分;3.3.查詢(xún)不及格率;查詢(xún)不及格率;4.4.查詢(xún)最高分;查詢(xún)最高分;5.5.按成績(jī)降序排列;按成績(jī)降序排列;0.0.退出。退出。 為了保存一個(gè)班的為了保存一個(gè)班的C語(yǔ)言成績(jī)需要借助于一維數(shù)組,通過(guò)指針對(duì)其數(shù)語(yǔ)言成績(jī)需要借助于一維數(shù)組,通過(guò)指針對(duì)其數(shù)據(jù)進(jìn)行操作。將本項(xiàng)目分成兩部分,首先借助于指針對(duì)一維數(shù)組進(jìn)行據(jù)進(jìn)行操作。將本項(xiàng)目分成兩部分,首先借助于指針對(duì)一維數(shù)組進(jìn)行訪問(wèn),然后介紹一種新的排序算法訪問(wèn),然后介紹一種新的排序算法選擇排序。選擇排序?!卷?xiàng)目分析項(xiàng)目分析】C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針
27、指針問(wèn)題情境及實(shí)現(xiàn)問(wèn)題情境及實(shí)現(xiàn)v 通過(guò)前面所講可實(shí)現(xiàn)本系統(tǒng)的前通過(guò)前面所講可實(shí)現(xiàn)本系統(tǒng)的前4 4個(gè)功能,下面借助于指針實(shí)現(xiàn)數(shù)據(jù)個(gè)功能,下面借助于指針實(shí)現(xiàn)數(shù)據(jù)的排序。采用簡(jiǎn)單選擇排序方法進(jìn)行,程序如下:的排序。采用簡(jiǎn)單選擇排序方法進(jìn)行,程序如下:v #define N 100#define N 100v #include #include v #include #include v void fselectsort(int void fselectsort(int * *a,int n)a,int n)v v int int * *p,p,* *q,q,* *pmax,t;pmax,t;v f
28、or(p=a;pa+n-1;p+)for(p=a;pa+n-1;p+)v pmax=p; pmax=p;v for(q=p+1;qa+n;q+) for(q=p+1;qa+n;q+)v if( if(* *pmaxpmax* *q) pmax=q;q) pmax=q;v if(p!=pmax) t= if(p!=pmax) t=* *p;p;* *p=p=* *pmax;pmax;* *pmax=t;pmax=t;v v C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針相關(guān)知識(shí):簡(jiǎn)單選擇排序相關(guān)知識(shí):簡(jiǎn)單選擇排序v 簡(jiǎn)單選擇排序的基本方法是:第一趟,從
29、簡(jiǎn)單選擇排序的基本方法是:第一趟,從n n個(gè)記錄中找出關(guān)鍵字最小的記錄與第一個(gè)記個(gè)記錄中找出關(guān)鍵字最小的記錄與第一個(gè)記錄交換;第二趟,從第二個(gè)記錄開(kāi)始的錄交換;第二趟,從第二個(gè)記錄開(kāi)始的n-1n-1個(gè)記錄中再選出關(guān)鍵字最小的記錄與第二個(gè)個(gè)記錄中再選出關(guān)鍵字最小的記錄與第二個(gè)記錄交換;如此,第記錄交換;如此,第i i趟,則從第趟,則從第i i個(gè)記錄開(kāi)個(gè)記錄開(kāi)始的始的vn-i+1n-i+1個(gè)記錄中選出關(guān)鍵字最小的記錄與第個(gè)記錄中選出關(guān)鍵字最小的記錄與第i i個(gè)記錄交換,直到整個(gè)序列按關(guān)鍵字有序排個(gè)記錄交換,直到整個(gè)序列按關(guān)鍵字有序排列。列。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系
30、統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 簡(jiǎn)單選擇排序算法簡(jiǎn)單選擇排序算法: :v void selectsort(datatype r,int n)void selectsort(datatype r,int n)v int i,j,t; int i,j,t;v for(i=1;i=n;i+) for(i=1;i=n;i+) v t=i; t=i;v for(j=i+1; j=n;j+) for(j=i+1; jrj) t=j; if(rtrj) t=j; v if(i!=t) r0=rt; if(i!=t) r0=rt; v rt=ri; rt=ri;v ri=r0; ri=r0;v v v C語(yǔ)
31、言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 對(duì)如下關(guān)鍵字對(duì)如下關(guān)鍵字(49,38,65,97,76,13,27,49)(49,38,65,97,76,13,27,49)進(jìn)行簡(jiǎn)單選擇排序的過(guò)程見(jiàn)下圖進(jìn)行簡(jiǎn)單選擇排序的過(guò)程見(jiàn)下圖。 r012345678初始關(guān)鍵字4938659776132749 13 38 65 97 76 49 27 49v第一趟結(jié)果第一趟結(jié)果:v第二趟結(jié)第二趟結(jié)果:果: 13 27 65 97 76 49 38 49v第三趟結(jié)果第三趟結(jié)果: 13 27 38 97 76 49 65 49v第四趟結(jié)果第四趟結(jié)果: 13 27 38 49
32、 76 97 65 49v第五趟結(jié)果第五趟結(jié)果: 13 27 38 49 49 97 65 76v第六趟結(jié)果第六趟結(jié)果: 13 27 38 49 49 65 97 76v第七趟結(jié)果第七趟結(jié)果: 13 27 38 49 49 65 76 97 簡(jiǎn)單選擇排序移動(dòng)記錄的次數(shù)較少,但關(guān)鍵字的比較次數(shù)依然是n(n+1)/2,所以時(shí)間復(fù)雜度仍為O(n2)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針樹(shù)形選擇排序樹(shù)形選擇排序v按照錦標(biāo)賽的思想進(jìn)行,將按照錦標(biāo)賽的思想進(jìn)行,將n n個(gè)參賽的選手看成完個(gè)參賽的選手看成完全二叉樹(shù)的葉結(jié)點(diǎn),則該完全二叉樹(shù)有全二叉樹(shù)的葉
33、結(jié)點(diǎn),則該完全二叉樹(shù)有2n-22n-2或或2n-2n-1 1個(gè)結(jié)點(diǎn)。首先,兩兩進(jìn)行比賽個(gè)結(jié)點(diǎn)。首先,兩兩進(jìn)行比賽( (在樹(shù)中是兄弟的在樹(shù)中是兄弟的進(jìn)行,否則輪空,直接進(jìn)入下一輪進(jìn)行,否則輪空,直接進(jìn)入下一輪) ),勝出的再兄,勝出的再兄弟間再兩兩進(jìn)行比較,直到產(chǎn)生第弟間再兩兩進(jìn)行比較,直到產(chǎn)生第1 1名。名。v接下來(lái),將作為第接下來(lái),將作為第1 1名的結(jié)點(diǎn)看成最差的,并從該名的結(jié)點(diǎn)看成最差的,并從該結(jié)點(diǎn)開(kāi)始,沿該結(jié)點(diǎn)到根路徑上,依次進(jìn)行各分結(jié)點(diǎn)開(kāi)始,沿該結(jié)點(diǎn)到根路徑上,依次進(jìn)行各分枝結(jié)點(diǎn)子女間的比較,勝出的就是第枝結(jié)點(diǎn)子女間的比較,勝出的就是第2 2名。因?yàn)楹兔R驗(yàn)楹退荣惖木莿倓傒斀o第他
34、比賽的均是剛剛輸給第1 1名的選手。名的選手。v如此,繼續(xù)進(jìn)行下去,直到所有選手的名次排定。如此,繼續(xù)進(jìn)行下去,直到所有選手的名次排定。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 對(duì)如下關(guān)鍵字對(duì)如下關(guān)鍵字(49,38,65,97,76,13,27,49)(49,38,65,97,76,13,27,49)進(jìn)行簡(jiǎn)單選擇排序的過(guò)程見(jiàn)下圖。進(jìn)行簡(jiǎn)單選擇排序的過(guò)程見(jiàn)下圖。 r012345678初始關(guān)鍵字4938659776132749492776133849976549977649977697 存放排序012345678結(jié)果的數(shù)組97再將再將97設(shè)為最差設(shè)
35、為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字49386507613274949277613384906549657649657676 存放排序012345678結(jié)果的數(shù)組7697再將再將76設(shè)為最差設(shè)為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字493865001327494927013384906549651349654965 存放排序012345678結(jié)果的數(shù)組657697再將再將65設(shè)為最差設(shè)
36、為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字493800013274949270133849004901349494949 存放排序012345678結(jié)果的數(shù)組49657697v注意:若取注意:若取4949則為穩(wěn)定的排序。則為穩(wěn)定的排序。再將再將49設(shè)為最差設(shè)為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字0380001327490270133849003801349384949 存放排序012345
37、678結(jié)果的數(shù)組4949657697再將再將49設(shè)為最差設(shè)為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字03800013270027013380003801327382738 存放排序012345678結(jié)果的數(shù)組384949657697再將再將38設(shè)為最差設(shè)為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字0000013270027013000000132702727 存放排序012345678結(jié)果的數(shù)組
38、27384949657697再將再將27設(shè)為最差設(shè)為最差(最小最小)。 C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針 r012345678初始關(guān)鍵字0000013000001300000013001313 最后排序012345678 的結(jié)果1327384949657697C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針堆排序堆排序v堆排序是樹(shù)形選擇排序方法的改進(jìn),它使用的輔堆排序是樹(shù)形選擇排序方法的改進(jìn),它使用的輔助空間較少,僅增加一個(gè)記錄空間進(jìn)行交換,同助空間較少,僅增加一個(gè)記錄空間進(jìn)行交換,同時(shí)關(guān)鍵字比
39、較的次數(shù)和樹(shù)形選擇排序相當(dāng)。時(shí)關(guān)鍵字比較的次數(shù)和樹(shù)形選擇排序相當(dāng)。v1. 1. 堆的定義和存儲(chǔ)結(jié)構(gòu)堆的定義和存儲(chǔ)結(jié)構(gòu) v堆是一棵完全二叉樹(shù),組成這棵完全二叉樹(shù)的堆是一棵完全二叉樹(shù),組成這棵完全二叉樹(shù)的n n個(gè)個(gè)元素序列元素序列 k k1 1,k k2 2,k kn n,當(dāng)且僅當(dāng)滿(mǎn)足下述關(guān),當(dāng)且僅當(dāng)滿(mǎn)足下述關(guān)系之一時(shí),稱(chēng)之為堆。系之一時(shí),稱(chēng)之為堆。 vKik2ivKik2i+1v 大大頭頭堆堆v 或或者者vKik2ivKik2i+1v 小小頭頭堆堆v 其中其中i=1,2, i=1,2, ,n/2,n/2C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針v如
40、以下關(guān)鍵字如以下關(guān)鍵字(49,38,65,97,76,13,27,(49,38,65,97,76,13,27,4949) )所建立所建立的大頭堆和小頭堆如下圖所示:的大頭堆和小頭堆如下圖所示:v用一維數(shù)組存儲(chǔ)一個(gè)堆,則堆對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu)如下:用一維數(shù)組存儲(chǔ)一個(gè)堆,則堆對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu)如下:9776654949132738v 大頭大頭堆堆1338274976654997v 小頭小頭堆堆 012345678大頭堆9776654949132738012345678小頭堆1338274976654997C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針v建立初始堆建
41、立初始堆 v對(duì)初始序列建堆的過(guò)程,就是一個(gè)反復(fù)進(jìn)行篩選的對(duì)初始序列建堆的過(guò)程,就是一個(gè)反復(fù)進(jìn)行篩選的過(guò)程。對(duì)過(guò)程。對(duì)n n個(gè)結(jié)點(diǎn)的完全二叉樹(shù)只需從第個(gè)結(jié)點(diǎn)的完全二叉樹(shù)只需從第 n/2 n/2 個(gè)元個(gè)元素開(kāi)始。例如素開(kāi)始。例如: :對(duì)元素對(duì)元素(49,38,65,97,76,13,27,(49,38,65,97,76,13,27,4949) )進(jìn)行篩選的過(guò)程見(jiàn)下圖進(jìn)行篩選的過(guò)程見(jiàn)下圖( (建小頭堆建小頭堆) )。4938659776132749v i=4v 將97與49交換4938654976132797v i=3v 將65與13交換C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)
42、化學(xué)生成績(jī)分析系統(tǒng)-指針指針4938134976652797v i=2v 不進(jìn)行交換4938134976652797v i=1v 將49與13交換再與27交換1338274976654997v 建好的小頭堆建好的小頭堆C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針v從篩選過(guò)程可以看出,所建小頭堆是從第從篩選過(guò)程可以看出,所建小頭堆是從第4 4個(gè)元素個(gè)元素9797開(kāi)始,最后到第開(kāi)始,最后到第1 1個(gè)元素為止。整個(gè)篩選過(guò)程應(yīng)個(gè)元素為止。整個(gè)篩選過(guò)程應(yīng)該是在數(shù)組中進(jìn)行的,其數(shù)組的變化過(guò)程見(jiàn)下圖。該是在數(shù)組中進(jìn)行的,其數(shù)組的變化過(guò)程見(jiàn)下圖。876543210
43、 r4927137697653849初始關(guān)鍵字 49 38 65 49 76 13 27 97v9797被篩選后被篩選后: 49 38 13 49 76 65 27 97v6565被篩選后被篩選后: 49 38 13 49 76 65 27 97v3838被篩選后被篩選后: 13 38 27 49 76 65 49 97v4949被篩選后被篩選后( (初始堆初始堆) ):C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針堆排序堆排序v 設(shè)有設(shè)有n n個(gè)元素,首先將這個(gè)元素,首先將這n n個(gè)元素按關(guān)鍵字建成堆(個(gè)元素按關(guān)鍵字建成堆(根據(jù)所排序列的要求建成大
44、頭堆或小頭堆),用根結(jié)根據(jù)所排序列的要求建成大頭堆或小頭堆),用根結(jié)點(diǎn)元素與第點(diǎn)元素與第n n個(gè)結(jié)點(diǎn)元素交換;然后對(duì)前個(gè)結(jié)點(diǎn)元素交換;然后對(duì)前n-1n-1個(gè)結(jié)點(diǎn)進(jìn)個(gè)結(jié)點(diǎn)進(jìn)行篩選,重新建堆,再以根結(jié)點(diǎn)元素與第行篩選,重新建堆,再以根結(jié)點(diǎn)元素與第n-1n-1個(gè)結(jié)點(diǎn)個(gè)結(jié)點(diǎn)元素交換;重復(fù)上述操作,直到整個(gè)序列有序。對(duì)上元素交換;重復(fù)上述操作,直到整個(gè)序列有序。對(duì)上例進(jìn)行堆排序的過(guò)程見(jiàn)下圖。例進(jìn)行堆排序的過(guò)程見(jiàn)下圖。1338274976654997v 13與97交換9738274976654913v 重建堆C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2738
45、4949766597139738494976652713v 27與97交換3849499776652713v 重建堆v 38與65交換6549499776382713v 重建堆C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針4965499776382713v 49與76交換7665499749382713v 重建堆4965769749382713v 49與97交換9765764949382713v 重建堆C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針6597764949382713v 65與76交換76976
46、54949382713v 重建堆7697654949382713v 76與97交換9776654949382713C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針整個(gè)堆排序和重建堆的過(guò)程也是在數(shù)組中進(jìn)行的其變化過(guò)程整個(gè)堆排序和重建堆的過(guò)程也是在數(shù)組中進(jìn)行的其變化過(guò)程見(jiàn)下圖所示。見(jiàn)下圖所示。 初始012345678小頭堆1338274976654997 初始012345678小頭堆1338274976654997v堆排序中的數(shù)組變化堆排序中的數(shù)組變化過(guò)程過(guò)程v重建堆的數(shù)組變化重建堆的數(shù)組變化過(guò)程過(guò)程 97 38 27 49 76 65 49 13v13與
47、97對(duì)調(diào): 27 38 49 49 76 65 97 13 97 38 49 49 76 65 27 13v27與97對(duì)調(diào): 38 49 49 97 76 65 27 13 65 49 49 97 76 38 27 13v38與65對(duì)調(diào): 49 65 49 97 76 38 27 13 76 65 49 97 49 38 27 13v49與76對(duì)調(diào): 49 65 76 97 49 38 27 13 97 65 76 49 49 38 27 13v49與97對(duì)調(diào): 65 97 76 49 49 38 27 13 76 97 65 49 49 38 27 13v65與76對(duì)調(diào): 76 97 65
48、49 49 38 27 13 97 76 65 49 49 38 27 13v76與97對(duì)調(diào):v重建堆v重建堆v重建堆v重建堆v重建堆v重建堆堆排序的時(shí)間復(fù)雜度也為堆排序的時(shí)間復(fù)雜度也為O(nlog2n),是一個(gè)不穩(wěn)定的排序方法。是一個(gè)不穩(wěn)定的排序方法。C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針按遞減序列堆排序的算法按遞減序列堆排序的算法: :v void heapadjust(datatype r,int s,int m)void heapadjust(datatype r,int s,int m)v r0=rs; r0=rs;v for(j=
49、2 for(j=2* *s;j=m;j=js;j=m;j=j* *2) /2) /* * 沿關(guān)鍵字較沿關(guān)鍵字較小的孩子結(jié)點(diǎn)向下篩選小的孩子結(jié)點(diǎn)向下篩選 * */ /v if(jrj+1)j=j+1; / if(jrj+1)j=j+1; /* * 為關(guān)鍵字較小的為關(guān)鍵字較小的元素下標(biāo)元素下標(biāo)* */ /v if(r0rj) break; / if(r00;i-)Heapadjust(r,i,n); / for(i=n/2;i0;i-)Heapadjust(r,i,n); /* * 將將r1.nr1.n建成堆建成堆 * */ /v for(i=n;i1;i-) r0=r1; r1=ri; ri=r
50、0; for(i=n;i1;i-) r0=r1; r1=ri; ri=r0; / /* * 堆頂與堆低元素交換堆頂與堆低元素交換 * */ /v heapadjust(r,1,i-1); heapadjust(r,1,i-1); / /* *將將r1.i-1r1.i-1重新調(diào)整為堆重新調(diào)整為堆* */ /v v C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(1)(1)1.1 1.1 字符串的表示形式字符串的表示形式v用用字符數(shù)組字符數(shù)組存放一個(gè)字符串,并輸出該字符串。存放一個(gè)字符串,并輸出該字符串。 main()ch
51、ar string =I love China!;printf(%sn,string);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(2)(2)1.1 1.1 字符串的表示形式字符串的表示形式( (續(xù)續(xù)) )v用用字符串指針字符串指針指向一個(gè)字符串指向一個(gè)字符串 main()char *string=I love China!;printf(%sn,string);C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(3)(3)1.1 1.1 字符
52、串的表示形式字符串的表示形式( (續(xù)續(xù)) )例例1 1 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果 #include void main() char *ptr1,*ptr2; ptr1=ptr2=abcde; while(*ptr2!=0) putchar(*ptr2+); putchar(n); while(-ptr2=ptr1) putchar(*ptr2); putchar(n);運(yùn)行結(jié)果:運(yùn)行結(jié)果:abcdeedcbaC語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(4)(4)1.2 1.2 使用字符串指針變
53、量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別字符數(shù)組由若干元素組成字符數(shù)組由若干元素組成,每個(gè)元素中放一,每個(gè)元素中放一個(gè)字符,個(gè)字符,而字符指針變量中存放的是地址而字符指針變量中存放的是地址(字(字符串的首地址)。符串的首地址)。賦值方式不同。賦值方式不同。對(duì)對(duì)字符數(shù)組字符數(shù)組只能對(duì)各個(gè)元素只能對(duì)各個(gè)元素賦值,賦值,不能用一個(gè)字符串給一個(gè)字符數(shù)組賦值不能用一個(gè)字符串給一個(gè)字符數(shù)組賦值,但對(duì)于但對(duì)于字符指針變量可以用一個(gè)字符串給它賦字符指針變量可以用一個(gè)字符串給它賦值值。char str14;str=“ I love China”;char *pstr;pstr=“ I love Ch
54、ina”;C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(5)(5)1.2 1.2 使用字符串指針變量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別( (續(xù)續(xù)) )例例2 2 分析下面程序的運(yùn)行結(jié)果分析下面程序的運(yùn)行結(jié)果 main() char *a=I Love China!; a=a+7; printf(“%sn,a);運(yùn)行結(jié)果:運(yùn)行結(jié)果:China!C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針1 1 指針與字符串指針與字符串(6)(6)1.2 1.2 使用字符串指
55、針變量與字符數(shù)組的區(qū)別使用字符串指針變量與字符數(shù)組的區(qū)別( (續(xù)續(xù)) )例例3 3 分析下面程序的運(yùn)行結(jié)果分析下面程序的運(yùn)行結(jié)果 main()char *a=I Love China!; int i; printf(the sixth character is %cn,a5); for(i=0;ai!=0;i+) printf(%c,ai);運(yùn)行結(jié)果:運(yùn)行結(jié)果:the sixth character is eI Love China!C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(1)(1)2.1 2.1 指針變量作為函數(shù)
56、參數(shù)指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù),實(shí)參變量實(shí)參變量和和形參變量形參變量的的傳遞方式為傳遞方式為地址傳遞地址傳遞void swap1(int x,int y)int z;z=x;x=y;y=z;void swap2(int *x,int *y)int z;z=*x;*x=*y;*y=z;值傳遞值傳遞地址傳遞地址傳遞C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(2)(2)2.1 2.1 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)( (續(xù)續(xù)) )例例4 4 程序填空,然后分析運(yùn)行結(jié)果。程序填空,然
57、后分析運(yùn)行結(jié)果。( (輸入輸入5 5,6)6)#include main() int a,b; void swap1(int x,int y); void swap2(int *x,int *y); scanf(%d,%d,&a,&b); printf(a=%dtb=%dn,a,b); swap1( ); printf(a=%dtb=%dn,a,b); swap2( ); printf(a=%dtb=%dn,a,b);運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=5 b=6a=5 b=6a=6 b=5C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指
58、針與函數(shù)指針與函數(shù)(3)(3)2.1 2.1 指針變量作為函數(shù)參數(shù)指針變量作為函數(shù)參數(shù)( (續(xù)續(xù)) )例例5 5 一個(gè)自然數(shù)是素?cái)?shù),且它的數(shù)字位置經(jīng)過(guò)任一個(gè)自然數(shù)是素?cái)?shù),且它的數(shù)字位置經(jīng)過(guò)任意對(duì)換后仍為素?cái)?shù),則稱(chēng)為意對(duì)換后仍為素?cái)?shù),則稱(chēng)為絕對(duì)素?cái)?shù)絕對(duì)素?cái)?shù),例如,例如1313,試求所有兩位絕對(duì)素?cái)?shù)。試求所有兩位絕對(duì)素?cái)?shù)。解題思路解題思路使用哪種類(lèi)型的程序結(jié)構(gòu)?使用哪種類(lèi)型的程序結(jié)構(gòu)?給出一個(gè)數(shù),如何求任意數(shù)字給出一個(gè)數(shù),如何求任意數(shù)字位置對(duì)換后的數(shù)?位置對(duì)換后的數(shù)?如何判斷一個(gè)數(shù)為素?cái)?shù)?如何判斷一個(gè)數(shù)為素?cái)?shù)?C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指
59、針2 2 指針與函數(shù)指針與函數(shù)(4)(4)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量 在語(yǔ)言中,在語(yǔ)言中,一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存區(qū)區(qū),而,而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。我們可以把函數(shù)的這個(gè)首地址我們可以把函數(shù)的這個(gè)首地址(或稱(chēng)入口地址或稱(chēng)入口地址)賦賦予一個(gè)指針變量,使該指針變量指向該函數(shù)。然予一個(gè)指針變量,使該指針變量指向該函數(shù)。然后通過(guò)指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我后通過(guò)指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我們把這種們把這種指向函數(shù)的指針變量指向函數(shù)的指針變量稱(chēng)為稱(chēng)為“函數(shù)指針變函數(shù)指針變量量”。C語(yǔ)言程
60、序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(5)(5)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量( (續(xù)續(xù)) )函數(shù)指針變量函數(shù)指針變量定義定義的一般形式為:的一般形式為:類(lèi)型說(shuō)明符類(lèi)型說(shuō)明符 ( (* *指針變量名指針變量名)();)();表示被指函表示被指函數(shù)的返回值數(shù)的返回值的類(lèi)型的類(lèi)型“* *”后面的變后面的變量是定義的指量是定義的指針變量針變量指針變量所指指針變量所指的是一個(gè)函數(shù)的是一個(gè)函數(shù)如:如:int (*pf)();C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)項(xiàng)目八項(xiàng)目八 優(yōu)化學(xué)生成績(jī)分析系統(tǒng)優(yōu)化學(xué)生成績(jī)分析系統(tǒng)-指針指針2 2 指針與函數(shù)指針與函數(shù)(6)(6)2.2 2.2 指向函數(shù)的指針變量指向函數(shù)的指針變量( (續(xù)續(xù)) )用函數(shù)指針變量用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球醫(yī)用氣泡探測(cè)器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 山胡椒油行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 2024年職業(yè)教育培訓(xùn)行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)噻苯隆行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 現(xiàn)代化棉花交易物流可行性研究報(bào)告申請(qǐng)備案立項(xiàng)
- 山東省某綜合用房建設(shè)項(xiàng)目節(jié)能評(píng)估報(bào)告
- 2025年中國(guó)氣動(dòng)超音波儀器行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 萊卡羊毛行業(yè)市場(chǎng)發(fā)展及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年新西蘭紅梨行業(yè)深度研究分析報(bào)告
- 2025年不銹鋼匙扣項(xiàng)目投資可行性研究分析報(bào)告
- 上海中考英語(yǔ)考綱詞匯
- 【工商管理專(zhuān)業(yè)畢業(yè)綜合訓(xùn)練報(bào)告2600字(論文)】
- 《幼兒園健康》課件精1
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開(kāi)心英語(yǔ)四年級(jí)上冊(cè)全冊(cè)練習(xí)
- Hadoop大數(shù)據(jù)開(kāi)發(fā)實(shí)例教程高職PPT完整全套教學(xué)課件
- 企業(yè)中層管理人員測(cè)評(píng)問(wèn)題
- 人教版高中地理必修一全冊(cè)測(cè)試題(16份含答案)
- 《民航服務(wù)溝通技巧》教案第11課孕婦旅客服務(wù)溝通
- 新東方四級(jí)詞匯-正序版
- 面向機(jī)器人柔順操作的力位精準(zhǔn)控制方法研究共3篇
評(píng)論
0/150
提交評(píng)論