对角线元素之和 输入n×n阶的矩阵(用二维数组存放,n <= 10),编程计算:(1)两条对角线上的各元素之和。(2)两条对角线上行、列下标均为偶数的各元素之积。
#include <stdio.h>
int main() {
int n;
printf("Input n:");
scanf("%d", &n);
int matrix[10][10];
printf("Input %d*%d matrix:\n", n, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]); //储存数组
}
}
int sum = 0;
long product = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) { //遍历数组
if (i == j || i + j == n - 1) { // 判断是否为对角线上的元素
sum += matrix[i][j]; //累加
if (i % 2 == 0 && j % 2 == 0) { // 判断对角线行列下标是否为偶数
product *= matrix[i][j]; //累乘
}
}
}
}
printf("sum = %d\nproduct = %ld\n", sum, product);
return 0;
}
这个代码简单易懂,只是用了两次多重循环来存的读,下面有一个单重循环来实现这一过程的程序:
#include <stdio.h>
int main() {
int n;
printf("Input n: ");
scanf("%d", &n);
int matrix[10][10];
printf("Input %d*%d matrix:\n", n, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
int sum = 0;
long product = 1; // 使用long long以防止乘积溢出
for (int i = 0; i < n; i++) {
sum += matrix[i][i]; // 主对角线元素之和
sum += matrix[i][n - i - 1]; // 副对角线元素之和
if (i % 2 == 0) { // 行、列下标均为偶数
product *= matrix[i][i]; // 主对角线元素之积
product *= matrix[i][n - i - 1]; // 副对角线元素之积
}
}
// 如果n为奇数,则中心点的元素被计算了两次,所以需要减去一次
//3阶、7阶等中间一个不是偶数,不用再除;但5阶、9阶等中间是偶数,就要除。我们使用if来实现
if (n % 4 == 3) {
int center = n / 2;
sum -= matrix[center][center];
}
if (n % 4 == 1) {
int center = n / 2;
sum -= matrix[center][center];
product /= matrix[center][center];
}
printf("sum = %d\nproduct = %ld\n", sum,product);
return 0;
}
大家看看有什么问题吗,欢迎指正。