본문 바로가기
📍Certificate/Engineer Information Processing

[정보처리기사] 실기 프로그래밍언어 3문제 (14)

by Sun A 2024. 10. 1.

1️⃣ [C언어]

2021.1회

다음은 C언어 프로그램이다. 실행 결과를 쓰시오.

#include 

struct good {
    char name[10];
    int age;
 };
 
 void main(){
 	struct good s[] = {"Kim",28,"Lee",38,"Seo",50,"Park",35};
    
    struct good *p;
    p = s;
    p++;
    printf("%s\n", p-> name);
    printf("%s\n", p-> age);
}
Lee 38

struct : 구조체(structure) - 여러 종류의 변수를 하나의 복합 데이터 타입으로 묶어주는 역할

 

good 구조체의 name은 char 배열로 최대 10개의 문자를 저장할 수 있다.

good 구조체의 age는 int 형으로 age를 저장한다.

그 다음 구조체 배열 s[]를 선언하여 네 개의 구조체를 담는다.

s[0] = "Kim", 28....

포인터 p에 s를 선언하고 p++;의 name과 age를 할당한 값을 출력한다.

p[1].name = Lee

p[1].age = 38

 

2️⃣ [C언어]

2022.1회

다음 C언어 프로그램의 괄호 안에 들어갈 알맞은 연산자를 작성하시오.

#include <stdio.h>
int main() {
  int number = 1234;
  int div = 10;
  int result = 0;
 
  while (number ( 1 ) 0) {
    result = result * div;
    result = result + number ( 2 ) div;
    number = number ( 3 ) div;
  }
 
  printf("%d", result);
  return 0;
}

결과 : 4321

(1) >
(2) %
(3)  /

우선 number은 1234, div는 10, result는 0으로 선언되었다.

결과가 4321이 나오려면 result에 4부터 차례대로 값이 들어가야 한다. 

number의 값이 0보다 클때까지 반복해야 하기 때문에 (1)은 > 이다.

4의 값이 나오도록 하는 건 끝의 4를 나머지로 빼는 것이다.

(2)에 %를 넣고 10으로 나누면 나머지가 4가 먼저 나온다.

그리고 다시 3을 마지막 숫자로 빼야 나머지 값으로 나올 수 있기 때문에 1230의 number 값의 0을 빼기 위해 몫을 출력하는 연산을 (3)에 넣는다

result = result * div result = result + number % 10 number = number / div;
0 = 0 * 10 4 = 0 + 1234 % 10 123
40 = 4 * 10 43 = 40 + 123 % 10 12
430 = 43 * 10 432 = 430 + 12 % 10 1
4320 = 432 * 10 4321 = 4320 + 1 % 10 0

 

3️⃣ [C언어]

2022.3회

다음 코드에 대한 출력 값을 작성하시오.

int n;
int k;
int s;
int el = 0;
 
  for(n=6; n<=30; n++){
    s=0;
    k=n/2;
    for(int j=1; j<=k; j++){
      if(n%j==0){
        s=s+j;
      }
    }
    if(s==n){
    el++;
    }
  }
  
  printf("%d", el);
n s k if(s==n) {el ++;}
6 6 6/2 = 3 1
7 1 3 1
8 7 4 1
9 4 4 1
10 1 + 2 + 5 = 8 5 1
12 1 + 2 + 3 + 4 + 6 = 16 6 1
14 1 + 2 + 7 = 10 7 1
15 1 + 3 + 5 = 9 7 1
16  1 + 2 + 4 + 8 = 15 8 1
18 1 + 2 + 3 + 6 + 9 = 21 9 1
20 1 + 2 + 4 + 5 + 10 = 22 10 1
21 1 + 3 + 7 = 11 10 1
22 1 + 2 + 11 = 14 11 1
24 1 + 2 + 3 + 4 + 6 + 8 + 12 = X 12 1
25 1 + 5 = 6 12 1
26 1 + 2 + 13 = 16 13 1
28 1 + 2 + 4 + 7 + 14 = 28 14 2
30 1 + 2 + 3 + 5 + 6 + 10 + 15 = X 15 2

 

j k n s = s+j
1 3 6 1
2 3 6 3
3 3 6 6
1 4 8 1
2 4 8 3
3 4 8 3
4 4 8 7
1 5 10 1
2 5 10 3
3 5 10 3
4 5 10 3
5 5 10 8

6부터 30까지 소수는 계산하지 않는다. => n과 s가 같을 확률이 0%

k보다 작은 수 중에 n의 약수를 더한 값이 s가 된다.