簡體   English   中英

矩陣乘法無法編譯

[英]matrix multiplication can't be compile

編譯時我遇到了一些麻煩

#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':未聲明的標識符

有沒有人可以幫我解決這個問題?

你錯過了一個分號。 而且你不能將變量命名為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;
                         ^^^

問題是你從來沒有初始化你的C數組,這是一個指向double的指針數組。 perkalianMatriks ,它是受尊重的,並且在那時,所有的賭注都是關於指針是什么(在你的情況下為0xfdfdfdfd)。

(我猜你可能不明白什么是**類型以及它應該如何使用?)

這不是為* B等分配內存的正確方法 請參閱為雙指針( * B) 分配內存的示例,以及其他指針的內存 還要照顧半冒號。

執行兩個矩陣的乘法非常簡單。

您可以在: solvec.com獲得一個簡單的線索

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM