问答题 对于二维数组A[m][n],其中m≤80,n≤80,先读入m和n,然后读该数组的全部元素,对如下三种情况分别编写相应函数: (1)求数组A靠边元素之和; (2)求从A[0][0]开始的互不相邻的各元素之和; (3)当m=n时,分别求两条对角线上的元素之和,否则打印出m≠n的信息。
【正确答案】(1)本小题是计算数组A的最外围的4条边的所有元素之和,先分别求出各边的元素之和,累加后减去4个角的重复相加的元素即为所求。 (2)本小题的互不相邻是指上、下、左、右、对角线均不相邻,即求第0,2,4,…的各行中第0,2,3,…列的所有元素之和,函数中用i和j变量控制即可。 (3)本小题中一条对角线是A[i][i](0≤i≤m-1),另一条对角线是A[m-i-1][i](0≤i≤m-1),采用循环实现。 实现代码如下: void proc1(int A[m][n]) //实现(1)小题功能的函数 { int s=0,i,j; for(i=0;i<m;++i) //第一列 s=s+A[i][0]; for(i=0;i<m;++i) //最后一列 s=s+A[i][n-1]; for(j=0;j<n;++j) //第一行 s=s+A[0][j]; for(j=0;j<m;+j+) //最后一行 s=s+A[m-1][j]; s=s-A[0][0]-A[0][n-1]-A[m-1][0]-A[m-1][n-1]; //减去4个角的重复元素值 cout<<"结果1: "<<s<<endl; } void proc2(int A[m][n]) //实现(2)小题功能的函数 { int s=0,i=0,j; do { j=0; do { s=s+A[i][j]; j=j+2;//跳过一列 }while(j<n); i=i+2;//跳过一行 }while(i<m); cout<<"结果2: "<<s<<endl; } void proc3(int A[m][n]) //实现(3)小题功能的函数 { int i,s; if(m!=n) cout<<"m≠n"<<endl; else { s=0; for(i=0;i<m;++i) s=s+A[i][i]; //求第一条对角线之和 for(i=0;i<n;++i) s=s+A[n-i-1][i]; //累加第二条对角线之和 cout<<"结果3: "<<s<<endl; } }
【答案解析】