책 내용 질문하기
485 문제3번
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
485
조회수
227
작성일
2019-05-27
작성자
강*훈
첨부파일
이 문제에서 n= strlen(st); (i am tom! 총 9홉자리) 배열 0번부터 8번까지 이면 n--; 엔을 감소시키면 총 8자리 배열 0번부터 7번부으로 감소되는거 맞나요?
답변
2019-05-28 11:33:38

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

 

배열 st는 널값을 포함하여 총 9자리 입니다. 

strlen(st)를 하게 되면 9를 반환하게 되죠.

 

이때 strlen(st)를 받은 n을 1 감산하게 되면 8이되고,

 

for문을 통해 0부터 n미만 즉, k는 0~7까지 반복해야 하죠.

근데 여기서 문제는 최대값을 지정하는 n이 ⑩에서 계속 감산된다는 것입니다.

처음에는 7까지 반복해야 했지만, 다음에는 6, 5, 4로 줄어들면서 결국 중간값에서 멈추게 되죠.

결과적으로 for문은 0부터 3까지는 4회만 회전하고 종료하게 됩니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-05-28 11:33:38

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

     

    배열 st는 널값을 포함하여 총 9자리 입니다. 

    strlen(st)를 하게 되면 9를 반환하게 되죠.

     

    이때 strlen(st)를 받은 n을 1 감산하게 되면 8이되고,

     

    for문을 통해 0부터 n미만 즉, k는 0~7까지 반복해야 하죠.

    근데 여기서 문제는 최대값을 지정하는 n이 ⑩에서 계속 감산된다는 것입니다.

    처음에는 7까지 반복해야 했지만, 다음에는 6, 5, 4로 줄어들면서 결국 중간값에서 멈추게 되죠.

    결과적으로 for문은 0부터 3까지는 4회만 회전하고 종료하게 됩니다.

     

    행복한 하루되세요 :)

  • 관리자
    2019-05-29 11:29:17

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

     

    혼동을 드려 사과드립니다.

     

    st의 전체 문자 길이는 9, 널값을 포함한 전체 길이는 0~9 로 총 10

    strlen으로 반환되는 값은 9입니다.

     

    5번에서 n--를 수행하면, 다음 for문은 

    for(k=0; k<8; k++) 이렇게 됩니다. 

    다만 디버깅표를 작성해보시면 아시겠으나

    10번에에서 해당 for문의 최대값을 계속 감소시킵니다.(n--)

    이를 고려하면

     

    1회전 때는 for(k=0; k<8; k++) 이었으나 (k는 0)

    2회전 때는 조건식이 k<7로 바뀌고, (k는 1)

    3회전 때는 조건식이 k<6로 바뀌고, (k는 2) 

    4회전 때는 조건식이 k<5로 바뀌고, (k는 3)

    5회전 때는 k가 4인 상태에서 k<4 조건식을 만나 거짓이 8~10번 코드를 수행하지 않고 for문을 빠져나가게 되죠. 

     

    즉, for문에서 k는 0부터 3까지 수행되며, st[0]~[3]을 st[8]~st[5]와 교환하는 작업을 수행하게 되죠.

     

    행복한 하루되세요 :)

  • *
    2019-05-28 21:50:41

    문제 설명에서는 널 값을 제외한 9의 길이가 저장된다고 되있습니다.

     

    C언어에 strlen 함수는 널값을 제외한 모든 문자열(띄어쓰기 포함) 9개요

     

    지금 설명하시는거랑 틀리네요 알기쉽게 좀 설명 부탁드립니다

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