编译时我遇到了一些麻烦
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <time.h>
int perkalianMatriks(double ** A, double ** B, double ** C, int n);
int randomMatriks(double * m, int n);
int main(int argc, char *argv[]) {
int n_order = 0 , i, j;
double ** A, ** B, ** C;
time_t time1, time2;
double diff_sec;
randomMatriks(double * m, int n)
A = (double **) malloc(sizeof(double) * n_order);
B = (double **) malloc(sizeof(double) * n_order);
C = (double **) malloc(sizeof(double) * n_order);
for (i = 0; i < n_order; i++) {
A[i] = (double *) calloc(sizeof(double), n_order);
B[i] = (double *) calloc(sizeof(double), n_order);
C[i] = (double *) calloc(sizeof(double), n_order);
}
printf("\nMatrix Sizes : ");
scanf("%d", %n_order);
time(&time1);
perkalianMatriks(A, B, C, n_order);
time(&time2);
diff_sec = difftime (time2,time2);
printf ("Total time to execute %f seconds.\n", diff_sec);
return 0;
}
int randomMatriks(double * m, int n) {
int i;
for (i = 0; i < n_order; i++) {
m[i] = (double) (rand() % 10) + 1;
}
}
int perkalianMatriks(double ** a, double ** b, double ** c, int n) {
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
c[i][j]=0;
for (k = 0; k < n; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
return 0;
}
编译时出错
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
你错过了一个分号。而且你不能命名变量double
。我想这条线应该被删除,因为它是上面声明的剪切和粘贴。如果你需要调用它,你应该用真实的参数调用它。我没有看到您定义了适合第一个参数的任何内容,我想稍后在您的代码中,您打算使用n_order
作为第二个参数。
randomMatriks(double * m, int n)
^^^^^^ ^^^
此scanf
错误,您可能需要&
:
scanf("%d", %n_order);
^^^
变量dif_sec
不存在。错字。
dif_sec = difftime (time2,time2);
^^^^^^^
printf ("Total time to execute %f seconds.\n", dif_sec);
^^^^^^^
变量n_order
不存在。可能n
。
for (i = 0; i < n_order; i++) {
^^^^^^^
randomMatriks
应该返回一些内容。它没有return
语句就会失败,即使它被声明为返回int
。
您有一些未使用的变量和函数参数。
int main(int argc, char *argv[]) {
^^^^ ^^^^
int n_order = 0 , i, j;
^^^
答案 1 :(得分:1)
问题是你从未初始化你的C
数组,这是一个指向double的指针数组。在perkalianMatriks
中,它是引用的,并且在那时,所有的注意都是关于指针是什么(在你的情况下为0xfdfdfdfd)。
(我猜你可能不明白**
类型究竟是什么以及它应该如何使用?)
答案 2 :(得分:0)
这不是为* B等分配内存的正确方法。 有关为双指针分配内存的示例( * B),请参阅其余指针。 还要照顾半冒号。
答案 3 :(得分:0)
执行两个矩阵的乘法非常简单。
您可以在solvedc.com
获得一个简单的线索