[C언어] 24년 기출 문제 풀이 (1회, 2회)

2024. 10. 1. 18:42·정보처리기사[실기]

[24년 1회]

#include <stdio.h>

int main() {
	int v1 = 0, v2 = 35, v3 = 29;
    
    if(v1 > v2 ? v2 : v1) {
    	v2 = v2 << 2;
    } else {
		v3 = v3 << 2;
    }
    
    printf("%d", v2+v3);
}
더보기

정답 : 151

 

[풀이]

if (v1 > v2 ? v2 : v1) → if(v1) → if(0) => else 실행

v3 = v3 << 2; → 왼쪽으로 2번 시프트 = 4배

29 * 4 = 116

v2 + v3 = 151

 

#include <stdio.h>
#include <string.h>

void reverse(char* str) {
	int len = strlen(str);
    char temp;
    char* p1 = str;
    char* p2 = str + len - 1;
    while(p1<p2) {
    	temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}

int main(int argc, char* argv[]){
	char str[100] = "ABCDEFGH";
    
    reverse(str);
    
    for(int i=1; i<len; i+=2){
    	printf("%c", str[i]);
    }
    
    printf("\n");
    
    return 0;
}
더보기

정답 : GECA

 

[풀이]

reverse 함수 → 문자열 뒤집는 함수

str = "HGFEDCBA"

 

main에 for 문은 i가 2씩 늘어나면서 그 인덱스 문자를 출력

1,3,5,7 인덱스 출력

 

#include <stdio.h>

typedef struct {
	int accNum;
    double bal;
} BankAcc;

double sim_pow(double base, int year) {
	int i;
    double r = 1.0;
    
    for(i=0; i<year; i++){
    	r = r*base;
    }
    return r;
}

void initAcc(BankAcc *acc, int x, double y) {
	acc -> accNum = x;
    acc -> bal = y;
}

void xxx(BankAcc *acc, double *en) {
	if(*en > 0 && *en < acc -> bal) {
    	acc -> bal = acc -> bal-*en;
    }
}

void yyy(BankAcc *acc) {
	acc -> bal = acc -> bal * sim_pow((1+0.1),3);
}

int main() {
	BankAcc myAcc;
    initAcc(&myAcc, 9981, 2200.0);
    double amount = 100.0;
    xxx(&myAcc, &amount);
    yyy(&myAcc);
    printf("%d and %.2f", myAcc.accNum, myAcc.bal);
    return 0;
}
더보기

정답 : 9981 and 2795.10

 

#include <stdio.h>
#include<ctype.h<

int main() {
	char*p = "It is 8";
    char result[100];
    int i;
    
    for(i=0; p[i]!='\0'; i++) {
    	if(isupper(p[i]))
        	result[i] = (p[i]-'A'+5)%25 + 'A';
        else if(islower(p[i]))
        	result[i] = (p[i]-'a'+10)%26 + 'a';
        else if(isdigit(p[i])) 
        	result[i] = (p[i]-'0'+3)%10 + '0';
        else if(!(isupper(p[i]) || islower(p[i]) || isdigit(p[i])))
        	result[i] = p[i];
        
    }
    
    result[i] = '\0';
    printf("%s\n", result);
    
    return 0;
}
더보기

정답 : Nd sc 1

 

문자를 아스키코드로 변환하여 풀이

 


[24년 2회]

#include <stdio.h>

int main() {
	int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int* parr[2] = {arr[1], arr[2]};
    printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
    
    return 0;
}
더보기

정답 : 21 

 

[풀이]

2차원 배열

1 2 3 

4 5 6 

7 8 9

parr[2] → [4, 5, 6] , [7, 8, 9]

parr [1][1] = 8

parr [1] + 2 => parr포인터 주소 첫번째 인덱스에 2칸을 더 간 주소 = parr[1][2] = 9

**parr = 4

8 + 9 + 4  = 21

 

#include <stdio.h>
#include <string.h>

void sumFn(char* d, char* s) {
	int sum = 0;
    
    while (*s) {
    	*d = *s;
        d++;
        s++;
    }
    *d = '\0';
}

int main() {
	char* str1 = "first";
    char str2[50] = "teststring";
    int result = 0;
    sumFn(str2, str1);
    
    for (int i=0; str2[i] != '\0'; i++) {
    	result += i;
    }
    printf("%d", result);
    
    return 0;
}
더보기

정답 : 10

 

[풀이]

sumFn() 함수로 str2 를 "first"로 변경

main() 함수의 for문에서 first의 길이만큼 반복

0 + 1 + 2 + 3 + 4 = 10

 

#include <stdio.h>

void swap(int a, int b) {
	int t = a;
    a = b;
    b = t;
}

int main() {
	int a = 11;
    int b = 19;
    swap(a, b);
    
    switch(a) {
    	case 1: 
        	b += 1;
        case 11: 
        	b += 2;
        default:
        	b += 3;
        break;
    }
    
    print("%d", a-b);
}
더보기

정답 : -13

 

[풀이]

main함수에서 호출된 swap 함수가 적용되지 않기 때문에 a, b의 값은 그대로 유지 (포인터가 아니라 그냥 매개변수라서)

a = 11 b = 19

조건문에서 case 11을 실행하면 a = 11 b = 21, default 실행 a = 11 b = 24

 

11-24 = -13

 

#include <stdio.h>

struct node {
	int n1;
    struct node *n2;
};

int main() {
	struct node a = {10, NULL};
    struct node b = {20, NULL};
    struct node c = {30, NULL};
    
    struct node *head = &a;
    a.n2 = &b;
    b.n2 = &c;
    
    printf("%d\n", head->n2->n1);
    
    return 0;
}
더보기

정답 : 20 

 

[풀이] - chatGPT

 

  • 구조체 정의:
    • struct node는 두 개의 멤버를 가지고 있습니다:
      • int n1: 정수를 저장하는 필드.
      • struct node *n2: 다음 노드를 가리키는 포인터로, 다음 노드의 주소를 저장합니다. 이는 연결 리스트 구조를 구현할 때 사용됩니다.
  • 노드 선언 및 초기화:
    • 세 개의 노드 a, b, c를 선언하고 각각 초기화합니다.
    • n1 필드는 각각 10, 20, 30으로 초기화됩니다.
    • n2 필드는 NULL로 초기화됩니다. 이는 아직 연결되지 않았음을 의미합니다.
  • 노드 연결:
    • 포인터 head는 첫 번째 노드 a의 주소를 저장하고 있습니다. 즉, head는 연결 리스트의 시작점입니다.
    • a.n2 = &b;: 노드 a의 n2가 노드 b의 주소를 가리키도록 합니다. 즉, a 다음에 b가 연결됩니다.
    • b.n2 = &c;: 노드 b의 n2가 노드 c의 주소를 가리키도록 합니다. 즉, b 다음에 c가 연결됩니다.
    • 이렇게 하면 연결 리스트는 a -> b -> c의 형태로 구성됩니다.
  • 값 출력:
    • head는 현재 노드 a를 가리키고 있습니다.
    • head->n2는 노드 b를 가리키게 됩니다. 즉, a.n2의 값, 즉 b의 주소를 따라갑니다.
    • head->n2->n1은 노드 b의 n1 값인 20을 의미합니다.
    • 따라서 20이 출력됩니다

 

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

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바