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、2 番目のパラメーターに使用するつもりだと思います。

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

問題は、Cdouble へのポインターへのポインターの配列である配列を初期化していないことです。ではperkalianMatriks、それは延期され、その時点で、ポインターが何であるか (あなたの場合は 0xfdfdfdfd) に関してすべての賭けがオフになります。

(**タイプが実際に何であり、どのように使用されるべきかを理解していないのではないでしょうか?)

于 2012-07-06T00:40:27.793 に答える
0

これは、* Bなどにメモリを割り当てる正しい方法ではありません。ダブルポインタ( * B)などの残りのポインタにメモリを割り当てる例を参照してください。セミコロンにも注意してください。

于 2012-07-06T05:21:29.247 に答える
0

2 つの行列の乗算を実行するのは非常に簡単です。

あなたは簡単な手がかりを得ることができます:solvedc.com

于 2012-07-06T05:28:50.040 に答える