C 矩阵乘法可以';不可编辑

C 矩阵乘法可以';不可编辑,c,visual-studio-2010,compiler-warnings,C,Visual Studio 2010,Compiler Warnings,我在编译这个时遇到了一些麻烦 #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 *a

我在编译这个时遇到了一些麻烦

#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;
}
#包括
#包括
#包括
#包括
内部基准矩阵(双**A、双**B、双**C、内部n);
int随机矩阵(双*m,int n);
int main(int argc,char*argv[]){
int n_阶=0,i,j;
双**A、**B、**C;
时间1,时间2;
双差秒;
随机矩阵(双*m,整数n)
A=(双**)malloc(双)*n_顺序);
B=(双**)malloc(双)*n_顺序);
C=(双**)malloc(双)*n_顺序);
对于(i=0;i
编译时出错

  • sekuensial.c(16):错误C2143:语法错误:前面缺少“')” “类型”
  • sekuensial.c(16):错误C2198:“随机矩阵”:参数太少 待命
  • sekuensial.c(16):错误C2059:语法错误:')'
  • sekuensial.c(29):错误C2059:语法错误:'%1!'
  • sekuensial.c(45):错误C2065:“n_顺序”:未声明的标识符

  • 有人能帮我解决这个问题吗?

    你少了一个分号。而且您不能将变量命名为
    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\u顺序
    不存在<代码>n
    可能相反

    for (i = 0; i < n_order; i++) {
                    ^^^^^^^
    

    问题是您从未初始化
    C
    数组,它是指向指向double的指针的指针数组。在
    perkalianMatriks
    中,它被推迟,此时,所有关于指针是什么的赌注都被取消了(在您的例子中是0xfdfd)


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

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

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


    您可以在以下位置获得简单线索:

    scanf(“%d”,%n\u顺序);需要扫描(“%d”,n_顺序);是的,我改了。对不起,打字错误。。然后是错误?什么是[不完全]声明<代码>随机矩阵> <代码>在你的代码>主< /代码>函数的中间?您已经在
    main
    之前声明了
    randommariks
    。你为什么决定在
    main
    ?@AndreyT内再次执行此操作?我的意思是,调用程序现在编译的函数randomMatriks(随机生成矩阵)。如果调试时遇到问题,那是另一个问题。因此,它必须是
    randommariks(*m,int n)?是的,我改了。。对不起,我粗心了。现在,仍然是4个错误,对不起……)我留下问题。哦,你能帮我打电话给管理员删除这些问题吗?thanks@sinta当前位置问题还不错,你不应该在问题中修正它。把它装在你的机器上。当你有新问题时,问一个新问题。@sinta:好的,我为你回滚了这个问题。我的答案是基于你的代码的固定版本,现在已经回滚到原始的不可编译版本。:)哦,哈,没问题。我也同意这样一个事实,原来的问题不应该在这样的答案下改变,所以原来的版本应该是“实时”版本,这样的答案不会让未来的人看到这个页面时“嗯??”。
    
    int main(int argc, char *argv[]) {
                 ^^^^        ^^^^
        int n_order = 0 , i, j;
                             ^^^