C语言二维数组总结
2011-11-23 20:36阅读:
所有用到的的数组是: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('');
}
}
思路:【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 ',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',(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('');
}
printf('');
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 ',(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('输出的标准格式如下:');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf('%d ',a[i][j]);
}
printf('');
}
printf('');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
s=s+a[i][j];
}
}
printf('该二维数组的和:= 平均值是:%d',s,s/9);
printf('');
for(i=0;i<3;i++){
s1=0;
for(j=0;j<3;j++){
s1=s1+a[i][j];
}
printf('第 %d 行的和是: =
平均值是: %d',(i+1),s1,s1/3);
}
printf('');
for(i=0;i<3;i++){
s2=0;
for(j=0;j<3;j++){
s2=s2+a[j][i];
}
printf('第 %d 列的和是: = 平均值是:
%d',(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('输出的标准格式如下:');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf('%d ',a[i][j]);
}
printf('');
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i+j==2){
s1=s1+a[i][j];
}
}
}
printf('该数组的左对角线和是:= ',s1);
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i==j){
s2=s2+a[i][j];
}
}
}
printf('该数组的右对角线和是:= ',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('输出的标准格式如下:');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf('%d ',a[i][j]);
}
printf('');
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
b[i][j]=a[j][i];
}
}
printf('行列互换后:');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf('%d ',b[i][j]);
}
printf('');
}
}
思路:【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('二维数组的标准形式如下:');
for ( i = 0; i < 3; i++) {
for ( j = 0; j < 3; j++) {
printf('%d
',a[i][j]);
}
printf('');
}
printf('');
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('二维数组从小到大排序是:');
for
( i = 0; i < 3; i++) {
for ( j = 0; j < 3; j++) {
printf('%d
',a[i][j]);
}
printf('');
}
}
#include <stdio.h>
void main(){
int a[3][3]={{23,46,11},{99,45,82},{72,90,21}};
int i,j,k;
printf('二维数组的标准形式如下:');
for ( i = 0; i < 3; i++) {
for ( j = 0; j < 3; j++) {
printf('%d ',a[i][j]);
}
printf('');
}
printf('');
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('二维数组每一行从小到大排序是:');
for ( i = 0; i < 3; i++) {
for ( j = 0; j <
3; j++) {
printf('%d ',a[i][j]);
}
printf('');
}
}
只对没行列排序:
思路:【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('标准形式如下:');
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf('%d ',a[i][j])