c语言给定二维整型数组先对每行从小到大排序,后对每列从小到大排序反复执行,每行不低于3列不低于4

供稿:hz-xin.com     日期:2025-01-15
大神求解,C语言,Unhandled exception

自己直接把花括号校对好就可以了

做出来了,也知道了问题出来哪了,看你会用指针应该是C高手,我把你的做了树熊改动,你应该看得懂。。。 对了,你说的乱码可能是因为你用的C的版本不同,TC不能显示汉字而VC可以,如果你用的是TC的话,你的输出语句里面最好写英语,就不会出现乱码了
#include
void main()
{
int a[3][4],i,j,t,m,x;
printf("输入一3×4二维整型数组:
");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",*(a+i)+j);
for(x=1;x<5;x++)
for(i=0;i<3;i++)
{
for(t=0;t<3;t++)
if(*(*(a+i)+t+1)<*(*(a+i)+t))
{
m=*(*(a+i)+t+1);
*(*(a+i)+t+1)=*(*(a+i)+t);
*(*(a+i)+t)=m;
}
}
printf("每行按从小到大的排序后为:
");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%6d",*(*(a+i)+j));
printf("
");
}
}

二维数组我直接赋的初值。数组的行数和列数你改常量就行了。

你想手动输入数组值,你自己写一个输入就行了。

代码功能:先对每行进行一次升序排列,再对每列进行一次升序排列。无限循环直到数组不再发生变动。

也就是说,至少会有两轮行列排序检测。

#include<stdio.h>
#include<malloc.h>
#define row 3
#define clo 4
int px(int **ns,int len);//对数组升序排列
void printfNUMS(int *nums,int r,int c);//打印数组
int main()
{
    int i,j,flag=0,cnt=0,nums[row][clo]={{4,6,2,8},{4,8,3,2},{9,8,6,4}},**ns=NULL;

    printf("原始的数组:
");
    printfNUMS(&nums[0][0],row,clo);

    while(1)
    {
        flag=0;
        cnt++;
        ns=(int **)malloc(sizeof(int *)*clo);
        if(!ns)
        {
            printf("内存错误!
");
            return 1;
        }

        printf("第%d次对分别对行列进行升序排列
",cnt);
        for(i=0;i<row;i++)//对每行进行排序
        {
            for(j=0;j<clo;j++)
                ns[j]=&nums[i][j];
            if(px(ns,clo))
                flag=1;
        }
        printf("--每行进行一次排序,数组变成:
");
        printfNUMS(&nums[0][0],row,clo);

        free(ns);
        ns=(int **)malloc(sizeof(int *)*row);
        if(!ns)
        {
            printf("内存错误!
");
            return 1;
        }
        for(i=0;i<clo;i++)//对每列进行排序
        {
            for(j=0;j<row;j++)
                ns[j]=&nums[j][i];
            if(px(ns,row))
                flag=1;
        }
        printf("--每列进行一次排序,数组变成:
");
        printfNUMS(&nums[0][0],row,clo);
        printf("
");
        if(!flag)
            break;
    }
    printf("数组行列均已实现升序排列!程序结束
");

    return 0;
}

void printfNUMS(int *nums,int r,int c)//打印数组,传参首地址
{
    int i,j;
    for(i=0;i<r;i++)//对每行进行排序
    {
        for(j=0;j<c;j++)
            printf("%d ",*nums++);
        printf("
");
    }
}
int px(int **ns,int len)//对数组(指针数组)升序排列,如果发送交换返回1,没有返回0
{
    int i,j,flag=0;
    for(i=0;i<len;i++)
        for(j=i+1;j<len;j++)
            if(*ns[i]>*ns[j])
                *ns[i]^=*ns[j],*ns[j]^=*ns[i],*ns[i]^=*ns[j],flag=1;
    return flag;
}


main()
{int a[100][100],m,n,i,j,k,t,rd;
scanf("%d%d",&m,&n);
if(m>=3&&n>=4)
{for(i=0;i<m;i++)
for(j=0;j<n;j++)scanf("%d",&a[i][j]);
while(1)
{for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
for(k=j+1;k<n;k++)
if(a[i][j]>a[i][k])
t=a[i][j],a[i][j]=a[i][k],a[i][k]=t;
for(j=0;j<n;j++)
for(i=0;i<m-1;i++)
for(k=i+1;k<m;k++)
if(a[i][j]>a[k][j])
t=a[i][j],a[i][j]=a[k][j],a[k][j]=t;
for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
if(a[i][j]>a[i][j+1])continue;
break;}
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");}}}

  第十二回:王熙凤毒设相思局,贾天祥正照风月鉴

c语言给定二维整型数组先对每行从小到大排序,后对每列从小到大排序反复...
二维数组我直接赋的初值。数组的行数和列数你改常量就行了。你想手动输入数组值,你自己写一个输入就行了。代码功能:先对每行进行一次升序排列,再对每列进行一次升序排列。无限循环直到数组不再发生变动。也就是说,至少会有两轮行列排序检测。include<stdio.h>#include<malloc.h>#define row 3#de...

C语言怎样对二维数组中每个元素进行选择排序
char *argv[]){ int a[5][8],i,j,k,t,*p; printf("排序前:\\n"); srand((unsigned)time(NULL)); for(i=0;i<5;i++){\/\/为二维数组赋值 for(j=0;j<8;printf("%3d",a[i][j++]=rand()%100)); printf("\\...

自定义一个4*4的二维整型数组,先打印,然后求出每一行中的最小值,将其...
int arr[4][4] = {{7, 6, 12, 8},{23, 4, 7, 15},{3, 8, 6, 9},{17, 0, -6, 1}};int minArr[4] = {0}; \/\/ 存储每一行的最小值 \/\/ 打印二维数组 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { printf("%d\\t", arr[i][...

C语言题目:输入多行数据,把每行的字符按从小到大的顺序排列输出多...
对二维数组的每一行进行冒泡排序就行,代码如下:include<stdio.h>#include<string.h>#define MAX 100void main(){ int i,j,k,n,len; char t; char s[MAX][MAX]; printf("请输入行数:"); scanf("%d",&n); printf("请输入数据:\\n"); for(i=0;i<n;i++)...

C语言~输入5行4列的整型二维数组,按每行的和值从小到大排序后输出调整后...
include <stdio.h>#define M 5 \/\/行数#define N 4 \/\/列数int sum(int x[], int n)\/\/求一个行向量之和{ int result = 0; while(n--) result += x[n]; return result;}void change(int x[], int y[], int n)\/\/交换两个行向量{ int temp; while(n--...

从键盘输入一个四行五列的二维整形数组输出其每行最小值
void main(){ int a[4][5] = {1,2,3,4,5,6,7,8,9,10,11,12};int b[4];\/\/ 先从第一行开始循环,一共四行。for(int i=0;i<4;i++) { \/\/ 用循环来判断每一行,每次一行循环的时候判断这一行的最小值即可!\/\/ 一行 5 个数,只要判断四次,就可以找出来了。for(int j=...

c语言声明一个二维数组排序,用随机数给其赋值,然后将所有元素从小到大排...
arraylen 为数组长度***\/ void sellsortInsert(int array[][COL], int num, int arraylen){ int i, j;int temp;int *p = array[0];for (i = 0; i + num < arraylen; ++i){ if (p[i] < p[i + num]){ temp = p[i];p[i] = p[i + num];p[i + num] = temp;}...

c语言二维数组按每行的第一个数给行排序输出
include <stdio.h>int main(int argc,char *argv[]){ int a[3][4]={{1,2,3,4},{0,9,8,-1},{-4,128,99}},*p[3],i,j,k,*q; for(i=0;i<3;p[i]=a[i++]); for(i=0;i<3;i++){ for(k=i,j=k+1;j<3;j++) if(*p[k]>*p[j]) k=j...

C语言2维数组求每行的最大值及其位置,每行的最小值及其位置?
include<stdio.h> define n 3 main(){ int a[n][n]={1,3,2,5,4,6,9,8,7};int i,j,x,y,min,p;for(i=0;i<3;i++){p=0;min=a[i][0];for(j=0;j<3;j++){ if(min>a[i][j]){min=a[i][j];p=j;} } printf("%d\\t位置%d\\n",min,p);} } ...

c语言编程从一个三行四列的整型二维数组中按行优先查找第一个出现的...
include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ int a[3][4] = {{41,345,35,23}, {41,345,-2,23}, {41,345,35,23}}; int flag=1; for(int i=0;i<3 && flag;i++){ for(int j=0;j<4;j++){ if(a[i][j]<0){ printf...