c語言指針上課實用教案_第1頁
c語言指針上課實用教案_第2頁
c語言指針上課實用教案_第3頁
c語言指針上課實用教案_第4頁
c語言指針上課實用教案_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本章(bn zhn)主要內(nèi)容:l 地址和指針的概念(ginin)l 對指針變量的操作和運算l 指針變量作為函數(shù)參數(shù)和函數(shù)返回值l 數(shù)組與指針l 指向函數(shù)的指針第1頁/共78頁第一頁,共79頁。 10.1指針變量的概念(ginin)與使用 10.1.1 變量與地址程序程序(chngx)中中: int i; float k; 內(nèi)存中每個字節(jié)有一個編號內(nèi)存中每個字節(jié)有一個編號(bin ho)-地址地址.2000200120022005內(nèi)存內(nèi)存02003ik 編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元變量變量是對程序中數(shù)據(jù)是對程序中數(shù)據(jù)存儲空間的抽象存儲空間的抽象第2頁/共78頁

2、第二頁,共79頁。10.1.2 地址與指針變量地址與指針變量(binling)指針變量指針變量(binling)的值:其他變量的值:其他變量(binling)的地址的地址.2000200420062005整型變量i10變量i_pointer2001200220032000變量(binling)i的地址指針(zhzhn)i_pointer的值i的值第3頁/共78頁第三頁,共79頁。10.1.3 指針變量指針變量(binling)的定義的定義一般形式:一般形式: 存儲類型存儲類型 基類型基類型 *指針變量指針變量(binling)名;名;合法(hf)標識符指針變量本身(bnshn)的存儲類型指針的

3、目標變量的數(shù)據(jù)類型表示定義指針變量不是*運算符例 int *p1,*p2; float *q ; static char *name;注意:1、int *p1, *p2; 與 int *p1, p2;2、指針變量名是p1,p2 ,不是*p1,*p23、指針變量只能指向定義時所規(guī)定類型的變量4、指針變量定義后,變量值不確定,應用前必須先賦值第4頁/共78頁第四頁,共79頁。10.1.4 指針變量的賦值取地址運算符 &變量名/表示變量的地址單目運算符,優(yōu)先級: 2 結合性:自右向左例如(lr): int a; int *p = &a;取指針所代表地址的內(nèi)容運算符 *單目運算符,優(yōu)先

4、級: 2 結合性:自右向左例如(lr): *p = 1;第5頁/共78頁第五頁,共79頁。 指針變量(binling)的初始化 一般形式:存儲類型 數(shù)據(jù)類型 *指針名=初始地址值;例 int i; int *p=&i;變量必須(bx)已說明過類型應一致例 int *p=&i; int i;例 int i; int *p=&i; int *q=p;用已初始化指針(zhzhn)變量作初值例 main( ) int i; static int *p=&i; . ()不能用auto變量的地址去初始化static型指針第6頁/共78頁第六頁,共79頁。例 main( )

5、int i=10; int *p; *p=i; printf(“%d”,*p); 危險(wixin)!例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); 指針變量必須(bx)先賦值,再使用.2000200420062005整型變量i10指針變量p200120022003隨機第7頁/共78頁第七頁,共79頁。 10.1.5 對指針變量的操作 直接訪問:按變量地址存取變量值 間接訪問:通過(tnggu)存放變量地址的變量去訪問變量例例 i=3; -直接直接(zhji)訪問訪問指針變量指針變量.2000200420062005

6、int i10int *i_pointer = &i20012002200320003例例 *i_pointer=20; -間接間接(jin ji)訪問訪問20第8頁/共78頁第八頁,共79頁。指針變量.2000200420062005整型變量i10變量i_pointer2001200220032000整型變量k例 1: int i, k, *i_pointer = &i; i = k;-直接訪問(fngwn) k=*i_pointer; -間接訪問(fngwn)10第9頁/共78頁第九頁,共79頁。 指針變量與其所指向(zh xin)的變量之間的一些等價關系例: int i,

7、 *i_pointer=&i;3i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3第10頁/共78頁第十頁,共79頁。例2:int i=100, x, *p, *q;x = i;p =&i;x = *p; x = *(&i); q = &x;*q = i;*q = *p;第11頁/共78頁第十一頁,共79頁。u 指針變量定義時指定的基類型, 應該與指

8、針變量使用時指向(zh xin)的變量類型相同。u u main()u float x=2.0, y;u int *p; u p=&x; u y=*p; u printf(%f,y);u u 修改(xigi)為float *p;第12頁/共78頁第十二頁,共79頁。練習(linx)1請選出正確(zhngqu)的程序段()。A) int *p; B) int *s, k;scanf(“%d”,p); *s=100; C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&e

9、;*p= a ; s=p; *s=1;第13頁/共78頁第十三頁,共79頁。例例3 : 通過通過(tnggu)指針變量訪問整指針變量訪問整型變量型變量Main() int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf(“%d,%d”,a,b); printf(“%d,%d”,*pointer_1,*pointer_2);運行運行(ynxng)結果結果: 100,10 100,10定義定義(dngy)兩個指兩個指針變量針變量代表兩個指針變代表兩個指針變量分別指向的兩量分

10、別指向的兩個變量個變量第14頁/共78頁第十四頁,共79頁。零指針與空類型零指針與空類型(lixng)指針指針零指針:零指針:(空指針空指針)定義定義:指針變量值為零指針變量值為零表示:表示: int * p=0; p指向地址指向地址(dzh)為為0的單元,的單元,系統(tǒng)保證該單元不作它用系統(tǒng)保證該單元不作它用表示指針變量值沒有意義表示指針變量值沒有意義#define NULL 0int *p=NULL:l p=NULL與未對與未對p賦值不同賦值不同l 用途用途: l 避免指針變量的非法引用避免指針變量的非法引用l 在程序中常在程序中常(zhngchng)作為狀態(tài)比較作為狀態(tài)比較 例例 int

11、*p; . while(p!=NULL) . 第15頁/共78頁第十五頁,共79頁。例例4 輸入輸入(shr)兩個數(shù),并使其從大到小輸出兩個數(shù),并使其從大到小輸出main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);運行運行(ynxng)結果:結果:a=5,b=9 max=9,min=5.指針變量指針變量p1 指針變量指針變量p2000

12、2008200220042006 指針變量指針變量p2 整型變量整型變量b 整型變量整型變量a5200692008200620082006第16頁/共78頁第十六頁,共79頁。 10.1.7 指針變量(binling)作為函數(shù)參數(shù)地址傳遞 特點:共享內(nèi)存,“雙向”傳遞swap(int x,int y) int temp; temp=x; x=y; y=temp;main() int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(n%d,%dn,a,b);例例5 5 將數(shù)從大到小輸出將數(shù)從大到小輸出(shch)(shch).5

13、變量變量a 變量變量b(main)95運行運行(ynxng)結果:結果:5, 9值值傳傳遞遞59 變量變量temp 變量變量y 變量變量x(swap)95第17頁/共78頁第十七頁,共79頁。swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;main() int a,b; scanf(%d,%d,&a,&b); if(ab)swap(&a,&b); printf(n%d,%dn,a,b);.20002002.59整型變量整型變量a 整型變量整型變量b(main)(swap)指針指針p1指針指針p2整型整型p5

14、95例例6 6 將數(shù)從大到小輸出將數(shù)從大到小輸出(shch)(shch)地址(dzh)傳遞運行運行(ynxng)結果:結果:9,5地址傳遞也是值傳遞,只是值是地址地址傳遞也是值傳遞,只是值是地址20002002第18頁/共78頁第十八頁,共79頁。swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab) swap(po

15、inter_1,pointer_2); printf(n%d,%dn,a,b);編譯編譯(biny)警告!警告!結果不對!結果不對!int x;int *p=&x;x;例7 將數(shù)從大到小輸出(shch).20002008200A200220042006200C200E2010.59整型變量a 整型變量b(main)指針pointer_1指針pointer_22000200220002002COPY(swap)指針p1指針p2指針p*假設(jish)2000指針變量在使用前必須賦值!第19頁/共78頁第十九頁,共79頁。main() int *p1,*p2,*p,a,b; scanf(%

16、d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);void main( ) void swap(int *p1,int *p2);int *p1,*p2,a,b;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab) swap(p1,p2);printf(max=%d,min=%dn,*p1,*p2);void swap(int *p1,int *

17、p2) int *temp;temp=p1;p1=p2;p2=temp;第20頁/共78頁第二十頁,共79頁。10.1.6 指針的算術運算:指針的算術運算:指針算術運算的結果依賴于指針的基類型指針算術運算的結果依賴于指針的基類型pi 指向地址指向地址 p id (i為整型數(shù),為整型數(shù),d為為p指向的指向的變量所占字節(jié)數(shù)變量所占字節(jié)數(shù))p+, p-, p+i, p-i, p+=i, p-=i等等若若p1與與p2指向同一數(shù)組,指向同一數(shù)組,p1-p2=兩指針間元素兩指針間元素(yun s)個數(shù)個數(shù)(p1-p2)/dp1+p2 無意義無意義第21頁/共78頁第二十一頁,共79頁。例 p指向(zh x

18、in)float數(shù),則 p+1 p+1 4例 p指向(zh xin)int型數(shù)組,且p=&a0; 則p+1 指向(zh xin)a1例 int a10; int *p=&a2; p+; *p=1;例 int a10; int *p1=&a2; int *p2=&a5; 則:p2-p1=3;a0a1a2a3a4a5a6a7a8a9a數(shù)組數(shù)組pp+1,a+1p+i,a+ip+9,a+9第22頁/共78頁第二十二頁,共79頁。指針變量的關系指針變量的關系(gun x)運算運算若若p1和和p2指向同一數(shù)組,則指向同一數(shù)組,則p1p2 表示表示p1指的元素在后指的元素在后

19、p1=p2 表示表示p1與與p2指向同一元素指向同一元素若若p1與與p2不指向同一數(shù)組,比較無意義不指向同一數(shù)組,比較無意義p=NULL或或p!=NULL第23頁/共78頁第二十三頁,共79頁。 10.2 指針與數(shù)組 指向(zh xin)數(shù)組元素的指針變量例 int array10; int *p; p=&array0; / p=array;或 int *p=&array0;或 int *p=array;array0array1array2array3array9.整型指針整型指針p&array0p數(shù)組名是表示數(shù)組首地址數(shù)組名是表示數(shù)組首地址(dzh)的地址的地址(dz

20、h)常量常量第24頁/共78頁第二十四頁,共79頁。數(shù)組元素數(shù)組元素(yun s)表示方法表示方法a0a1a2a3a9.aa+9a+1a+2地址地址元素元素下標法下標法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址地址元素元素指針法指針法*p*(p+1)*(p+2)*(p+9) 變址運算符變址運算符ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9第25頁/共78頁第二十五頁,共79頁。a0a1a2a3a4例例8 8 數(shù)組元素數(shù)組元素(yun s)(yun s)的引用方法的引用方法main() int a5,*pa,

21、i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+) printf(*(pa+%d):%dn,i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+) printf(pa%d:%dn,i,pai); for(i=0;i5;i+) printf(a%d:%dn,i,ai);12345pa第26頁/共78頁第二十六頁,共79頁。1.int a=1,2,3,4,5,6,7,8,9,10,*p=a,i; 數(shù)組元素地址的正確數(shù)組元素地址的正確(zhngqu)表示:表示:(A)&

22、;(a+1) (B)a+ (C)&p (D)&pi 數(shù)組名是地址數(shù)組名是地址(dzh)常量常量p+,p- ()a+,a- ()a+1, *(a+2) ()2.若有定義若有定義(dngy):int *p;則下列各選項中,不同于則下列各選項中,不同于*p=*p+1;的是()的是()A*p+; B.+*p; C.*p+=1; D.+(*p) ;練習練習2第27頁/共78頁第二十七頁,共79頁。例 void main() int a =5,8,7,6,2,7,3; int y,*p=&a1; y=(*-p)+; printf(“%d ”,y); printf(“%d”,a0);

23、 輸出輸出(shch):5 6pp58762730123456a例例9 9 注意注意(zh y)(zh y)指針變量指針變量的運算的運算6第28頁/共78頁第二十八頁,共79頁。main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d,*p);例例10 10 注意注意(zh y)(zh y)指針的指針的當前值當前值p=a;pp58762730123456apppppp指針變量可以指針變量可以(ky)指到數(shù)組后的內(nèi)存單元指到數(shù)組后的內(nèi)存單元第29頁/共78頁第二十九頁,

24、共79頁。數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)數(shù)組名代表數(shù)組名代表(dibio)數(shù)組首元素的地址,用數(shù)組數(shù)組首元素的地址,用數(shù)組名作函數(shù)實參時名作函數(shù)實參時,是地址傳遞只是將實參數(shù)組首元是地址傳遞只是將實參數(shù)組首元素的地址傳遞給形參。這樣,實參數(shù)組和形參數(shù)素的地址傳遞給形參。這樣,實參數(shù)組和形參數(shù)組就共占同一段內(nèi)存單元組就共占同一段內(nèi)存單元第30頁/共78頁第三十頁,共79頁。實參實參形參形參數(shù)組名數(shù)組名指針變量指針變量數(shù)組名數(shù)組名指針變量指針變量數(shù)組名數(shù)組名數(shù)組名數(shù)組名指針變量指針變量指針變量指針變量v一維數(shù)組名作函數(shù)參數(shù),實參與一維數(shù)組名作函數(shù)參數(shù),實參與(cny)形參的合法定形參的合法定義和

25、使用形式:義和使用形式:第31頁/共78頁第三十一頁,共79頁。void inv(int x, int n) int t,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; t=xi; xi=xj; xj=t; main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The reverted array :n); for(i=0;i10;i+) printf(%d,ai); printf(n);例例11 將數(shù)組將數(shù)組a中的中的n個整數(shù)按相反順序個整數(shù)按相反順序(shnx)存放存放 ij 3 7 9 11 0

26、6 7 5 4 20 1 2 3 4 5 6 7 8 9ijijijji11760594723實參與實參與(cny)形參均用數(shù)組形參均用數(shù)組m=4第32頁/共78頁第三十二頁,共79頁。v用array這樣的形式表示array是一維數(shù)組名,中方括號內(nèi)的數(shù)值并無實際作用。vvoid select_sort(int array10,int n) /指定元素個數(shù)與實參數(shù)組相同(xin tn)vvoid select_sort(int array,int n) /不指定元素個數(shù)vvoid select_sort(int array5,int n) /指定元素個數(shù)與實參數(shù)組不同注注 意意第33頁/共78頁

27、第三十三頁,共79頁。例例12 12 將數(shù)組將數(shù)組a a中的中的n n個整數(shù)按相反順序個整數(shù)按相反順序(shnx)(shnx)存放存放 void inv(int *x, int n) int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p;i+,j-) t=*i; *i=*j; *j=t; main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The reverted array :n); for(i=0;i10;i+) printf(%d,ai); printf(n);實參用數(shù)

28、組實參用數(shù)組, ,形參用指針形參用指針(zhzhn)(zhzhn)變量變量37911067542a0a1a2a3a4a5a6a7a8a9xp=x+ma數(shù)組60711594723ijijijjiji第34頁/共78頁第三十四頁,共79頁。例例13 13 將數(shù)組將數(shù)組a a中的中的n n個整數(shù)按相反順序個整數(shù)按相反順序(shnx)(shnx)存放存放 void inv(int *x, int n) int t,*i,*j,*p,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p;i+,j-) t=*i; *i=*j; *j=t; main() int i,a10,*p

29、=a; for(i=0;i10;i+,p+) scanf(%d,p); p=a; inv(p,10); printf(The reverted array :n); for(p=a;pa+10;p+) printf(%d,*p);實參與形參均用指針(zhzhn)變量第35頁/共78頁第三十五頁,共79頁。例例14 14 將數(shù)組將數(shù)組a a中的中的n n個整數(shù)個整數(shù)(zhngsh)(zhngsh)按相反順序存放按相反順序存放 void inv(int x, int n) int t,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; t=xi; xi=xj; xj=t

30、; main() int i,a10,*p=a; for(i=0;i10;i+,p+) scanf(%d,p); p=a; inv(p,10); printf(The array has been reverted:n); for(p=arr;parr+10;p+) printf(%d ,*p);實參用指針實參用指針(zhzhn)(zhzhn)變量變量, ,形參用數(shù)組形參用數(shù)組第36頁/共78頁第三十六頁,共79頁。10.4字符串與指針(zhzhn)(1) 用字符數(shù)組存放一個字符串例15main() char string=I love China!; printf(%sn,string);

31、(2) 用字符指針(zhzhn)指向一個字符串main() char*string=I love China!; printf(%sn,string); 第37頁/共78頁第三十七頁,共79頁。例16:#include void main() char s1=abcde,s25=m,n,p,q,0;char *ps=s1;printf(“%s %sn”,s1,s2);printf(“%sn”,ps); printf(“%c%c%c%c n”, s21 , s22 , s13, s14 ); printf(“%c%c%c%c n”, *ps ,*(ps+2) ,*(ps+4),*ps+2);ab

32、cde0mnpq0S1S2psabcde or mnpqabcdenpdeacec第38頁/共78頁第三十八頁,共79頁。#include main()char a=I am a Boy.,B20,*p1,*p2; int i; p1=a;p2=B; for (;*p1!=0;p1+,p2+) *p2 =*p1; *p2=0; printf(string a is:%sn,a); printf(string B is:); for(i=0;Bi!=0;i+) printf(%c,Bi); printf(n);例17:將字符串a(chǎn)復制(fzh)為字符串b第39頁/共78頁第三十九頁,共79頁。10

33、.4.2 字符串指針(zhzhn)作函數(shù)參數(shù)例18#include void copy_string(char from, char to) int i=0;while(fromi!=0)toi=fromi;i+;toi=0;main()char a=I am a teacher.;char b=you are a student.;printf(string a=%snstring b=%sn,a,b);copy_string(a,b);printf(string a=%snstring b=%sn,a,b); 第40頁/共78頁第四十頁,共79頁。練習(linx)31. void swap

34、(char *x,char *y) char t; t=*x; *x=*y; *y=t; main() char s1=”abc”, s2=”123”; swap(s1,s2); printf(“%s,%sn”,s1,s2); 程序執(zhí)行后的輸出結果是 A)123,abc B) abc,123 C)1bc,a23 D) 321,cba 2.若有以下調(diào)用語句(yj),則不正確的fun函數(shù)的首部是()。A) void fun(int m, int x) B) void fun(int s, int h41)C) void fun(int p, int *s) D) void fun(int n, i

35、nt a)main() int a50,n;fun(n, &a9);第41頁/共78頁第四十一頁,共79頁。v一級指針變量與一維數(shù)組的關系一級指針變量與一維數(shù)組的關系vint *p 與與 int q10 v數(shù)組名是指針(地址)常量數(shù)組名是指針(地址)常量(chngling)vp=q; p+i 是是qi的地址的地址v數(shù)組元素的表示方法數(shù)組元素的表示方法:下標法和指針法,下標法和指針法, 即若即若p=q, 則則 pi qi *(p+i) *(q+i) v形參數(shù)組實質(zhì)上是指針變量,即形參數(shù)組實質(zhì)上是指針變量,即int q int *qv在定義指針變量(不是形參)時,不能把在定義指針變量(不是

36、形參)時,不能把int *p 寫寫成成int p;v系統(tǒng)只給系統(tǒng)只給p分配能保存一個指針值的內(nèi)存區(qū)分配能保存一個指針值的內(nèi)存區(qū)(一般一般2字節(jié));而給字節(jié));而給q分配分配2*10字節(jié)的內(nèi)存區(qū)字節(jié)的內(nèi)存區(qū)第42頁/共78頁第四十二頁,共79頁。如:建立一份學生檔案,對每一個學生至少需要如:建立一份學生檔案,對每一個學生至少需要以下以下(yxi)一些信息。一些信息。學號(unsigned no)姓名(xngmng)(char name20)性別(char sex)年齡(int age)成績(chngj)(float score)地址(char addr30)第43頁/共78頁第四十三頁,共79頁

37、。C C程序可將上述程序可將上述(shngsh)(shngsh)數(shù)據(jù)的集合定義為一種結構數(shù)據(jù)的集合定義為一種結構體類型:體類型: struct student unsigned num; char name20; char sex; int age; float score; char addr30;第44頁/共78頁第四十四頁,共79頁。一、結構體定義(dngy)的一般形式: 結構結構(jigu)(jigu)的定義和的定義和初始化初始化struct 結構(jigu)體名 成員表列 ; 成員表列的寫法:類型標識符 成員名第45頁/共78頁第四十五頁,共79頁。例例 struct student

38、 int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).結構體類型定義描述(mio sh)結構的組織形式,不分配內(nèi)存結構(jigu)體類型定義的作用域第46頁/共78頁第四十六頁,共79頁。注注意意(zh y):1.1.這只是這只是(zhsh)(zhsh)定義一種類型的方法,定義一種類型的方法,尚未定義變量。尚未定義變量。2.struct 2.struct 關鍵詞關鍵詞( (保留字保留字) ),表示定義,表示定義一種一種(y

39、zhn(y zhn) )結構體類型。結構體類型。第47頁/共78頁第四十七頁,共79頁。1. 1. 先定義先定義(dngy)(dngy)結構體類型再定義結構體類型再定義(dngy)(dngy)結構體變量結構體變量有三種方法可用來定義結構(jigu)體變量:例:例: struct student int num; char name20; char sex; int age; float score; char addr30;二、結構二、結構(jigu)變量的定義變量的定義struct student x1, x2; 類型標識符第48頁/共78頁第四十八頁,共79頁。例:例:struct stu

40、dent int num; char name20; char sex; int age; char addr30; x1, x2; 成員成員(chngyun)表列表列 變量名表列;變量名表列;2. 2. 在定義結構體類型在定義結構體類型(lixng)(lixng)的同時定義變量:的同時定義變量:定義定義(dngy)(dngy)形式形式 struct struct 結構體結構體名名第49頁/共78頁第四十九頁,共79頁。定義形式定義形式(xngsh) struct(xngsh) struct 成員表列成員表列 變量名表列;變量名表列;不出現(xiàn)結構體類型名不出現(xiàn)結構體類型名3. 3. 直接直接(z

41、hji)(zhji)定義結構類型變定義結構類型變量量如如:struct int num char name20; char sex; int age; char addr30; x1, x2;第50頁/共78頁第五十頁,共79頁。 1. 類型名與變量名是不同(b tn)的概念 2. 允許成員(chngyun)名又為另一個已定義的結構型變量 3. 每一個成員的作用如同(rtng)該類型的變量 4. 成員名與程序中的變量名可相同但意義不同幾點說明幾點說明: :類型類型: :不分配內(nèi)存不分配內(nèi)存; 變量變量: :分配內(nèi)存分配內(nèi)存類型類型: :不能賦值、存取、運算不能賦值、存取、運算; ; 變量變量:

42、 :可以可以第51頁/共78頁第五十一頁,共79頁。struct date int month;int day;int year;struct studentint num; char name20; char sex; int age; struct date birthday; char addr30; x1, x2;例:結構例:結構(jigu)體的嵌套定義體的嵌套定義 x1或x2num namesex agebirthdaymonthdayyearaddr第52頁/共78頁第五十二頁,共79頁。結構結構(jigu)(jigu)的初始化的初始化 struct student x1=8906

43、, Li Ming , M, 85.5;一、先定義(dngy)結構,在定義(dngy)結構變量時對每個成員賦初值如:如:struct student unsigned No;char name20;char sex;float score;;第53頁/共78頁第五十三頁,共79頁。二、結構二、結構(jigu)(jigu)定義與變量定義及初始化合二定義與變量定義及初始化合二為一:為一: struct exp int a; float b; char yn8; x=1234, 56. 7, test; 但不能這樣但不能這樣(zhyng)寫:寫: struct exp int a=1234; flo

44、at b=56.7; char yn8=test; x;第54頁/共78頁第五十四頁,共79頁。11.1.3 11.1.3 訪問結構訪問結構(jigu)(jigu)成員成員 如:如:x1x1為為struct studentstruct student型變量型變量(binling)(binling),則,則 x1.No: x1.No: 表示表示x1x1的學號的學號 : : 表示表示x1x1的名字的名字 訪問結構訪問結構(jigu)變量實質(zhì)上是引用其成員變量實質(zhì)上是引用其成員一、圓點運算符一、圓點運算符有兩種運算符可訪問結構成員有兩種運算符可訪問結構成員第55頁/共78

45、頁第五十五頁,共79頁。注注意意(zh y):1. 1. 只能用變量的成員,不可用結構變量只能用變量的成員,不可用結構變量名直接名直接(zhji)(zhji)運算。運算。2. 2. 每一個成員的作用與其同類型的簡單變每一個成員的作用與其同類型的簡單變量量(binling)(binling)的引用相同。的引用相同。第56頁/共78頁第五十六頁,共79頁。二、箭頭二、箭頭(jintu)(jintu)運算運算符:符: 例:例:struct student char name 10; char sex; int age; float score; char addr20; x1;struct stud

46、ent p;第57頁/共78頁第五十七頁,共79頁。則p為結構(jigu)指針變量,它可用來存放student型變量的地址令 p=&x1; 則 p為x1的首地址(dzh).namesexaddrpx1agescore訪問結構訪問結構(jigu)成員:成員:pname 表示x1的姓名;page 表示x1的年齡;pname 等價于 (*p).namepage 等價于 (*p).age第58頁/共78頁第五十八頁,共79頁。 小結:小結: 引用結構變量中的成員有三種方法:引用結構變量中的成員有三種方法: (2) 用指針(zhzhn)變量 (p).成員名 (p).num (3) 用指向(zh

47、xin)運算符成員名 p num (1) 結構(jigu)體變量名.成員名 x1.num注意注意:指針變量指針變量p必須是結構指針型,必須是結構指針型,且有p=&x1;第59頁/共78頁第五十九頁,共79頁。第十六周上機題(3,4)1. P101 第5題2.以下程序把一個十進制數(shù)轉換成二進制數(shù),并把此二進制數(shù)和每一位放在一維數(shù)組b中,然后(rnhu)輸出b數(shù)組。(注意:二進制數(shù)的最低位放在數(shù)組的第一個元素中,用指針來實現(xiàn)) 第60頁/共78頁第六十頁,共79頁。第十七周(3,4)1.請編一個函數(shù)fun(int *a,int n,int *odd,int *even),函數(shù)的功能是分別求

48、出數(shù)組中所有奇數(shù)之和以及所有偶數(shù)(u sh)之和。形參n給了數(shù)組中數(shù)據(jù)的個數(shù):利用指針odd返回奇數(shù)之和,利用指針even返回偶數(shù)(u sh)之和。2.教材p168 3(1)(2)第61頁/共78頁第六十一頁,共79頁。第十七周(1,2)1.實驗(shyn)教材p73 3(5) 2.教材p168 3(1)(2)第62頁/共78頁第六十二頁,共79頁。教材(jioci)p168 3(1)#include#includevoid main()int k=0;char a80,b80,c80=0,*p,*q;p=a;q=b;gets(a);gets(b);while( )if( ) ck=*p;el

49、se ck=*q;p+; ; k+;if(*p!=0) strcat(c,p);else strcat(c,q);puts(c);*p!=0&*q!=0*p*qq+第63頁/共78頁第六十三頁,共79頁。教材(jioci)p168 3(2)#includevoid main()int a11,x,i;printf(input 10 integers:n);for(i=1; ;i+)scanf(%d, );printf(input x:);scanf(%d,&x);*a=x;i=10;while(x!=*(a+i) _ if( ) printf(%6d position is:%

50、3dn,x,i);else printf(%6d Not bee found !n,x);i-;&aii0 i11 第64頁/共78頁第六十四頁,共79頁。教材( jioci)P101 第5題#include double Fib(int n) double a;if (n=0)a=0;elseif(n=1)a=1; elsea=Fib(n-1)+Fib(n-2);return a;main()int n;printf(請輸入請輸入(shr)n的值的值:);scanf(%d,&n);printf(Fib(%d)=%lfn,n,Fib(n);第65頁/共78頁第六十五頁,共79頁

51、。給出年月日,計算該日是該年的第幾天?要求(yoqi)寫出int sum_day(int month,int day)計算日期函數(shù)int leap(int year) 判斷閏年函數(shù)int leap(int year) int a;if(year%400=0|(year%100!=0&year%4=0) a=1;else a=0;return a;第66頁/共78頁第六十六頁,共79頁。int sum_day(int month,int day) int days;switch(month)case 1: days=day; break; case 2: days=31+day; bre

52、ak; case 3: days=31+28+day; break; case 4: days=31*2+28+day; break; case 5: days=31*2+30+28+day; break; case 6: days=31*3+30+28+day; break; case 7: days=31*3+30*2+28+day; break; case 8: days=31*4+30*2+28+day; break; case 9: days=31*5+30*2+28+day; break; case 10: days=31*5+30*3+28+day; break; case 11

53、: days=31*6+30*3+28+day; break; case 12: days=31*6+30*4+28+day; break; return days;第67頁/共78頁第六十七頁,共79頁。main() int month,day,year;printf(輸入(shr)年、月、日:);scanf(%d%d%d,&year,&month,&day);if(leap(year)=1&month2) printf(該日是該年%dn,sum_day(month,day)+1);else printf(該日是該年的%dn,sum_day(month,day

54、);第68頁/共78頁第六十八頁,共79頁。實驗(shyn)教材P(73)3(5)#include double f(double x,int n) int i; double f=1,t=1;for(i=1;i=2*n;i=i+2)t=-t*x*x/(i+1)*i);f=f+t; return f;main() int n; double x;printf(Input x,n:);scanf(%lf%d,&x,&n);printf(y=%lfn,f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3);第69頁/共78頁第六十九頁,共79頁。實驗(shyn)教材p71 16題#include int factorsum(int n) int index,sum; sum=1; /*1是因子*/ for (index=2;index=n/2;index+) if (n%index=0) sum+=index

溫馨提示

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

評論

0/150

提交評論