C程序设计第三版习题答案10章 谭浩强著.docx
《C程序设计第三版习题答案10章 谭浩强著.docx》由会员分享,可在线阅读,更多相关《C程序设计第三版习题答案10章 谭浩强著.docx(20页珍藏版)》请在冰豆网上搜索。
C程序设计第三版习题答案10章谭浩强著
C程序设计(第三版)习题答案(10章)谭浩强著
第十章指针
10.1
intswap(int*p1,int*p2)
{intp;
p=*p1;*p1=*p2;*p2=p;
}
voidmain()
{
intn1,n2,n3;
int*q1,*q2,*q3;
scanf("%d%d%d",&n1,&n2,&n3);
q1=&n1;q2=&n2;q3=&n3;
if(n1>n2)swap(q1,q2);
if(n1>n3)swap(q1,q3);
if(n2>n3)swap(q2,q3);
printf("%d%d%d\n",n1,n2,n3);
}
10.2
main()
{char*str1[20],*str2[20],*str3[20];
charswap();
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",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("%s\n%s\n%s\n",str1,str2,str3);
}
charswap(p1,p2)
char*p1,*p2;
{char*p[20];
strcpy(p,p1);
strcpy(p1,p2);
strcpy(p2,p);
}
10.3
main()
{intnumber[10];
input(number);
max_min_value(number);
output(number);
}
input(number)
intnumber[10];
{inti;
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
max_min_value(number)
intnumber[10];
{int*max,*min;
int*p,*end;
end=number+10;
max=min=number;
for(p=number+1;pif(*p>*max)max=p;
elseif(*p<*min)min=p;
*p=number[0];
number[0]=*min;
*min=*p;
*p=number[9];
number[9]=*max;
*max=*p;
return;
}
output(number)
intnumber[10];
{int*p;
for(p=number;pprintf("%d,",*p);
printf("%d\n",*p);
}
10.4
main()
{intnumber[20],n,m,i;
scanf("%d",&n);
scanf("%d",&m);
for(i=0;ii++)
scanf("%d",&number[i]);
move(number,n,m);
for(i=0;iprintf("%8d",number[i]);
}
move(array,n,m)
intarray[20],n,m;
{int*p,end;
end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=end;
m--;
if(m>0)move(array,n,m);
}
10.5
#definenmax50
main()
{inti,k,m,n,num[nmax],*p;
scanf("%d",&n);
p=num;
for(i=0;i*(p+i)=i+1;
i=k=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("%d",*p);
}
10.6
main()
{intlen;
char*str[20];
scanf("%s",str);
len=length(str);
printf("\nlen=%d\n",len);
}
length(p)
char*p;
{intn=0;
while(*p!
='\0')
{n++;p++;}
return(n);
}
10.7
main()
{intm;
char*str1[20],*str2[20];
scanf("%s",str1);
scanf("%d",&m);
if(strlen(str1)printf("error");
else
{copystr(str1,str2,m);
printf("%s",str2);
}
}
copystr(p1,p2,m)
char*p1,*p2;
intm;
{intn=0;
while(n{n++;p1++;}
while(*p1!
='\0')
{*p2=*p1;
p1++;
p2++;
}
*p2='\0';
}
10.8
#include"stdio.h"
main()
{intcle=0,sle=0,di=0,wsp=0,ot=0,i;
char*p,s[20];
for(i=0;i<20;i++)s[i]=0;
i=0;
while((s[i]=getchar())!
='\n')i++;
p=s;
while(*p!
='\n')
{if(*p>='a'&&*p<='z')
++sle;
elseif(*p>='A'&&*p<='Z')
++cle;
elseif(*p=='')
++wsp;
elseif(*p>='0'&&*p<='9')
++di;
else
++ot;
p++;
}
printf("sle=%d,cle=%d,wsp=%d,di=%d,ot=%d\n",sle,cle,wsp,di,ot);
}
10.9
main()
{inta[3][3],*p,i;
for(i=0;i<3;i++)
scanf("%d,%d,%d",a[i][0],a[i][1],a[i][2]);
p=a;
move(p);
for(i=0;i<3;i++)
printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]);
}
move(pointer)
int*pointer;
{inti,j,t;
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
{t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
10.10
main()
{inta[5][5],*p,i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p=a;
change(p);
for(i=0;i<5;i++)
{printf("\n");
for(j=0;j<5;j++)
printf("%8d",a[i][j]);
}
}
change(p)
int*p;
{inti,j,change;
int*pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++)
for(j=0;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;
}
change=*(p+12);
*(p+12)=*pmax;
*pmax=change;
change=*p;
*p=*pmin;
*pmin=change;
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;
change=*(p+4);
*(p+4)=*pmin;
*pmin=change;
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;
change=*(p+20);
*(p+20)=*pmin;
*pmin=change;
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;
change=*(p+24);
*(p+24)=*pmin;
*pmin=change;
}
10.11
main()
{inti;
char*p,str[10][10];
for(i=0;i<10;i++)
scanf("%s",str[i]);
p=str;
sort(p);
for(i=0;i<10;i++)
printf("%s\n",str[i]);
}
sort(p)
char*p;
{inti,j;
chars[10],*smax,*smin;
for(i=0;i<10;i++)
{smax=p+10*i;
for(j=i+1;j<10;j++)
{smin=p+10*j;
if(strcmp(smax,smin)>0)
{strcpy(s,smin);
strcpy(smin,smax);
strcpy(smax,s);
}
}
}
}
10.12
#defineMAX20
main()
{inti;
char*pstr[10],str[10][MAX];
for(i=0;i<10;i++)
pstr[i]=str[i];
for(i=0;i<10;i++)
scanf("%s",pstr[i]);
sort(pstr);
for(i=0;i<10;i++)
printf("%s\n",pstr[i]);
}
sort(pstr)
char*pstr[10];
{inti,j;
char*p;
for(i=0;i<10;i++)
{for(j=i+1;j<10;j++)
{if(strcmp(*(pstr+i),*(pstr+j))>0)
{p=*(pstr+i);
*(pstr+i)=*(pstr+j);
*(pstr+j)=p;
}
}
}
}
10.13
#include"math.h"
main()
{intn=20;
floata,b,a1,b1,a2,b2,c,(*p)(),jiff();
scanf("%f,%f",&a,&b);
scanf("%f,%f",&a1,&b1);
scanf("%f,%f",&a2,&b2);
p=sin;
c=jiff(a,b,n,p);
printf("sin=%f\n",c);
p=cos;
c=jiff(a1,b1,n,p);
printf("cos=%f\n",c);
p=exp;
c=jiff(a2,b2,n,p);
printf("exp=%f\n",c);
}
floatjiff(a,b,n,p)
floata,b,(*p)();
intn;
{inti;
floatx,f,h,area;
h=(b-a)/n;
x=a;
area=0;
for(i=1;i<=n;i++)
{x=x+h;
area=area+(*p)(x)*h;
}
return(area);
}
10.14
main()
{inti,n,num[20];
char*p;
scanf("%d",&n);
for(i=0;iscanf("%d",&num[i]);
p=num;
sort(p,n);
for(i=0;iprintf("%8d",num[i]);
}
sort(p,m)
char*p;
intm;
{inti;
charchange,*p1,*p2;
for(i=0;i{p1=p+i;
p2=p+(m-1-i);
change=*p1;
*p1=*p2;
*p2=change;
}
}
10.15
main()
{inti,j,*pnum,num[4];
floatscore[4][5],aver[4],*psco,*pave;
charcourse[5][10],*pcou;
pcou=course[0];
for(i=0;i<5;i++)
scanf("%s",pcou+10*i);
printf("number");
for(i=0;i<5;i++)
printf(",%s",pcou+10*i);
printf("\n");
psco=score;
pnum=num;
for(i=0;i<4;i++)
{scanf("%d",pnum+i);
for(j=0;j<5;j++)
scanf(",%f",psco+5*i+j);
}
pave=aver;
printf("\n");
avsco(psco,pave);
avcour1(pcou,psco);
printf("\n");
fali2(pcou,pnum,psco,pave);
printf("\n");
good(pcou,pnum,psco,pave);
}
avsco(psco,pave)
float*psco,*pave;
{inti,j;
floatsum,average;
for(i=0;i<4;i++)
{sum=0;
for(j=0;j<5;j+)
sum+=(*(psco+5*i+j));
average=sum/5;
*(pave+i)=average;
}
}
avcour1(pcou,psco)
char*pcou;
float*psco;
{inti;
floatsum,average1;
sum=0;
for(i=0;i<4;i++)
sum+=(*(psco+5*i))
average1=sum/4;
printf("%s%5.2f\n",pcou,average1);
}
fali2(pcou,pnum,psco,pave)
char*pcou;
int*pnum;
float*psco,*pave;
{inti,j,k,label;
printf("\nnumber\n");
for(i=0;i<5;i++)
printf("%-8s",pcou+10*i);
printf("\naverage\n");
for(i=0;i<4;i++)
{label=0;
for(j=0;j<5;j++)
if(*(psco+5*i+j)<60.0)label++;
if(label>=2)
{printf("%-8d",*(pnum+i));
for(k=0;k<5;k++)
printf("%-8.2f",*(psco+5*i+k));
printf("%-8.2f",*(pave+i));
}
}
}
good(pcou,pnum,psco,pave)
char*pcou;
int*pnum;
float*psco,*pave;
{inti,j,k,label;
printf("number");
for(i=0;i<5;i++)
printf("%-8s",pcou+10*i);
printf("average");
for(i=0;i<4;i++)
{label=0;
for(j=0;j<5;j++)
if(*(psco+5*i+j)>=85.0)label++;
if((label>=5)||(*(pave+i)>=90))
{printf("%-8d",*(pnum+i));
for(k=0;k<5;k++)
printf("%-8.2f",*(psco+5*i+k));
printf("%-8.2f",*(pave+i));
}
}
}
10.16
#include"stdio.h"
main()
{charstr[50],*pstr;
inti,j,k,m,e10,digit,ndigit,a[10],*pa;
gets(str);
pstr=str;
pa=a;
ndigit=0;
i=j=0;
while(*(pstr+i)!
='\0')
{if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))
j++;
else
{if(j>0)
{digit=*(pstr+i-1)-48;
k=1;
while(k{e10=1;
for(m=1;m<=k;m++)
e10=e10*10;
digit+=(*(pstr+i-1-k)-48)*e10;
k++;
}
*pa=digit;
ndigit++;
pa++;
j=0;
}
}
i++;
}
if(j>0)
{digit=*(pstr+i-1)-48;
k=1;
while(k{e10=1;
for(m=1;m<=k;m++)
e10=e10*10;
digit+=(*(pstr+i-1-k)-48)*e10;
k++;
}
*pa=digit;
ndigit++;
j=0;
}
printf("ndigit=%d\n",ndigit);
j=0;
pa=a;
for(j=0;jprintf("%d",*(pa+j));
}
10.17
main()
{intm;
charstr1[20],str2[20],*p1,*p2;
scanf("%s",str1);
scanf("%s",str2);
p1=str1;
p2=str2;
m=strcmp(p1,p2);
printf("%d\n",m);
}
strcmp(p1,p2)
char*p1,*p2;
{inti=0;
while(*(p1+i)==*(p2+i))
if(*(p+i++)=='\0')return(0);
return(*(p1+i)-*(p2+i));
}
10.18
main()
{staticchar*mname[13]={"illeagl","January","February","March",
"April","May","June","July","August","September","October",
"November","December"};
intn;
scanf("%d",&n);
if((n>=1)&&(n<=12))
printf("%s\n",*(mname+n));
else
printf("error");
}
10.20
main()
{inti;
char**p,*pstr[5],str[5][10];
for(i=0;i<5;i++)
pstr[i]=str[i];
for(i=0;i<5;i++)
scanf("%s",pstr[i]);
p=pstr;
sort(p);
for(i=0;i<5;i++)
printf("%s\n",pstr[i]);
}
sort(p)
char**P;
{inti,j;
char*pchange;
for(i=0;i<5;i++)
{for(j=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0)
{pchange=*(p+i);
*(p+i)=*(p+j);
*(p+j)=pchange;
}
}
}
}
10.21
main()
{inti,n,digit[20],**p,*pstr[20];
scanf("%d",&n);
for(i=0;ipstr[i]=&digit[i];
for(i=0;iscanf("%d",pstr[i]);
p=pstr;
sort(p,n);
for(i=0;iprintf("%d",*pstr[i]);
}
sort(p,n)
int**p,n;
{inti,j,*pchange;
for(i=0;i{for(j=i+1;j{if(**(p+i)>**(p+j))
{pchange=*(p+i);
*(p+i)=*(p+j);
*(p+j)=pchange;
}
}
}
}