2014-10-07 64 views
-3

這是我的嘗試。我不完全肯定我用指針操作。也許這就是爲什麼我錯了,也許還有其他一些情況。我想從用戶那裏獲取維度並創建一個矩形矩陣,對其元素進行一些操作,並將原始結果和結果顯示給用戶。上次我通過創建一個100x100數組來完成這個任務,並且通過常量指定每行的結尾和行尾。然後,我會打印所有元素達到這個常量。但爲4x4矩陣創建100x100陣列似乎並不正確。我可以創建一個更小的陣列,但這似乎不是解決問題的正確方法。有沒有辦法在C創建一個完全由用戶指定大小的二維數組(它將是一個方形數組)。謝謝如何創建一個二維數組,其維度由用戶指定? (在C)

#include <stdio.h> 
#include <stdlib.h> 

double * createMatrix(int dimentions); 
void drawMatrix(double * matrix); 

int main(void) 
{ 
    int n, i, j; 
    system("cls"); 
    system("color 70"); 
    system("pause"); 

    puts("Enter the matrix's dimension"); 
    scanf("%i", &n); 
    double * pmatrix = createMatrix(n); 

    for (i = 0; i < n; ++j) 
     for (j = 0; j < n; ++j) 
     { 
      printf("A%i%i: ", i + 1, j + 1); 
      scanf("%lf", pmatrix[i][j]); 
      getchar(); 
     } 

    for (i = 0; i < n; ++i) 
    { 
     putchar('\n'); 
     for (j = 0; j < n; ++j) 
      printf(" %lf ", &pmatrix[i][j]); 
    } 

    system("color 08"); 
    return 0; 
} 

double * createMatrix(int n) 
{ 
    const int N = n; 
    const int N1 = N; 
    double matrix[N][N]; 
    double * pmatrix = matrix; 
    return pmatrix; 
} 
+0

C中沒有辦法創建具有運行時維的標準二維數組。它必須動態完成。 – wallyk 2014-10-07 16:57:53

+0

@wallyk type arr [a] [b];其中a和b是局部變量。 – 2501 2014-10-07 16:58:37

+0

你現在的代碼有什麼問題? – gaurav5430 2014-10-07 17:00:28

回答

1

您可以直接創建矩陣;你不需要這個功能。通過聲明一個2-d陣列中的常規方式替換碼

double * pmatrix = createMatrix(n); 

:使用指針做它的

double matrix[n][n]; 
+0

我在想這件事,現在我試試 – sasha199568 2014-10-07 17:26:29

+1

它工作起來,我從一開始就想過,但是我在某處讀到C中不可能的東西,或者我的老師告訴過我。下次我要測試新的信息。 – sasha199568 2014-10-07 17:50:46

0

另一種方式。

#include <stdio.h> 
#include <stdlib.h> 
int main (int argc, char *argv[]) 
{ 
    double **pmatrix; 
    int rowsize, colsize, i, j; 

    printf("Enter the number of rows: "); 
    scanf("%d",&rowsize); 
    printf("Enter the number of columns: "); 
    scanf("%d",&colsize); 

    //Allocate memory for 2D array 
    pmatrix = malloc(rowsize*sizeof(double*)); 
    for(i=0;i<rowsize;i++) 
    { 
     pmatrix[i] = malloc(colsize*sizeof(int)); 
    } 

    //Accepting the values 
    for(i=0;i<rowsize;i++) 
    { 
     for(j=0;j<colsize;j++) 
     { 
      printf("A %i %i: ", i + 1, j + 1); 
      scanf("%lf",&pmatrix[i][j]); 
     } 
    } 

    //Printing the values 
    for(i=0;i<rowsize;i++) 
    { 
     for(j=0;j<colsize;j++) 
     { 
      printf("%lf\t",pmatrix[i][j]); 
     } 
     printf("\n"); 
    } 

    //Free the memory 
    for(i=0;i<rowsize;i++) 
     free(pmatrix[i]); 
    free(pmatrix); 

    return 0; 
}