2017-03-22 2 views
0

while 루프를 사용하여 두 개의 3x3 행렬을 함께 추가해야합니다. while 루프를 사용하여 두 행렬을 읽고 인쇄 할 수 있지만 while 루프를 사용하여 행렬을 추가하는 방법을 배울 수는 없습니다.while 루프를 사용하여 행렬 추가

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

int main() 
{ 

    int i=0,j=0,k=0,l=0,m=0,n=0; 
    int a[3][3],b[3][3],c[3][3]; 

    printf("Enter the first matrix \n \n"); 
    while(i<3) 
    { 
     j=0; 
     while(j<3) 
     { 
      scanf("%d",&a[i][j]); 
      j++; 
     } 
     i++; 
    } 
    printf("\n"); 
    printf("The first matrix is \n\n"); 
    i=0; 
    while(i<3) 
    { 
     j=0; 
     while(j<3) 
     { 
      printf("%d ",a[i][j]); 
      j++; 
     } 
     printf("\n"); 
     i++; 
    } 
    printf("\n"); 

    ////////////////////////////////////////////////////////////////////////// 

printf("Enter the second matrix \n \n"); 

    while(k<3) 
    { 
     l=0; 
     while(l<3) 
     { 
      scanf("%d",&b[k][l]); 
      l++; 
     } 
     k++; 
    } 
    printf("\n"); 
    printf("The second matrix is \n\n"); 
    k=0; 
    while(k<3) 
    { 
     l=0; 
     while(l<3) 
     { 
      printf("%d ",b[k][l]); 
      l++; 
     } 
     printf("\n"); 
     k++; 
    } 
    printf("\n"); 

    /////////////////////////////////////////////////////////////////////////////// 

    printf("The sum of the matrix's is \n \n"); 

    return 0; 
} 
+1

그것은 이중 루프의 같은 스타일이다; 'b [k] [l]'과'a [k] [l]'의 각 개체를 합치고'c [k] [l]'에 할당하십시오. – Evert

+1

for-loops를 사용하지 않는 이유가 무엇입니까? 그들은 본질적으로 동일 할 것이지만 의미 적으로, 크기에 고정되어 있기 때문에 훨씬 더 의미가 있습니다. – Evert

+0

코드를 한눈에 보면 배열 인덱스가 특정 배열에 속한다는 오해에서 비롯된 것이라고 생각합니다. i와 j는 a에만, k와 l은 b에만 사용합니다. 다른 배열에 대해 동일한 인덱스를 재설정하고 재활용 할 수 있습니다. – Evert

답변

0

문제를 해결하여 문제를 해결하십시오. 예 :

  1. 2 차원 배열을 반복하는 방법은 무엇입니까?
  2. 값을 가져 와서 배열을 반복하면서 변수에 값을 할당하는 방법은 무엇입니까?
  3. 값을 조작하는 방법 (사용자의 경우 다른 것으로 추가)
  4. 새 배열의 올바른 위치에 값을 삽입하는 방법.
1
int matrix_a [3][3] = {{1,2,3},{3,4,5},{4,5,6}}; 
int matrix_b [3][3] = {{5,6,7},{6,7,8},{7,8,9}}; 

int i = 0; 
while (i < 3) { 
    j = 0; 
    while (j < 3) { 
     matrix_a[i][j] += matrix[i][j]; 
     ++ j; 
    } 
    ++ i; 
} 

for 루프는 훨씬 더 나은 선택이 될 것입니다 :

for (int i = 0; i < 3; ++ i) { 
    for (int j = 0; j < 3; ++ j) { 
     matrix_a[i][j] += matrix_b[i][j]; 
    } 
} 

Superoptimal 포인터 산술 대안 :

int* ptr_a = matrix_a; 
int* ptr_b = matrix_b; 

int size = 3 * 3; 
while (size --) { 
    * ptr_a++ += * ptr_b++; 
} 
0

당신은 추가 할 아래의 코드를 추가 할 수 있습니다 :

   k=0; 
       while(k<3) 
       { 
        l=0; 
        while(l<3) 
        { 
         c[k][l] = a[k][l]+b[k][l]; 
         l++; 
        } 
        k++; 
       } 

그리고 매트릭스를 표시하려면 while 대신 for 루프를 사용할 수 있습니다.

예 :

for(int p =0;p<3;p++){ 
     for(int q=0;q<3;q++){ 
      c[p][q] = a[p][q] + b[p][q] ; 
     } 
    } 

    for(int p =0;p<3;p++){ 
     for(int q=0;q<3;q++){ 
      printf("%d \t",c[p][q]) ; 
     } 
     printf("\n"); 
    } 
관련 문제