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

发表时间:2020/6/4   来源:《时代教育》2020年01期   作者:赵红英、王晓红
[导读] 利用vc环境编程,用以解决矩阵各元素求和,方阵主对角线元素求和、方阵副对角线元素求和等问题。
        摘要:利用vc环境编程,用以解决矩阵各元素求和,方阵主对角线元素求和、方阵副对角线元素求和等问题。
关键字:矩阵;方阵;求和
        利用双重循环机构,可以解决很多典型的问题,对于矩阵问题的解决更是游刃有余,本文就多年的教学经验,对于双重结构解决矩阵元素求和问题做个总结:
        编程环境为vc。
一、矩阵所有元素求和
        针对求和问题,无非就是在进入循环之前先定义好一个求和变量,比如sum,并对它初始化为0,在进入循环之后要做的工作就是顺序、逐个读出矩阵中所有的数据,然后加到累加器上。读出矩阵元素的方法是借助双重循环。
例题1:
#include <stdio.h>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( i=0 ; i<3 ; i++ )//以下四行代码是将矩阵分行输出{  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 <stdio.h>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);}





图1 主对角线元素求
以上程序还可以修改如下:也可以达到同样的目的:
例题4:
#include <stdio.h>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 <stdio.h>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);}





图2 副对角线元素求和
以上程序还可以修改如下:也可以达到同样的目的:
例题6:
#include <stdio.h>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 <stdio.h>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);}





图3 主对角线及以上元素求和
这个程序也可以进行修改如下:
例题8:
#include <stdio.h>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 <stdio.h>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。





图4 主对角线及以下元素求和                                               
这个程序也可以进行修改如下:
例题10:
include <stdio.h>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 <stdio.h>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);}





图5副对角线及以上元素求和
这个程序也可以进行修改如下:
例题12:
#include <stdio.h>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 <stdio.h>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); }




图6 副对角线及以下元素求和
这个程序也可以进行修改如下:
例题14:
#include <stdio.h>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 <stdio.h>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==0 || i==3) sum=sum+a[i][j];//将第一行和最后一行所有元素加入else if((i==1 || i==2) && (j==0 || j==3))sum+=a[ i ][ j ] ;}    //以上将中间行最左列和最右列加入printf("sum=%d\n",sum);}
参考文献:
[1] 谭浩强.c程序设计:第二版.清华大学出版社,1999年:128-129页.【M】
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: