책 내용 질문하기
C언어에서 버블정렬 비교횟수
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
275
조회수
58
작성일
2018-09-28
작성자
탈퇴*원
첨부파일

275페이지 c언어 동그라미14번에서 왜 조건이 j<8-i인지 이해가 가지 않습니다.

c언어에서는 순서도에 비해 i가 1 작으니까 J<9-i가 되는 것 아닌가요?

.

답변
2018-09-28 16:20:16

안녕하세요. 길벗 수험서 운영팀입니다.

배열의 각 주소값을 가리키는 i가 1작은 것만 생각하신다면 9-i가 맞습니다.

다만 C언어의 경우 배열의 주소가 0부터 시작한다는 것 또한 고려하셔야 합니다.

275쪽의 배열 data[10]은 data[0]~data[9]까지 10개의 저장소를 갖습니다.

첫 회전을 생각해보겠습니다.

첫 회전에서는 10개의 값을 버블정렬하기 위해서는 9번째에 if문이 data[8]과 data[9]를 비교하는 과정이 있어야 합니다.

첫 회전에서 i는 0값을 가집니다.(코드 6번, 코드 7번)

여기에서 회원님이 말씀하신 j<9-i를 적용하게 되면, 마지막에 회전하는 j의 값은 8이 됩니다.

j값이 8을 갖고 코드 9번 이후를 실행한다고 가정해 보겠습니다.

코드 9번에서 j가 9가 되고, 코드 10번에서 if문은 data[9]와 존재하지 않는 data[10]을 비교하는 조건문이 성립되어 버립니다.

오류가 발생하게 되죠.

이와 같이 코드나 순서도에서 의문점일 발생하는 경우 해당 의문이 발생하는 지점의 한계치 또는 분기점이 발생할 수 있는 수치를 넣어 디버깅하면 간단하게 해결되는 경우가 있습니다. 디버깅표를 모두 작성하지 않아도 의문점이 나는 부분들은 간단하게 디버깅해보시는 것을 권해드립니다.

행복한 하루되세요.^^

  • *
    2018-09-28 16:20:16

    안녕하세요. 길벗 수험서 운영팀입니다.

    배열의 각 주소값을 가리키는 i가 1작은 것만 생각하신다면 9-i가 맞습니다.

    다만 C언어의 경우 배열의 주소가 0부터 시작한다는 것 또한 고려하셔야 합니다.

    275쪽의 배열 data[10]은 data[0]~data[9]까지 10개의 저장소를 갖습니다.

    첫 회전을 생각해보겠습니다.

    첫 회전에서는 10개의 값을 버블정렬하기 위해서는 9번째에 if문이 data[8]과 data[9]를 비교하는 과정이 있어야 합니다.

    첫 회전에서 i는 0값을 가집니다.(코드 6번, 코드 7번)

    여기에서 회원님이 말씀하신 j<9-i를 적용하게 되면, 마지막에 회전하는 j의 값은 8이 됩니다.

    j값이 8을 갖고 코드 9번 이후를 실행한다고 가정해 보겠습니다.

    코드 9번에서 j가 9가 되고, 코드 10번에서 if문은 data[9]와 존재하지 않는 data[10]을 비교하는 조건문이 성립되어 버립니다.

    오류가 발생하게 되죠.

    이와 같이 코드나 순서도에서 의문점일 발생하는 경우 해당 의문이 발생하는 지점의 한계치 또는 분기점이 발생할 수 있는 수치를 넣어 디버깅하면 간단하게 해결되는 경우가 있습니다. 디버깅표를 모두 작성하지 않아도 의문점이 나는 부분들은 간단하게 디버깅해보시는 것을 권해드립니다.

    행복한 하루되세요.^^

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.