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

2024. 10. 1. 15:49·정보처리기사[실기]

[23년 1회]

#include <stido.h>

int main(void) {
	char a[] = "Art";
    char *p = NULL;
    p=a;
    
    printf("%s\n",a);
    printf("%c\n",*p);
    printf("%c\n",*a);
    printf("%s\n",p);
    
    for(int i=0; a[i]!='\0'; i++){
    	printf("%c", a[i]);
    }
}
더보기

정답

Art

A

A

Art

Art

 

[풀이]

1. 문자열 a → "Art" 출력

2. 포인터 p가 가리키는 첫 번째 문자 → 'A'출력

3. 문자열 a의 첫 번째 문자 → 'A'출력

4. 포인터 p가 가리키는 문자열 전체 → "Art" 출력 

: printf("%s\n", p);는 포인터 p가 가리키는 주소부터 시작하여 문자열 "Art" 전체를 출력

  '\0'이 나올 때까지 메모리에서 문자를 차례대로 읽어서 출력하는 방식

5. 문자열 a의 각 문자를 순회 후 순차적 출력 → "Art" 출력

 

#include <stdio.h>

int main(void) {
	char* a = "qwer";
    char* b = "qwtety"
    
    for(int i=0; a[i]!='\0'; i++){
    	for(int j=0; b[j]!='\0'; j++){
        	if(a[i] == b[j]) printf("%c", a[i]);
        }
    }
}
더보기

정답 : qwe

 

[풀이]

char* a에 할당된 데이터 qwer을 각각 반복문을 통해 순회하면서

char* b랑 같으면 그 문자를 출력하면 됨

 

ex. a[0] = q → b[0] ~ b[5]까지 반복문 돌면서 q가 있으면 출력

위와 같은 방식으로 a[3]까지 반복해서 두개의 문자열 리터럴을 비교해서 같은 문자를 출력하면 됨

 

// 다음은 이진수에서 십진수로 변환하는 코드이다.
// (가)는 연산자이고 (나)는 정수일 때 빈칸을 알맞게 쓰시오.

#include <stdio.h>

int main(void){
	int input = 101110;
    int di = 1;
    int sum = 0;
    
    while (input > 0){
    	sum = sum + (input (가)(나) * di);
        di = di * 2;
        input = input / 10;
    }
    
    printf("%d", sum);
    
    return 0;
}
더보기

정답

(가) %

(나) 10

 

// (가), (나) 빈칸에 알맞은 변수를 쓰시오.

#include <stdio.h>
void swap(int* idx1, int* idx2){
	int t = *idx1;
    *idx1 = *idx2;
    *(가) = t;
}

void Usort(int a[], int len){
	for(int i=0; i < len - 1; i++) {
    	for(int j=0; j < len - i - 1; j++){
        	if(a[j] > a[j+1])
            	swap(&a[j], &a[j+1]);
        }
    }
    
    for(int k=0; k<5; k++){
    	printf("%d", a[k]);
    }
}

int main(void){
	int arr[] = {64, 34, 25, 12, 40};
    int nx = 5;
    
    Usort(arr, (나));
    return 0;
}
더보기

정답

(가) idx2

(나) nx

 

[풀이]

swap() → 두 정수를 바꾸는 함수

Usrot() → 버블정렬 오름차순 함수


[23년 2회]

// 입력값이 순서대로 5,4,3,2,1일 경우 출력값이 43215로 출력 되도록 빈칸 (가)에 들어갈 코드를 작성하시오.

#include <stdio.h>

int main(){
	int n[5];
    int i;
    
    for(i=0; i<5; i++){
    	printf("숫자를 입력하세요 : ");
        scanf("%d", &n[i]);
    }
    
    for(i=0; i<5; i++){
    	printf("%d", (가));
    }
    
    return 0;
}
더보기

정답

(가) n[(i+1) % 5]

 

// a,b,c,d의 빈칸에 알맞은 식을 <보기>에서 찾아쓰는데 <보기>를 최소한으로 쓰시오.
// [보기] 
// 1000    500   100   10   %   /   +   -

#include <stdio.h>

int main() {
	int m = 4620;
    int a,b,c,d;
    a=(가)
    b=(나)
    c=(다)
    d=(라)
    printf("1000원 개수 : %d", a);
    printf("500원 개수 : %d", b);
    printf("100원 개수 : %d", c);
    printf("10원 개수 : %d", d);
    return 0;
}
더보기

정답

(가) m / 1000

(나) (m % 1000) / 500

(다) (m % 500) / 100

(라) (m%100) / 10

 

// 홍길동, 김철수, 박영희 순서대로 입력했다고 할 때 출력결과

#include<stdio.h>
#include<stdlib.h>

char n[30];

char *test() {
	printf("입력하세요 : ");
    gets(n);
    return n;
}

int main() {
	char * test1;
    char * test2;
    char * test3;
    
    test1 = test();
    test2 = test();
    test3 = test();
    
    printf("%s\n", test1);
    printf("%s\n", test2);
    printf("%s", test3);
    return 0;
}
더보기

정답

박영희

박영희

박영희

#include <stdio.h>

int main(void){
	int n[3] = {73,95,82};
    int sum = 0;
    for(int i=0; i<3; i++){
    	sum += n[i];
    }
    
    switch(sum/30){
    	case 10:
        case 9: printf("A");
        case 8: printf("B");
        case 7:
        case 6: printf("C");
        default: printf("D");
    }
    return 0;
}

 

더보기

정답 : BCD

 

[풀이]

switch문은 break가 없는 경우, 해당 case 이후의 case가 모두 실행됨

sum = 250 이고 sum / 30 = 8 이므로

case 8 이후의 case들이 모두 실행

 

#include <stdio.h>

int main(void){
	int c=0;
    for(int i=1; i<=2023; i++){
    	if(i%4 == 0) c++;
    }
    printf("%d", c);
    return 0;
}
더보기

정답 : 505

 

#include <stdio.h>
#define MAX_SIZE 10

int isWhat[MAX_SIZE];
int point = -1;

void into(int num) {
	if(point >= 10) printf("Full");
    isWhat[++point] = num;
}

int take() {
	if(isEmpty() == 1) printf("Empty");
    return isWhat[point--];
}

int isEmpty() {
	if(point == -1) return 1;
    return 0;
}

int isFull() {
	if(point == 10) return 1;
    return 0;
}

int main(int argc, char const *argv[]) {
	int e;
    into(5);
    into(2);
    while(!isEmpty()) {
    	printf("%d", take());
        into(4);
        into(1);
        printf("%d", take());
        
        into(3);
        printf("%d", take());
        pirntf("%d", take());
        
        into(6);
        printf("%d", take());
        printf("%d", take());
    }
    return 0;
}
더보기

정답 : 213465

 

[풀이] - chatGPT 

 

  • 변수 및 배열 정의:
    • int isWhat[MAX_SIZE]; : 스택을 구현하기 위한 배열. 최대 MAX_SIZE (10)까지 정수 저장 가능
    • int point = -1; : 스택의 현재 최상단 인덱스를 나타냅니다. 초기 값은 -1, 즉 스택이 비어 있는 상태
  • into(int num) 함수:
    • 입력된 정수 num을 스택에 추가
    • point가 10 이상인 경우 "Full" 메시지를 출력
    • point를 증가시키고 num을 isWhat 배열에 추가
  • take() 함수:
    • 스택에서 최상단 요소를 꺼내는 함수
    • 스택이 비어 있는 경우 "Empty" 메시지를 출력
    • 최상단 요소를 반환하고 point를 감소
  • isEmpty() 함수:
    • 스택이 비어 있는지를 확인
    • point가 -1이면 스택이 비어있다고 판단하고 1을 반환. 그렇지 않으면 0을 반환
  • isFull() 함수:
    • 스택이 가득 차 있는지를 확인
    • point가 10이면 스택이 가득 차 있다고 판단하고 1을 반환. 그렇지 않으면 0을 반환
  • main() 함수:
    • into(5)와 into(2)를 호출하여 스택에 5와 2를 추가
    • while 루프는 스택이 비어 있지 않을 때까지 반복. 
    • take()를 호출하여 스택에서 최상단 요소를 꺼내고 출력
      • 4와 1을 스택에 추가합니다.
      • 다시 take()를 호출하여 최상단 요소를 꺼내고 출력
      • 3을 스택에 추가한 후, 두 번 take()를 호출하여 최상단 요소를 꺼내고 각각 출력
      • 6을 스택에 추가한 후, 두 번 take()를 호출하여 최상단 요소를 꺼내고 각각 출력

 

 

// 다음은 선택정렬을 하는 코드이다. (가)에 들어갈 기호를 쓰시오.

#include <stdio.h>

int main(void) {
	int E[] = {64, 25, 12,22, 11};
    int n = sizeof(E) / sizeof(E[0]);
    
    int i = 0;
    do {
    	int j = i + 1;
        do {
        	if(E[i] (가) E[j]) {
            	int tmp = E[i];
                E[i] = E[j];
                E[j] = tmp;
            }
            j++;
        } while (j < n);
        i++;
    } while (i < n-1);
    
	return 0;
}
더보기

정답 :  >

 

* 선택정렬과 버블정렬

 

선택 정렬 (Selection Sort)

  1. 작동 방식:
    • 주어진 배열에서 가장 작은(또는 큰) 요소를 찾습니다.
    • 찾은 요소를 배열의 맨 앞(또는 맨 뒤)으로 교환합니다.
    • 이 과정을 배열의 끝까지 반복합니다. 즉, 매 반복마다 남은 배열에서 최솟값(최댓값)을 찾아 정렬합니다.
  2. 복잡도:
    • 시간 복잡도: O(n2)O(n^2)O(n2) (모든 요소를 비교해야 하므로)
    • 공간 복잡도: O(1)O(1)O(1) (제자리 정렬, 추가 배열이 필요 없음)
  3. 특징:
    • 안정성: 안정적이지 않음 (동일한 값이 있을 경우, 순서가 바뀔 수 있음)
    • 많은 요소의 데이터에 비효율적임 (정렬된 상태에서 성능이 저하되지 않음)

버블 정렬 (Bubble Sort)

  1. 작동 방식:
    • 인접한 두 요소를 비교하고, 순서가 올바르지 않으면 교환합니다.
    • 배열의 끝까지 이동하며 이 과정을 반복합니다.
    • 가장 큰(또는 작은) 요소가 배열의 끝으로 "거품처럼" 올라가는 형태입니다.
    • 이 과정을 여러 번 반복하여 전체 배열이 정렬될 때까지 계속합니다.
  2. 복잡도:
    • 시간 복잡도: O(n2)O(n^2)O(n2) (중첩 루프 사용)
    • 공간 복잡도: O(1)O(1)O(1) (제자리 정렬, 추가 배열이 필요 없음)
  3. 특징:
    • 안정성: 안정적임 (동일한 값의 상대적 순서는 유지됨)
    • 최적화 가능성: 만약 배열이 이미 정렬되어 있다면, 한 번의 패스만으로 정렬이 완료되므로 성능이 향상될 수 있음.

[23년 3회]

#include <stdio.h>

int mian() {
	char* p = "KOREA";
    printf("%s\n", p);
    printf("%s\n", p+1);
    printf("%c\n", *p);
    printf("%c\n", *(p+3));
    printf("%c\n", *p+4);
}
더보기

정답

KOREA

OREA

K

E

O

 

C 언어에서 구조체의 멤버에 접근하기 위한 기호를 쓰시오
더보기

정답 : ->

 

#include <stdio.h>

int complete(int n){
	int sum = 0;
    for(int j=1; j<=n/2; j++) {
    	if(n%j == 0) {
        	sum = sum + j;
        }
    }
    if(sum == n){
    	return 1;
    } else {
    	return 0;
    }
}

int main() {
	int s = 0;
    for(int i=1; i<=100; i++){
    	if(complete(i))
        	s += i;
    }
    printf("%d",s);
}
더보기

정답 : 34

 

[풀이]

완전수 찾는 문제 

완전수 : 자기 자신을 제외한 모든 약수의 합이 자신과 같은 수

 

complete() => 완전수를 찾는 함수

 

1~100 사이의 완전수는 6, 28 두 개

 

#include <stdio.h>

int f(int n) {
	if(n <= 1) return 1;
    else return n*f(n-1);
}

int main() {
	printf("%d", f(7));
}
더보기

정답 : 5040

 

재귀함수 팩토리얼 문제

답 → 7! = 5040

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

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바