2102 : 程序改错 - 二维数组参数传递
时间限制: 1 Sec 内存限制: 128 MB
题目描述
题目:矩阵乘法,求方阵A的二次幂
输入:包括多组数据,每组数据包含一个整数n和n*n个整数。n为方阵的大小,n*n个整数为矩阵的元素,n的取值范围:1<=n<=10
输出:输出A的二次幂n*n个整数,每组数据一行
代码如下,请修正后提交
#include <stdio.h>
#define MAX 10
void square(int** A, int n)
{
int i, j, k;
int s;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
s = 0;
for (k = 0; k < n; k++)
{
s += A[i][k] * A[k][j];
}
printf("%d ", s);
}
}
printf("\n");
}
int main()
{
int A[MAX][MAX];
int i, j;
int n;
while (scanf("%d",&n) != EOF)
{
for (i = 0; i < n; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &A[i][j]);
}
}
square((int**)A, n);
}
return 0;
}
输入
包括多组数据,每组数据包含一个整数n和n*n个整数。n为方阵的大小,n*n个整数为矩阵的元素,n的取值范围:1<=n<=10
输出
输出A的二次幂n*n个整数,每组数据一行
样例输入
2 1 1 1 0
样例输出
2 1 1 1
提示
来源
ajeyone
AC代码
#include <stdio.h>
#define MAX 10
void square(int A[][MAX], int n)
{
int i, j, k;
int s;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
s = 0;
for (k = 0; k < n; k++)
{
s += A[i][k] * A[k][j];
}
printf("%d ", s);
}
}
printf("\n");
}
int main()
{
int A[MAX][MAX];
int i, j;
int n;
while (scanf("%d",&n) != EOF)
{
for (i = 0; i < n; i++)
{
for (j = 0; j <n; j++)
{
scanf("%d", &A[i][j]);
}
}
square(A, n);
}
return 0;
}
附:二维数组传参的方法:
int a[3][3];
方法一:
直接传递二维数组,传递时需表明第二维的值
void fun(int a[][3])
{
......
}
方法二:
传递指针数组
void fun(int (*a)[3]
{
......
}
方法三:
传递指针,但是在调用的时候要将a强制转换成指针型的
void fun(int* a)
{
......
}
int main()
{
...
fun((int*)a);
...
}