![c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第1頁](http://file4.renrendoc.com/view/b9f824cd322f5504df3bd6ba0b677142/b9f824cd322f5504df3bd6ba0b6771421.gif)
![c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第2頁](http://file4.renrendoc.com/view/b9f824cd322f5504df3bd6ba0b677142/b9f824cd322f5504df3bd6ba0b6771422.gif)
![c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第3頁](http://file4.renrendoc.com/view/b9f824cd322f5504df3bd6ba0b677142/b9f824cd322f5504df3bd6ba0b6771423.gif)
![c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第4頁](http://file4.renrendoc.com/view/b9f824cd322f5504df3bd6ba0b677142/b9f824cd322f5504df3bd6ba0b6771424.gif)
![c語言第十章課后作業(yè)答案,c語言第十章指針參考答案_第5頁](http://file4.renrendoc.com/view/b9f824cd322f5504df3bd6ba0b677142/b9f824cd322f5504df3bd6ba0b6771425.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
c語?第?章課后作業(yè)答案,c語?第?章指針參考答案10.12?指針數組處理上?題?,字符串不等長。解:程序如下:(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個字符串的?地址賦予指針數組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寫?個?矩形法求定積分的通?函數,分別求:,,(說明:sin、cos、exp已在系統(tǒng)的數學函數庫中,程序開頭要?#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函數*/floatfcos(float);/*聲明fcos函數*/floatfexp(float);/*聲明fexp函數*/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)/*?矩形法求定積分的通?函數*/{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的函數*/{returnsin(x);}floatfcos(floatx)/*計算cosx的函數*/{returncos(x);}floatfexp(floatx)/*計算ex的函數*/{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)提供的數學函數。在程序中定義3個函數fsin、fCOS和fexp分別?來計算sin(x)、cos(x)和exp(x)的值,在main函數中要聲明這3個函數。在main函數中定義p為指向函數的指針變量,定義形式是“float(*p)(float)”,表?p指向的函數有?個實型形參,p可指向返回值為實型的函數。在main函數中有“p=fsin;”,表?將fsin函數的??地址賦給p。在調?integral函數時,?p作為實參,把fsin函數的??地址傳遞給形參p(形參p也定義為指向函數的指針變量),這樣形參P也指向fsin函數,(*p)(x)就相當于fsin(x)。fsin(x)的值就是sinx的值。因此通過調?integral函數求出了sinx的定積分。求其余兩個函數定積分的情況與此類似。10.14將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;}}運?結果:inputn:l0↙pleaseinputthesenumbers:l0987654321↙Now,thesequenceis:1234567891010.15有?個班4個學?,5門課。(1)求第?門課的平均分;(2)找出有兩門以上課程不及格的學?,輸出他們的學號和全部課程成績及平均成績;(3)找出平均成績在90分以上或全部課程成績在85分以上的學?。分別編3個函數實現以上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)/*求每個學?的?均成績的函數*/{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)/*第?門課的平均成績的函數*/{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])/*找兩門以上課程不及格的學?的函數*/{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分以上)的函數*/{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個學?學號的?維數組,course是存放5門課名稱的?維字符數組,score是存放4個學?5門課成績的?維數組,aver是存放每個學?平均成績的數組,pnum是指向num數組的指針變量,pcou是指向course數組的指針變量,psco是指向score數組的指針變量,pave是指向aver數組的指針變量函數的形參調??數組,調?函數時的實參?指針變量。形參也可以不?數組??指針變量,請讀者??分析。10.16輸??個字符串,內有數字和?數字字符,如:a123x456ㄩ17960?302tab5876將其中連續(xù)的數字作為?個整數,依次存放到?數組a中。例如:123放在a[0]中,456放在a[1]中……統(tǒng)計共有多少個整數,并輸出這些數。解:程序如下:(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置于數組str?地址*/pa=&a[0];/*指針pa置于數組a?地址*/ndigit=0;/*ndigit代表有多少個整數*/i=0;/*代表字符串中字符的位置*/j=0;/*代表連續(xù)數字的位數*/while(*(pstr+i)!='\0'){if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))j++;else{if(j>0){digit=*(pstr+i-1)-48;/*將個數位賦予digit*/k=1;while(k/*將含有兩位以上數的其他位的數值累計于digit*/{e10=1;for(m=1;m<=k;m++)e10=e10*10;/*e10代表該位數所應乘的因?*/digit=digit+(*(pstr+i-1-k)-48)*e10;/*將該位數的數值累加于digit*/k++;/*位數k?增*/}*pa=digit;/*將數值賦予數組a*/ndigit++;pa++;/*指針pa指向a數組下?元素*/j=0;}}i++;}if(j>0)/*以數字結尾字符串的最后?個數據*/{digit=*(pstr+i-1)-48;/*將個數位賦予digit*/k=1;while(k/*將含有兩位以上數的其他位的數值累計于digit*/{e10=1;for(m=1;m<=k;m++)e10=e10*10;/*e10代表該位數所應乘的因?*/digit=digit+(*(pstr+i-1-k)-48)*e10;/*將該位數的數值累加于digit*/k++;/*位數k?增*/}*pa=digit;/*將數值賦予數組a*/ndigit++;j=0;}printf("Thereare%dnumbersinthisline.Theyare:\n",ndigit);j=0;pa=&a[0];for(j=0;j/*打印數據*/printf("%d",*(pa+j));printf("\n");}運?情況如下:Inputastring:a123x45617960?302tab5876↙Thereare6numbersinthisline.Theyare:12345617903025810.17寫?函數,實現兩個字符串的?較。即??寫?個strcmp函數,函數原型為:intstremp(char*p1,char*p2)設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)/*兩個字符串?較的函數*/{inti;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)=='\0')return(0);/*相等時返回結果0*/return(*(p1+i)-*(p2+i));/*不等時返回結果為第?個不等字符ASCII碼的差值*/}運?情況如下:①Inputtwostrings:CHINA↙Chen↙Result:-32②Inputtwostrings:hello!↙Hello!↙Result:0③Inputtwostings:dog↙cat↙result:110.18編?個程序,打??份號,輸出該?的英??名。例如,輸?“3”,則輸出“March”,要求?指針數組處理。解:程序如下:(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");}運?結果:①Inputmonth:2↙ItisFebruary.②Inputmonth:8↙ItisAugust.③Inputmonth:13↙Itiswrong.10.19編寫?個函數alloc(n),?來在內存區(qū)新開辟?個連續(xù)的空間(n個字節(jié))。此函數的返回值是?個指針,指向新開辟的連續(xù)的空間的起始地址。再寫?個函數free(p),將地址p開始的各單元釋放(不能再被程序使?,除?再度開辟)。提?,先在內存規(guī)定出??相當?的連續(xù)空間(例如1000個字節(jié))。然后開辟與釋放都在此空間內進?。假設指針變量p原已指向未?空間的開頭,調?alloc(n)后,開辟了n個字節(jié)可供程序使?(例如,可以賦值到這些單元中)?,F在需要使p的值變成p+n,表?空?未?區(qū)從p+n地址開始,同時要將新開辟區(qū)的起始位置(p)作為函數值返回,以表?可以利?從此點開始的單元。如果更新開辟的區(qū)太?(n?),超過了預設的空間(1000字符),則alloc(n)函數返回指針NULL,表?開辟失敗。alloc(n)應返回?個指向字符數據的指針(因為開辟的區(qū)間是以字節(jié)為單位被利?的)。解:程序如下:(xt10-19.c)#defineNULL0/*當開辟失敗時返回標志*/#defineALLOCSIZE1000/*可以開辟的最?的空間*/charallocbuf[ALLOCSIZE];/*開辟?個字符數組,作為存儲區(qū)*/char*allocp=allobuf;/*指針指向存儲區(qū)的起端*/char*alloc(intn)/*開辟存儲區(qū)函數,開辟存儲區(qū)后返回指針*/{if(allocp+n<=allocbuf+ALLOCSIZE){sallocp+=n;return(allocp-n);/*返回?個指針,它指向存區(qū)的開始位置*/}elsereturn(NULL);/*當存區(qū)不夠分配時,返回?個空指針*/}voidfree(char*p)/*釋放存儲區(qū)函數*/{if(p>=allocbuf&&p>alloebuf+ALLOCSIZE)allocp=p;}說明:定義?個全局指針變量a11ocp,它指向指定的存儲區(qū)中下?個可?的元素。開始時,allocp指向此存儲區(qū)allocbuf的開頭,當調?alloc(n)函數后,allocp指向a11ocbuf中的第n個元素如果調?時?以下語句:pt=alloc(n);則pt的值為剛才所開辟的空間的?地址(allocp'-n)。在調?free函數時,如果寫出以下調?語句: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個字符串的?地址賦予指針數組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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高科技企業(yè)擔保合同印花稅減免政策
- 2025年度高速公路服務區(qū)車位租賃及管理協(xié)議
- 2025年汽車自動采樣設備項目合作計劃書
- 2025年食品、飲料及煙草批發(fā)服務項目合作計劃書
- 開展年度企業(yè)經驗分享計劃
- 培養(yǎng)創(chuàng)新思維的個人計劃
- 引導公眾節(jié)水的宣傳活動設計計劃
- 倉庫管理軟件的選擇與應用計劃
- 實施自動化提高生產效率計劃
- 班級團體比賽的籌備與舉辦計劃
- 預應力工程施工質量驗收標準
- 旅游資源規(guī)劃與開發(fā)實訓指導書
- 固定資產投資統(tǒng)計培訓PPT課件
- 立體幾何專題:距離和角
- DBJ-T01-43-2003_(北京)通用家庭居室裝飾工程質量驗收標準
- 一年級上冊必背古詩
- 平頂山第四屆名師名班主任名校長培養(yǎng)方案
- 2.通信光纜線路(管道)工程施工及驗收技術規(guī)程要點
- 蒸壓加氣混凝土砌塊作業(yè)指導書(共14頁)
- 道路運輸危險貨物安全卡(LNG液化天然氣)
- 地質勘查鉆探作業(yè)安全風險分布圖及分級管控“三清單”
評論
0/150
提交評論