2017-06-06 250 views
-3

我需要做一個小項目,但我完全不知道如何。 Im給出大小爲n的矩陣A,並且它必須返回矩陣B,其是矩陣A,具有歸零的第一列和倒數第二列。我所做的全部是矩陣列清零,C語言

#include<stdio.h> 
#include<math.h> 
int main() 
{ 
int i,n,j,; 
int tab[n][n]; 
printf("Size of matrix:"); 
scanf("%d",&n); 
for (i = 0; i < n; i++) 
for (j = 0; j < n; j++) 
{ 
    printf("A[%d][%d]=",i,j); 
    scanf("%lf",&tab[i][j]); 
} 
printf("Data:"); 
printf("Matrix A[%d][%d]",n,m); 
} 

我認爲應該讓我鍵入我的矩陣。接下來我應該做什麼?請幫幫我。

+1

提示:隨着'INT I,N,J,; int tab [n] [n];',在'int tab [n] [n];'中使用的'n'的值是多少? – chux

+0

最好發佈真正的可編譯代碼:'printf(「Matrix A [%d] [%d]」,n,m);'m'定義在哪裏? – chux

+0

注意'int [n]'是非標準的c。爲了達到標準,如果你想要一個動態調整大小的數組,你需要使用malloc,free等。 – pm100

回答

0

代碼中存在很多錯誤,變量m未聲明,雙數組聲明爲n未初始化。由於矩陣的大小隻有在運行時才知道(由用戶輸入),您需要使用動態內存分配函數爲矩陣分配內存。

試試這個代碼:

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

int main(void) 
{ 
    int i, j, n; 
    printf("Size of matrix: "); 
    scanf("%d", &n); 

    int *tab = (int*)malloc(sizeof(int)*n*n); 

    for (i = 0; i < n; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      printf("A[%d][%d]=",i,j); 
      scanf("%d",(tab+i*n+j)); 
     } 
    } 

    for (i = 0; i < n; i++) 
    { 
     *(tab+i*n) = 0; 
     *(tab+i*n+n-2) = 0; 
    } 

    //Print tab 
    for (i = 0; i < n; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      printf("%d ", *(tab+i*n+j)); 
     } 
     printf("\n"); 
    } 

    return 0; 
}