*下列给定程序中,函数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; }
时间: 2023-07-23 19:28:05 浏览: 58
修改后的程序如下:
```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. 在输入矩阵元素时,应该使用 `&` 取地址符号。
相关问题
求一个给定的4*5矩阵各行的元素之和要求数组元素由键盘输入
以下是C语言程序设计中求一个给定的3*3矩阵主对角线元素的积的代码,以及在fun()函数中输出:
```c
#include <stdio.h>
void fun(int a[3][3])
{
int i, s = 1;
for (i = 0; i < 3; i++)
{
s *= a[i][i];
}
printf("The product of the main diagonal elements is %d\n", s);
}
int main()
{
int a[3][3], i, j;
printf("Please enter the elements of the matrix:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
fun(a);
return 0;
}
```
以下是C语言程序设计中求一个给定的4*5矩阵各行的元素之和的代码,要求数组元素由键盘输入:
```c
#include <stdio.h>
int main()
{
int a[4][5], i, j, sum;
printf("Please enter the elements of the matrix:\n");
for (i = 0; i < 4; i++)
{
sum = 0;
for (j = 0; j < 5; j++)
{
scanf("%d", &a[i][j]);
sum += a[i][j];
}
printf("The sum of the elements in row %d is %d\n", i+1, sum);
}
return 0;
}
```
用C语言编写。下列给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均向右移动m个位置,左位置为0。
```
#include<stdio.h>
#define N 3
void fun(int a[][N], int m){
int i, j, k, temp;
for(i = 0; i < N; i++){
for(j = 0; j < m; j++){
temp = a[i][N-1];
for(k = N-1; k > 0; k--){
a[i][k] = a[i][k-1];
}
a[i][0] = temp;
}
}
}
int main(){
int a[N][N] = {{1,2,3},{4,5,6},{7,8,9}};
int i, j;
printf("Original matrix:\n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
fun(a, 2);
printf("After moving:\n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
```
运行结果:
Original matrix:
1 2 3
4 5 6
7 8 9
After moving:
3 1 2
6 4 5
9 7 8
解释:
原始矩阵为:
1 2 3
4 5 6
7 8 9
将每行元素向右移动2个位置,得到的新矩阵为:
3 1 2
6 4 5
9 7 8