c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第1頁
c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第2頁
c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第3頁
c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第4頁
c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

c語?第?章課后作業(yè)答案,c語?第?章指針參考答案10.12?指針數(shù)組處理上?題?,字符串不等長。解:程序如下:(xt10-12.c)#include#includemain(){voidsort(char*p[]);inti;char*p[10],str[10][20];for(i=0;i<10;i++)p[i]=str[i];/*將第i個字符串的?地址賦予指針數(shù)組p的第i個元素*/printf("Input10strings:\n");for(i=0;i<10;i++)scanf("%s",p[i]);sort(p);printf("Now,thesequenceis:\n");for(i=0;i<10;i++)printf("%s\n",p[i]);}voidsort(char*p[]){inti,j;char*temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}運?情況如下:Input10strings:China↙Japan↙Yemen↙Pakistan↙Mexico↙Korea↙Brazil↙Iceland↙Canada↙Mongolia↙Now,thesequenceis:BrazilCanadaChinaIcelandJapanKoreaMexicoMongoliaPakistanYemen10.13寫?個?矩形法求定積分的通?函數(shù),分別求:,,(說明:sin、cos、exp已在系統(tǒng)的數(shù)學函數(shù)庫中,程序開頭要?#include)。解:程序如下:(xt10-13.c)#include#includemain(){floatintegral(float(*p)(float),floata,floatb,intn);floata1,b1,a2,b2,a3,b3,c,(*p)(float);floatfsin(float);/*聲明fsin函數(shù)*/floatfcos(float);/*聲明fcos函數(shù)*/floatfexp(float);/*聲明fexp函數(shù)*/intn=20;printf("Inputa1,b1:");/*輸?求sinx定積分的下限和上限*/scanf("%f,%f",&a1,&b1);printf("Inputa2,b2:");/*輸?求cosx定積分的下限和上限*/scanf("%f,%f",&a2,&b2);printf("Inputa3,b3:");/*輸?求定積分的下限和上限*/scanf("%f,%f",&a3,&b3);p=fsin;c=integral(p,a1,b1,n);/*求出sinx的定積分*/printf("Theintegralofsin(x)is:%f\n",c);p=fcos;c=integral(p,a2,b2,n);/*求出cosx的定積分*/printf("Thtintegralofcos(x)is:%f\n",c);p=fexp;c=integral(p,a3,b3,n);/*求出ex的定積分*/printf("Theintegralofexp(x)is:%f\n",c);}floatintegral(float(*p)(float),floata,floatb,intn)/*?矩形法求定積分的通?函數(shù)*/{inti;floatx,h,s;h=(b-a)/n;x=a;s=0;for(i=1;i<=n;i++){x=x+h;s=s+(*p)(x)*h;}return(s);}floatfsin(floatx)/*計算sinx的函數(shù)*/{returnsin(x);}floatfcos(floatx)/*計算cosx的函數(shù)*/{returncos(x);}floatfexp(floatx)/*計算ex的函數(shù)*/{returnexp(x);}運?情況如下,Inputa1,b1:0,1↙Inputa2,b2:-l,1↙Inputa3,b3:0,2↙Theintegralofsin(x)is:O.480639Theintegralofcos(x)is:1.681539Theintegralofexp(x)is:6.713833說明:sin、cos和exp是系統(tǒng)提供的數(shù)學函數(shù)。在程序中定義3個函數(shù)fsin、fCOS和fexp分別?來計算sin(x)、cos(x)和exp(x)的值,在main函數(shù)中要聲明這3個函數(shù)。在main函數(shù)中定義p為指向函數(shù)的指針變量,定義形式是“float(*p)(float)”,表?p指向的函數(shù)有?個實型形參,p可指向返回值為實型的函數(shù)。在main函數(shù)中有“p=fsin;”,表?將fsin函數(shù)的??地址賦給p。在調(diào)?integral函數(shù)時,?p作為實參,把fsin函數(shù)的??地址傳遞給形參p(形參p也定義為指向函數(shù)的指針變量),這樣形參P也指向fsin函數(shù),(*p)(x)就相當于fsin(x)。fsin(x)的值就是sinx的值。因此通過調(diào)?integral函數(shù)求出了sinx的定積分。求其余兩個函數(shù)定積分的情況與此類似。10.14將n個數(shù)按輸?順序的逆序排列,?函數(shù)實現(xiàn)。解:程序如下:(xt10-14.c)#includemain(){voidsort(int*p,intm);inti,n;int*p,num[20];printf("inputn:");scanf("%d",&n);printf("pleaseinputthesenumbers:\n");for(i=0;iscanf("%d",&num[i]);p=&num[0];sort(p,n);printf("Now,thesequenceis:\n");for(i=0;iprintf("%d",num[i]);}voidsort(int*p,intm){inti;inttemp,*p1,*p2;for(i=0;i{p1=p+i;p2=p+(m-1-i);temp=*p1;*p1=*p2;*p2=temp;}}運?結(jié)果:inputn:l0↙pleaseinputthesenumbers:l0987654321↙Now,thesequenceis:1234567891010.15有?個班4個學?,5門課。(1)求第?門課的平均分;(2)找出有兩門以上課程不及格的學?,輸出他們的學號和全部課程成績及平均成績;(3)找出平均成績在90分以上或全部課程成績在85分以上的學?。分別編3個函數(shù)實現(xiàn)以上3個要求。解:程序如下:(xt10-15.c)#includemain(){voidavsco(float*psco,float*pave);voidavcour1(char*pcou,float*psco);voidfali2(charcourse[5][10],intnum[4],floatscore[4][5],floataver[4]);voidgood(charcourse[5][10],intnum[4],floatscore[4][5],floataver[4]);inti,j,*pnum,num[4];floatscore[4][5],aver[4],*psco,*pave;charcourse[5][10],*pcou;printf("Inputcourse:\n");pcou=course[0];for(i=0;i<5;i++)scanf("%s",course[i]);printf("InputNO.andscoures:\n");printf("NO.");for(i=0;i<5;i++)printf(",%s",course[i]);printf("\n");psco=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){scanf("%d",pnum+i);for(j=0;j<5;j++)scanf(",%f",psco+5*i+j);}pave=&aver[0];printf("\n\n");avsco(psco,pave);/*求出每個學?的平均成績*/avcour1(pcou,psco);/*求出第?門課的平均成績*/printf("\n\n");fali2(pcou,pnum,psco,pave);/*找出2門課不及格的學?*/printf("\n\n");good(pcou,pnum,psco,pave);/*找出成績好的學?*/}voidavsco(float*psco,float*pave)/*求每個學?的?均成績的函數(shù)*/{inti,j;floatsum,average;for(i=0;i<4;i++){sum=0.0;for(j=0;j<5;j++)sum=sum+(*(psco+5*i+j));/*累計每個學?的各科成績*/average=sum/5;/*計算平均成績*/*(pave+i)=average;}}voidavcour1(char*pcou,float*psco)/*第?門課的平均成績的函數(shù)*/{inti;floatsum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(psco+5*i));/*累計每個學?的得分*/average1=sum/4;/*計算平均成績*/printf("course1:%s,averagescore:%6.2f.\n",pcou,average1);}voidfali2(charcourse[5][10],intnum[4],floatscore[4][5],floataver[4])/*找兩門以上課程不及格的學?的函數(shù)*/{inti,j,k,label;printf("========Studentwhoisfail============\n");printf("NO.");for(i=0;i<5;i++)printf("%10s",course[i]);printf("average\n");for(i=0;i<4;i++){label=0;for(j=0;j<5;j++)if((score[i][j])<60.0)label++;if(label>=2){printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}voidgood(charcourse[5][10],intnum[4],floatscore[4][5],floataver[4])/*找成績優(yōu)秀的學?(各門85分以上或平均90分以上)的函數(shù)*/{inti,j,k,n;printf("========Studentwhosescoreisgood========\n");printf("NO.");for(i=0;i<5;i++)printf("%10s",course[i]);printf("average\n");for(i=0;i<4;i++){n=0;for(j=0;j<5;j++)if((score[i][j])>85.0)n++;if((n==5)||(aver[i]>=90)){printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}運?情況如下:Inputcourse:(輸?課程名稱)English↙Computer↙Math↙Physics↙Chemistry↙InputNO.andscoures:(輸?學號和各門課成績)NO.,English,Computer,Math,Physics,Chemistry(按此順序輸?)101,34,56,88,99,89↙102,77,88,99,67,78↙103,99,90,87,86,89↙104,78,89,99,56,77↙course1:English,averagescore:72.00.(第?門課英語的平均成績)========Studentwhoisfail============(有兩門課不及格者)NO.EnglishComputerMathPhysicsChemistryaverage10134.0056.0088.0099.0089.0073.20========Studentwhosescoreisgood========(成績優(yōu)良者)NO.EnglishComputerMathPhysicsChemistryaverage10399.0090.0087.0086.0089.0090.20說明:程序中num是存放4個學?學號的?維數(shù)組,course是存放5門課名稱的?維字符數(shù)組,score是存放4個學?5門課成績的?維數(shù)組,aver是存放每個學?平均成績的數(shù)組,pnum是指向num數(shù)組的指針變量,pcou是指向course數(shù)組的指針變量,psco是指向score數(shù)組的指針變量,pave是指向aver數(shù)組的指針變量函數(shù)的形參調(diào)??數(shù)組,調(diào)?函數(shù)時的實參?指針變量。形參也可以不?數(shù)組??指針變量,請讀者??分析。10.16輸??個字符串,內(nèi)有數(shù)字和?數(shù)字字符,如:a123x456ㄩ17960?302tab5876將其中連續(xù)的數(shù)字作為?個整數(shù),依次存放到?數(shù)組a中。例如:123放在a[0]中,456放在a[1]中……統(tǒng)計共有多少個整數(shù),并輸出這些數(shù)。解:程序如下:(xt10-16.c)#includemain(){charstr[50],*pstr;inti,j,k,m,e10,digit,ndigit,a[10],*pa;printf("Inputastring:\n");gets(str);printf("\n");pstr=&str[0];/*字符指針pstr置于數(shù)組str?地址*/pa=&a[0];/*指針pa置于數(shù)組a?地址*/ndigit=0;/*ndigit代表有多少個整數(shù)*/i=0;/*代表字符串中字符的位置*/j=0;/*代表連續(xù)數(shù)字的位數(shù)*/while(*(pstr+i)!='\0'){if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))j++;else{if(j>0){digit=*(pstr+i-1)-48;/*將個數(shù)位賦予digit*/k=1;while(k/*將含有兩位以上數(shù)的其他位的數(shù)值累計于digit*/{e10=1;for(m=1;m<=k;m++)e10=e10*10;/*e10代表該位數(shù)所應乘的因?*/digit=digit+(*(pstr+i-1-k)-48)*e10;/*將該位數(shù)的數(shù)值累加于digit*/k++;/*位數(shù)k?增*/}*pa=digit;/*將數(shù)值賦予數(shù)組a*/ndigit++;pa++;/*指針pa指向a數(shù)組下?元素*/j=0;}}i++;}if(j>0)/*以數(shù)字結(jié)尾字符串的最后?個數(shù)據(jù)*/{digit=*(pstr+i-1)-48;/*將個數(shù)位賦予digit*/k=1;while(k/*將含有兩位以上數(shù)的其他位的數(shù)值累計于digit*/{e10=1;for(m=1;m<=k;m++)e10=e10*10;/*e10代表該位數(shù)所應乘的因?*/digit=digit+(*(pstr+i-1-k)-48)*e10;/*將該位數(shù)的數(shù)值累加于digit*/k++;/*位數(shù)k?增*/}*pa=digit;/*將數(shù)值賦予數(shù)組a*/ndigit++;j=0;}printf("Thereare%dnumbersinthisline.Theyare:\n",ndigit);j=0;pa=&a[0];for(j=0;j/*打印數(shù)據(jù)*/printf("%d",*(pa+j));printf("\n");}運?情況如下:Inputastring:a123x45617960?302tab5876↙Thereare6numbersinthisline.Theyare:12345617903025810.17寫?函數(shù),實現(xiàn)兩個字符串的?較。即??寫?個strcmp函數(shù),函數(shù)原型為:intstremp(char*p1,char*p2)設(shè)p1指向字符串s1,p2指向字符串s2。要求:當s1=s2時,返回值為0。當s1不等于s2時,返回它們?者的第?個不同字符的ASCII碼差值(如“BOY”與“BAD”,第?字母不同,“O”與“A”之差為79-65=14);如果s1>s2,則輸出正值;如果s1解:程序如下:(xt10-17.c)#includemain(){intstrcmp(char*p1,char*p2);intm;charstr1[20],str2[20],*p1,*p2;printf("Inputtwostrings:\n");scanf("%s",str1);scanf("%s",str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf("result:%d\n",m);}intstrcmp(char*p1,char*p2)/*兩個字符串?較的函數(shù)*/{inti;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)=='\0')return(0);/*相等時返回結(jié)果0*/return(*(p1+i)-*(p2+i));/*不等時返回結(jié)果為第?個不等字符ASCII碼的差值*/}運?情況如下:①Inputtwostrings:CHINA↙Chen↙Result:-32②Inputtwostrings:hello!↙Hello!↙Result:0③Inputtwostings:dog↙cat↙result:110.18編?個程序,打??份號,輸出該?的英??名。例如,輸?“3”,則輸出“March”,要求?指針數(shù)組處理。解:程序如下:(xt10-18.c)#includemain(){char*month_name[13]={"illegalmonth","January","February","March","April","May","June","July","August","September","October","November","December"};intn;printf("Inputmonth:");scanf("%d",&n);if((n<=12)&&(n>=1))printf("Itis%s.\n",*(month_name+n));elseprintf("Itiswrong.\n");}運?結(jié)果:①Inputmonth:2↙ItisFebruary.②Inputmonth:8↙ItisAugust.③Inputmonth:13↙Itiswrong.10.19編寫?個函數(shù)alloc(n),?來在內(nèi)存區(qū)新開辟?個連續(xù)的空間(n個字節(jié))。此函數(shù)的返回值是?個指針,指向新開辟的連續(xù)的空間的起始地址。再寫?個函數(shù)free(p),將地址p開始的各單元釋放(不能再被程序使?,除?再度開辟)。提?,先在內(nèi)存規(guī)定出??相當?的連續(xù)空間(例如1000個字節(jié))。然后開辟與釋放都在此空間內(nèi)進?。假設(shè)指針變量p原已指向未?空間的開頭,調(diào)?alloc(n)后,開辟了n個字節(jié)可供程序使?(例如,可以賦值到這些單元中)?,F(xiàn)在需要使p的值變成p+n,表?空?未?區(qū)從p+n地址開始,同時要將新開辟區(qū)的起始位置(p)作為函數(shù)值返回,以表?可以利?從此點開始的單元。如果更新開辟的區(qū)太?(n?),超過了預設(shè)的空間(1000字符),則alloc(n)函數(shù)返回指針NULL,表?開辟失敗。alloc(n)應返回?個指向字符數(shù)據(jù)的指針(因為開辟的區(qū)間是以字節(jié)為單位被利?的)。解:程序如下:(xt10-19.c)#defineNULL0/*當開辟失敗時返回標志*/#defineALLOCSIZE1000/*可以開辟的最?的空間*/charallocbuf[ALLOCSIZE];/*開辟?個字符數(shù)組,作為存儲區(qū)*/char*allocp=allobuf;/*指針指向存儲區(qū)的起端*/char*alloc(intn)/*開辟存儲區(qū)函數(shù),開辟存儲區(qū)后返回指針*/{if(allocp+n<=allocbuf+ALLOCSIZE){sallocp+=n;return(allocp-n);/*返回?個指針,它指向存區(qū)的開始位置*/}elsereturn(NULL);/*當存區(qū)不夠分配時,返回?個空指針*/}voidfree(char*p)/*釋放存儲區(qū)函數(shù)*/{if(p>=allocbuf&&p>alloebuf+ALLOCSIZE)allocp=p;}說明:定義?個全局指針變量a11ocp,它指向指定的存儲區(qū)中下?個可?的元素。開始時,allocp指向此存儲區(qū)allocbuf的開頭,當調(diào)?alloc(n)函數(shù)后,allocp指向a11ocbuf中的第n個元素如果調(diào)?時?以下語句:pt=alloc(n);則pt的值為剛才所開辟的空間的?地址(allocp'-n)。在調(diào)?free函數(shù)時,如果寫出以下調(diào)?語句:free(pt);則把allocp的值改成pt,即使得allocp指向剛才開辟空間的開頭,恢復allocp的原值,就相當于釋放此段空間,使這段空間可以做其他?途。10.20?指向指針的指針的?法對5個字符串排序并輸出。解:程序如下:(xt10-20.c)#include#defineLINEMAX20/*定義字符串的最?長度*/main(){voidsort(char**p);inti;char**p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i];/*將第i個字符串的?地址賦予指針數(shù)組pstr的第i個元素*/printf("Input5strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(

溫馨提示

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

評論

0/150

提交評論