본문 바로가기
카테고리 없음

2020 정보처리기사 실기 3회 프로그래밍 문제 해설

by picker_life 2024. 3. 27.
반응형

2020 정보처리기사 실기 3회 2번

문제

2. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

 

1
2
3
4
5
6
7
8
9
#include <stdio.h>
    void main(){
        int i=0, c=0;
        while (i<10){
        i++;
        c*=i;
        }
        printf("%d",c);
   }
cs

정답

0

해설

  1. int i=0, c=0; - 변수 i와 c를 정의하고, 둘 다 0으로 초기화합니다.
  2. while (i<10) - i의 값이 10보다 작은 동안 반복문이 실행됩니다.
  3. i++; - 반복문의 매 회차마다 i의 값을 1씩 증가시킵니다.
  4. c*=i; - c의 현재 값에 i의 값을 곱한 후, 그 결과를 다시 c에 할당합니다. 이는 c = c * i;와 같습니다.
  5. printf("%d",c); - 반복문이 끝난 후, c의 최종 값을 출력합니다.

하지만, 여기서 중요한 포인트가 있어요: 초기에 c가 0으로 설정되었고, 첫 번째 반복에서 c *= i; (즉, c = c * i; 또는 c = 0 * 1)을 실행하면, c는 0이 됩니다. 이 후의 모든 반복에서 c에 어떤 수를 곱해도 c는 계속 0을 유지합니다.

따라서, 이 프로그램의 출력값은 0입니다. 반복문을 거치는 동안 c의 값이 변하지 않기 때문입니다.

 

2020 정보처리기사 실기 3회 13번

문제

13. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <studio.h>
int r1(){
    return 4;
}
int r10(){
    return (30+r1());
}
int r100(){
    return (200+r10());
}
int main(){
    printf("%d\n", r100());
    return 0;
}
cs

정답

234

해설

  1. int r1() 함수는 4를 반환합니다.
  2. int r10() 함수는 30 + r1()을 계산하여 반환합니다. r1()은 4를 반환하므로, r10()은 30 + 4 = 34를 반환합니다.
  3. int r100() 함수는 200 + r10()을 계산하여 반환합니다. r10()은 34를 반환하므로, r100()은 200 + 34 = 234를 반환합니다.
  4. int main() 함수에서는 printf("%d\n", r100());를 통해 r100() 함수의 반환값을 출력합니다. 여기서 r100()은 위에서 설명한 대로 234를 반환합니다.

따라서 이 프로그램의 출력 결과는 234입니다.

 

2020 정보처리기사 실기 3회 15번

문제

15. 다음은 자바 코드이다. 출력 결과를 쓰시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
abstract class vehicle{
    private String name;
    abstract public String getName(String val);
    public String getName(){
        return "vehicle name:" + name;
    }
    public void setName(String val){
        name = val;
    }
}
 
class Car extends Vehicle{
    public Car(String val){
        setName(val);
   }
public String getName(String val){
    return "Car name : " + val;
   }
public String getName(byte val[]){
    return "Car name : " + val;
   }
}
 
public class good {
    public Static void main(String[] args){
    Vehicle obj = new Car("Spark");
    System.out.print(obj.getName());
    }
}
cs

정답

Vehicle name : Spark

해설

이 자바 프로그램은 추상 클래스 Vehicle과 이를 상속받는 Car 클래스, 그리고 실행 가능한 good 클래스로 구성되어 있습니다. 출력 값을 결정하기 위해 코드의 각 부분을 살펴보겠습니다:

  1. Vehicle은 추상 클래스로, getName(String val)이라는 추상 메소드와 getName()이라는 일반 메소드를 포함합니다. getName() 메소드는 "vehicle name:" + name을 반환합니다. 여기서 name은 Vehicle 클래스의 private 멤버 변수입니다.
  2. Car 클래스는 Vehicle을 확장(상속)합니다. 생성자 Car(String val)은 받은 문자열을 setName(val)을 통해 name에 설정합니다. 또한, getName(String val) 메소드를 구현하여 "Car name : " + val을 반환합니다.
  3. good 클래스의 main 메소드에서는 Vehicle 타입의 obj를 생성하되, 실제로는 Car의 인스턴스로 초기화합니다. 이때 생성자로 "Spark"를 전달합니다.
  4. System.out.print(obj.getName());는 obj의 getName() 메소드를 호출합니다. 여기서 주의해야 할 점은, obj가 Vehicle 타입으로 선언되었지만 실제로는 Car 객체를 참조하고 있습니다. 그러나 여기서 호출되는 getName() 메소드는 매개변수가 없는 버전입니다. 따라서, 이 호출은 Vehicle 클래스에 정의된 getName() 메소드를 실행합니다.
  5. 결과적으로, obj.getName()은 "vehicle name:" + name을 반환합니다. 이때 name은 생성자 Car("Spark")를 통해 "Spark"로 설정되었습니다.

따라서 프로그램의 출력값은 "vehicle name: Spark"가 됩니다.

 

2020 정보처리기사 실기 3회 17번

문제

17. 다음은 자바 코드이다. 출력 결과를 쓰시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class good {
    public static void main(String[] args){
    int i=0;
    int sum=0;
    while (i<10){
        i++;
        if(i%2 ==1)
            continue;
        sum += i;
     }
     System.out.println(sum);
   }
}
cs

정답

30

해설

이 자바 프로그램은 변수 i와 sum을 사용하여 10 미만의 짝수들을 더하는 작업을 수행하고, 그 결과를 출력합니다. 각 단계를 상세히 살펴보면 다음과 같습니다:

  1. int i=0;와 int sum=0;을 통해 두 변수를 초기화합니다.
  2. while (i<10) 루프는 i가 10보다 작은 동안 반복됩니다.
  3. 반복문 내부에서, 먼저 i++를 통해 i의 값을 1 증가시킵니다.
  4. if(i%2 ==1) 조건문은 i의 값이 홀수인지 검사합니다. 만약 i가 홀수이면 (i%2 == 1이 참이면), continue문을 만나게 되고, 이는 반복문의 나머지 부분을 건너뛰고 즉시 다음 반복으로 넘어갑니다.
  5. 만약 i가 짝수이면 (i%2 == 0), sum += i;는 실행되어 sum에 i의 값을 더합니다.
  6. System.out.println(sum);은 반복문이 끝난 후 sum의 최종 값을 출력합니다.

이 프로그램에서 i는 1부터 9까지 증가하고, i가 짝수일 때만 sum에 더해집니다. 따라서 더해지는 값들은 2, 4, 6, 8 입니다.

결과적으로, 출력값은 이러한 짝수들의 합인 2 + 4 + 6 + 8 = 20이 됩니다.

따라서 이 프로그램의 출력값은 20입니다.