求给定矩阵的主对角线之和并找出最大元素值。请完善以下程序: #include <stdio.h> int f(int a[3][3],int *max,int n) { int i,j,s=0; *max=a[0][0]; for (i=0;i<n;i++) { s+= (1) ; for ( j=0; (2) ;j++ ) if ( (3) )*max=a[i][j]; } return s; } int main( ) { int a[3][3]={1,-2,9,4,-8,6,7,0,5}; int max,sum; sum= f (a, (4) ); printf("sum=%d,max=%d\n",sum,max); return 0; }
时间: 2023-11-22 07:53:04 浏览: 129
完整程序如下:
```
#include <stdio.h>
int f(int a[3][3], int *max, int n) {
int i, j, s = 0;
*max = a[0][0];
for (i = 0; i < n; i++) {
s += a[i][i];
for (j = 0; j < n; j++) {
if (a[i][j] > *max) {
*max = a[i][j];
}
}
}
return s;
}
int main() {
int a[3][3] = {1,-2,9,4,-8,6,7,0,5};
int max, sum;
sum = f(a, &max, 3);
printf("sum=%d,max=%d\n", sum, max);
return 0;
}
```
注:主对角线指的是从左上角到右下角的对角线,即 $a_{0,0}$,$a_{1,1}$,$a_{2,2}$。在程序中,我们通过对角线求和的方式计算主对角线之和,并在遍历矩阵时找到最大元素值。
相关问题
*下列给定程序中,函数fun的功能是:先从键盘上输入一个3行、3列的矩阵的各个元素的值,然后输出主对角线元素之和。 请改正函数fun中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:*/ #include <stdio.h> void fun() { int a[3][3],sum; int i,j; /**********ERROR**********/ sum=1; for (i=0;i<3;i++) { for (j=0;j<3;j++) /**********ERROR**********/ scanf("%d",a[i][j]); } for(i=0;i<3;i++) sum=sum+a[i][i]; printf("Sum=%d\n",sum); } int main() { fun(); return 0; }
修改后的程序如下:
```c
#include <stdio.h>
void fun() {
int a[3][3],sum=0; // 将sum的初值设为0
int i,j;
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
scanf("%d",&a[i][j]); // &符号缺失,应该取地址
}
}
for(i=0;i<3;i++) {
sum=sum+a[i][i];
}
printf("Sum=%d\n",sum);
}
int main() {
fun();
return 0;
}
```
主要错误有两个:
1. 变量 `sum` 的初值应该设为0,而不是1。
2. 在输入矩阵元素时,应该使用 `&` 取地址符号。
/*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 题目:下列给定程序中,函数fun的功能是:将N×N矩阵主对角线元素的值与反向对角线 对应位置上元素的值进行交换。 例如:若N=3,有下列矩阵:1 2 3 4 5 6 7 8 9 交换后为:3 2 1 4 5 6 9 8 7 -------------------------------------------------------*/ #include <stdio.h> #define N 4 /***********SPACE***********/ void fun(int 【?】 , int n) { int i,s; /***********SPACE***********/ for(i=0;【?】; i++) { s=t[i][i]; t[i][i]=t[i][n-i-1]; /***********SPACE***********/ t[i][n-1-i]=【?】; } } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%d ",t[i][j]); printf("\n"); } fun(t,N); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%d ",t[i][j]); printf("\n"); } }
答案:
```
void fun(int t[][N], int n) {
int i,s;
for(i=0; i<n; i++) {
s=t[i][i];
t[i][i]=t[i][n-i-1];
t[i][n-1-i]=s;
}
}
```
阅读全文