[C언어] 22년 기출 문제 풀이 (1회 ~ 4회)

2024. 9. 19. 16:28·정보처리기사[실기]

[22년 1회]

// 5를 입력 받았을 때 출력 결과

#include <stdio.h>

int func(int a) {
	if(a <= 1) return 1;
    return a*func(a-1);
}

int main(){
	int a;
    scanf("%d", &a);
    printf("%d", func(a));
}
더보기

정답 : 120

 

* 재귀함수를 활용한 팩토리얼 계산

int func(int a)

→ 주어진 숫자부터 1까지 전부 곱하는 팩토리얼 함수

 

✔️ 재귀 호출: return a * func(a-1);
a가 1보다 크면, a에 func(a-1)을 곱해 결과를 반환

a가 줄어들면서 팩토리얼의 정의대로 곱셈

 

[풀이]

func(5) = 5 * func(4)
func(4) = 4 * func(3)
func(3) = 3 * func(2)
func(2) = 2 * func(1)
func(1) = 1

5 * 4 * 3 * 2 * 1 = 120

 

간단 설명 : a가 5이므로 5! = 120

 

// 아래 프로그램은 정수를 역순으로 출력하는데 (1)(2)(3)에 들어갈 연산자를 쓰시오

#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;
}
더보기

정답

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

 

나는 그냥 막 대입해서 풀긴 했는데 chatGpt에게 풀이를 부탁함 ㅋ

 

(1), (2), (3)에 들어갈 부분

(1) 조건: while(number (1) 0)

  • number가 0이 될 때까지 반복하려는 의도입니다. 즉, number가 0보다 클 때까지만 반복이 계속되어야 합니다.
  • 답: >

(2) 자릿수 추출: result = result + number (2) div;

  • number의 마지막 자릿수를 추출하려고 합니다. 숫자를 10으로 나눈 나머지를 계산하면 마지막 자릿수를 얻을 수 있습니다.
  • 답: % (나머지 연산자)

(3) 자릿수 제거: number = number (3) div;

  • 마지막 자릿수를 제거하기 위해서는 숫자를 10으로 나누어 한 자리를 줄입니다.
  • 답: / (정수 나눗셈)

[22년 2회]

#include <stido.h>

struct A{
	int n;
    int g;
};

int main() {
	struct A a[2];
    for(int i=0; i<2; i++){
    	a[i].n=i, a[i].g=i+1;
    }
    printf("%d", a[0].n + a[1].g);
}
더보기

정답 : 2

 

a[0] → {n: 0, g: 1}

a[1] → {n: 1, g: 2}

→ 0 + 2 = 2

 

#include <stdio.h>

int len(char*p);

int main() {
	
    char*p1 = "2022";
    char*p2 = "202207";
    
    int a = len(p1);
    int b = len(p2);
    
    printf("%d", a+b);
    
}

int len(char*p){
	int r = 0;
    while(*p != '\0'){
    	p++;
        r++;
    }
    return r;
}
더보기

정답 : 10

 

len 함수: 문자열의 길이를 세는 함수

  • 입력된 문자열이 끝날 때까지 (\0 문자)를 만날 때까지 한 글자씩 세면서 포인터 p를 옮김.
  • r은 글자 수를 세는 카운터로, p가 끝까지 가면 r을 반환함

main 함수: 문자열 길이 계산

  • p1은 문자열 "2022"이고, p2는 "202207"임.
  • len(p1)으로 "2022"의 길이인 4를 계산하고, len(p2)로 "202207"의 길이인 6을 계산함.
  • 두 길이의 합 4 + 6 = 10을 출력함.

 

#include <stido.h>

int main(int argc, char*argv[]){
	int a[4] = {0,2,4,8};
    int b[3] = {};
    int i=1;
    int sum = 0;
    int *p1;
    
    for(i; i<4; i++){
    	p1 = a+i;
        b[i-1]= *p1-a[i-1];
        sum = sum +b[i-1]+a[i];
    }
    printf("%d", sum);
    
    return 0;
}
더보기

정답 : 22

 

포인터 : 변수의 메모리 주소를 저장하는 변수

p1 = a + i; → p1은 배열 a의 i번째 요소를 가리킴

 

[p1 = a + i; 동작 설명]

  1. a는 배열의 시작 주소를 의미 → a는 배열의 첫 번째 요소인 a[0]의 메모리 주소
  2. a + i는 배열의 i번째 요소의 주소를 의미  
    → a는 배열의 시작 주소를 가리키고, 여기에 i를 더하면 배열의 i번째 요소의 주소를 가리키게 됨

  3. 포인터 p1에 저장:
    • p1 = a + i;는 포인터 p1이 a 배열의 i번째 요소를 가리킴
    • p1은 배열 a의 i번째 요소의 메모리 주소를 가리키고, *p1은 그 주소에 있는 값을 참조

[22년 3회]

// 아래는 C언어의 2차원 배열 형태이다. 
// field의 경우 2차원 배열 형태는 예시처럼 출력되므로
// 이를 참고하여 mines의 2차원 배열 형태를 작성하시오. 

#include <stido.h>

void main() {
	int mines[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
	int field[4][4] = {{0,1,0,1},{0,0,0,1},{1,1,1,0},{0,1,1,1}};
    
    int w = 4; h = 4;
    
    for(int y=0; y<h; y++){
    	for(int x=0; x<w; x++){
        	if(field[y][x] == 0) continue;
            for(int j=y-1; j<=y+1; j++){
            	for(int i=x-1; i<=x+1; i++){
                	if(chkover(w,h,j,i) == 1)
                    	mines[j][i] += 1;
                }
            }
        }
    }
}

int chkover(int w, int h, int j, int i){
	if(i >= 0 && i < w && j >=0 && j < h) return 1;
    return 0;
}
더보기

정답

1 1 3 2

3 4 5 3

3 5 6 4

3 5 5 3

 

풀이 

지뢰찾기 게임이라고 생각하고 풀어야함 .. 계산 하려했는데 실패ㅋ

쉬운 방법 

→ 나 + 내 바로 옆칸 (대각선 포함)에 + 1

 

#include <stdio.h>

main () {
	int s, el = 0;
    for(int i=6; i<=30; i++){
    	s=0;
        for(int j=1; j<=i/2; j++){
        	if(i%j == 0){
            s = s+j;
            }
        }
        if(s == i){
        	el++;
        }
    }
    printf("%d", el);
}
더보기

정답 : 2

 

완전수 찾는 함수

완전수 = 자기 자신을 제외한 약수들의 합이 자기 자신과 같은 수

 

6~30 숫자중 완전수 = 6, 28

→ 2 출력

 

저작자표시 변경금지 (새창열림)

'정보처리기사[실기]' 카테고리의 다른 글

[C언어] 24년 기출 문제 풀이 (1회, 2회)  (1) 2024.10.01
[C언어] 23년 기출 문제 풀이 (1회 ~ 4회)  (1) 2024.10.01
[6과목_프로그래밍 언어 활용] 아스키코드 ASCII  (0) 2024.09.12
[C언어] 21년 기출 문제 풀이 (1회 ~ 4회)  (1) 2024.09.12
[C언어] 20년 기출 문제 풀이 (1회 ~ 4회)  (2) 2024.09.09
'정보처리기사[실기]' 카테고리의 다른 글
  • [C언어] 24년 기출 문제 풀이 (1회, 2회)
  • [C언어] 23년 기출 문제 풀이 (1회 ~ 4회)
  • [6과목_프로그래밍 언어 활용] 아스키코드 ASCII
  • [C언어] 21년 기출 문제 풀이 (1회 ~ 4회)
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • Algorithm Study (39)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래밍언어
    Python
    study
    파이썬기초
    영어회화
    프로그래머스
    ios개발
    정보처리기사실기
    정처기실기
    javaalgorithm
    스위프트기초
    파이썬
    타일러영어
    SWIFT
    영어독학
    알고리즘
    The Office
    ios프로그래밍
    자바알고리즘
    리얼학습일기
    파이썬문법
    더오피스
    Java
    정보처리기사프로그래밍언어
    javaStudy
    ios프로그래밍을위한스위프트기초
    나도코딩
    Algorithm
    리얼클래스
    정보처리기사
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[C언어] 22년 기출 문제 풀이 (1회 ~ 4회)
상단으로

티스토리툴바