본문 바로가기

프로그램언어/C언어

c언어 배열

1. 배열

배열이란 동일한 자료형의 집합이다. 변수의 확정된 형태로 동일한 자료형의 여러 자료를 손쉽게 처리 할 수 있다.

지금까지 변수를 선언할 때 int a, b, c, d, e 이런 방식으로 선언 했습니다. 지금 5개의 정수형 변수를 선언 했는데 이런  정수형 변수가 10개, 20개, 100개 라면 변수를 하나 하난 선언한다는게 어렵습니다. 그래서 배열 이란는 것이 있습니다. 정수형 변수 10개를 선언하라고 하면 int arr[10]으로 선언하면 끝입니다. 머 100개를 선언하라고 하면 int arr[100] 이라고 선언하면 됩니다. 아주 간단하게 끝났습니다. 

위 그림을 보면 arr[0], arr[1], ...  여기서 숫자 0, 1, 2, 3, 4를 배열의 첨자라합니다. 배열은 배열의 첨자를 통해 데이터를 삽입도하고 출력도 합니다. 

 

2. 배열 선언 형식

 자료형 배열변수명[ ];

1차원 배열 선언방법

int arr[5];

int arr[ ] = { 1, 2, 3, 4, 5 };

int arr[5] = { 1, 2, 3, 4, 5 };

int arr[5] = { 1, 2 };

int arr[5] = { 0 };

 

위 선언 방법을 실행해 보면 다음과 같습니다.

 

3. 배열과 문자열

문자 'a'는 1바이트로 한 글자 입니다.

문자열 "a"은 2바이트로 두 글자 입니다.   ( "a" => 'a', '\0' )

문자열 "a"는 문자 'a'와 Null(\0)로 두 개의 문자로 이루어진 문자열 입니다.

 


1차원 배열에 저정된 값을 출력하는 프로그램

소스코드 (정수 데이터) 소스코드 (문자 데이터)

 int i, arr[5] = {2, 4, 6, 8, 10}; 

 for(i=0; i<5; i++)

 { 
     printf("arr[%d] = %d\n", i, arr[i]); 
 } 

 char arr[5] = {'A', 'B', 'C', 'D', 'E'}; 

 for(int i=0; i<5; i++)

 { 
     printf("arr[%d] = %c\n", i, arr[i]); 
 } 

출력 결과]

arr[0] = 2

arr[1] = 4

arr[2] = 6

arr[3] = 8

arr[4] = 10

출력 결과]

arr[0] = A

arr[1] = B

arr[2] = C

arr[3] = D

arr[4] = E

 


1차원 배열에 데이터를 입력하고 출력하는 프로그램

소스코드 (정수 데이터) 소스코드 (문자 데이터)

 int i, arr[5]; 
 for(int i=0; i<5; i++)

 { 
     scanf("%d", &arr[i]); 
 }

 
 for(i=0; i<5; i++)

 { 
     printf("arr[%d] = %d\n", i, arr[i]); 
 } 

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

 { 
     printf("arr[%d] = %c\n", i, arr[i]); 
 } 

입력 예]

1 2 3 4 5

 

출력 결과]

arr[0] = 1

arr[1] = 2

arr[2] = 3

arr[3] = 4

arr[4] = 5

입력 예]

a s d f g

 

출력 결과]

arr[0] = a

arr[1] = s

arr[2] = d

arr[3] = f

arr[4] = g

 

 

예제] 배열에 초기값 0을 초기화한 프로그램 예제] 배열에 문자열을 입력하고 출력하는 프로그램
소스코드 (정수 데이터) 소스코드 (문자 데이터)

 int arr[5]={0}; 

 for(int i=0; i<5; i++)

 { 
     printf("arr[%d] = %d\n", i, arr[i]); 
 } 

 char arr[7]; 

 scanf("%s", arr); 
 for(int i=0; i<5; i++)

 { 
     printf("arr[%d] = %c\n", i, arr[i]); 
 } 

출력 결과]

arr[0] = 0

arr[1] = 0

arr[2] = 0

arr[3] = 0

arr[4] = 0

입력 예]

asdfg

출력 결과]

arr[0] = a

arr[1] = s

arr[2] = d

arr[3] = f

arr[4] = g

 

4. 다차원 배열

배열의 크기에 따라 1차원 배열, 2차원 배열, 3차원 배열이라고 합니다. 배열의 개수가  2개 이상부터는 다차원 배열 이라고 하고. 1차원 배열은 [ ]로 하나로 데이터가 행단위로 나열된 것을 말하고, 2차원 배열은 [ ] [ ]로 행과 열로 이루어진 데이터를 말하고, 3차원 배열은 [ ] [ ] [ ]로 면과 행과 열로 이루어진 데이터를 말합니다. 이처럼 배열의 크기에 따라 데이터의 범위가 점점 넓어짐을 알수 있습니다. 배열의 크기가 커지면 프로그램 또한 복잡해지므로 일반적으로 2차원 배열로 프로그램을 작성하여 처리를 합니다.

위 그림은 2차원 배열로 3행 5열로 이루어진 배열입니다. 앞 부분의 []이 행이고 뒤 부분의 []이 열입니다. 그래서 0행 0열에 값이 1일고 0행 1열의 값이 2이고 0행 2열의 값이 3이라는 것을 알수 있습니다. 배열은 이처럼 행과 열의 첨자로 삽입과 처리및 출력까지 할 수 있습니다.

 


2차원 배열에 저장된 값을 출력하는 프로그램

소스코드 (정수 데이터) 소스코드 (문자 데이터)

 int arr[3][2]={1,2,3,4,5,6}; 


 for(int i=0; i<3; i++)

 { 
     for(int j=0; j<2; j++)

     { 
         printf("arr[%d][%d]=%d ", i, j, arr[i][j]); 
     } 
     printf("\n"); 
 } 

 char arr[3][10]={"홍길동", "일지매", "임꺽정"}; 


 for(int i=0; i<3; i++)

 { 
     printf("arr[%d] = %s\n", i, arr[i]); 
 } 

출력 결과]

arr[0][0]=1 arr[0][1]=2

arr[1][0]=3 arr[1][1]=4

arr[2][0]=5 arr[2][1]=6

출력 결괴]

arr[0] = 홍길동

arr[1] = 일지매

arr[2] = 임꺽정

 
2차원 배열에 데이터를 입력하고 출력하는 프로그램

소스코드 (정수 데이터) 소스코드 (문자 데이터)

 int arr[3][2]; 

 for(int i=0; i<3; i++)

{ 
     for(int j=0; j<2; j++)

     { 
         scanf("%d", &arr[i][j]); 
     } 
 } 


 for(int i=0; i<3; i++)

 { 
     for(int j=0; j<2; j++)

     { 
         printf("arr[%d][%d]=%d ", i, j, arr[i][j]); 
     } 
     printf("\n"); 
 } 

 char arr[3][10]; 

 

 for(int i=0; i<3; i++)

 { 
     scanf("%s", arr[i]); 
 }

 
 for(int i=0; i<3; i++)

 { 
     printf("arr[%d] = %s\n", i, arr[i]); 
 } 

입력 예]

2 4

6 8

10 12

 

출력 결과]

arr[0][0]=2 arr[0][1]=4

arr[1][0]=6 arr[1][1]=8

arr[2][0]=10 arr[2][1]=12

입력 예]

임꺽정

홍길동

일지매

 

출력 결괴]

arr[0] = 임꺽정

arr[1] = 홍길동

arr[2] =일지매

 

문제 풀기]


1. 문자 10개를 저장할 수 있는 배열을 만들고 10개의 문자를 입력받아 입력받은 문자를 출력하시오.
입력 예]
A B C D E F G H I J

출력 예]
A B C D E F G H I J

 


2. 문자 10개를 저장할 수 있는 배열을 만들고 10개의 문자를 입력받아 입력받은 문자를 아래와 같이 출력하시오.
입력 예]
A B C D E F G H I J

출력 예]
J I H G F E D C B A

 


3. 문자 10개를 저장할 수 있는 배열을 만들고 10개의 문자를 입력받아 입력받은 문자를 아래와 같이 홀수번째 문자를 출력하시오.
입력 예]
A B C D E F G H I J

출력 예]
A C E G I

 


4. 10개의 문자를 입력받아 홀수 번째 문자와 짝수 번째 문자를 배열에 각각 저장하고 출력하시오.
입력 예]
A B C D E F G H I J

출력 예]
첫 번째 배열 출력 : A C E G I
두 번째 배열 출력 : B D F H J

 


5. 10개의 문자로 이루어진 문자열을 입력받아 홀수 번째 문자와 짝수 번째 문자를 배열에 각각 저장하고 출력하시오.
입력 예]
ABCDEFGHIJ

출력 예]
첫 번째 배열 출력 : A C E G I
두 번째 배열 출력 : B D F H J

 


6. “수학점수”, “과학점수”, “컴퓨터점수”의 세과목을 문자형 배열을 선언하여 초기값으로 설정하고 출력하시오.(2차원 배열)
출력 예]
수학점수
과학점수
컴퓨터점수

 


7. “수학점수”, “과학점수”, “컴퓨터점수”의 세과목을 입력 받아 문자형 배열에 저장하고 출력하시오.(2차원 배열)
입력 예]
과목 입력 : 수학점수
과목 입력 : 과학점수
과목 입력 : 컴퓨터점수

출력 예]
수학점수
과학점수
컴퓨터점수

 


8. 정수 10개를 저장할 수 있는 배열을 만들고 1부터 10까지를 대입하고 출력하시오.

출력 예]
1 2 3 4 5 6 7 8 9 10

 


9. 정수 10개를 저장할 수 있는 배열을 만들고 10개수 정수를 입력받아 출력하시오.
입력 예]
10 20 30 40 50 60 70 80 90 100

 

출력 예]
10 20 30 40 50 60 70 80 90 100

 


10. 10개의 정수를 입력 받아 홀수번째 정수를 배열에 저장하여 출력하시오.
입력 예]
10 20 30 40 50 60 70 80 90 100

출력 예]
10 30 50 70 90


11. 10개의 정수를 입력 받아 홀수 번째 정수와 짝수 번째 정수를 각각 배열에 저장하여 출력하시오.

입력 예]
10 20 30 40 50 60 70 80 90 100

출력 예]
배열1 출력(홀수) : 10 30 50 70 90
배열2 출력(짝수) : 20 40 60 80 100

 


12. 10개의 정수를 저장할 수 있는 배열을 선언하고 정수를 입력받다가 0이 입력되면 0을 제외하고 그 때까지 입력된 정수를 끝에서부터 출력하시오.
입력 예]
12 54 87 65 32 0

출력 예]
32 65 87 54 12

 


13. 10개의 정수를 저장할 수 있는 배열을 선어하고 10개의 정수를 입력 받아 합계와 평균을 출력하시오.
입력 예]
74 85 80 60 45 65 26 90 100 70

출력 예]
합계 : 695
평균 : 69.5

 


14. 10개의 정수를 저장할 수 있는 배열을 선어하고 10개의 정수를 입력 받아 최대값 출력하시오.
입력 예]
74 85 80 60 45 65 26 90 100 70

출력 예]
최대값 : 100

 


15. 10개의 정수를 저장할 수 있는 배열을 선어하고 10개의 정수를 입력 받아 최소값 출력하시오.
입력 예]
74 85 80 60 45 65 26 90 100 70

 

출력 예]
최소값 : 26

 

 

16. 10개의 정수를 저장할 수 있는 배열을 선어하고 10개의 정수를 입력 받아 두 번째로 큰 값을 출력하시오.
입력 예]
74 85 80 60 45 65 26 90 100 70

출력 예]
두 번째로 큰 값 : 90

 


17. 8개의 문자배열을 만들고 {'C', 'O'. 'M' .'P'. 'U'. 'T'. 'E'. 'R'} 으로 초기화 한 후 문자 한 개를 입력받아 배열에서의 위치를 출력하시오. (첫 번째 위치는 0번이며 배열에 없는 문자가 입력되면 "없는 문자입니다." 라는 출력한다.)
입력 예]
P

출력 예]
3

 


18. 주사위를 10번 던져서 각 숫자가 몇 번씩 나왔는지 배열에 저장하고 순서대로 출력하시오.
입력 예]
4 2 1 1 5 6 5 2 2 4

출력 예]
주사위 눈 1 : 2번
주사위 눈 2 : 3번
주사위 눈 3 : 0번
주사위 눈 4 : 2번
주사위 눈 5 : 2번
주사위 눈 6 : 1번

 


19. 학생이름과 과목 점수를 입력 받아 배열에 저장하고 석차를 구하여 아래와 같이 출력하시오.
입력 예]
홍길동  80   70  60
임꺽정  50   60  80
일지매  90   60  80

출력 예]
 이름  국어 수학 영어 합계  평균 석차
홍길동  80   70  60   210  70.1   2
임꺽정  50   60  80   190  63.3   3
일지매  90   60  80   230  76.7   1

 

 

20. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.
입력 예]
5

출력 예]

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

 

 

21. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.

입력 예]
4

출력 예]

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

 

 

22. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.

입력 예]
4

출력 예]

1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13

 

 

23. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.

입력 예]
3

출력 예]

1 2 3
  4 5
    6

 

 

24. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.

입력 예]
5

출력 예]

1 2 3 4 5
  6 7 8  
    9    
  10 11 12  
13 14 15 16 17

 

 

25. 2차원 배열을 선언하고 정수 n을 입력하여 아래와 같이 출력하시오.

입력 예]
5

출력 예]

    1    
  3 5 7  
9 11 13 15 17
  19 21 23  
    25    

 

 

26. arr[7] = {95, 75, 85, 100, 50, 60, 80} 배열을 초기화하고 선택정렬로 정렬하여 출력하시오. (오름차순)
출력 예]
50 60 75 80 85 95 100

 

 

27. arr[7] = {95, 75, 85, 100, 50, 60, 80} 배열을 초기화하고 버블정렬로 정렬하여 출력하시오. (오름차순)
출력 예]
50 60 75 80 85 95 100

 

 

28. arr[10] = {2, 3, 5, 7, 8, 10, 14, 20, 21, 25} 배열을 선언하고 정수 하나를 입력 받아 배열에서 검색하여 그 위치를 출력하시오. (이분 검색이용, 입력한 정수가 없으면 “없음”으로 출력)
입력 예]
20

출력 예]
7


29. 100개의 정수를 저장 할 수 있는 배열을 선언하고 학생의 점수를 입력 받다가 0이 입력되면 종료하고 입력 받은 수 중 가장 많이 발생한 수를 출력하시오. (단 점수는 1~10)

입력 예]
3 5 7 6 2 5 7 7 5 4 6 9 10 7 5 0

출력 예]
7


30. 자연수를 입력받아 입력 받은 약수들을 배열에 저장하고 출력한다. 자연수 0이 입력되면 종료하는 프로그램을 작성하시오. (단 숫자는 20이하의 정수)
입력과 출력의 예]
입력 : 6
6의 약수 ? 1 2 3 6

입력 : 10
10의 약수 ? 1 2 5 10

입력 : 8
8의 약수 ? 1 2 4 8

입력 : 0
프로그램 종료

'프로그램언어 > C언어' 카테고리의 다른 글

c언어 사용자 정의 함수  (0) 2019.10.04
c언어 포인터  (0) 2019.10.02
c언어 반복문(for, while, do ~ while)  (0) 2019.10.02
c언어 선택문 (if, switch)  (0) 2019.10.01
c언어 연산자의 종류  (0) 2019.10.01