| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 787 人关注过本帖
标题:写给新手的 二维数组所总结
只看楼主 加入收藏
t505556855
Rank: 2
等 级:论坛游民
帖 子:27
专家分:32
注 册:2010-10-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
写给新手的 二维数组所总结
                     

所有用到的的数组是:a[3][3]={{23,46,11},{99,45,82},{72,90,21}};

一:遍历打印输出二维数组的元素
   
#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 for(int i=0;i<3;i++){
     for(int j=0;j<3;j++){
         printf("%d  ",a[i][j]);
     }
      printf("\n");
 }
}
思路:【1:每一个下标号对应的元素值是唯一的;
2:因为是二维数组,必须要遍历行,列所以需要两个循环变量;
3:在每一次循环遍历列数后,就用换行语句,可以打印输出标准的行列格式】

二:逆序输出二维数组的元素
#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 for(int i=2;i>=0;i--){
     for(int j=2;j>=0;j--){
         printf("%d  ",a[i][j]);
     }
}
}
思路:【1:每一个下标号对应唯一的元素值;
2:当下标号发生顺序改变的时候,他们所代表的元素值也发生顺序变化。】
三:求二维数组的最值,每一行最值,每一列最值

#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int max=a[0][0];
 for(int i=0;i<3;i++){
     for(int j=0;j<3;j++){
         if(max<a[i][j]){
         max=a[i][j];
         }
     }
 }
 printf("%d \n",max);
}
思路:【1:必须声明一个临时的最大值,最好是二维数组中的任何一个元素值,不能比二维数组中的最小值还要小,比最大值还要大!
2:循环遍历二维数组的每一个元素值,一一比较,比临时最大值还大的话,就覆盖掉。】



#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int max=a[0][0];
 for(int i=0;i<3;i++){
     max=a[i][0];
     for(int j=0;j<3;j++){
         if(max<a[i][j]){
         max=a[i][j];
         }
     }
     printf("第 %d 行的最大值是:%d\n",(i+1),max);
 }
}
思路:【1:求每一行的最值,先临时设置一个值是二维数组里面的一个元素值;
2:遍历每一列,再遍历行的总数次,并且每遍历下一次的时候,最值要归位。不能将以前的最值拿下来比较】


#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int max=a[0][0];
 int i,j;
 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
     printf("%d ",a[i][j]);
     }
     printf("\n");
 }
 printf("\n");

 for(j=0;j<3;j++){
     max=a[0][j];
   for(i=0;i<3;i++)
     if(max<a[i][j]){
     max=a[i][j];   
     }
      printf("第 %d 列的最大值是:%d \n",(j+1),max);
 }
}


三:求二维数组的总和和平均值,每行每列的和还有平均值

#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int s=0,s1=0,s2=0;
 int i,j;
 printf("输出的标准格式如下:\n");
 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
     printf("%d ",a[i][j]);
     }
 printf("\n");
 }

printf("\n");

 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
        s=s+a[i][j];
     }
 }
printf("该二维数组的和:%3d  平均值是:%d\n",s,s/9);

printf("\n");

for(i=0;i<3;i++){
    s1=0;
   for(j=0;j<3;j++){
    s1=s1+a[i][j];
}
   printf("第 %d 行的和是: %3d   平均值是: %d\n",(i+1),s1,s1/3);
}
printf("\n");

for(i=0;i<3;i++){
    s2=0;
for(j=0;j<3;j++){
s2=s2+a[j][i];
}
printf("第 %d 列的和是: %3d   平均值是: %d\n",(i+1),s2,s2/3);
}
}
思路:【1:求累加之和的固定模式是:int s=0;s=s+变化的值,就是指循环遍历的数组元素值;
2:在求每行,每列的和的时候,也是采用求累加之和的固定模式,求每一行的和就遍历每一列,求每一列。就遍历每一行;
3:在求每一行,每一列的和是时,记住要清0】

四:求该数组的对角线之和
#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int s1=0,s2=0;
 int i,j;
 printf("输出的标准格式如下:\n");
 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
     printf("%d ",a[i][j]);
     }
 printf("\n");
 }
for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        if(i+j==2){
        s1=s1+a[i][j];
        }
    }
}
printf("该数组的左对角线和是:%3d \n\n",s1);

for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        if(i==j){
        s2=s2+a[i][j];
        }
    }
}
printf("该数组的右对角线和是:%3d \n",s2);

}
思路:【1:任何行列都相等的的二维数组,都有两条线和;
2:左对角线之和判断条件是:行列加和绝对等于当前数组的最大长度减一;
3:右对角线之和判断条件是:行列都相等】


五:将数组进行行列互换【矩阵互换】
#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int b[3][3];

 int i,j;
 printf("输出的标准格式如下:\n");
 for(i=0;i<3;i++){
     for(j=0;j<3;j++){
     printf("%d ",a[i][j]);
     }
 printf("\n");
 }
for(i=0;i<3;i++){
    for(j=0;j<3;j++){
    b[i][j]=a[j][i];
    }
}
printf("\n行列互换后:\n");

for(i=0;i<3;i++){
    for(j=0;j<3;j++){
    printf("%d ",b[i][j]);
    }
    printf("\n");
}
}
思路:【1:必须要申请一个数组,要求长度不变,行列是互换的;
2:在遍历原数组的时候,只要保证行列的循环变量颠倒位置即可】
六:将该数组的进行从小到大排序,每行,每列从小到大排序

#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int i,j,m,n;
printf("二维数组的标准形式如下:\n");
 for ( i = 0; i < 3; i++) {
            for ( j = 0; j < 3; j++) {
                printf("%d ",a[i][j]);
            }
             printf("\n");
        }

 printf("\n");

 for ( i = 0; i < 3; i++) {
    for ( j = 0; j < 3; j++) {
       for (int m = 0; m < 3; m++) {
            for (int n = 0; n <3; n++) {
                if (a[i][j] < a[m][n]) {
                    int t = a[i][j];
                    a[i][j] = a[m][n];
                    a[m][n] = t;
                        }
                    }
                }
            }
        }
 printf("二维数组从小到大排序是:\n");
        for ( i = 0; i < 3; i++) {
            for ( j = 0; j < 3; j++) {
                printf("%d ",a[i][j]);
            }
            printf("\n");
        }
}

#include <stdio.h>
void main(){
 int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
 int i,j,k;
printf("二维数组的标准形式如下:\n");
 for ( i = 0; i < 3; i++) {
    for ( j = 0; j < 3; j++) {
        printf("%d ",a[i][j]);
            }
        printf("\n");
        }

 printf("\n");
 for(k=0;k<3;k++){
   for(i=0;i<2;i++){
    for(j=0;j<2-i;j++){
    if(a[k][j]>a[k][j+1]){
    int t=a[k][j];
    a[k][j]=a[k][j+1];
    a[k][j+1]=t;
    }
    }
    }
}
 printf("二维数组每一行从小到大排序是:\n");
    for ( i = 0; i < 3; i++) {
       for ( j = 0; j < 3; j++) {
            printf("%d ",a[i][j]);
            }
            printf("\n");
        }
}
只对没行列排序:
思路:【1:将每一行,列都看作是一维数组,利用一维数组排序的规则进行排序即可;
2:遍历的总次数是:最大长度减一;
3:遍历的趟数是总数减去次数的循环变量即可;】
对整个二维数组:
#include <stdio.h>
void main(){
int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
int i,j,m;
int b[9];
//输出标准形式
printf("标准形式如下:\n");
for(i=0;i<3;i++){
    for(j=0;j<3;j++){
    printf("%d ",a[i][j]);
    }
    printf("\n");
}
//按照一维数组模式进行存储值
printf("\n一维数组排序后:\n");
for(i=0;i<3;i++){       //i=0
    m=i*3;              //m=0   m=3   m=6
    for(j=0;j<3;j++){        
    b[m]=a[i][j];       //b[0] [1]  [2]  [3]  [4]   [5]  [6]  [7]   [8]
    m++;                //1     2    3    4    5     6    7   8     9
    printf("%d   ",m);
    }
}
printf("\n");
//对一维数组排序
for(i=0;i<8;i++){
    for(j=0;j<8-i;j++){
        if(b[j]>b[j+1]){
            int t=b[j];
            b[j]=b[j+1];
            b[j+1]=t;
        }
    }
}
//按照二维数组形式输出
for(m=0;m<9;m++){
    printf("%d ",b[m]);
    if((m+1)%3==0){
    printf("\n");
    }

}

}
思路:【1:将二维数组转为为一维数组,对一维数组进行排序;再按照二维数组格式进行输出;
2:在里面一层循环的外面要进行重新设值。】
搜索更多相关主题的帖子: 二维 include 元素 
2010-10-31 10:22
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:6 
不错吖,自己要做品牌吗。。

编程的道路上何其孤独!
2010-10-31 11:19
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:6 
不错。学习了。3Q!
2010-10-31 11:30
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:6 
要开培训机构吗?
2010-10-31 11:47
快速回复:写给新手的 二维数组所总结
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077235 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved