{int i,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; } }
10.10 方法一: #include
{void change(int *p); int a[5][5],*p,i,j;
printf(\ for (i=0;i<5;i++) for (j=0;j<5;j++)
scanf(\ p=&a[0][0]; change(p);
printf(\ for (i=0;i<5;i++) {for (j=0;j<5;j++)
printf(\ printf(\ }
}
void change(int *p) {int i,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;
46
*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; }
方法二: #include
{void change(int *); int a[5][5],*p,i,j;
printf(\
for (i=0;i<5;i++) //输入矩阵
for (j=0;j<5;j++)
scanf(\
p=&a[0][0]; //使p指向0行0列元素 change(p); //调用函数,实现交换 printf(\
for (i=0;i<5;i++) //输出已交换的矩阵 {for (j=0;j<5;j++) printf(\ printf(\ } }
47
&&
void change(int *p) //交换函数
{int i,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;
48
}
temp=*pmin; //将第四最小值与右下角元素互换 *pmin=*(p+24); *(p+24)=temp; }
10.11 方法一:
#include
{void sort(char (*p)[6]); int i;
char str[10][6];
char (*p)[6];
printf(\ for (i=0;i<10;i++) scanf(\ p=str; sort(p);
printf(\ for (i=0;i<10;i++)
printf(\ }
void sort(char (*s)[6]) {int i,j;
char temp[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); } }
方法二: #include
{void sort(char s[][6]); int i;
char str[10][6];
printf(\
49
for (i=0;i<10;i++)
scanf(\ sort(str);
printf(\ for (i=0;i<10;i++) printf(\}
void sort(char s[10][6]) {int i,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); } }
方法三:
#include
{void sort(char (*p)[6]); int i;
char str[10][6];
char (*p)[6];
printf(\ for (i=0;i<10;i++) scanf(\ p=str;
sort(p);
printf(\ for (i=0;i<10;i++)
printf(\ }
void sort(char (*s)[6]) {int i,j;
char temp[6],*t=temp; for (i=0;i<9;i++) for (j=0;j<9-i;j++)
if (strcmp(s[j],s[j+1])>0)
50