当前位置:蜗牛素材网>综合资讯>科技>正文

c语言二维数组求每行最大值,二维数组与逐行或逐列处理数据及相关实例

人气:376 ℃/2024-02-22 00:50:56

1 二维数组与双重循环

在C语言中,二维数组的第一维是行,第二维是列。对于双重循环来说,外循环前进一步,内循环完成一圈(就像时钟的分针与秒针的关系,秒针每转一圈,分针转一格),通常,如果外循环处理行,内循环处理列,就是逐行处理数据;如果外循环处理列,内循环处理行,就是逐列处理数据。

1.1 逐行处理数据

如有以下数组:

int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};void out34(int arr[][4],int rs) //逐行处理,此时外循环对应第一维,内循环对应第二维{ for(int r=0;r<3;r ) { for(int c=0;c<4;c ) printf("- ",arr[r][c]); printf("\n"); } printf("\n");}/* 1 2 3 4 5 6 7 8 9 10 11 12 */

1.2 逐列处理数据

void priorityCol(int arr[][4],int rs)//逐列处理每一行,此时外循环对应第二维,内循环对应第一维{ for(int r=0;r<4;r ) { for(int c=0;c<3;c ) printf("- ",arr[c][r]); printf("\n"); } printf("\n");}void priorityCol2(int arr[][4],int rs)//逐列处理每一行,此时外循环对应第二维,内循环对应第一维{ for(int c=0;c<4;c ) { for(int r=0;r<3;r ) printf("- ",arr[r][c]); printf("\n"); } printf("\n");}/* 1 5 9 2 6 10 3 7 11 4 8 12 */

2 数组转置

int(*transpose(int arr[][4],int rs))[3] // 三行四列的数组转换为四行三列数组{ int (*arr2)[3] = new int[4][3]; for(int r=0;r<3;r ) { for(int c=0;c<4;c ) arr2[c][r] =arr[r][c]; //按行处理每一列的数组,赋值给转置的数组 printf("\n"); } return arr2;}void out43(int arr[][3],int rs) { for(int r=0;r<rs;r ) { for(int c=0;c<3;c ) printf("- ",arr[r][c]); printf("\n"); } printf("\n");}void test(){ out43(transpose(arr,3),4);}

3 处理二维数组对角线与斜对象线数据

int diagonal(int arr[][4], int rs){ int sum = 0; for(int r=0;r<rs;r ) { sum = arr[r][r] arr[4-r-1][4-r-1]; } return sum;}

4 处理二维数组右上三角的数据

void rightUpper(int arr[][4],int rs){ for(int r=0;r<rs;r ) { for(int c=r 1;c<4;c ) arr[r][c] = 0; printf("\n"); } }/* 1 0 0 0 5 6 0 0 9 10 11 0 */

5 处理二维数组左上三角的数据

void leftUpper(int arr[][4],int rs){ for(int r=0;r<rs;r ) { for(int c=0;c<4-r-2;c ) arr[r][c] = 0; printf("\n"); } }/* 0 0 3 4 0 6 7 8 9 10 11 12 */

6 处理二维数组左下三角的数据

void leftLower(int arr[][4],int rs){ for(int r=0;r<rs;r ) { for(int c=0;c<r;c ) arr[r][c] = 0; printf("\n"); } }/* 1 2 3 4 0 6 7 8 0 0 11 12 */

7 处理二维数组右下三角的数据

void rightLower(int arr[][4],int rs){ for(int r=0;r<3;r ) { for(int c=4-r-1;c<4;c ) arr[r][c] = 0; printf("\n"); } }/* 1 2 3 0 5 6 0 0 9 0 0 0 */

8 二维数组转一维数组

int* two2one(int arr[][4],int rs){ int *ar = new int[12]; int i = 0; for(int r=0;r<rs;r ) for(int c=0;c<4;c ) { i = r*(rs 1) c; ar[i] = arr[r][c]; } return ar;}void test(){ for(int i=0;i<12;i ) cout<< two2one(arr,3)[i]<<" ";}

9 二维数组的马鞍点

void saddlePoint(int(*arr)[4],int rs){ int i=0,j,find=0,rmax,c,k; while((i<rs)&&(!find)) { rmax=arr[i][0]; c=0; for(j=1; j<4; j ) if(rmax<arr[i][j]) { rmax=arr[i][j]; c= j; } find=1; k=0; while(k<rs && find) { if(k!=i && arr[k][c]<=rmax) find= 0; k ; } if(find) printf("find: arr[%d][%d]=%d\n",i,c,arr[i][c]); i ; } if(!find)printf("not found!\n");}

10 从外层到内层逐层数字递增的矩阵

#define N 18void matrixAdd(int(*a)[N]){ int i,j,k,m; if(N%2==0) m=N/2; else m=N/2 1; for(i=0; i<m; i ) { for(j=i; j<N-i; j ) a[i][j]=a[N-i-1][j]=i 1; /* 上下两行 */ for(k=i 1; k<N-i; k ) a[k][i]=a[k][N-i-1]=i 1; /* 左右两列 */ }}void test(){ int matrix[N][N]; matrixAdd(matrix); for(int r=0;r<N;r ) { for(int c=0;c<N;c ) cout<<matrix[c][r]<<" "; cout<<endl; }}

output:

以上各类数据的处理,关键在于处理两个下标的递增及相互关系的规律。

-End-

搜索更多有关“c语言二维数组求每行最大值,二维数组与逐行或逐列处理数据及相关实例”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
本网站部分内容、图文来自于网络,如有侵犯您的合法权益,请及时与我们联系,我们将第一时间安排核实及删除!
CopyRight © 2008-2024 蜗牛素材网 All Rights Reserved. 手机版