c语言二维数组求每行最大值,二维数组与逐行或逐列处理数据及相关实例
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-
- 01-16增值税电子发票什么时候开始的?增值税电子专用发票真的来了
- 02-07道路工程段子:工程搞笑段子
- 11-28豆芽生长记录观察日记视频,祁峻熙,豆芽生长记系列观察日记
- 02-08熊孩子英语启蒙:育儿专家教你约束和管教熊孩子
- 04-25阿云嘎说山东话,阿云嘎变最暖,嘎子哥声入人心展现有爱兄弟情
- 02-21汽车保险附加险有哪几种 这些附加险可能你也需要考虑
- 12-05看完整部剧只需一个片段,因为一个片段看了整部剧
- 01-31战汉浮雕勾云纹青玉璧介绍:战汉浮雕出廓螭龙纹玉剑珌辨实
- 02-29飞利浦云朵咖啡机3系 清洗 咖啡机怎么选一体式机身
- 01-28老年心理健康课,乐在金秋,老年人心理健康公开课开讲
- 01-30dota2新版本7.33经验神符:DOTA2再次更新7.06移除复活天赋
- 05-14让男生荷尔蒙爆棚三个小动作:瞬间让女生荷尔蒙飙升
- 09-14一件有趣的事400字优秀范文五年级:优秀范文一件有趣的事
- 02-18亚运会田径赛程100米栏:亚运会田径女子100米栏决赛
- 01-29黑客凯文米特尼克做了哪些事?地狱黑客,凯文米特尼克
- 03-10炒肉怎么做起来好吃?这4道炒肉也太好吃了后悔没早点学会
热门
推荐
- 1在对古墓的考古发掘中,如何通过出土文物推断墓主人身份?280
- 2小月饼怎么做199
- 3新车磨合期有什么禁忌事项175
- 4主卧豪华装修效果图324
- 5倒计时高考励志标语386
- 6物业费催款函范本最新243
- 7怎么看股票日线图222
- 8适合女性创业是哪些项目444