理工軟件工程考研-語言程序設(shè)計c2012-d10new_第1頁
理工軟件工程考研-語言程序設(shè)計c2012-d10new_第2頁
理工軟件工程考研-語言程序設(shè)計c2012-d10new_第3頁
理工軟件工程考研-語言程序設(shè)計c2012-d10new_第4頁
理工軟件工程考研-語言程序設(shè)計c2012-d10new_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

指針基本一、變指針基本一、變量與變量 時用(進 ,程序) 時使用(進 和:程序運行時,變量的要保存在 首地運行2 直接指針變量 地間接指針變量說*3已知:charch='A'若變量ch在內(nèi)存中對應(yīng)的地址為變量名稱:ch,類型為char,占用1個字ch的值(內(nèi)容變量ch的地址:1000指針變量pc是char型指針pc=&ch; /*&取地址*/則稱指針變量pc指向變量

4三、指針運算運算符(&取變量的 取指針變量所指向的內(nèi) 注運算符&和“位與”運算是同一符號;運算符*和“乘”運算是同一符號。*的實際意5實

已知:intx=2,y*x為一般變量,px為指針型變 px=&x;x=10;

又稱為:px指向變量x*px10也稱為間6 y=

<==>y=

取指針?biāo)傅膟=x**px=

<==>y=*px*<==>x=y*<==>++*px已指x,則可*pxpx已指x,則可*px代替7指針可以指向所有指針指向變量--指針變量(存變指針指向數(shù)組--數(shù)組指針(存數(shù)指針指向函數(shù)--函數(shù)指針(存放函數(shù) 地址指針指向指針--指針型指針(存放由指針組成的數(shù)組--指針指向結(jié)構(gòu)--指針指向文件--8

變量地

函數(shù)指9在函數(shù)之間傳遞變量的地在函數(shù)間通過一般的變量可以傳遞變量的形式參數(shù):int*實際參10例C9-例C9-1.C:使用函數(shù)plus例C9-#include<stdio.h>voidmain(){inta,b,printf("EnterAandB");scanf("%d%d",&a,&b);c=plus(&a,&b); /*參為變量地*/printf("A+B=%d",c);}plus(*int*py)/*參為{(+*py}11例C9-2.C例C9-#include例C9-{inta=5,printf("brfortswapa=%db=%d\nab);swap&a&b);/*參為變量地址*/printf("afterswapa=%d,b=%d\n",a,b);}swap(int*px,int*py{int

/*指針==指所指內(nèi)容賦給=py所指內(nèi)容px變=temp賦給py變}main

swap*px*py)函{a=b={temp=*px=語語①②}swap(}*py=語③形參變①形參變①temp=wap函變5形參變量③*py=5②*px=swap函數(shù)的執(zhí)行過程和各個變量的變13指向函數(shù)的指定義函數(shù)指類型標(biāo)識*量名給函數(shù)指針變量賦函數(shù)指針通過指針變量調(diào)用函(*函數(shù)指針變量)(實際參14例9-4:用指針調(diào)用函數(shù)實現(xiàn)求兩個數(shù)中最大值#include<stdio.h>voidmain(){intmaxintint);/*數(shù)說明*/int*pf/*數(shù)指針定義*/inta,b,c;pf=max; /*將函數(shù)的 地址賦給指針*/scanf("%d,%d",&a,&b);c*pf)(a /*指針調(diào)用函printf("a=%d,b=%d,max=%d",a,b,c=(c=(*pf)等價cmax(aintmax(intx,inty{return(x>y)?x:}15在函數(shù)的形參中使用指向函數(shù)的指形參是函數(shù)指針時,實參應(yīng)為函數(shù)名,即函在內(nèi)存中的可執(zhí)行代碼的首地址 )voidqsort(void*base,size_tsize_tint(*fcmp)(constvoid*,constvoid*));Sortsnelementriesofsizewidthlocatedatbase.Rankingisdeterminedbyuser-definedroutinefcmp,returning<0ifelem1<elem2;=0ifelem1==elem2;>0ifelem1>16減17指針與正整數(shù)的加減當(dāng)指針p指向數(shù)組中的某個元素時,n為正整數(shù):p+n:指針p所指向當(dāng)前元 后的第n個元素p-n:指針p所指向當(dāng)前元 前的第n個元素p++和++p:指針加1,指向當(dāng)前元素的下一個元素高地

0

18例C9-5.C:編寫函數(shù)連接兩個字符voidmain({chara[50],b[30];printf("a+b=%s\n",strcat(a,b)}例C9-例C9-19例C9-5.C:編寫函數(shù)連接兩個字符char*strcat(str1,str2)char*str1,*str2;{char*p=str1;while(*p!=’\0’)

回指串結(jié)while((*p=*str2)!=’\0’{str2}return}

例C9-指例C9-20while((*p=*str2)!=’\0’{str2}改進while((*p++=*str2++)!=’\0’;改進while(*p++=*str2++;21當(dāng)兩個指針指向同一個數(shù)組中的元素時,才能>、<、>=、<=、!=、==關(guān)系運算。當(dāng)指針p、q指向同一數(shù)組中的元素 <qp所指的元素在q所指的元素p==q:若指針p、q 指向同一個元素,22基本運算辨intx=10,y=5,*p=&x,5 5pq;指針賦值。使指針pq指向p5 55*p*q;所指內(nèi)容賦值*p*q的值5 5 523基本運算辨已知:intx=10y=5*p=&xp==

指針p、q是否指向同一單元指針p、q所指內(nèi)容是否相NULL:指針常量。具有特殊含義,表示任意pNULL進行“P==NULL”或“P!=NULL”運算均有意義:判斷指針p是否為空。24例C9-例C9-6.C:編寫函數(shù),實現(xiàn)串反例C9-revstr(char*s{char*p=s,c;while(*p)

s反

到串結(jié)束標(biāo)向串的1個字while(s<p{c=*s++=*p--=

換兩個指針?biāo)缸仲x值再移動指}}25當(dāng)兩個指針指向同一數(shù)組中的元素時,才能進行指針間的減法運算;當(dāng)兩個指針分當(dāng)兩個指針指向同一數(shù)組中的元素時,p-的物理意義是:指針p和q之間包含的元素26例C9-7.C:編寫strlenchar*s /*s的長{char*p=whilewhile(*p++;return(p-s-1/*個指針相減法例C9-}例C9-aabcd f 串長

27①若當(dāng)前字符為'\0'②將串分為兩部分:第一個字和其abcdefgh1的長程strlen(char*s例C9-{if(*s=='\0')return例C9- return(1+strlen(}28例C9-9.C:用遞歸的方法完成串反向。將給定的字符串分為兩個部第1部分:首字符尾字第2部分:第二個字符倒數(shù)第二第2部分與原問題性質(zhì)一致,只是規(guī)??s小基本算交換第一部分29基本算將第二部分構(gòu)成一個字符串,遞歸:完成二部分串反交換第一部分算法實用兩個指針分別指向串的首字符和尾字將中間部分構(gòu)成“新的”字符串,并對其交換串的首尾兩個字30aabcdefaabcdef{char*p=s,c;while(*p)

s滿足s<p p--if(s<p{c=

//①fbfbcdefspafabfabcde*s= //*p= //*p= // 例C9-例C9-

遞歸p

afeafedcba31中的每個元素都可以唯一確定,即通過可以()數(shù)組中的元素,稱為。在C語言中,凡是可以通過完成的()均可以通過實現(xiàn)。稱為。32概假設(shè) int數(shù)組名:標(biāo)識數(shù)組數(shù)組元素的地址:數(shù)組中下標(biāo)為k的元素的地址(&a[k])數(shù)組首地址(起始地址):數(shù)組中第1個元素0(&a[0或用數(shù)組名a表關(guān)系表達式:a==&a[0]成立。33例C9-例C9-11.C:分析例C9-main({inta[]={1,2,3,4,5,6};intprintf("%d",printf("%d",*++p);p+=3;

printf("%d\n",printf("%d\n",*(p--printf("%d%d\n",*p,*(a+3)}第3第4第5個輸

p取p所指內(nèi)pp1p所指的

12345aa[0]a+1a[1]a+21234535在函數(shù)之間傳遞整個數(shù)實參用數(shù)組名形參用數(shù)組名或指針當(dāng)形參是數(shù)組時,在被調(diào)用函數(shù)中可采用下標(biāo)式 的。當(dāng)形參是指針時,在被調(diào)用函數(shù)中可采用指針方式 組的。特別說由于數(shù)組名代表數(shù)組的首地址,傳遞數(shù)組名36例C9-12.C:編寫字符 函數(shù)main({chara[30],scanf("%s",

例C9-strcopyab 參為數(shù)printf("a=%s\nb=%s\n",a,b}strcopy(str1,str2char*str1*str2;參為{while((*str2=*str1)!=’\0’str1++ 過指針操}}共114 第37 strcopy(char*str1,char*str2{while(*str2=*str1 }

例C9-}改進二strcopy(char*str1,char*str2{while(*str2++=*str1++;

例C9-}38數(shù)據(jù)類*數(shù)組名[常量表達式例如:int*pa指針數(shù)組pa是包含6個元素的數(shù)組,指針數(shù)組

整39 112SundayMondaycharweek_day[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};66Saturday2用二維字符數(shù) 星期表,每行存一個字符40#include<stdio.h>#include<string.h>charweek_day[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};intmain( inti,j;charprintf("Enterastring:");scanf("%s",id);for(i=0;i<7;i++)if(strcmp(week_day[i],id)==0 printf("%sis%d\n",id,i);}if(i>=7printf("Error!\n");return0;}

42例C9-14.Cweek_day指數(shù)組

sunday\0monday\0tuesdaywednesdthursdafriday\0saturda

yyychar*week_day[]={"sunday","monday","tuesday",43例C7_3002.C#include<stdio.h>#include<string.h>char*week_day[]={"sunday",...,NULL};intmain() inti,j;charprintf("Enterastring:");scanf("%s",id);for(i=0;week_day[i]!=NULL;i++)if(strcmp(week_day[i],id)==0{}printf("Error!\n");return-1;}

44例C9-例C9-14:用指針數(shù)組實現(xiàn)輸入字符串例C9-char*week_day[8]={"sunday","friday","saturday",NULL};main({int charscanf("%s",string);l=lookup(string);printf("l=%d\n",l}46lookupcharch例C9-{inti, char例C9-for(i=0;week_day[i]!=NULL;i++{pc=week_day[i];while(*pc==ch[j]&&*pc!==='\0’{j++;}if(*pc==ch[j]&&*pc=='\0’}return(- 若沒有找到,則返回-}47*針變量名)[常量表達例如:int*pb數(shù)組指pb指向一個數(shù)組,該數(shù)組是一維的有6個元素的整型數(shù)組。整整51 例:給定日期,計算該天是一年中的第幾main({staticintday_tab[2][13]=

例C8-{0,31,28,31,30,31,30,31,31,30,31,30,{0,31,29,31,30,intscanf("%d%d%d",&y,&m,printf("%d\n",day_of_year(day_tab,} 910110001共114 第52 day_of_year(d_tab,year,month,dayintd_tab 維數(shù)intyear,month,{int

例C8-i=(year%4==0&&year%100!=0i:0為平年,1為閏年for(j=1;j<month;j++)day+=d_tab[i][j];return(day);} 910110001共114 第53例C9-13.C:使用指針作為形式參day_of_year(day_tab,year,month,day)int*d_tab;intyear,month,day;{inti,i=(year%4==0&&year%100!=0for(j=1;j<month;j++day+=*(d_tab+i*13+j);}3130313130310例C9- 第例C9- 第54例C9-16.C:用數(shù)組指針作形

例C9-day_of_year(day_tab,year,month,{{for(j=1;j<month;j++)day+=(*(d_tab+i))[j

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論