책 내용 질문하기
질문요
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
62
조회수
298
작성일
2017-03-29
작성자
첨부파일

62쪽 5번

123456789.0e-5f 에서

%6.1f 가 6자리까지는 이해했는데 답에왜 5는 없이1234.6 인지.

%e는 중간에 7이 왜 업어지는 이해가 안됩니다.

108쪽 19번

hap2 (10*10)%4 -(10%9)+5 가 4인게 이해가 안됩니다.

0? - 6??

114쪽 32번

A의 아스키코드값이 65라는데 어찌구하는건가요?>

34번

왜 답은 5개를 쓰는지와 1일때 왜 0 인지 이해가안됩니다.

35번

디버깅을 알고 싶습니다.

117쪽 40번

hap를 계속더하면 1,3,6,10,15,으로 증가하는 것 같은데 왜 6이 되는지 이해가 안갑니다

234쪽 3번동그리미

B배열의 값이 50 52 54 46 48이 어떻게 되는지 자세한 설명 부탁드립니다.

267쪽 14번 동그라미

while(j<8-i) 왜 8이 되는지 이해가 안됩니다.

질문이 좀 많아도 자세한 답변부탁드립니다.ㅠㅠ

답변
2017-03-30 10:39:25

안녕하세요.

1)

안녕하세요.

float a = 123456789.0e-5f;

printf("소수점a = &6.1f 지수형a = %e\n", a, a);

123456789.0e-5f 에 의해 지수형태로 저장된 a의 값을 원래대로 변경하면 소수점 위치를 왼쪽으로 5칸 이동한 값인

1234.56789가 됩니다.

이 값을 6.1f로 출력하면

______ 소수점을 포함하여 6자리를 확보하여 소수점 1자리를 출력해야 하므로

____.6 이 됩니다. 소수점 첫 째자리까지 출력해야 하는데, 둘째 자리에서 반올림이 되어 .6이 출력되었습니다.

나머지 4자리에 정수 부분을 출력합니다. 만일 출력할 정수 부분보다 확보된 자리수가 적으면 정수는 모두 출력됩니다.

1234.6이 출력됩니다.

%e로 출력하면

소수점 자리수가 지정되지 않으면 f나 e는 모두 기본적으로 소수점 6자리로 출력합니다.

e는 정수 부분을 1자리만 출력하므로

1.234568 이 됩니다. 역시 소수점 마지막 6자리는 7째 자리에서 반올림 된 것이고

1.234568 은 원래의 값 1234.56789에서 소수점 위치가 왼쪽으로 3자리 이동했으므로 e+03이 되어

1.234568e+03으로 출력이 되는 것입니다.

2)

hap2 10 * 10 % 4 - 10 % 9 + 5

연산자 우선순위(60쪽)를 참고하면

산술 연산자는 * / % 가 + - 보다 우선합니다.

* / %는 우선순위가 같으므로 왼쪽에서 오른쪽 순으로 진행합니다. 이 기준에 따라

hap2 = (10*10) % 4 - (10%9) + 5 로 계산됩니다.

= 100 % 4 - 1 + 5

= 0 - 1 + 5

= 4

3)

컴퓨터에서 내부적으로 문자가 처리될 때 아스키코드 값으로 처리가 됩니다.

대문자 A는 65라는 값으로 표현이 됩니다. 각 문자마다 코드 값이 지정되 있지만 이 코드를 암기할 필요는 없습니다.

int ch = 'A';와 같이 문자를 정수형 변수에 저장하면 아스키 코드값으로 변환되어 저장된다는 것만 이해하시면 됩니다.

4)

먼저 i가 1인 상태에서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은1 0입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 2가되고 hap += i에 의해 hap은 2가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은2 2입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 3이되고 hap += i에 의해 hap은 5가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은3 5입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 4가되고 hap += i에 의해 hap은 9가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은4 9입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 5가되고 hap += i에 의해 hap은 14가 됩니다.
이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
출력은 : 합은5 14입니다.

그런 다음 증가값 부분의 수식을 순차적으로 진행하여
++i로 인해 i는 6이되고 hap += i에 의해 hap은 20이 됩니다.
이어서 종료값을 비교합니다. i<=5에서 No이므로 반복문을 벗어난 후 프로그램을 종료합니다.

5)

for(i = 1; i<=5 ; ++i); <- for문 뒤에 ; 이 있으면 아래 문장은 반복문에 포함되지 않습니다.

즉 for문 안의 i만 증가된 후 for문을 빠져나와

hap+=i가 수행되므로 for문을 빠져나온 후의 i 값인 6만 hap에 누적됩니다.

6)

각 자리의 값이 누적됩니다.

98765

87654

76543

위 3값을 각 자리마다 누적하면

맨 앞자리 값 3개를 누적하면

9+8+7 = 24

두 번째 자리 값 3개를 누적하면

8+7+6 = 21

....

이와 같이 각 자리를 누적하면

24, 21, 18, 15, 12가 되며 이와 같은 원리로 각각을 배열에 누적한 것이

50 52 54 46 48이 된 것입니다.

7)

j<8-i, 즉 j가 8-i보다 작을 때까지 반복 수행한다는 것은

i가 0일 때 j는 0~8 변경됩니다. 즉 data[0] ~ data[8]까지 변경되죠

이때 비교되는 값은 data[1] ~ data[9]가 되므로 data 배열의 값을 모두 컨트롤 하게 됩니다.

직접 값을 넣어서 디버깅을 수행해 보면서 각 변수의 값 변화를 살펴보면 좀 더 쉽게 이해될 수 있습니다.

오늘도 즐거운 하루 되세요.

  • *
    2017-03-30 10:39:25

    안녕하세요.

    1)

    안녕하세요.

    float a = 123456789.0e-5f;

    printf("소수점a = &6.1f 지수형a = %e\n", a, a);

    123456789.0e-5f 에 의해 지수형태로 저장된 a의 값을 원래대로 변경하면 소수점 위치를 왼쪽으로 5칸 이동한 값인

    1234.56789가 됩니다.

    이 값을 6.1f로 출력하면

    ______ 소수점을 포함하여 6자리를 확보하여 소수점 1자리를 출력해야 하므로

    ____.6 이 됩니다. 소수점 첫 째자리까지 출력해야 하는데, 둘째 자리에서 반올림이 되어 .6이 출력되었습니다.

    나머지 4자리에 정수 부분을 출력합니다. 만일 출력할 정수 부분보다 확보된 자리수가 적으면 정수는 모두 출력됩니다.

    1234.6이 출력됩니다.

    %e로 출력하면

    소수점 자리수가 지정되지 않으면 f나 e는 모두 기본적으로 소수점 6자리로 출력합니다.

    e는 정수 부분을 1자리만 출력하므로

    1.234568 이 됩니다. 역시 소수점 마지막 6자리는 7째 자리에서 반올림 된 것이고

    1.234568 은 원래의 값 1234.56789에서 소수점 위치가 왼쪽으로 3자리 이동했으므로 e+03이 되어

    1.234568e+03으로 출력이 되는 것입니다.

    2)

    hap2 10 * 10 % 4 - 10 % 9 + 5

    연산자 우선순위(60쪽)를 참고하면

    산술 연산자는 * / % 가 + - 보다 우선합니다.

    * / %는 우선순위가 같으므로 왼쪽에서 오른쪽 순으로 진행합니다. 이 기준에 따라

    hap2 = (10*10) % 4 - (10%9) + 5 로 계산됩니다.

    = 100 % 4 - 1 + 5

    = 0 - 1 + 5

    = 4

    3)

    컴퓨터에서 내부적으로 문자가 처리될 때 아스키코드 값으로 처리가 됩니다.

    대문자 A는 65라는 값으로 표현이 됩니다. 각 문자마다 코드 값이 지정되 있지만 이 코드를 암기할 필요는 없습니다.

    int ch = 'A';와 같이 문자를 정수형 변수에 저장하면 아스키 코드값으로 변환되어 저장된다는 것만 이해하시면 됩니다.

    4)

    먼저 i가 1인 상태에서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은1 0입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 2가되고 hap += i에 의해 hap은 2가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은2 2입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 3이되고 hap += i에 의해 hap은 5가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은3 5입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 4가되고 hap += i에 의해 hap은 9가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은4 9입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 5가되고 hap += i에 의해 hap은 14가 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 Yes이므로 반복문을 진입합니다.
    system.out.printf("합은%d %4d입니다.\n", i, hap); 에 의해
    출력은 : 합은5 14입니다.

    그런 다음 증가값 부분의 수식을 순차적으로 진행하여
    ++i로 인해 i는 6이되고 hap += i에 의해 hap은 20이 됩니다.
    이어서 종료값을 비교합니다. i<=5에서 No이므로 반복문을 벗어난 후 프로그램을 종료합니다.

    5)

    for(i = 1; i<=5 ; ++i); <- for문 뒤에 ; 이 있으면 아래 문장은 반복문에 포함되지 않습니다.

    즉 for문 안의 i만 증가된 후 for문을 빠져나와

    hap+=i가 수행되므로 for문을 빠져나온 후의 i 값인 6만 hap에 누적됩니다.

    6)

    각 자리의 값이 누적됩니다.

    98765

    87654

    76543

    위 3값을 각 자리마다 누적하면

    맨 앞자리 값 3개를 누적하면

    9+8+7 = 24

    두 번째 자리 값 3개를 누적하면

    8+7+6 = 21

    ....

    이와 같이 각 자리를 누적하면

    24, 21, 18, 15, 12가 되며 이와 같은 원리로 각각을 배열에 누적한 것이

    50 52 54 46 48이 된 것입니다.

    7)

    j<8-i, 즉 j가 8-i보다 작을 때까지 반복 수행한다는 것은

    i가 0일 때 j는 0~8 변경됩니다. 즉 data[0] ~ data[8]까지 변경되죠

    이때 비교되는 값은 data[1] ~ data[9]가 되므로 data 배열의 값을 모두 컨트롤 하게 됩니다.

    직접 값을 넣어서 디버깅을 수행해 보면서 각 변수의 값 변화를 살펴보면 좀 더 쉽게 이해될 수 있습니다.

    오늘도 즐거운 하루 되세요.

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