*p2){t=p1;p1=p2;p2=t;}if(*p1>*p3){t=p1;p1=p3;p3=t;}if(*p2>*p3){t=p2;p2" />

C语言程序设计第四版第八章答案

  • 格式:docx
  • 大小:15.65 KB
  • 文档页数:3

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第八章指针

8.1输入三个整数,按由小到大的顺序输出。main()

{ int a,b,c,*p1,*p2,*p3,t;

scanf("%d,%d,%d",&a,&b,&c);

p1=&a;p2=&b;p3=&c;

if(*p1>*p2)

{t=p1;p1=p2;p2=t;}

if(*p1>*p3)

{t=p1;p1=p3;p3=t;}

if(*p2>*p3)

{t=p2;p2=p3;p3=t;}

printf("%d,%d,%d\n",*p1,*p2,*p3);

}

main()

{int a,b,c,*p1,*p2,*p3,t;

scanf("%d,%d,%d",&a,&b,&c);

p1=&a;p2=&b;p3=&c;

if(a>b)

{t=*p1;*p1=*p2;*p2=t;}

if(a>c)

{t=*p1;*p1=*p3;*p3=t;}

if(b>c)

{t=*p2;*p2=*p3;*p3=t;}

printf("%d,%d,%d\n",a,b,c);

}

8.2输入三个字符串,按由小到大的顺序输出#define N 3

#define M 20

main()

{char str0[N][M],str1[M],*p,*q;

int i,l,m,n;

q=str0;

for(;p

gets(p);

l=strcmp(q,q+1);

if(l>0)

{strcpy(str1,q);strcpy(q,q+1);strcpy(q+1,str1);} m=strcmp(q,q+2);

if(m>0)

{strcpy(str1,q);strcpy(q,q+2);strcpy(q+2,str1);} n=strcmp(q+1,q+2);

if(n>0)

{strcpy(str1,q);strcpy(q+1,q+2);strcpy(q+2,q+1);}

for(p=q;p

puts(p);

}

8.3输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。

f(x,n)

int x[],n;

{int *p0,*p1,i,j,t,y;

i=j=x[0];p0=p1=x;

for(y=0;y

{if(x[y]>i)

{i=x[y];p0=&x[y];}

else if(x[y]

{j=x[y];p1=&x[y];}}

t=*p0;*p0=x[n-1];x[n-1]=t;

t=*p1;*p1=x[0];x[0]=t;

return;

}

main()

{int a[10],u,*r;

for(u=0;u<10;u++)

scanf("%d",&a[u]);

f(a,10);

for(u=0,r=a;u<10;u++,r++)

printf(" %d",a[u]);

printf("\n");

}

8.4有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。

#define N 10

void shift(p,x)

float *p;int x;

{float a[N],*q,*o;int i;

o=a;q=p;

for(i=0;i

*(o+i)=*(q+N-x+i);

for(p=p+N-1;p>=q;p--)

*p=*(p-x);

for(i=0;i

*(q+i)=*(o+i);

return;}

main()

{float shuzhu[N],*u,*v;

int h,i;u=v=shuzhu;

scanf("%f",&h);

for(;u

scanf("%f",u);

shift(v,h);

for(u=v;u

printf("%.2f ",*u);

printf("\n");

}

8.5有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

#define N 5

main()

{int i,j,k,a[N+1],*p;

for(i=0,p=a;p<=a+N;i++,p++)

*p=i;

p=a+1;k=N;

for(i=0,j=1;k!=1;j++)

{if(p>(a+N))

p=a+1;

if(*p!=0)

i++;

if((i-3)==0)

{*p=0;i=0;k--;}

p++;

}

for(i=1;i<=N;i++)

if(a[i]!=0)

printf("The last number is %d\n",a[i]);}

8.7有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

#include"stdio.h"

#define N 10

main()

{char a[N+1],b[N+1],*p,*q;

int m;

gets(a);

scanf("%d",&m);

p=a+m;q=b;

strcpy(q,p);

puts(q);

}

8.6写一函数,求一个字符串的长度。在主函数种输入字符串,并输出其长度。