您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > c语言第十一十二十三章课后题答案
11-1、(*p)++表示:先取地址中的内容,将内容表示的数字进行自增运算。*p++表示:先对p的地址自增运算,再取其中的内容。结果:每一句printf语句分析说明:printf(%d,,*(++p));--------p自增取下一个地址,去除其中的内容为2printf(%d,,*(p)++);--------引用p现在地址中的内容为2,在进行地址的自增运算printf(%d,,*p);-------------引用地址的内容为3printf(%d,,*p);------------应用现在的地址中的内容为3printf(%d,,*p--);----------先引用p中的内容为3,再进行自减运算printf(%d,,--(*p));--------先自减运算,再取内容为1printf(%d\n,*p);-----------取p现在的地址中的内容为111-2(1)#includestdio.hvoidPrint(char*arr[],intlen);intmain(){char*pArray[]={How,are,you};intnum=sizeof(pArray)/sizeof(int);printf(Totalstringnumbers=%d\n,num);Print(pArray,num);return0;}voidPrint(int*arr[],intlen){inti;for(i=0;ilen;i++){printf(%s,arr[i]);}printf(\n);}错误分析:指针数组中的元素为地址,是一个整型,所以应为num=sizeof(pArray)/sizeof(int);而不是除以sizeof(char)结果:(2)#includestdio.hvoidOutputArray(int*pa,intn);voidInputArray(int*pa,intn);voidmain(){inta[5];printf(Inputfivenumbers:);InputArray(a,5);OutputArray(a,5);return0;}voidInputArray(int*pa,intn){int*a=pa;for(;paa+n;pa++){scanf(%d,pa);}}voidOutputArray(int*pa,intn){int*a=pa;for(;paa+n;pa++){printf(%4d,*pa);}printf(\n);}结果:错误分析:For(;papa+n;pa++)的语句中将指针循环变量更改了,破坏了循环结构,所以在写循环时为了防止指针循环变量被修改,应重新定义一个变量来标记传入的指针值。(3)、#includestdio.h#defineSTUD30#defineCOURSE5voidPrint(int*pScore,intsum[],floataver[],intm,intn);voidTotal(int*pScore,intsum[],floataver[],intm,intn);intmain(){inti,j,m,n,score[STUD][COURSE],sum[STUD];floataver[STUD];printf(Howmanystudent?);scanf(%d,&m);printf(Howmanycourse?);scanf(%d,&n);printf(Inputscore:\n);for(i=0;im;i++){for(j=0;jn;j++){scanf(%d,&score[i][j]);}}Total(*score,sum,aver,m,n);Print(*score,sum,aver,m,n);return0;}voidTotal(int*pScore,intsum[],floataver[],intm,intn){inti,j;for(i=0;im;i++){sum[i]=0;for(j=0;jn;j++){sum[i]=sum[i]+pScore[i*n+j];}aver[i]=(float)sum[i]/n;}}voidPrint(int*pScore,intsum[],floataver[],intm,intn){inti,j;printf(Result:\n);for(i=0;im;i++){for(j=0;jn;j++){printf(%4d\t,pScore[i*n+j]);}printf(%5d\t%6.1f\n,sum[i],aver[i]);}}分析:在创建二维数组时,就分配好空间行30列5,当进行列指针操作时,实际输入的人数会小于5,但偏移量仍然是I*COURSE+j,而不是i*n+j。改后的结果:11-3#includestdio.hvoidmain(){int*p[12]={January,february,March,April,May,June,July,August,September,October,November,December};intm;do{printf(请输入月份值:);scanf(%d,&m);if(m1||m12)printf(Illegelmonth!);}while(m1||m12);printf(%d月---%s\n,m,p[m-1]);}结果:11-4#includestdio.h#defineN10voidSwap(int*p1,int*p2);voidTranspose2(int*a,intn);voidTranspose(inta[][N],intn);voidTranspose1(int(*a)[N],intn);voidmain(){intn;inti;intj;inta[N][N];intm;do{printf(输入阶数:);scanf(%d,&n);}while(n10);for(i=0;in;i++){printf(请输入第%d行:\n,i+1);for(j=0;jn;j++){printf(输入第%d行第%d列:,(i+1),(j+1));scanf(%d,&a[i][j]);}}printf(原矩阵是:\n);for(i=0;in;i++){printf(\n);for(j=0;jn;j++){printf(%d\t,a[i][j]);}}printf(\n1.引用数组下表法\n2.行指针法\n3.列指针法\n);printf(请选择:);scanf(%d,&m);switch(m){case1:Transpose(a,n);break;case2:Transpose1(a,n);break;case3:Transpose2(*a,n);break;}printf(转置矩阵是:\n);for(i=0;in;i++){printf(\n);for(j=0;jn;j++){printf(%d\t,a[i][j]);}}printf(\n);}voidSwap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidTranspose(inta[][N],intn){inti,j;for(i=0;in;i++){for(j=i;jn;j++){Swap(&a[i][j],&a[j][i]);}}}voidTranspose1(int(*a)[N],intn){inti,j;for(i=0;in;i++){for(j=i;jn;j++){Swap(*(a+i)+j,*(a+j)+i);}}}voidTranspose2(int*a,intn){inti,j;for(i=0;in;i++){for(j=i;jn;j++){Swap(a+i*n+j,a+j*n+i);}}}结果:11-5#includestdio.h#defineN10#defineM10voidSwap(int*p1,int*p2);voidTranspose2(int*a,int*at,intm,intn);voidTranspose(inta[][N],intat[][M],intm,intn);voidTranspose1(int(*a)[N],intm,intn);voidmain(){intn;inti;intj;inta[M][N];intm;intat[N][M];intp;do{printf(输入行数:);scanf(%d,&m);printf(输入列数:);scanf(%d,&n);}while(n10||m10);for(i=0;im;i++){printf(请输入第%d行:\n,i+1);for(j=0;jn;j++){printf(输入第%d行第%d列:,(i+1),(j+1));scanf(%d,&a[i][j]);}}printf(原矩阵是:\n);for(i=0;im;i++){printf(\n);for(j=0;jn;j++){printf(%d\t,a[i][j]);}}printf(\n1.引用数组下表法\n2.行指针法\n3.列指针法\n);printf(请选择:);scanf(%d,&p);switch(p){case1:Transpose(a,at,m,n);break;case2:Transpose1(a,at,m,n);break;case3:Transpose2(*a,*at,m,n);break;}printf(转置矩阵是:\n);for(i=0;in;i++){printf(\n);for(j=0;jm;j++){printf(%d\t,at[i][j]);}}printf(\n);}voidSwap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidTranspose(inta[][N],intat[][M],intm,intn){inti,j;for(i=0;im;i++){for(j=0;jn;j++){Swap(&a[i][j],&at[j][i]);}}}voidTranspose1(int(*a)[N],int(*at)[N],intm,intn){inti,j;for(i=0;im;i++){for(j=0;jn;j++){Swap(*(a+i)+j,*(at+j)+i);}}}voidTranspose2(int*a,int*at,intm,intn){inti,j;for(i=0;im;i++){for(j=0;jn;j++){Swap(a+i*N+j,at+j*M+i);}}}结果:11-6#includestdio.h#includestdlib.h#defineN10#defineM10voidInputArray(int*p,intm,intn);intFindMax(int*p,intm,intn,int*pRow,int*pCol);voidmain(){intm;intn;intRow;intCol;inta;int*p=NULL;printf(请输入行数:);scanf(%d,&m);printf(请输入列数:);scanf(%d,&n);p=(int*)calloc(m*n,sizeof(int));if(p==NULL){printf(没有足够的空间\n);exit(1);}InputArray(p,m,n);a=FindMax(p,m,n,&Row,&Col);printf(最大值为:%d,下标:%d行%d列\n,a,(Row+1),(Col+1));free(p);}voidInputArray(int*p,intm,intn){inti;intj;for(i=0;im;i++){for(j=0;jn;j++){printf(请输入第%d行第%d列:,(i+1),(j+1));scanf(%d,p
本文标题:c语言第十一十二十三章课后题答案
链接地址:https://www.777doc.com/doc-4502142 .html