《C程序设计(第三版)》习题(编程题)解答(10)

2020-02-21 15:47

{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 main()

{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 main()

{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 #include void main()

{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 #include void main()

{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 #include void main()

{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


《C程序设计(第三版)》习题(编程题)解答(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于进一步加强建筑工地职工夜校管理的通知

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: