用双重循环解决矩阵元素的求和问题

(整期优先)网络出版时间:2020-05-27
/ 3

用双重循环解决矩阵元素的求和问题

赵红英、王晓红

河南科技大学信息工程学院 471003

摘要:利用vc环境编程,用以解决矩阵各元素求和,方阵主对角线元素求和、方阵副对角线元素求和等问题。

关键字:矩阵;方阵;求和

利用双重循环机构,可以解决很多典型的问题,对于矩阵问题的解决更是游刃有余,本文就多年的教学经验,对于双重结构解决矩阵元素求和问题做个总结:

编程环境为vc。

矩阵所有元素求和

针对求和问题,无非就是在进入循环之前先定义好一个求和变量,比如sum,并对它初始化为0,在进入循环之后要做的工作就是顺序、逐个读出矩阵中所有的数据,然后加到累加器上。读出矩阵元素的方法是借助双重循环。

例题1:

#include main( ){ int i,j,a[3][4]={1,2,3, 4,5,6,7,8,9,10,11,12}; int sum=0;//定义累加器并给出初始值0for( i=0 ; i<3 ; i++ ) >以下三行代码是顺序读出矩阵中的信息,并累加到累加器中for( j=0 ; j<4 ; j++ )sum+=a[ i ][ j ] ;for(>以下四行代码是将矩阵分行输出{ for( j=0 ; j<4 ; j++ )printf( "%d ", a[ i ][ j ] );printf("\n"); }printf("sum=%d\n",sum);//输出矩阵各元素的和}

方阵主对角线求和

主对角线的主要特点就是,行标和列标是相同的,即:i=j,所以,i=j就是编程的依据。在求和时,加上一个对象的限制条件:if(i= =j) sum+=a[i][j]就可以了。

图示如图1:

例题3:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ )for( j j<4 j++ )if(i ==j) sum+ =a[ i ][ ] ;printf("sum=%d\n",sum);}

组合 59

图1 主对角线元素求

以上程序还可以修改如下:也可以达到同样的目的:

例题4:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) sum+= a[i][i]; printf("sum=%d\n",sum);}即可以直接借助于单层循环实现将对角线元素加入求和变量中。程序中a[i][i]就保证了加到sum中的就是主对角线元素。因为这样的表示,行标和列标就一定是相等的。

方阵副对角线求和

方阵的副对角线的主要特点是,行标和列标的和是一个数值,这个数值也就是行标和列标的最大的那个数值,即:i+j=n-1,n为行、列数,n-1也就是行标和列标的最大数值。所以,i+j=n-1,就是编程的依据:在求和时,加上一个对象的限制条件:if(i+j==n-1) sum+=a[i][j]就可以了。

例题5:图示如图2。

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ )for( j j<4 j++ )if(i+j ==3) sum+ =a[ i ][ ] ;printf("sum=%d\n",sum);}

组合 58

图2 副对角线元素求和

以上程序还可以修改如下:也可以达到同样的目的:

例题6:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) sum+=a[ i ][ 3-i ] ;printf("sum=%d\n",sum);}即可以直接借助于单层循环实现将对角线元素加入求和变量中。程序中a[i][3-i]就保证了加到sum中的就是副对角线元素。

求方阵主对角线以上元素之和

主对角线以上的元素的主要特点是:行标小于等于列标,即:i<=j,这就是编程的依据。在求和时,加上一个对象的限制条件:if(i<=j) sum+=a[i][j]就可以了。

例题7:图示如图3。

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ )for( j=0 ; j<4 ; j++ ) if(i<=j) sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}

组合 94

图3 主对角线及以上元素求和

这个程序也可以进行修改如下:

例题8:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=i j<4 j++ )sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}即让列标的数值从行标开始变化到列表的最大值就可以了,在程序中的内层循环中体现了出来。

求方阵主对角线以下元素之和

主对角线以下的元素的主要特点是:列标小于等于行标,即:j<=i,这就是编程的依据。在求和时,加上一个对象的限制条件:if(j<=i) sum+=a[i][j]就可以了。

例题9:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 ; j<4 ; j++ ) if(j<=i) sum+=a[ i ][ j ] ;printf("sum=%d\n",sum); }

图示如图4。

组合 101

图4 主对角线及以下元素求和

这个程序也可以进行修改如下:

例题10:

include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 ; j<=i ; j++ )sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}即让列标的数值从0开始变化到行标i就可以了,在程序中的内层循环中体现了出来。

副对角线以上元素求和

副对角线以上的元素的主要特点是:列标与行标的和小于等于n-1,即:i+j<=3,这就是编程的依据。在求和时,加上一个对象的限制条件:if(i+j<=3) sum+=a[i][j]就可以了。

例题11:图示如图5。

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 ; j<4 ; j++ ) if(i+j<=3) sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}

组合 82

图5副对角线及以上元素求和

这个程序也可以进行修改如下:

例题12:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 ; j<=3-i ; j++ )sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}即让列标的数值从0开始变化到副对角线上的数据的特点:j<=3-i就可以了,在程序中的内层循环中体现了出来。

副对角线以下元素求和

副对角线以下的元素的主要特点是:列标与行标的和大于等于n-1,即:i+j>=3,这就是编程的依据。在求和时,加上一个对象的限制条件:if(i+j>=3) sum+=a[i][j]就可以了。

例题13:图示如图6,

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 j<4 j++ )if(i+j>=3) sum+=a[ i ][ j ] ;printf("sum=%d\n",sum); }

组合 93

图6 副对角线及以下元素求和

这个程序也可以进行修改如下:

例题14:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=3-i ; j<=3 ; j++ )sum+=a[ i ][ j ] ;printf("sum=%d\n",sum);}即让列标的数值从n-1-i开始变化到列表的最大值就可以了,在程序中的内层循环中体现了出来。

求矩阵周边数据的和

例题15:

#include main( ){ int i,j,a[4][4]={1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15,16};int sum=0;for( i=0 ; i<4 ; i++ ) for( j=0 j<4 j++ )no numeric noise key 1001 >以上将中间行最左列和最右列加入printf("sum=%d\n",sum);}

参考文献:

[1] 谭浩强.c程序设计:第二版.清华大学出版社,1999年:128-129页.【M】