Loading...
  所在位置:论坛首页 -> 计算机科学与技术 -> 程序设计 -> c语言习题答案(第9章,新版第10章)(潭浩强,清华出版社)
回复

c语言习题答案(第9章,新版第10章)(潭浩强,清华出版社)

作者:pp 时间:2007-12-15 14:58:43 收藏 编辑

第九章  指针
9.1
main()
{int n1,n2,n3;
 int *p1,*p2,*p3;
 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("%d,%d,%d\n",n1,n2,n3);
}
swap(p1,p2)
int *p1,*p2;
{int p;
 p=*p1;*p1=*p2;*p2=p;
}

9.2
main()
{char *str1[20],*str2[20],*str3[20];
 char swap();
 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);
}
char swap(p1,p2)
char *p1,*p2;
{char *p[20];
 strcpy(p,p1);
 strcpy(p1,p2);
 strcpy(p2,p);
}

9.3
main()
{int number[10];
 input(number);
 max_min_value(number);
 output(number);
 }
input(number)
int number[10];
{int i;
 for(i=0;i<10;i++)
   scanf("%d",&number[i]);
}
max_min_value(number)
int number[10];
{int *max,*min;
 int *p,*end;
 end=number+10;
 max=min=number;
 for(p=number+1;p<end;p++)
   if(*p>*max)max=p;
   else if(*p<*min)min=p;
 *p=number[0];
 number[0]=*min;
 *min=*p;
 *p=number[9];
 number[9]=*max;
 *max=*p;
 return;
}
output(number)
int number[10];
{int *p;
 for(p=number;p<number+9;p++)
   printf("%d,",*p);
 printf("%d\n",*p);
}

9.4
main()
{int number[20],n,m,i;
 scanf("%d",&n);
 scanf("%d",&m);
 for(i=0;i<n:i++)
   scanf("%d",&number[i]);
 move(number,n,m);
 for(i=0;i<n;i++)
   printf("%8d",number[i]);
}
move(array,n,m)
int array[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);
}

9.5
#define nmax 50
main()
{int i,k,m,n,num[nmax],*p;
 scanf("%d",&n);
 p=num;
 for(i=0;i<n;i++)
   *(p+i)=i+1;
 i=k=m=0;
 while(m<n-1)
   {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);
}

9.6
main()
{int len;
 char *str[20];
 scanf("%s",str);
 len=length(str);
 printf("\nlen=%d\n",len);
}
length(p)
char *p;
{int n=0;
 while(*p!='\0')
   {n++;p++;}
 return(n);
}

9.7
main()
{int m;
 char *str1[20],*str2[20];
 scanf("%s",str1);
 scanf("%d",&m);
 if(strlen(str1)<m)
   printf("error");
 else
   {copystr(str1,str2,m);
    printf("%s",str2);
   }
}
copystr(p1,p2,m)
char *p1,*p2;
int m;
{int n=0;
 while(n<m-1)
   {n++;p1++;}
 while(*p1!='\0')
   {*p2=*p1;
    p1++;
    p2++;
   }
 *p2='\0';
}

9.8
#include"stdio.h"
main()
{int cle=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;
    else if(*p>='A'&&*p<='Z')
      ++cle;
    else if(*p==' ')
      ++wsp;
    else if(*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);
}

9.9
main()
{int a[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;
{int i,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;
   }
}

9.10
main()
{int a[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;
{int i,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;
}

9.11
main()
{int i;
 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;
{int i,j;
 char s[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);
         }
       }
    }
}

9.12
#define MAX 20
main()
{int i;
 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];
{int i,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;
          }
       }
    }
}
高级回复

操作选项: 评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
  首页
Copyright 2006-2012 HistoryCreator.com Powered By: BBSGood 5
吉ICP备06005902号