习题 8.10 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。

C程序设计(第四版) 谭浩强 习题8.10 个人设计

习题 8.10 将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。

代码块:

方法1:

#include 
void sort(int (*s)[5], int x, int y);       //定义排序函数
int main()
{
    int n[5][5], *p, i, j;
    for (p=*n, printf("Please enter array: "); p<*n+25; scanf("%d", p++));        //输入5*5矩阵
    sort(n, 5, 5);                                                                //调用排序函数
    for (i=0, printf("Array:\n"); i<5; printf("\n"), i++)                         //输出变更后的矩阵
        for (j=0; j<5; printf("%3d", n[i][j++]));
    return 0;
}
//排序函数,函数思路是:通过每轮循环找出最小的元素,然后记录该元素的行列号,循环完毕,把该元素与放置位置元素进行互换。
void sort(int (*s)[5], int x, int y)
{
    int i, j, t, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, min, max;
    for (i=0, min=**s; ifor (j=0; j*(*(s+i)+j)<min ? min=*(*(s+i)+j), m0=i, m1=j, j++ : j++);
    t=**s, **s=*(*(s+m0)+m1), *(*(s+m0)+m1)=t;
    for (i=0, min=*(*s+1); ifor (j=0; jif (!i&&!j) continue;
            else if (*(*(s+i)+j)<min) min=*(*(s+i)+j), m2=i, m3=j;
    t=*(*s+4), *(*s+4)=*(*(s+m2)+m3), *(*(s+m2)+m3)=t;
    for (i=0, min=*(*s+1); ifor (j=0; jif ((!i&&!j)||(!i&&j==4)) continue;
            else if (*(*(s+i)+j)<min) min=*(*(s+i)+j), m4=i, m5=j;
    t=*(*(s+4)), *(*(s+4))=*(*(s+m4)+m5), *(*(s+m4)+m5)=t;
    for (i=0, min=*(*s+1); ifor (j=0; jif ((!i&&!j)||(!i&&j==4)||(i==4&&!j)) continue;
            else if (*(*(s+i)+j)<min) min=*(*(s+i)+j), m6=i, m7=j;
    t=*(*(s+4)+4), *(*(s+4)+4)=*(*(s+m6)+m7), *(*(s+m6)+m7)=t;
    for (i=0, max=**s; ifor (j=0; j*(*(s+i)+j)>max ? max=*(*(s+i)+j), m8=i, m9=j, j++ : j++);
    t=*(*(s+2)+2), *(*(s+2)+2)=*(*(s+m8)+m9), *(*(s+m8)+m9)=t;
}

方法2:

#include 
#include 
void input(int *a);
void print(int *a);
void sort(int *a);
int main()
{
    int *arr;
    arr=(int *)calloc(5, 5*sizeof(int));
    input(arr);
    sort(arr);
    print(arr);
    system("pause");
    return 0;
}
void input(int *a)
{
    int *p;
    for (p=a, printf("Please enter array: "); p25; scanf("%d", p++));
}
void print(int *a)
{
    int *p, i;
    for (p=a, i=0, printf("New array:\n"); p25; printf("%5d ", *p++), i++)
        if (i&&i%5==0) printf("\n");
    printf("\n");
}
void sort(int *a)
{
    int i, j, m1, m2, m3, m4, m5, temp;
    for (i=0, j=0, m1=*(a+12); i<25; i++)
        if (*(a+i)>m1){
            m1=*(a+i);
            j=i;
        }
    temp=*(a+12), *(a+12)=*(a+j), *(a+j)=temp;
    for (i=0, j=0, m2=*a; i<25; i++)
        if (*(a+i)*(a+i);
            j=i;
        }
    temp=*a, *a=*(a+j), *(a+j)=temp;
    for (i=0, j=0, m3=*(a+4); i<25; i++){
        if (i==0) continue;
        else if(*(a+i)*(a+i);
            j=i;
        }
    }
    temp=*(a+4), *(a+4)=*(a+j), *(a+j)=temp;
    for (i=0, j=0, m4=*(a+20); i<25; i++){
        if (i==0||i==4) continue;
        else if (*(a+i)*(a+i);
            j=i;
        }
    }
    temp=*(a+20), *(a+20)=*(a+j), *(a+j)=temp;
    for (i=0, j=0, m5=*(a+24); i<25; i++){
        if (i==0||i==4||i==20) continue;
        else if (*(a+i)*(a+i);
            j=i;
        }
    }
    temp=*(a+24), *(a+24)=*(a+j), *(a+j)=temp;
}

你可能感兴趣的:(C程序设计,(第四版),谭浩强,课后答案)