求二维数组对角线之和的C++程序!

用C++编一个程序,要求输入一个4*4矩阵对角线之和,并求其最大最小值,指出其最大最小值的位置。跪求!
4*4矩阵的数分别为:{34,12,15,10},{78,9,0,87},{80,19,100,21},{45,23,35,43}
要求程序要简明一点,用#include<stdio.h>编制,谢谢!

/* 一般方法:
4*4矩阵nMat,
用 nA、nB 遍历矩阵的行、列,
任何一个元素nMat[nA][nB] > 最大值,设置 最大值 = nMat[nA][nB],记位置
任何一个元素nMat[nA][nB] < 最小值,设置 最小值 = nMat[nA][nB],记位置
当 nA==nB, Sum += nMat[nA][nB];
*/
// 若简捷,可以采用直接访问一维空间的方法,手工计算元素的位置
#include <stdio.h>
int nMat[4][4] ={{34,12,15,10},{78,9,0,87},
            {80,19,100,21},{45,23,35,43}};
int main() {
  int nA,nSum,nMinIdx,nMaxIdx;
  nSum = nMinIdx = nMaxIdx = 0;
  for (nA=0; nA<4*4; nA++) {
    if (0 == nA%(4+1)) { nSum += (*nMat)[nA]; }
    if ( (*nMat)[nMinIdx] > (*nMat)[nA] ) nMinIdx = nA;
    if ( (*nMat)[nMaxIdx] < (*nMat)[nA] ) nMaxIdx = nA;
  }
  printf("最大值:nMat[%d][%d] == %d\n",nMaxIdx/4,nMaxIdx%4,(*nMat)[nMaxIdx]);
  printf("最小值:nMat[%d][%d] == %d\n",nMinIdx/4,nMinIdx%4,(*nMat)[nMinIdx]);
  printf("求和:nSum == %d\n",nSum);
  return 1;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-10
编写好了!呵呵。。

#include<iostream>
#include<cstdlib>
using namespace std;
const int M=4;

int main(void)
{
int Array[M][M];
int i,j;
cout<<"输入4*4数组:"<<endl<<endl;
for(i=0;i<M;i++){
for(j=0;j<M;j++){
cin>>Array[i][j];
}
}

int max=Array[0][0],min=Array[0][0];
int rc_min,rc_max,sum=0;
for(i=0;i<M;i++){
sum=sum+Array[i][i];
if(Array[i][i]<min){
min=Array[i][i];
rc_min=i;
}
if(Array[i][i]>max){
max=Array[i][i];
rc_max=i;
}
}
cout<<endl<<"对角线之和:"<<sum<<endl<<endl;
cout<<"对角线最小数"<<rc_min+1<<"行"<<rc_min+1<<"列"<<Array[rc_min][rc_min]<<endl<<endl;
cout<<"对角线最大数"<<rc_max+1<<"行"<<rc_max+1<<"列"<<Array[rc_max][rc_max]<<endl<<endl;
system("pause");
return 0;
}
第2个回答  2009-05-10
对楼上稍作修改,呵呵
#include<iostream>
#include<cstdlib>
using namespace std;
const int M=4;

int main(void)
{
int Array[M][M];
int i,j;
cout<<"输入4*4数组:"<<endl<<endl;
for(i=0;i<M;i++){
for(j=0;j<M;j++){
cin>>Array[i][j];
}
}

int max=0,min=0;
int rc_min=0,rc_max=0,sum=0;
for(i=0;i<M;i++){
sum=sum+Array[i][i];
if(Array[i][i]<min){
min=Array[i][i];
rc_min=i;
}
if(Array[i][i]>max){
max=Array[i][i];
rc_max=i;
}
}
cout<<endl<<"对角线之和:"<<sum<<endl<<endl;
cout<<"对角线最小数"<<rc_min+1<<"行"<<rc_min+1<<"列"<<Array[rc_min][rc_min]<<endl<<endl;
cout<<"对角线最大数"<<rc_max+1<<"行"<<rc_max+1<<"列"<<Array[rc_max][rc_max]<<endl<<endl;
system("pause");
return 0;
}
第3个回答  2019-09-25
遍历输出然后用if语句
if(i==j‖(i+j=4))(两条对角线的和)
不加i+j=4就是主对角线的和
第4个回答  推荐于2018-04-05
简述思路吧
定义一个存放最大值的变量max
定义一个存放最小值的变量Min
定义一个存放对角线之和变量sum
遍历二维数组所有元素
for(i=0;i<4;i++)
for(j=0;j<4;j++)
用max和min依次与之比较 满足条件即交换
if(max<a[i][j])
if(min>a[i][j])
然后 判断满足对角线元素的条件
如果是对角线上面的元素即加和
if(i==j)
sum+=a[i][j];//注意sum需要初始化为0 否则结果不可预见
希望自行编写本回答被提问者和网友采纳
相似回答