求教一个C语言程序的问题

2024-12-15 11:23:52
推荐回答(1个)
回答1:

我这写的就是一般冒泡排序,做参照吧。

#include 
#include 
int **creatList(int m,int n);//创建矩阵
void px(int **list,int m,int n);//按照每行从小到大,各行和从小到大排序
void printfList(int **list,int m,int n);//打印矩阵
int main()
{
    int ** list=NULL,m,n;
    while(1)
    {
        printf("输入m,n的值:(1≤m, n≤20)");
        scanf("%d%d",&m,&n);
        if(m<1 || n>20)
            printf("error!\n请重新");
        else
            break;
    }

    list=creatList(m,n);
    printf("输入的矩阵为:\n");
    printfList(list,m,n);
    px(list,m,n);
    printf("排序后的矩阵为:\n");
    printfList(list,m,n);
    return 0;
}
void printfList(int **list,int m,int n)
{
    int i,j;
    for(i=0;i    {
        for(j=0;j            printf("%d ",list[i][j]);
        printf("\n");
    }
}
void px(int **list,int m,int n)
{
    int i,j,k,*rowSave=NULL;
    for(i=0;i        for(j=0;j        {
            for(k=j+1;k                if(list[i][j]>list[i][k])
                {
                    list[i][j]^=list[i][k];
                    list[i][k]^=list[i][j];
                    list[i][j]^=list[i][k];
                }
        }
    for(i=0;i        for(j=i+1;j            if(list[i][n]>list[j][n])
            {
                rowSave=list[i];
                list[i]=list[j];
                list[j]=rowSave;
            }
    printf("矩阵已重新排序!\n");
}
int **creatList(int m,int n)//创建矩阵
{
    int **list=NULL,*rowNew=NULL;
    int i,j;
    list=(int **)malloc(sizeof(int *)*m);
    printf("输入%d行%d列的矩阵数值:\n",m,n);
    for(i=0;i    {
        rowNew=(int *)malloc(sizeof(int)*n+1);//最后一列保存一行的和
        rowNew[n]=0;
        for(j=0;j        {
            scanf("%d",&rowNew[j]);
            rowNew[n]+=rowNew[j];
        }
        list[i]=rowNew;
    }
    return list;
}