Tech Trail

[정보처리기사 실기] C언어 프로그래밍 특강(1) 본문

Learning/정보처리기사

[정보처리기사 실기] C언어 프로그래밍 특강(1)

_밍지_ 2023. 11. 16. 09:44
728x90
반응형
SMALL

1번 문제

#include <stdio.h>

void main() {
    float a = 3 / 2;       // 정수 나눗셈 결과를 부동 소수점 변수에 할당
    float b = 3.0 / 2;     // 부동 소수점 나눗셈 결과를 부동 소수점 변수에 할당
    int c = (int)b;        // 부동 소수점 변수를 정수로 변환하여 정수 변수에 할당
    printf("%7.3f%7.3f%3d\n", a, b, c);
}

 

(1) #include <stdio.h>

: 이 코드는 표준 입력 및 출력 함수를 사용하기 위해 필요한 헤더 파일을 포함합니다.

(2) void main()

: C 프로그램은 main 함수에서 실행을 시작하므로 main 함수를 정의합니다.

void는 이 함수가 아무 값도 반환하지 않음을 의미합니다.

(3) float a = 3 / 2;

: 변수 a는 3을 2로 나눈 결과를 부동 소수점으로 저장합니다.

그러나 여기서 주의할 점은 나눗셈 연산이 정수 나눗셈으로 수행되므로 결과는 1이 됩니다.

따라서 a는 1.000으로 초기화됩니다.

(4) float b = 3.0 / 2;

: 변수 b부동 소수점으로 초기화되며, 이 때 3.0을 2로 나눈 결과는 부동 소수점 형태로 저장됩니다.

따라서 b는 1.500으로 초기화됩니다.

(5) int c = (int)b;

: 변수 cb의 값을 정수로 변환하여 저장합니다.

정수로 변환하면 소수 부분은 버려지며, c는 1로 초기화됩니다.

(6) printf("%7.3f%7.3f%3d\n", a, b, c);

: 이 줄은 형식화된 출력을 수행합니다. 각 % 다음에 오는 서식 지정자는 해당하는 변수 값을 출력하는 데 사용됩니다.

  • %7.3f: 부동 소수점 숫자를 표시하는데 사용되며, 전체 필드 너비가 7자리이고 소수점 이하 3자리까지 표시하도록 설정됩니다.
  • %3d: 정수를 표시하는데 사용되며, 전체 필드 너비가 3자리로 설정됩니다.

<출력>

  1.000  1.500  1
  • a는 정수로 나눈 결과로 인해 1.000이 출력됩니다.
  • b는 부동 소수점 나눗셈 결과로 인해 1.500이 출력됩니다.
  • cb의 값을 정수로 변환한 결과로 인해 1이 출력됩니다.

2번 문제

#include <stdio.h>

void main() {
 int su1 = 16, su2 = 4, mov1, mov2; 
 mov1 = su1 >> 2;
 mov2 = su2 << 4;
 printf("%d %d\n", mov1, mov2);
}

 

(1) int su1 = 16, su2 = 4, mov1, mov2;

: 정수형 변수 su1, su2, mov1, mov2를 선언하고 초기값을 할당합니다.

su1은 16으로 초기화되고, su2는 4로 초기화됩니다.

(2) mov1 = su1 >> 2;

: 비트 오른쪽 시프트 연산자 >>를 사용하여 su1 변수의 비트를 오른쪽으로 2번 이동시키고 그 결과를 mov1에 할당합니다.

비트 오른쪽 시프트는 주어진 수를 2의 거듭제곱으로 나누는 효과를 가지며, 이 경우 su1을 2의 제곱수인 4로 나눈 결과인 4가 mov1에 저장됩니다.

(3) mov2 = su2 << 4;

: 비트 왼쪽 시프트 연산자 <<를 사용하여 su2 변수의 비트를 왼쪽으로 4번 이동시키고 그 결과를 mov2에 할당합니다.

비트 왼쪽 시프트는 주어진 수를 2의 거듭제곱으로 곱하는 효과를 가지며, 이 경우 su2를 2의 제곱수인 16으로 곱한 결과인 64가 mov2에 저장됩니다.

(4) printf("%d %d\n", mov1, mov2);

: 서식 지정자를 사용하여 변수 mov1mov2의 값을 출력합니다.

%d는 정수를 표시하는데 사용되며, 두 개의 정수 값이 출력됩니다.

<출력>

4, 64
  • mov1su1의 값을 오른쪽으로 2번 시프트하여 4가 됩니다.
  • mov2su2의 값을 왼쪽으로 4번 시프트하여 64가 됩니다.

3번 문제

#include <stdio.h>

void main() {
 int a, b, c, r;
 a = 4;
 b = 2;
 c = 3;
 r = a++ - ++b * (c << 2);
 printf("%d\n", r);
}

(1) int a, b, c, r;

: 정수형 변수 a, b, c, r을 선언합니다.

(2) a = 4;, b = 2;, c = 3;

: 변수 a, b, c에 각각 4, 2, 3을 초기화합니다.

(3) r = a++ - ++b * (c << 2);

: 이 줄은 복합 연산을 수행합니다.

  • a++: a 값을 r에 할당한 후에 a를 1 증가시킵니다. 따라서 a는 5가 되고, r에는 4가 할당됩니다.
  • ++b: b 값을 1 증가시킨 후에 사용합니다. 따라서 b는 3이 됩니다.
  • c << 2: 비트 왼쪽 시프트 연산자 <<를 사용하여 c 변수의 비트를 왼쪽으로 2번 이동시킵니다. 이 경우 c의 이진 표현은 0000 0011이며, 시프트 연산 후에 0000 1100이 됩니다. 이 값을 10진수로 표현하면 12입니다.
  • ++b * (c << 2): ++bc << 2의 결과를 곱합니다. 따라서 3 * 12는 36이 됩니다.
  • a++ - (++b * (c << 2)): 4 - 36은 -32입니다. 이 결과가 r에 할당됩니다.

(4) printf("%d\n", r);

: 서식 지정자를 사용하여 변수 r의 값을 출력합니다.

%d는 정수를 표시하는데 사용되며, -32가 출력됩니다.

<출력>

-32

변수 a, b, c, r의 값과 각 단계의 연산이 설명된 것처럼 -32가 최종 결과로 출력됩니다.

 

4번 문제

#include <stdio.h>

void main() {
 int x = 8;
 int y = 9;
 printf("%d", !!x);
 printf("%d", x && y);
 printf("%d", x || y);
}

(1) int x = 8;, int y = 9;: 정수형 변수 xy를 선언하고 초기화합니다.

x는 8로, y는 9로 초기화됩니다.

(2) printf("%d", !!x);

: 이 줄에서는 x 변수를 논리 연산자 !를 두 번 사용하여 불리언 값으로 변환한 후 출력합니다.

!!xx가 0이 아니면 1로, 0이면 0으로 변환됩니다. 따라서 출력 결과는 1이 됩니다.

(3) printf("%d", x && y);

: 이 줄에서는 xy의 논리 AND 연산을 수행한 후 결과를 출력합니다.

x && yxy가 둘 다 참(0이 아닌 값)일 때 참(1)을 반환하므로 출력 결과는 1이 됩니다.

(4) printf("%d", x || y);

: 이 줄에서는 xy의 논리 OR 연산을 수행한 후 결과를 출력합니다.

x || yx 또는 y 중 하나만 참이면 참(1)을 반환하므로 출력 결과는 1이 됩니다.

<출력>

111
  • 첫 번째 줄에서 x의 불리언 값인 1 출력.
  • 두 번째 줄에서 x && y의 논리 AND 결과인 1 출력.
  • 세 번째 줄에서 x || y의 논리 OR 결과인 1 출력.

모든 출력 값은 1이 됩니다.

 

5번 문제

void main(void) {
 enum {AA, BB, CC = -100, FF, KK};
 printf("%d \n", AA + KK);
}

(1) enum {AA, BB, CC = -100, FF, KK};

: 이 줄에서는 열거형(enum)을 정의합니다.

열거형은 상수 값들의 집합을 나타내며, 각 상수는 순서대로 0부터 1씩 증가하는 값을 가집니다.

그러나 여기서 CC-100이 할당되었으므로 CC-100 값을 가집니다.

따라서 상수들의 값은 다음과 같습니다

AA=0, BB=1, CC=-100, FF=-99, KK=-98.

(2) printf("%d \n", AA + KK);

: 이 줄에서는 AAKK 상수를 더한 결과를 정수 형식으로 출력합니다.

AA는 0이고 KK는 -98이므로 AA + KK는 0 + (-98)이 되어 -98이 출력됩니다.

<출력>

-98

 

6번 문제

main( ){
 int a, b, c;
 a = 20, b = 30;
 c = (a > b) ? a-- : --b;
 printf("%d, %d\n", a, c);
}

() int a, b, c;

: 정수형 변수 a, b, c를 선언합니다.

(2) a = 20, b = 30;: 변수 a에 20을 할당하고, 변수 b에 30을 할당합니다.

여기서 쉼표(,)를 사용하여 변수 초기화를 동시에 수행합니다.

(3) c = (a > b) ? a-- : --b;

: 이 줄에서는 조건 연산자를 사용하여 ab를 비교한 후 c에 값을 할당합니다.

  • 조건식 (a > b)ab보다 큰지 여부를 검사합니다. 여기서는 a가 20이고 b가 30이므로 조건은 거짓(false)입니다.
  • 따라서 거짓일 때 (a > b)--b로 평가됩니다. 이는 b의 현재 값인 30을 c에 할당하기 전에 b를 1 감소시킵니다. 따라서 c에는 29가 할당되고, b는 29가 됩니다.

(4) printf("%d, %d\n", a, c);

: ac의 값을 출력합니다. a는 20, c는 29이므로 출력 결과는 다음과 같습니다.

20, 29

 

7번 문제

#include <stdio.h>

void main() {
    int a, b, c;
    a = (b = 7, (c = ++b + 2) + 5);
    printf("%d, %d, %d\n", a, b, c);
}

(1) int a, b, c;

: 정수형 변수 a, b, c를 선언합니다.

(2) (b = 7, (c = ++b + 2) + 5): 이 부분은 표현식입니다.

여기서 , 연산자는 왼쪽에서 오른쪽으로 표현식을 평가하고 마지막 표현식의 결과를 반환합니다.

  • 먼저 b에 7이 할당됩니다. 따라서 b는 7이 됩니다.
  • 그 다음에는 (c = ++b + 2) + 5 표현식이 평가됩니다.
  • ++bb를 1 증가시킨 후의 값을 반환합니다. 따라서 b는 8이 되고, ++b는 8을 반환합니다.
  • 그 결과, c에 8 + 2 = 10이 할당됩니다.
  • 마지막으로, (c = ++b + 2) + 5 표현식은 10 + 5 = 15를 반환합니다.
  • 따라서 a에는 15가 할당됩니다.

(3) printf("%d, %d, %d\n", a, b, c);

: a, b, c의 값을 출력합니다. a는 15, b는 8, c는 10이므로 출력 결과는 다음과 같습니다.

15, 8, 10

 

 

8번 문제

#include <stdio.h>

void main() {
    int a = 10, b = 0, c = 0;
    if (a > 15 && ++b < 12 || c++) {
        c++;
    }
    printf("%d %d %d", a, b, c);
}

(1) int a = 10, b = 0, c = 0;

: 정수형 변수 a, b, c를 선언하고 초기값을 할당합니다.

a는 10, bc는 모두 0으로 초기화됩니다.

(2) if (a > 15 && ++b < 12 || c++) { c++; }

: 조건문입니다.

  • && 연산자의 왼쪽 조건인 a > 15가 거짓(False)이므로 오른쪽 조건 ++b < 12를 평가하지 않고 바로 넘어갑니다. 따라서 ++b가 실행되지 않고 b의 값은 그대로 0입니다.
  • || (논리 OR)는 왼쪽 피연산자가 참(True)이면 오른쪽 피연산자를 평가하지 않고 결과가 참이 됩니다. 따라서 왼쪽 피연산자가 참인 경우, 오른쪽 피연산자는 실행되지 않습니다. 그러나 || 연산자의 왼쪽 조건인 ++b < 12가 거짓(False)이기 때문에 오른쪽 조건 c++를 평가합니다. c++는 실행되어 c의 값을 1 증가시킵니다.

(3) printf("%d %d %d", a, b, c);: a, b, c의 값을 출력합니다.

<출력>

10 0 1

 

 

 

 

💡 이 게시글은 PC 환경에 최적화하여 작성되었습니다.

💡 위 내용은 에듀윌에서 무료로 제공한 '정보처리기사 비밀 언어 특강' 문제를 직접 풀고 정리한 것입니다.

틀린 부분이 있다면 언제든 댓글 남겨주세요 :)

💡정보처리기사 실기 시험을 준비하시는 분들께는 아래 링크에서 해당 강의를 먼저 듣는 것을 권장합니다.

IT 자격증 1위 에듀윌 (eduwill.net)

 

728x90
반응형
LIST