책 내용 질문하기
이해가 안되는 부분이 있어서 질문 드립니다.
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
121,122
조회수
689
작성일
2019-05-18
작성자
탈퇴*원
첨부파일
질문1. 121쪽 문제 25번에 for(i = 1; i <= 10; ++i, hap += i;); 이런식을 C언어에서도 그대로 적용할 수 있나요? 증가값 적는부분에 두개의 식을 쓰는 것 말이죠. 아니면 이것도 java에서 적용되는 향상된 for형식인가요? 질문2. 122쪽 문제 26번에 답이 true인데 C언어에서는 1로 쓰던데 java에서는 무조건 true로 적어야 하나요? 1로 적으면 오답인가요? 그리고 역으로 C언어에서도 true로 쓸수 있는지 궁금합니다. 질문3. 123쪽 문제28번에 for(int i = 0; i < 5; i++, p += i;); 에서 i++이 후치 연산자라고 생각하고 풀었는데 오답이더군요. 콤마로 나누어져 있어 순서대로 실행해서 그런건가요? 아니면 for문 안에서는 후치 연산자가 의미가 없는 건가요? 질문4. C언어에서는 문자열을 사용하려면 char를 배열로 만들어서 사용해서 마지막에 널문자가 들어간다고 했는데 Java에서는 String을 사용해 문자열을 만들면 마지막에 널문자가 안 들어가나요? 그리고 Java에서 C언어처럼 char 배열을 만들어 문자열을 저장시키면 마지막에 널문자가 들어가는지 궁금합니다. 질문5. 질문4에 이은 비슷한 질문인데 129쪽 42번 문제처럼 String 배열을 만들어도 마지막에 널문자가 들어가나요? C언어에서도 문자열을 char문자를 이중 배열을 써서 문자열 배열을 만들 수 있나요? 이 경우에도 널문자가 들어가는지 궁금합니다. 질문6. 133쪽에 49번 문제의 제일 마지막줄에 a가 문자형으로 선언이 되었는데 왜 서식 문자열을 %s로 받는건가요? %c가 맞는 것 아닌가요? for(char a : st) System.out.printf("%s", a); 질문7. 136쪽에 54번 문제 push 함수에 push(int i) 왜 정수형으로 받는지 모르겠습니다. A B C 처럼 문자를 넣는데도 오류가 없는건가요? 질문8. 알고리즘 순서도 문제를 풀 때 x(곱하기)를 *로 써도 관계 없나요? 질문9. p.163 문제와 같이 -1를 곱하는 문제에서 (-1) 형태로 꼭 써야하나요? ( )를 안써도 관계 없나요?
답변
2019-05-21 15:26:32

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

 

[1]

예, 동일하게 적용이 가능하며, java의 향상된 for문과는 별개입니다.

for문 내의 각 식들은 세미콜론(;)으로 구분되는 별개의 식으로 콤마(,)를 부여하여 여러 식을 중첩하여 넣는 것이 가능합니다.

이는 for문만이 아닌 일반 식에서도 사용이 가능합니다.

 

int a, b;

a = 0, b = 3;

 

이런 식으로 말이죠.

 

 

[2]

예, Java에서는 true, C에서는 1을 '참'으로 인식합니다.

만약 서로 다른 예약어를 사용하고 싶다면(예를 들어 C에서 true를 쓴다거나 Java에서 1을 쓰는 등) 앞에서 미리 선언하거나, 관련 정의가 첨부된 외부파일을 로딩해야 합니다.

 

 

[3]

전자가 맞습니다.

콤마(,)로 구분된 식은 서로 별개의 식입니다.

해당 식을 일반 식으로 표현하자면,

i++;

p+=i;

와 동일하죠.

전치수식과 후치수식이 영향을 줄 수 없는 관계입니다.

 

 

[4]

Java에서도 char배열을 생성하여 처리하면 C와 동일하게 NULL문자가 부여됩니다.

이는 String에서도 마찬가지입니다.

String은 사용자가 문자열을 처리하는 것을 편리하도록 도와줄 뿐, 처리과정은 char배열로 처리하는 것과 동일합니다.

그렇다고 String.length로 문자길이를 찍는다고 하여 널문자까지 개수를 세지는 않습니다. 자동으로 널을 누락한 문자의 개수만을 출력하죠. 단순히 문자열을 처리하는 과정이 char배열을 사용하는 것과 동일하다는 이야기 입니다.

 

 

[5]

예, 문자열의 마지막에는 널문자가 없으면 오류가 발생합니다.

출력시 문자열의 길이를 고려하여 출력문을 설정한다면 상관 없으나, 기본적인 문자열 입력방식을 이용하면 널문자가 들어가게 되어 있죠.

자바의 해당 string 선언문을 c의 char배열로 바꾼다면,

char *a[6];

a[0] = "Seoul";

a[1] = "Incheon";

a[2] = "Kyonggi";

a[3] = "Daejun";

a[4] = "Daegu";

a[5] = "Pusan";

이렇게 사용이 가능하겠네요.

각 a[0]~a[5]의 마지막 글자 다음에는 널이 들어가게 됩니다.

 

 

[6]

예, 맞습니다.

해당 위치에는 서식문자열은 %c가 더 적합하네요.

다만 char배열의 특정 요소([0]과 같이 단 한 개의)를 출력할 때는 %s를 써도 %c와 동일하게 출력되므로 틀린 것은 아닙니다.

(C에서는 오류가 발생합니다. Java에서만 가능합니다.)

 

 

[7]

이건 char이라는 자료형에 대한 설명이 필요하겠네요.

우리가 문자로 저장하는 char형은 사실 문자형 같지만, 컴퓨터에 저장되는 값은 정수형과 동일합니다.

즉 'A'라는 문자를 저장하면, 'A' 아스키값인 65가 저장되게 되어 있죠.

때문에 해당 문제와 같이 A,B,C~ 를 인수로 보낼 때 실제 전송되는 값은 65, 66, 67이 전송되어 처리된 후, pop()함수에서 출력될 때 "%c"를 만나 문자로 출력되는 것입니다.

 

int a = 65를 선언한후, printf("%c", a)를 하게 되면 A가 출력되는 것으로 쉽게 확인해 볼 수 있습니다.

 

 

[8]

곱셈, 나눗셈 기호의 경우 문제나 <처리조건> 또는 순서도의 다른 위치에 명시된 대로 적어주시고, 만약 어느곳도 없다면 무엇을 써도 상관 없습니다.

 

 

[9]

괄호()를 사용하지 않아도 연산순서에 문제가 없는 경우는 사용하지 않으셔도 관계없습니다.

163쪽의 경우 단순히 수험자분들이 편하게 구분하시라고 괄호를 적은 것일 뿐 해당 정답의 경우 ()를 제외해도 문제는 없습니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-05-21 15:26:32

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

     

    [1]

    예, 동일하게 적용이 가능하며, java의 향상된 for문과는 별개입니다.

    for문 내의 각 식들은 세미콜론(;)으로 구분되는 별개의 식으로 콤마(,)를 부여하여 여러 식을 중첩하여 넣는 것이 가능합니다.

    이는 for문만이 아닌 일반 식에서도 사용이 가능합니다.

     

    int a, b;

    a = 0, b = 3;

     

    이런 식으로 말이죠.

     

     

    [2]

    예, Java에서는 true, C에서는 1을 '참'으로 인식합니다.

    만약 서로 다른 예약어를 사용하고 싶다면(예를 들어 C에서 true를 쓴다거나 Java에서 1을 쓰는 등) 앞에서 미리 선언하거나, 관련 정의가 첨부된 외부파일을 로딩해야 합니다.

     

     

    [3]

    전자가 맞습니다.

    콤마(,)로 구분된 식은 서로 별개의 식입니다.

    해당 식을 일반 식으로 표현하자면,

    i++;

    p+=i;

    와 동일하죠.

    전치수식과 후치수식이 영향을 줄 수 없는 관계입니다.

     

     

    [4]

    Java에서도 char배열을 생성하여 처리하면 C와 동일하게 NULL문자가 부여됩니다.

    이는 String에서도 마찬가지입니다.

    String은 사용자가 문자열을 처리하는 것을 편리하도록 도와줄 뿐, 처리과정은 char배열로 처리하는 것과 동일합니다.

    그렇다고 String.length로 문자길이를 찍는다고 하여 널문자까지 개수를 세지는 않습니다. 자동으로 널을 누락한 문자의 개수만을 출력하죠. 단순히 문자열을 처리하는 과정이 char배열을 사용하는 것과 동일하다는 이야기 입니다.

     

     

    [5]

    예, 문자열의 마지막에는 널문자가 없으면 오류가 발생합니다.

    출력시 문자열의 길이를 고려하여 출력문을 설정한다면 상관 없으나, 기본적인 문자열 입력방식을 이용하면 널문자가 들어가게 되어 있죠.

    자바의 해당 string 선언문을 c의 char배열로 바꾼다면,

    char *a[6];

    a[0] = "Seoul";

    a[1] = "Incheon";

    a[2] = "Kyonggi";

    a[3] = "Daejun";

    a[4] = "Daegu";

    a[5] = "Pusan";

    이렇게 사용이 가능하겠네요.

    각 a[0]~a[5]의 마지막 글자 다음에는 널이 들어가게 됩니다.

     

     

    [6]

    예, 맞습니다.

    해당 위치에는 서식문자열은 %c가 더 적합하네요.

    다만 char배열의 특정 요소([0]과 같이 단 한 개의)를 출력할 때는 %s를 써도 %c와 동일하게 출력되므로 틀린 것은 아닙니다.

    (C에서는 오류가 발생합니다. Java에서만 가능합니다.)

     

     

    [7]

    이건 char이라는 자료형에 대한 설명이 필요하겠네요.

    우리가 문자로 저장하는 char형은 사실 문자형 같지만, 컴퓨터에 저장되는 값은 정수형과 동일합니다.

    즉 'A'라는 문자를 저장하면, 'A' 아스키값인 65가 저장되게 되어 있죠.

    때문에 해당 문제와 같이 A,B,C~ 를 인수로 보낼 때 실제 전송되는 값은 65, 66, 67이 전송되어 처리된 후, pop()함수에서 출력될 때 "%c"를 만나 문자로 출력되는 것입니다.

     

    int a = 65를 선언한후, printf("%c", a)를 하게 되면 A가 출력되는 것으로 쉽게 확인해 볼 수 있습니다.

     

     

    [8]

    곱셈, 나눗셈 기호의 경우 문제나 <처리조건> 또는 순서도의 다른 위치에 명시된 대로 적어주시고, 만약 어느곳도 없다면 무엇을 써도 상관 없습니다.

     

     

    [9]

    괄호()를 사용하지 않아도 연산순서에 문제가 없는 경우는 사용하지 않으셔도 관계없습니다.

    163쪽의 경우 단순히 수험자분들이 편하게 구분하시라고 괄호를 적은 것일 뿐 해당 정답의 경우 ()를 제외해도 문제는 없습니다.

     

    행복한 하루되세요 :)

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