본문 바로가기
작업/Programming

Perfect C 프로그래밍 연습 9장 4, 5, 6번 해결

 

문제 4.

 

이차원 배열 사용 방법

 

//문제4
    int A[][4] = {12, 30, 82, 54, 43, 51, 32, 47, 30, 42, 41, 69};

    //배열 A의 원소 값 출력
    for(int i=0; i<3; i++){ //행의 수만큼 반복
        for(int j=0; j<4; j++) { //열의 수만큼 반복
            printf("%d ", A[i][j]);
        }
        printf("\n");
    }

    //배열 A의 원소 값을 주어진 식으로 계산
    for(int i=0; i<3; i++){ //행의 수만큼 반복
        for(int j=0; j<4; j++) { //열의 수만큼 반복
            A[i][j] = A[i][j]*10+2;
        }
    }

    //계산 이후의 배열 A의 원소 출력
    for(int i=0; i<3; i++){ //행의 수만큼 반복
        for(int j=0; j<4; j++) { //열의 수만큼 반복
            printf("%d ", A[i][j]);
        }
        printf("\n");
    }

 

 

이차원 배열의 경우는 행과 열로 구성된 테이블을 다루는 것이기 때문에

이중 for문으로 사용해야 간편합니다.

 

밖의 for문은 행을 탐색하고, 안의 for문은 열을 탐색하는 식으로 구성합니다.

 


문제 5.

 

  //문제5
    int a[] = {4, 7, 9, 3, 6};
    int b[] = {10, 20, 30, 40, 50, 60};

    int countA = sizeof(a)/sizeof(a[0]); // a 원소 수
    int countB = sizeof(b)/sizeof(b[0]); // b 원소 수

    for(int i=0; i<countA; i++){
        //배열 b의 마지막 원소 다음부터 값 넣기
        b[countB+i] = a[i]; 
    }

    for(int j=0; j<countA+countB; j++){
        printf("%d ", b[j]);
    }

 

5번의 문제 해결 방식은 이전 블로깅의 3번과 동일합니다.

배열 b의 마지막 원소는 countB-1의 참조번호(index)를 가집니다.

 

 

이후 a의 값을 저장하기 위해서는 countB의 인덱스를 가진 위치부터 시작하고

a의 원소 개수(countA) 만큼 반복하여 값을 추가합니다.

 

인덱스에 접근하는 방법은 countB+i를 사용했습니다.

 

 


문제 6.

 

두 배열이 같음을 판별 (배열 원소 탐색)

 

 //문제6
    int a[] = {4, 7, 9, 3, 6};
    int b[] = {4, 7, 9, 3, 6, 1};
    int count = sizeof(a)/sizeof(a[0]);
    int ano = 0; //서로 다른 값인지 판단

    if(sizeof(a) == sizeof(b)){  
        //배열 a와 b가 가진 원소 수가 같으면

        for(int i=0; i<count; i++){
            if(a[i] != b[i]){  //원소 값이 다르다면
                ano++; //다르다는 의미의 수
            } 
            if(ano != 0){
                printf("a와 b는 서로 다른 배열(원소 값이 다름)\n");
                break;
            } 
        }
         if(ano == 0) //다른 값이 없다면
                 printf("a와 b는 서로 같은 배열\n");
    }
    else printf("a와 b는 서로 다른 배열(원소 개수 다름)\n");

 

 

첫 번째 조건은 배열의 크기에 따른 동등 유무입니다.

 

sizeof()를 사용하여 a와 b의 크기가 같은지 if문으로 검사합니다.

같다면 다음 조건을 검색하러 들어가고, 

그렇지 않다면 서로 다른 배열임을 알려주고 종료합니다.

 

 

두 번째 조건은 원소값의 동등 유무입니다.

같은 인덱스에 들어있는 값이 같아야 합니다.

 

 

for문을 통해 배열의 공간을 탐색할 수 있도록 합니다.

for문의 내부에 if문을 추가하여 두 번째 조건을 검사할 수 있도록 합니다.

 

 

배열의 원소값이 같다면 for문을 계속 진행하고,

배열의 원소값이 다르다면 다른 수가 있다는 것을 의미하는 ano 변수의 값을 1 증가시킵니다.

 

 

ano의 값이 1 이상이면 다른 수가 하나라도 있다는 의미이며

그것은 배열이 다르다는 것을 의미하기 때문에 더이상의 탐색이 필요 없습니다.

그래서 배열이 다르다고 출력시킨 다음 break로 for문을 탈출하여 종료합니다.

 

 

-끝-