본문 바로가기
프로그래밍/C

배열 - 예제 모음

by 길냥이 2025. 6. 11.

목차

  1. 몇월은 몇일까지
  2. 최대 최소 구하기
  3. 두 배열은 같은가?
  4. 배열 복사하기
  5. 배열의 요소 개수

 

1. 몇월은 몇일까지

배열 days[]를 선언하고, 1월부터 12월까지의 일 수로 초기화한 뒤,

n월은 n일까지 있습니다.

로 출력하는 프로그램을 만들어봅시다.

 

입출력

1월은 31일까지 있습니다.
2월은 29일까지 있습니다.
3월은 31일까지 있습니다.
4월은 30일까지 있습니다.
5월은 31일까지 있습니다.
6월은 30일까지 있습니다.
7월은 31일까지 있습니다.
8월은 31일까지 있습니다.
9월은 30일까지 있습니다.
10월은 31일까지 있습니다.
11월은 30일까지 있습니다.
12월은 31일까지 있습니다.

정답은..

 

다음과 같아요.

#include <stdio.h>

int main(void)
{
	int days[] = { 31,29,31, 30,31,30, 31,31,30, 31,30,31 };
	//달 수 선언, 편의상 3개월마다 잘랐습니다. 2월은 윤년 기준입니다.
	int size = sizeof(days) / sizeof(days[0]); 
	//배열의 크기 추출, for문이 돌아가는 횟수를 정합니다.

	for (int i = 0; i < size; i++)
	{
		printf("%d월은 %d일까지 있습니다.\n", i + 1, days[i]);  
		//i가 0부터 계산되기 때문에 1을 더합니다, 배열의 index는 자동으로 0부터 시작됩니다.
	}

	return 0;
}

 

2. 최대 최소 구하기

크기가 30인 배열을 선언하고, #include <stdlib.h>을 추가한 뒤 rand(); 함수로 난수를 이 배열에 저장하세요.

지금같은 경우는 rand(); 함수의 시드값이 고정이라 동일한 난수값이 나올겁니다.

 

그리고 이 배열의 최대값과 최소값을 구하세요.

모든 배열 요소를 출력해야 합니다!

 

입출력

 

01번째 난수 : 41
02번째 난수 : 18467
03번째 난수 : 6334
04번째 난수 : 26500
05번째 난수 : 19169
06번째 난수 : 15724
07번째 난수 : 11478
08번째 난수 : 29358
09번째 난수 : 26962
10번째 난수 : 24464
11번째 난수 : 5705
12번째 난수 : 28145
13번째 난수 : 23281
14번째 난수 : 16827
15번째 난수 : 9961
16번째 난수 : 491
17번째 난수 : 2995
18번째 난수 : 11942
19번째 난수 : 4827
20번째 난수 : 5436
21번째 난수 : 32391
22번째 난수 : 14604
23번째 난수 : 3902
24번째 난수 : 153
25번째 난수 : 292
26번째 난수 : 12382
27번째 난수 : 17421
28번째 난수 : 18716
29번째 난수 : 19718
30번째 난수 : 19895

최댓값 : 32391
최솟값 : 41

정답은 다음과 같아요.

 

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

int main(void)
{
	int arr[30] = { 0 };
	int max = 0;        //최대값을 받기 위한 가능한 작은 수 
	int min = 65535;    //최소값을 받기 위한 가능한 큰 수
	//일반적으로는 배열의 0번째 index를 할당합니다.

	for (int i = 0; i < 30; i++)
	{
		arr[i] = rand(); //rand 함수는 1부터 32767까지의 난수를 반환합니다.
		printf("%02d번째 난수 : %d\n", i + 1, arr[i]);

		if (arr[i] <= min)  //만약 배열의 값이 min보다 작을 경우 시행
			min = arr[i];
		if (arr[i] >= max)  //만약 배열의 값이 max보다 클 경우 시행
			max = arr[i];
	}

	printf("\n");
	printf("최댓값 : %d\n", max);  //출력
	printf("최솟값 : %d\n", min);

	return 0;
}

 

3. 두 배열은 같은가?

2개의 정수 배열 arr1, arr2를 만들고(길이는 5여야 합니다)

배열 요소를 검사하는 함수 equal을 만든 뒤 테스트하세요.

배열은 scanf를 통해 받습니다.

 

함수는 1 또는 0을 반환합니다. if문으로 이를 처리해서 출력하세요.

 

입출력

비교할 배열을 입력하세요 : 9 9 9 9 9
비교할 배열을 입력하세요 : 9 9 9 9 9
두 배열은 같습니다.

정답은..

 

다음과 같아요.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int equal(int arr1[],int arr2[], int);

int main(void)
{
	int arr1[5] = { 0 };
	int arr2[5] = { 0 };
   	int size = 5;
	
	printf("비교할 배열을 입력하세요 : ");  //배열을 받습니다
	for (int i = 0; i < 5; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("비교할 배열을 입력하세요 : ");  //배열을 받습니다
	for (int i = 0; i < 5; i++)
	{
		scanf("%d", &arr2[i]);
	}

	// 반환값을 받아서 비교 결과 출력
	if (equal(arr1, arr2, size))
		printf("두 배열은 같습니다.\n");  //1이 return되어서 true로 처리됩니다.
	else
		printf("두 배열은 다릅니다.\n");  //0이 return되어서 false로 처리됩니다.

	return 0;
}

int equal(int arr1[], int arr2[], int size)
{

	for (int i = 0; i < size; i++)
	{
		if (arr1[i] != arr2[i])  //배열의 요소가 다를 경우 출력합니다.
			return 0;
	}
    
	return 1;  //전부 동일할 경우 출력합니다.
}

 

4. 배열 복사하기

물론 배열을 복사하는 데는 srcpy 등을 사용하면 되기는 합니다.

 

하지만 그러지 말고, 배열을 복사하는 함수 scpy를 선언하고 출력해보세요.

배열은 scanf로 받습니다. 

 

입출력

복사할 배열을 입력하세요 : 1 12 123 1234 12345

1 12 123 1234 12345
1 12 123 1234 12345

배열이 복사되었음

정답은 다음과 같아요.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void scpy(int arr1[]);

int main(void)
{
	int arr1[5] = { 0 };
	int arr2[5] = { 0 };
	
	printf("복사할 배열을 입력하세요 : ");  //배열을 받습니다

	for (int i = 0; i < 5; i++)
	{
		scanf("%d", &arr1[i]);
	}

	scpy(arr1);  //복사할 배열을 보냅니다

	return 0;
}

void scpy(int arr1[])
{
	int arr2[5] = { 0 };

	printf("\n%d %d %d %d %d\n", arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]); //대충 출력하기
	//for문을 사용해도 됩니다

	for (int i = 0; i < 5; i++)  //배열을 복사합니다
	{
		arr2[i] = arr1[i];
		printf("%d ", arr2[i]);
	}

	printf("\n\n배열이 복사되었음\n");

	return 1;
}

 

5. 배열의 요소 개수

요소 개수가 1000개인 배열을 생성하고, rand() % 10함수를 통해 1부터 9까지의 수를 생성해서 배열에 집어넣은 후 나온 요소들의 개수를 출력하세요.

이때 요소의 계산은 함수 void count(int arr, int size);를 이용합시다.

 

입출력

0이 나온 횟수 : 96
1이 나온 횟수 : 101
2이 나온 횟수 : 103
3이 나온 횟수 : 116
4이 나온 횟수 : 96
5이 나온 횟수 : 109
6이 나온 횟수 : 89
7이 나온 횟수 : 87
8이 나온 횟수 : 109
9이 나온 횟수 : 94

정답은 다음과 같아요.

 

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

void count(int arr[], int size);

int main(void)
{
	int arr[1000] = { 0 };   //요소가 1000개인 배열 선언
	int size = 1000;

	for (int i = 0; i < size; i++)   //1000번 돌립니다
		arr[i] = rand() % 10;

	count(arr, size);   //함수 시행
}

void count(int arr[], int size)
{
	int stats[10] = { 0 };  //각 값의 출력을 저장할 배열

	for (int i = 0; i < size; i++)
	{
		switch (arr[i])   //switch ~ case 문을 1000번 돌려서 배열을 검사합니다.
		{
		case 0:
			stats[0] += 1;
			break;
		case 1:
			stats[1] += 1;
			break;
		case 2:
			stats[2] += 1;
			break;
		case 3:
			stats[3] += 1;
			break;
		case 4:
			stats[4] += 1;
			break;
		case 5:
			stats[5] += 1;
			break;
		case 6:
			stats[6] += 1;
			break;
		case 7:
			stats[7] += 1;
			break;
		case 8:
			stats[8] += 1;
			break;
		case 9:
			stats[9] += 1;
			break;
		}
	}

	for (int i = 0; i < 10; i++)   //출력
	{
		printf("%d이 나온 횟수 : %d\n",i , stats[i]);
	}

}

 

6. 행렬합

2차원 표를 배열로 생성하고, 각 행의 합계, 각 열의 합계를 구해봅시다.

2차원 표는 rand() 함수로 생성하세요, 총 24개를 4×6 행렬로 만들어야 합니다.

 

입출력

1  7  4  0  9  4
8  8  2  4  5  5
1  7  1  1  5  2
7  6  1  4  2  3

1행의 합계 : 25
2행의 합계 : 32
3행의 합계 : 17
4행의 합계 : 23

1열의 합계 : 17
2열의 합계 : 28
3열의 합계 : 8
4열의 합계 : 9
5열의 합계 : 21
6열의 합계 : 14

정답은 다음과 같아요.

 

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

int main(void)
{
    int count[4][6];  // 4행 6열의 2차원 배열 선언
    int tem = 0;      // 각 행 또는 열의 합계를 저장할 임시 변수

    // 배열에 난수를 채우고 출력
    for (int i = 0; i < 4; i++)            // 행 반복
    {
        for (int j = 0; j < 6; j++)        // 열 반복
        {
            count[i][j] = rand() % 10;     // 0~9 사이의 난수 저장
            printf("%d  ", count[i][j]);   // 값 출력
        }
        printf("\n");                      // 행 단위 줄바꿈
    }

    printf("\n");

    // 각 행의 합계를 계산하여 출력
    for (int i = 0; i < 4; i++)            // 행 반복
    {
        tem = 0;                           // 합계 초기화
        for (int j = 0; j < 6; j++)        // 열 반복
            tem += count[i][j];            // 해당 행의 합을 누적
        printf("%d행의 합계 : %d\n", i + 1, tem);  // 행 번호는 1부터 출력
    }

    printf("\n");

    // 각 열의 합계를 계산하여 출력
    for (int i = 0; i < 6; i++)            // 열 반복
    {
        tem = 0;                           // 합계 초기화
        for (int j = 0; j < 4; j++)        // 행 반복
            tem += count[j][i];            // 해당 열의 합을 누적
        printf("%d열의 합계 : %d\n", i + 1, tem);  // 열 번호는 1부터 출력
    }

    return 0;
}

 

7. 로또 번호 생성하기

로또는..음..

여기서는 그냥 1부터 10까지 랜덤으로 6개를 뽑아봅시다.

 

다만 값이 동일하면 재굴림하세요. rand()함수를 사용합니다.

 

입출력

로또 번호는 다음과 같습니다.
1 7 4 0 9 8 2 5 6 3

 

정답은 다음과 같아요.

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

int main(void)
{
	int roto[10];
    int i = 0;
    int temp, j;

    while (i < 10)
    {
        temp = rand() % 10;  //임시 변수 temp에 랜덤한 값을 저장합니다
        // 중복 체크
        for (j = 0; j < i; j++)
        {
            if (roto[j] == temp)  //이미 roto 배열에 temp 값이 존재한다면
                break;   //j != i이므로 저장되지 않습니다.
        }

        if (j == i) // 중복 없으면 저장
        {
            roto[i] = temp;
            i++;    //다음 숫자를 저장하기 위한 인덱스 증가
        }
    }

	printf("로또 번호는 다음과 같습니다.\n");
	for (int i = 0; i < 10; i++)
		printf("%d ", roto[i]);
}

 

8. 세제곱근 탐색

어떤 정수(64)를 입력하면 그 정수의 세제곱근(4)가 나오도록 하는 프로그램을 제작해 봅시다.

먼저 10×2의 배열을 선언하고, 첫 번째 열에 정수를, 두 번째 열에 세제곱값을 저장하세요.

 

입출력

정수를 입력하시오 : 216
216의 세제곱근은 6

 

정답은 다음과 같아요.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int input;           // 사용자로부터 입력 받을 정수
    int count = 0;       // 일치 여부를 나타내는 변수
    int sq3[10][2] = { 0 };  // 10행 2열 배열, 0으로 초기화

    // sq3[i][0]에는 1~10 정수, sq3[i][1]에는 해당 수의 세제곱을 저장
    for (int i = 0; i < 10; i++)
    {
        sq3[i][0] = i + 1;
        sq3[i][1] = (i + 1) * (i + 1) * (i + 1);
    }

    // 사용자로부터 정수 입력 받기
    printf("정수를 입력하시오 : ");
    scanf("%d", &input);

    // 입력한 값이 배열에 있는지 확인
    for (int i = 0; i < 10; i++)
    {
        if (input == sq3[i][1])
        {
            // 입력값이 배열의 세제곱 값과 일치하면 해당 값 출력
            printf("%d의 세제곱근은 %d", sq3[i][1], sq3[i][0]);
            count++;
        }
    }

    // 일치하는 값이 하나도 없으면 정수 세제곱근이 아님
    if (count == 0)
        printf("세제곱근이 정수가 아닙니다.");

    return 0;
}

'프로그래밍 > C' 카테고리의 다른 글

함수 - 예제 모음  (0) 2025.06.11
다차원 배열  (0) 2025.06.11
함수의 데이터 공유  (0) 2025.06.11
변수 저장 유형  (2) 2025.06.11
변수 사용 영역  (0) 2025.06.10