인사말

안녕하세요. 이 글을 읽고 계신다면 정보처리기사 또는 정보처리산업기사 수험생이실 것 같습니다.

여러 좋은 서적에서 이론을 잘 설명하고 있지만, 코딩 문제의 경우 같은 문제를 여러 번 풀다 보면 답이 머리에 기억되어 새로운 문제가 필요하게 되는 순간이 옵니다.

그럴 때 더 많은 문제를 풀어보고 도움이 되게 하고자 여러 C언어, JAVA, Python 문제를 변형 시키고 직접 컴파일하여 답을 확인하면서 문제를 만들었습니다.

정보처리 실기를 공부하시는 모든 수험생 여러분, 목표하는 모든 것이 이루어지는 그날까지 응원하겠습니다. 화이팅!

목표를 향해 열심히 노력하시고, 좋은 결과 있기를 기원합니다!

 

 

정보처리기사 실기 언어 코딩 기출변형 문제

 

1. 출력 값을 작성하시오.

#include <stdio.h>


void modify(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp - *x;
}


int calculate(int *arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            sum += arr[i];
        } else {
            sum -= arr[i];
        }
    }
    return sum;
}


int main() {
    int values[] = {12, 4, 8, 6, 3, 7};
    int *p1 = &values[1];
    int *p2 = &values[4];


    modify(&values[2], p2);
    modify(p1, &values[5]);
    int result = calculate(values, 6);


    printf("%d\n", result);
    return 0;
}
정답

10

2. 출력 값을 작성하시오.

#include <stdio.h>


void process(int *arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        if (*(arr + i) % 2 == 0) {
            *(arr + i) += *(arr + i + 1);
        } else {
            *(arr + i + 1) -= *(arr + i);
        }
    }
}


int calculate(int *p, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            sum += *(p + i);
        } else {
            sum -= *(p + i);
        }
    }
    return sum;
}


int main() {
    int data[] = {10, 5, 8, 3, 12, 6};
    int length = sizeof(data) / sizeof(data[0]);


    process(data, length);
    int result = calculate(data, length);


    printf("%d\n", result);
    return 0;
}
정답

13

3. 출력 값을 작성하시오.

#include <stdio.h>


struct Student {
    int id;
    float gpa;
    char grade;
};


void modify(struct Student *s) {
    s->gpa += 0.5;
    if (s->gpa > 4.0) {
        s->gpa = 4.0;
    }
    s->grade = (s->gpa >= 3.5) ? 'A' : (s->gpa >= 3.0) ? 'B' : (s->gpa >= 2.5) ? 'C' : 'D';
}


int main() {
    struct Student s1 = {101, 3.2, 'B'};
    struct Student s2 = {102, 2.8, 'C'};
    struct Student s3 = {103, 3.9, 'A'};


    struct Student students[] = {s1, s2, s3};
    int num_students = sizeof(students) / sizeof(students[0]);


    for (int i = 0; i < num_students; i++) {
        modify(&students[i]);
    }


    for (int i = 0; i < num_students; i++) {
        printf("ID: %d, GPA: %.1f, Grade: %c\n", students[i].id, students[i].gpa, students[i].grade);
    }


    return 0;
}
정답

ID: 101, GPA: 3.7, Grade: A
ID: 102, GPA: 3.3, Grade: B
ID: 103, GPA: 4.0, Grade: A

4. 출력 값을 작성하시오.

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


struct Book {
    char title[50];
    int pages;
    float price;
};


void update(struct Book *b, float discount) {
    b->price -= discount;
    if (b->price < 0) {
        b->price = 0;
    }
}


int main() {
    struct Book b1 = {"C Programming", 300, 29.99};
    struct Book b2 = {"Data Structures", 450, 39.99};
    struct Book b3 = {"Algorithms", 500, 49.99};


    struct Book library[] = {b1, b2, b3};
    int num_books = sizeof(library) / sizeof(library[0]);


    for (int i = 0; i < num_books; i++) {
        update(&library[i], 10.0);
    }


    for (int i = 0; i < num_books; i++) {
        printf("Title: %s, Pages: %d, Price: %.2f\n", library[i].title, library[i].pages, library[i].price);
    }


    return 0;
}
정답

Title: C Programming, Pages: 300, Price: 19.99
Title: Data Structures, Pages: 450, Price: 29.99
Title: Algorithms, Pages: 500, Price: 39.99

5. 출력 값을 작성하시오.

#include <stdio.h>


struct Point {
    int x;
    int y;
};


void swap(struct Point *p1, struct Point *p2) {
    int temp = p1->x;
    p1->x = p2->x;
    p2->x = temp;
}


int main() {
    struct Point pt1 = {3, 4};
    struct Point pt2 = {7, 8};


    swap(&pt1, &pt2);


    printf("pt1: (%d, %d), pt2: (%d, %d)\n", pt1.x, pt1.y, pt2.x, pt2.y);


    return 0;
}
정답

pt1: (7, 4), pt2: (3, 8)

6. 출력 값을 작성하시오.

#include <stdio.h>


struct Rectangle {
    int length;
    int width;
};


void adjust(struct Rectangle *r, int value) {
    r->length += value;
    r->width -= value;
    if (r->width < 0) r->width = 0;
}


int main() {
    struct Rectangle rect = {10, 5};


    adjust(&rect, 3);


    printf("Length: %d, Width: %d\n", rect.length, rect.width);


    return 0;
}
정답

Length: 13, Width: 2

7. 출력 값을 작성하시오.

#include <stdio.h>


struct Date {
    int day;
    int month;
    int year;
};


void updateDate(struct Date *d) {
    d->day += 1;
    if (d->day > 30) {
        d->day = 1;
        d->month += 1;
        if (d->month > 12) {
            d->month = 1;
            d->year += 1;
        }
    }
}


int main() {
    struct Date date = {30, 12, 2023};


    updateDate(&date);


    printf("Date: %d/%d/%d\n", date.day, date.month, date.year);


    return 0;
}
정답

Date: 1/1/2024

8. 출력 값을 작성하시오.

#include <stdio.h>


struct Point {
    int x;
    int y;
};


void reflect(struct Point *p) {
    p->x = -p->x;
    p->y = -p->y;
}


int main() {
    struct Point pt = {3, -4};


    reflect(&pt);


    printf("Point: (%d, %d)\n", pt.x, pt.y);


    return 0;
}
정답

Point: (-3, 4)

9. 출력 값을 작성하시오.

#include <stdio.h>


struct Employee {
    char name[20];
    int age;
    float salary;
};


void giveRaise(struct Employee *e, float percent) {
    e->salary += e->salary * (percent / 100);
}


int main() {
    struct Employee emp = {"John Doe", 30, 50000.0};


    giveRaise(&emp, 10.0);


    printf("Name: %s, Age: %d, Salary: %.2f\n", emp.name, emp.age, emp.salary);


    return 0;
}
정답

Name: John Doe, Age: 30, Salary: 55000.00

10. 출력 값을 작성하시오.

#include <stdio.h>


struct Student {
    char name[20];
    int marks;
};


void modifyMarks(struct Student *s, int change) {
    s->marks += change;
    if (s->marks < 0) s->marks = 0;
    if (s->marks > 100) s->marks = 100;
}


int main() {
    struct Student stu = {"Alice", 85};


    modifyMarks(&stu, 20);
    printf("Name: %s, Marks: %d\n", stu.name, stu.marks);


    modifyMarks(&stu, -50);
    printf("Name: %s, Marks: %d\n", stu.name, stu.marks);


    return 0;
}
정답

Name: Alice, Marks: 100
Name: Alice, Marks: 50