2012-10-23 27 views
6

我正在嘗試編寫2個函數,一個讀取矩陣(2D數組)和另一個將其打印出來。到目前爲止,我有:使用指針/ malloc創建二維數組,然後將其打印出來

/* Read a matrix: allocate space, read elements, return pointer. The 
    number of rows and columns are given by the two arguments. */ 
double **read_matrix(int rows, int cols){ 

    double **mat = (double **) malloc(sizeof(double *)*rows); 
    int i=0; 
    for(i=0; i<rows; i++){ 
    /* Allocate array, store pointer */ 
    mat[i] = (double *) malloc(sizeof(double)*cols); 
    //what to do after?? 

    return mat; 
} 

然後打印矩陣功能,不知道這是否是正確的

void print_matrix(int rows, int cols, double **mat){ 
    for(i=0; i<rows; i++){ /* Iterate of each row */ 
    for(j=0; j<cols; j++){ /* In each row, go over each col element */ 
    printf("%f ",mat[i][j]); /* Print each row element */ 
} 
}} 

,這裏是我使用運行的主要功能:

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


double **read_matrix(int rows, int cols); 
void print_matrix(int rows, int cols, double **mat); 
void free_matrix(int rows, double **mat); 

int main(){ 

    double **matrix; 
    int rows, cols; 
    /* First matrix */ 
    printf("Matrix 1\n"); 
    printf("Enter # of rows and cols: "); 
    scanf("%d %d",&rows,&cols); 
    printf("Matrix, enter %d reals: ",rows*cols); 
    matrix = read_matrix(rows,cols); 
    printf("Your Matrix\n"); /* Print the entered data */ 
    print_matrix(rows,cols,matrix); 
    free_matrix(rows, matrix); /* Free the matrix */ 

    return 0;} 
+2

投票關閉,因爲它看起來像在代碼審查stackexchange的計算器而不是一個問題。雖然代碼看起來基本上很好。 –

+0

你確切的問題是什麼?我在這裏看不到任何問題...... – Christoph

+0

@BenJackson:它在[review.stackexchange](http://codereview.stackexchange.com/q/17833/6143)上被封爲[offtopic]。這不是一個好的體驗。 – jfs

回答

7

試試這個。可能對你有幫助。

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

double **read_matrix(int rows, int cols); 
void print_matrix(int rows, int cols, double **mat); 
void free_matrix(int rows, double **mat); 

double **read_matrix(int rows, int cols){ 

    double **mat = (double **) malloc(sizeof(double *)*rows); 
    int i=0,j=0; 
    for(i=0; i<rows; i++) 
    /* Allocate array, store pointer */ 
     mat[i] = (double *) malloc(sizeof(double)*cols); 

     for(i=0; i<rows; i++){ 
      for(j=0; j<cols; j++){ 
       scanf("%lf",&mat[i][j]); 
      } 
     } 
    return mat; 
} 

void print_matrix(int rows, int cols, double **mat){ 
    int i=0,j=0; 
    for(i=0; i<rows; i++){ /* Iterate of each row */ 
     for(j=0; j<cols; j++){ /* In each row, go over each col element */ 
      printf("%lf ",mat[i][j]); /* Print each row element */ 
     } 
     printf("\n"); 
    } 
} 

void free_matrix(int rows, double **mat){ 
    int i=0; 
    for(i=0;i<rows;i++)  
     free(mat[i]); 
    free(mat); 
} 

int main(){ 

    double **matrix; 
    int rows, cols; 
    /* First matrix */ 
    printf("Matrix 1\n"); 
    printf("Enter # of rows and cols: "); 
    scanf("%d%d",&rows,&cols); 
    printf("Matrix, enter %d reals: \n",rows*cols); 
    matrix = read_matrix(rows,cols); 
    printf("Your Matrix\n"); /* Print the entered data */ 
    print_matrix(rows,cols,matrix); 
    free_matrix(rows, matrix); /* Free the matrix */ 

    return 0; 
} 

執行:

:~$ gcc exam.c 
:~$ ./a.out 
Matrix 1 
Enter # of rows and cols: 3 
4 
Matrix, enter 12 reals: 
1 
2 
3 
4 
5 
6 
7 
8 
9 
9 
0 
1 
Your Matrix 
1.000000 2.000000 3.000000 4.000000 
5.000000 6.000000 7.000000 8.000000 
9.000000 9.000000 0.000000 1.000000 
+0

@Jenny不,這個代碼沒有seg-fault ..我編輯了步驟 –