int printf(const char *, ...); void initGeMatrix(int m, int n, double *A, int incRowA, int incColA) { int i, j; for (i=0; i<m; ++i) { for (j=0; j<n; ++j) { A[i*incRowA+j*incColA] = i*n + j + 1; } } } void printGeMatrix(int m, int n, const double *A, int incRowA, int incColA) { int i, j; for (i=0; i<m; ++i) { for (j=0; j<n; ++j) { printf("%10.4lf ", A[i*incRowA+j*incColA]); } printf("\n"); } printf("\n\n"); } #ifndef DIM_M #define DIM_M 6 #endif #ifndef DIM_N #define DIM_N 8 #endif #ifndef ROWMAJOR #define ROWMAJOR 0 #endif #if (ROWMAJOR==1) # define INCROW_A DIM_N # define INCCOL_A 1 #else # define INCROW_A 1 # define INCCOL_A DIM_M #endif double A[DIM_M*DIM_N]; int main() { initGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); printf("A =\n"); printGeMatrix(DIM_M, DIM_N, A, INCROW_A, INCCOL_A); printf("A^T =\n"); printGeMatrix(DIM_N, DIM_M, A, INCCOL_A, INCROW_A); printf("diag(A) =\n"); printGeMatrix(DIM_M, 1, A, INCROW_A+INCCOL_A, INCCOL_A); return 0; } |