정보처리기능사 실기 문제: 배열 정렬 함수 구현
추천 자료: ASP.NET Core 인증 및 권한 부여
이 문제에서는 C 언어를 사용하여 주어진 배열을 오름차순으로 정렬하는 함수를 작성하고, 이 함수를 사용하여 배열을 정렬한 후 결과를 출력하는 프로그램을 작성하는 것이 목표입니다. 프로그램은 Allman 스타일로 코드를 구성하여 가독성을 높입니다.
#include <stdio.h>
void align(int a[])
{
int temp;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main(void)
{
int a[] = {85, 75, 50, 100, 95};
align(a);
for (int i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
}
해결 방법:
#include <stdio.h>
를 사용하여 표준 입출력 라이브러리를 포함합니다.align
이라는 이름의 함수를 정의하여 배열a
를 매개변수로 받습니다. 이 함수는 배열 내의 요소를 오름차순으로 정렬하는 역할을 합니다.- 함수 내에서 두 반복문을 사용하여 배열의 요소들을 비교하고, 조건에 따라 서로의 위치를 교환합니다. 이는 버블 정렬 알고리즘의 구현 예입니다.
main
함수에서 정수 배열a
를 초기화하고,align
함수를 호출하여 배열을 정렬합니다.- 정렬된 배열의 요소를 출력하기 위해 반복문을 사용하여 각 요소를 순회하고
printf
함수를 이용해 출력합니다.
이 문제는 배열을 정렬하는 기본적인 알고리즘인 버블 정렬의 구현과 함수의 정의 및 사용 방법을 이해하는 데 중점을 둡니다.
정보처리기사 실기 시험 기출 문제 - 배열 정렬
문제
다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.
소스 코드 파일명: array_sorting.c
#include <stdio.h>
void align(int a[]) {
int temp;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4 - i; j++)
if (a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
main() {
int a[] = { 85, 75, 50, 100, 95 };
align(a);
for (int i = 0; i < 5; i++)
printf("%d ", a[i]);
}
입력 예시
이 프로그램은 사용자로부터 입력을 받지 않습니다.
출력 예시
50 75 85 95 100
해설
이 프로그램은 버블 정렬 알고리즘을 사용하여 배열 a
의 요소를 오름차순으로 정렬하고, 정렬된 배열을 출력합니다.
align
함수는 주어진 배열a
를 인자로 받아 내부적으로 버블 정렬 알고리즘을 수행합니다. 이 알고리즘은 배열의 각 요소를 순차적으로 비교하고, 필요한 경우 인접한 요소끼리 위치를 교환하여 정렬합니다.- 주어진 배열
a
는{ 85, 75, 50, 100, 95 }
로 초기화됩니다. align(a);
함수 호출을 통해 배열a
가 정렬됩니다. 정렬 과정에서 배열의 요소들은 오름차순(낮은 값에서 높은 값으로)으로 재배치됩니다.- 정렬된 배열은
for
루프를 통해 출력되며, 최종적으로50 75 85 95 100
의 순서로 출력됩니다.
이 프로그램은 기본적인 정렬 알고리즘 중 하나인 버블 정렬을 사용하여 배열 내 요소를 정렬하는 방법을 보여줍니다.
정보처리기능사 실기 문제: 최대 소수 약수 찾기
이 문제에서는 C 언어를 사용하여 주어진 숫자의 약수 중에서 가장 큰 소수를 찾아 출력하는 프로그램을 작성하는 것이 목표입니다. 이 과정에서 소수를 판별하는 함수 isPrime
과 이 함수를 활용하여 최대 소수 약수를 찾는 알고리즘에 대해 이해해야 합니다.
#include <stdio.h>
int isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0) return 0;
}
return 1;
}
int main()
{
int number = 13195;
int max_div = 0;
for (int i = 2; i < number; i++)
{
if (isPrime(i) == 1 && number % i == 0) max_div = i;
}
printf("%d", max_div);
}
해결 방법:
#include <stdio.h>
를 사용하여 표준 입출력 라이브러리를 포함합니다.isPrime
함수를 정의하여 주어진 숫자가 소수인지 판별합니다. 이 함수는 2부터 숫자 전까지의 모든 수로 나누어보고, 나누어 떨어지는 수가 있으면 0을 반환하여 소수가 아님을 나타냅니다. 나누어 떨어지는 수가 없다면 1을 반환하여 소수임을 나타냅니다.main
함수에서 주어진 숫자number
에 대하여 2부터 시작하여number
까지 모든 수를 순회하며, 각 숫자가number
의 약수이면서 소수인지를isPrime
함수를 호출하여 확인합니다.- 조건을 만족하는 약수 중에서 가장 큰 값을
max_div
에 저장합니다. - 반복문이 종료되면,
max_div
에 저장된 최대 소수 약수를printf
함수를 사용하여 출력합니다.
이 문제는 소수 판별 알고리즘과 반복문을 사용하여 주어진 숫자의 약수 중에서 가장 큰 소수 약수를 찾는 방법을 이해하는 데 중점을 둡니다. 복잡한 문제를 해결하기 위한 알고리즘 구현 능력과 소수 판별 기법의 활용이 중요한 포인트입니다.
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!