1

编译时遇到了一些麻烦

#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;
}

编译时出错

  1. sekuensial.c(16):错误 C2143:语法错误:在 'type' 之前缺少 ')'
  2. sekuensial.c(16):错误 C2198:“randomMatriks”:调用的参数太少
  3. sekuensial.c(16): 错误 C2059: 语法错误: ')'
  4. sekuensial.c(29): 错误 C2059: 语法错误: '%'
  5. sekuensial.c(45):错误 C2065:'n_order':未声明的标识符

有谁可以帮我解决这个问题?

4

4 回答 4

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;
                         ^^^
于 2012-07-05T23:32:24.810 回答
1

问题是你从来没有初始化你的C数组,它是一个指向双精度指针的指针数组。在perkalianMatriks中,它是被尊重的,并且在那一点上,关于指针是什么(在你的情况下为 0xfdfdfdfd),所有的赌注都被取消了。

(我猜你可能不明白**类型到底是什么以及它应该如何使用?)

于 2012-07-06T00:40:27.793 回答
0

这不是为 * B 等分配内存的正确方法。请参阅为双指针 (*B) 分配内存的示例,其余指针也是如此。还要注意分号。

于 2012-07-06T05:21:29.247 回答
0

执行两个矩阵的乘法非常简单。

您可以在:solvedc.com获得一个简单的线索

于 2012-07-06T05:28:50.040 回答