c语言C程序设计第四版谭浩强课后习题答案第8章.docx
- 文档编号:5582689
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:32
- 大小:20.90KB
c语言C程序设计第四版谭浩强课后习题答案第8章.docx
《c语言C程序设计第四版谭浩强课后习题答案第8章.docx》由会员分享,可在线阅读,更多相关《c语言C程序设计第四版谭浩强课后习题答案第8章.docx(32页珍藏版)》请在冰点文库上搜索。
c语言C程序设计第四版谭浩强课后习题答案第8章
C程序设计(第四版)谭浩强_课后习题答案第8章
第8章善于利用指针220
8.1指针是什么220
8.2指针变量222
8.2.1使用指针变量的例子222
8.2.2怎样定义指针变量223
8.2.3怎样引用指针变量224
8.2.4指针变量作为函数参数226
8.3通过指针引用数组230
8.3.1数组元素的指针230
8.3.2在引用数组元素时指针的运算231
8.3.3通过指针引用数组元素233
8.3.4用数组名作函数参数237
8.3.5通过指针引用多维数组245
8.4通过指针引用字符串255
8.4.1字符串的引用方式255
8.4.2字符指针作函数参数259
8.4.3使用字符指针变量和字符数组的比较263
8.5指向函数的指针266
8.5.1什么是函数指针266
8.5.2用函数指针变量调用函数266
8.5.3怎样定义和使用指向函数的指针变量268
8.5.4用指向函数的指针作函数参数270
8.6返回指针值的函数274
8.7指针数组和多重指针277
8.7.1什么是指针数组277
8.7.2指向指针数据的指针280
8.7.3指针数组作main函数的形参282
8.8动态内存分配与指向它的指针变量285
8.8.1什么是内存的动态分配285
8.8.2怎样建立内存的动态分配285
8.8.3void指针类型287
8.9有关指针的小结288
习题291
8-1
#include
intmain()
{voidswap(int*p1,int*p2);
intn1,n2,n3;
int*p1,*p2,*p3;
printf("inputthreeintegern1,n2,n3:
");
scanf("%d,%d,%d",&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n2>n3)swap(p2,p3);
printf("Now,theorderis:
%d,%d,%d\n",n1,n2,n3);
return0;
}
voidswap(int*p1,int*p2)
{intp;
p=*p1;*p1=*p2;*p2=p;
}
#include
#include
intmain()
{voidswap(char*,char*);
charstr1[20],str2[20],str3[20];
printf("inputthreeline:
\n");
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0)swap(str1,str2);
if(strcmp(str1,str3)>0)swap(str1,str3);
if(strcmp(str2,str3)>0)swap(str2,str3);
printf("Now,theorderis:
\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
return0;
}
voidswap(char*p1,char*p2)
{charp[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}
8-3
#include
intmain()
{voidinput(int*);
voidmax_min_value(int*);
voidoutput(int*);
intnumber[10];
input(number);
max_min_value(number);
output(number);
return0;
}
voidinput(int*number)
{inti;
printf("input10numbers:
");
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
voidmax_min_value(int*number)
{int*max,*min,*p,temp;
max=min=number;
for(p=number+1;p if(*p>*max)max=p; elseif(*p<*min)min=p; temp=number[0];number[0]=*min;*min=temp; if(max==number)max=min; temp=number[9];number[9]=*max;*max=temp; } voidoutput(int*number) {int*p; printf("Now,theyare: "); for(p=number;p printf("%d",*p); printf("\n"); } 8-4 #include intmain() {voidmove(int[20],int,int); intnumber[20],n,m,i; printf("howmanynumbers? "); scanf("%d",&n); printf("input%dnumbers: \n",n); for(i=0;i scanf("%d",&number[i]); printf("howmanyplaceyouwantmove? "); scanf("%d",&m); move(number,n,m); printf("Now,theyare: \n"); for(i=0;i printf("%d",number[i]); printf("\n"); return0; } voidmove(intarray[20],intn,intm) {int*p,array_end; array_end=*(array+n-1); for(p=array+n-1;p>array;p--) *p=*(p-1); *array=array_end; m--; if(m>0)move(array,n,m); } 8-5 #include intmain() {inti,k,m,n,num[50],*p; printf("\ninputnumberofperson: n="); scanf("%d",&n); p=num; for(i=0;i *(p+i)=i+1; i=0; k=0; m=0; while(m {if(*(p+i)! =0)k++; if(k==3) {*(p+i)=0; k=0; m++; } i++; if(i==n)i=0; } while(*p==0)p++; printf("ThelastoneisNO.%d\n",*p); return0; } 8-6 #include intmain() {intlength(char*p); intlen; charstr[20]; printf("inputstring: "); scanf("%s",str); len=length(str); printf("Thelengthofstringis%d.\n",len); return0; } intlength(char*p) {intn; n=0; while(*p! ='\0') {n++; p++; } return(n); } 8-7 #include #include intmain() {voidcopystr(char*,char*,int); intm; charstr1[20],str2[20]; printf("inputstring: "); gets(str1); printf("whichcharacterthatbegintocopy? "); scanf("%d",&m); if(strlen(str1) printf("inputerror! "); else {copystr(str1,str2,m); printf("result: %s\n",str2); } return0; } voidcopystr(char*p1,char*p2,intm) {intn; n=0; while(n {n++; p1++; } while(*p1! ='\0') {*p2=*p1; p1++; p2++; } *p2='\0'; } 8-8 #include intmain() {intupper=0,lower=0,digit=0,space=0,other=0,i=0; char*p,s[20]; printf("inputstring: "); while((s[i]=getchar())! ='\n')i++; p=&s[0]; while(*p! ='\n') {if(('A'<=*p)&&(*p<='Z')) ++upper; elseif(('a'<=*p)&&(*p<='z')) ++lower; elseif(*p=='') ++space; elseif((*p<='9')&&(*p>='0')) ++digit; else ++other; p++; } printf("uppercase: %dlowercase: %d",upper,lower); printf("space: %ddigit: %dother: %d\n",space,digit,other); return0; } 8-9 #include intmain() {voidmove(int*pointer); inta[3][3],*p,i; printf("inputmatrix: \n"); for(i=0;i<3;i++) scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]); p=&a[0][0]; move(p); printf("Now,matrix: \n"); for(i=0;i<3;i++) printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]); return0; } voidmove(int*pointer) {inti,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) {t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; } } 8-10-1 #include intmain() {voidchange(int*p); inta[5][5],*p,i,j; printf("inputmatrix: \n"); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); p=&a[0][0]; change(p); printf("Now,matrix: \n"); for(i=0;i<5;i++) {for(j=0;j<5;j++) printf("%d",a[i][j]); printf("\n"); } return0; } voidchange(int*p) {inti,j,temp; int*pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++) for(j=i;j<5;j++) {if(*pmax<*(p+5*i+j))pmax=p+5*i+j; if(*pmin>*(p+5*i+j))pmin=p+5*i+j; } temp=*(p+12); *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =(p+4))&&((p+5*i+j)! =p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; temp=*pmin; *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)! =p)&&((p+5*i+j)! =(p+4))&&((p+5*i+j)! =(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+24); *(p+24)=temp; } 8-10-2 #include intmain() {voidchange(int*p); inta[5][5],*p,i,j; printf("inputmatrix: \n"); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); p=&a[0][0]; change(p); printf("Now,matrix: \n"); for(i=0;i<5;i++) {for(j=0;j<5;j++) printf("%d",a[i][j]); printf("\n"); } return0; } voidchange(int*p)//交换函数 {inti,j,temp; int*pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++)//找最大值和最小值的地址,并赋给pmax,pmin for(j=i;j<5;j++) {if(*pmax<*(p+5*i+j))pmax=p+5*i+j; if(*pmin>*(p+5*i+j))pmin=p+5*i+j; } temp=*(p+12);//将最大值与中心元素互换 *(p+12)=*pmax; *pmax=temp; temp=*p;//将最小值与左上角元素互换 *p=*pmin; *pmin=temp; pmin=p+1; //将a[0][1]的地址赋给pmin,从该位置开始找最小的元素 for(i=0;i<5;i++)//找第二最小值的地址赋给pmin for(j=0;j<5;j++) {if(i==0&&j==0)continue; if(*pmin>*(p+5*i+j))pmin=p+5*i+j; } temp=*pmin;//将第二最小值与右上角元素互换 *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++)//找第三最小值的地址赋给pmin for(j=0;j<5;j++) {if((i==0&&j==0)||(i==0&&j==4))continue; if(*pmin>*(p+5*i+j))pmin=p+5*i+j; } temp=*pmin;//将第三最小值与左下角元素互换 *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++)//找第四最小值的地址赋给pmin for(j=0;j<5;j++) {if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0))continue; if(*pmin>*(p+5*i+j))pmin=p+5*i+j; } temp=*pmin;//将第四最小值与右下角元素互换 *pmin=*(p+24); *(p+24)=temp; } 8-11-1 #include #include intmain() {voidsort(chars[][6]); inti; charstr[10][6]; printf("input10strings: \n"); for(i=0;i<10;i++) scanf("%s",str[i]); sort(str); printf("Now,thesequenceis: \n"); for(i=0;i<10;i++) printf("%s\n",str[i]); return0; } voidsort(chars[10][6]) {inti,j; char*p,temp[10]; p=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) {strcpy(p,s[j]); strcpy(s[j],s[+j+1]); strcpy(s[j+1],p); } } 8-11-2 #include #include intmain() {voidsort(char(*p)[6]); inti; charstr[10][6]; char(*p)[6]; printf("input10strings: \n"); for(i=0;i<10;i++) scanf("%s",str[i]); p=str; sort(p); printf("Now,thesequenceis: \n"); for(i=0;i<10;i++) printf("%s\n",str[i]); return0; } voidsort(char(*s)[6]) {inti,j; chartemp[6],*t=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) {strcpy(t,s[j]); strcpy(s[j],s[+j+1]); strcpy(s[j+1],t); } } 8-12 #include #include intmain() {voidsort(char*[]); inti; char*p[10],str[10][20]; for(i=0;i<10;i++) p[i]=str[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]); return0; } voidsort(char*s[]) {inti,j; char*temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(*(s+j),*(s+j+1))>0) {temp=*(s+j); *(s+j)=*(s+j+1); *(s+j+1)=temp; } } 8-13 #include #include intmain() {floatintegral(float(*)(float),float,float,int);//对integarl函数的声明 floatfsin(float);//对fsin函数的声明 floatfcos(float);//对fcos函数的声明 floatfexp(float);//对fexp函数的声明 floata1,b1,a2,b2,a3,b3,c,(*p)(float); intn=20; printf("inputa1,b1: "); scanf("%f,%f",&a1,&b1); printf("inputa2,b2: "); scanf("%f,%f",&a2,&b2); printf("inputa3,b3: "); scanf("%f,%f",&a3,&b3); p=fsin; c=integral(p,a1,b1,n); printf("Theintegralofsin(x)is: %f\n",c); p=fcos; c=integral(p,a2,b2,n); printf("Theintegralofcos(x)is: %f\n",c); p=fexp; c=integral(p,a3,b3,n); printf("Theintegralofexp(x)is: %f\n",c); return0; } floatintegral(float(*p)(float),floata,floatb,intn) {inti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序设计 第四 版谭浩强 课后 习题 答案