Presentation is loading. Please wait.

Presentation is loading. Please wait.

C언어: 배열 (Arrays).

Similar presentations


Presentation on theme: "C언어: 배열 (Arrays)."— Presentation transcript:

1 C언어: 배열 (Arrays)

2 배열이란? 배열(array)의 사전적인 의미는 “일정한 차례나 간격에 따라 벌여 놓음”이라는 의미를 가지고 있다.
여러 개의 변수를 메모리에 할당할 때 배열을 이용하면, 한 번에 메모리가 허용하는 범위 내에서 일률적인 주소체계를 가지고 선언할 수 있다.

3 여러 개의 변수 선언 여러 개의 변수가 필요한 경우 변수를 선언하는 방법
메모리에 할당시 그 위치는 규칙적이지 못하다. int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;

4 배열의 선언 방법 여러 개의 변수를 선언할 때 일일이 변수의 자료형과 변수명을 나열하는 번거로움을 피하기 위하여 C언어에서는 배열의 기법을 사용하여 메모리를 활용 다음과 같이 배열을 선언 자료형 개수 char a[n]; 배열명

5 메모리에 배열 저장 int의 크기를 갖는 변수를 총 n개를 선언하고 그 이름은 a라고 명명하고, 이는 메모리에 다음과 같이 저장

6 배열의 활용 - 다양한 변수들의 간소화

7 배열의 활용 - 문자열의 처리

8 반복문을 활용한 배열의 사용 for(n = 0; n < 5; n ++) { a[n] = 0; }
a[0]부터 a[4]까지 0을 대입

9 배열을 사용할 때의 주의사항-1 선언한 배열의 길이와 사용하는 배열의 길이가 일치해야 한다.
- a[5]로 선언한 배열에 a[6]은 접근할 수 없다(쓰레기 값이 로드된다).

10 배열을 사용할 때의 주의사항-2 선언한 길이만큼의 배열은 그 순서가 반드시 0부터 차례대로 1씩 증가되어야 한다.
- a[5]로 선언했다면 a[0] 부터 a[4] 까지 사용해야 하며, 중간에 0~4 이외의 숫자는 사용할 수 없다.

11 배열을 사용할 때의 주의사항-3 배열의 이름도 일반 변수의 이름 규칙과 같이 키워드는 사용할 수 없다

12 배열을 사용할 때의 주의사항-4 선언한 배열의 자료형은 배열의 전체에 해당하는 자료형이며, 배열의 크기는 전체 배열 수에 비례한다.

13 1차원배열 배열의 시작부터 끝까지 하나의 종을 이루며 열거된 배열

14 2차원 배열 입체적으로 이루어져있음

15 3차원 배열

16 1차원 배열이란? 배열이 하나의 열을 이루며 원소를 나열한 것

17 1차원 배열의 선언

18 1차원 배열의 선언 예 array라는 이름의 배열은 하나의 원소의 크기가 4바이트인 공간 10개를 할당
storage라는 배열은 하나의 원소의 크기가 1바이트인 20개의 공간을 할당 value라는 배열은 하나의 원소의 크기가 8바이트인 5개의 공간을 할당

19 1차원 배열의 초기화 변수를 초기화하듯이 배열도 최초 선언될 때 초기화할 수 있다.
배열을 선언함과 동시에 초기화를 같이 수행하는 문장

20 쓰레기 값이 대입된 배열의 초기화 선언한 개수보다 초기화를 적게 했다면, 순서대로 마지막에 초기화하지 않은 배열은 자동으로 0값이 대입

21 자동으로 배열의 크기가 할당되는 경우의 배열 초기화
배열의 개수를 지정하지 않고 3개의 항목만 초기화하면 array 라고 하는 배열의 크기는 4바이트의 공간이 3개가 되어 자동으로 12바이트가 할당

22 1차원 배열의 사용 및 접근

23 배열의 초기화와 대입의 관계

24 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램
예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 배열의 크기를 계산하고, 배열내의 원소들의 총합을 구하는 프로그램을 작성한다.

25 예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램
// C_EXAMPLE\ch8\ch8_project1\array1.c #include <stdio.h> void main(void) { int a[] = {1, 2, 3, 4, 5}; // a의 크기는 5*4바이트 int i, sum = 0; // i는 for문에 사용, sum은 합을 저장 printf("배열 a의 크기는 %d \n", sizeof(a)); // i가 0부터 5가 될때까지 5번 반복 for(i = 0; i < 5; i++) sum += a[i]; // sum = sum + a[i] } // for printf("1부터 5까지의 합은 %d \n", sum); } // main() 1차원 배열의 선언과 동시에 초기화 a배열의 크기를 바이트 단위로 반환 a배열의 원소값을 얻어옴 a[0]부터 a[4]까지의 합을 더함

26 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램
예제 8-1 배열의 크기를 계산하고, 배열의 원소의 총합을 구하는 프로그램 sizeof(a) a[0]부터 a[4]까지의 배열의 원소들의 합

27 다차원 배열이란? 다차원 배열이란 배열을 중복하여 사용하는 것으로 배열이 중복되는 개수만큼 몇 차원의 배열인지 구분한다.
2차원 배열의 예

28 3차원 배열 2차원 배열에 1차원 배열이 1개 더 추가된 형태
3차원 이상의 배열의 경우에는 이를 도식화하기 힘들 뿐만 아니라 입체적으로 판단하기 복잡해 거의 사용하지 않는다

29 2차원 배열의 선언과 크기 다차원 배열을 선언하는 방법은 1차원 배열을 선언하는 것과 크게 다르지 않다.
4바이트 (int) × 3 × 4 = 48바이트

30 3차원 배열의 선언과 크기 4바이트 (int)×3×4×5 = 240바이트

31 다차원 배열을 선언하는 예 2차원 배열 3차원 배열 4차원 배열

32 다차원 배열의 초기화 다차원 배열의 초기화시 중괄호({ })내에 차원수를 고려해서 초기화해야 한다.

33 2차원 배열의 초기화의 예 각 필드에 있는 상수가 어떠한 위치에 들어가는지 유심히 지켜볼 필요가 있다.

34 2차원 배열 길이의 생략한 선언 배열의 길이를 생략할 때 올바른 경우 배열의 길이를 생략할 때 올바르지 못한 경우

35 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램
예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램을 작성한다.

36 예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램
// C_EXAMPLE\ch8\ch8_project2\array2.c #include <stdio.h> void main(void) { int p[][2] = {{2, 8}, {4, 14}}; // (2, 8)와 (4, 14)의 두 좌표 선언 int a, b; // 기울기와 y절편 선언 printf("배열 p의 크기는 %d \n", sizeof(p)); a = (p[1][1] - p[0][1]) / (p[1][0] - p[0][0]); // a = (y2-y1) / (x2-x1) b = p[1][1] - a*p[1][0]; // b = y2 - a*x2 printf("1차 함수 식은 y = %dx + %d \n", a,b); } // main() 2차원 배열의 초기화 생략가능 2차원 배열의 크기 = 자료형 * 행 * 열

37 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램
예제 8-2 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램 sizeof(p) y절편 기울기

38 함수의 인수 전달 일반적으로 함수를 호출할 때 함수가 정의되어 있는 형식에 따라 인수를 전달해야 하는지, 아니면 인수없이 함수만 호출하는 것인지를 결정한다

39 1차원 배열의 인수 전달 함수를 호출할 때는 배열명만 사용하고, 함수를 정의부분에서 인수로 사용하고자 하는 배열은 대괄호([ ])안의 개수는 기입하지 않는다.

40 2차원 배열의 인수 전달 호출 시에는 배열명만 기입하고, 수를 정의부분에서 인수로 사용하고자 하는 배열은 2차원 배열의 행 개수는 생략

41 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램
예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 2차원 배열을 이용하여 1차함수의 식을 구하는 프로그램을 작성한다.

42 예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램
// C_EXAMPLE\ch8\ch8_project3\array3.c #include <stdio.h> // func() 함수원형선언, 인수는 총 3개이며 1차원 배열, 2차원 배열, int형을 인수로 함 void func(int a1[], int r[][2], int t); void main(void) { int a[] = {1, 2, 3}; // 1차원 배열 int r[][2] = {{1, 2}, {3, 4}, {5, 6}}; // 2차원 배열 int v = 10; func(a, r, v); // func() 함수호출, 배열의 경우 배열명만 사용 printf("a[1] = %d, r[1][1] = %d, v = %d \n", a[1], r[1][1], v); } // main() 함수의 원형선언은 배열을 선언할 때 크기를 지정하지 않는 경우와 유사하다. 함수를 호출할 때 배열명만 기입한다.

43 예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 // func() 함수정의, 인수 형태에 주의
void func(int a1[], int r1[][2], int t) { int i = 0; for(i = 0; i < 3; i++) // for 문을 3번 돌며 인수로 받아온 배열값을 변화시킴 a1[i] *= 2; r1[i][1] *= 3; } // for t *= 10; // 일반 int형 변수를 변화시킴 } // func() 1차원 배열 각 원소에 2를 곱하여 저장 2차원 배열 중 우측 원소에 3을 곱하여 다시 저장 인수로 넘겨 받은 int형 변수에 10을 곱하여 다시 저장

44 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램
예제 8-3 1, 2차원 배열을 사용하여 함수를 호출하고 변경하는 프로그램 a[1]의 값은 2였으나, func() 함수호출을 하 고 난 뒤 2가 곱해져 4로 변하였다. 일반 변수는 함수 내에서 값을 변경해도 지역변수 형태라 그 값이 변경되지 않는다. r[1][1]의 값은 4였으나 func() 함수에 의해 3이 곱해져 12로 변하였다.

45 문자배열이란? 문자열을 처리할 때 사용하는 방법으로 1바이트의 문자를 1바이트 크기의 배열 공간에 한 문자씩 삽입하여 전체 문자열을 다룰 때 유용하다. 화면에 “hello”라는 문자를 출력하고자 한다면, 지금까지 배웠던 과정으로는 다음과 같이 선언할 것이다.

46 hello 라는 문자를 찍기 위한 프로그램 소스코드 실행결과 #include <stdio.h>
void main(void) { char str[] = {'h', 'e', 'l', 'l', 'o'}; printf("% s \n", str); } // main() 문자열을 찍기 위한 printf()문의 출력형식 지정문자 실행결과 쓰레기 값이 존재

47 NULL 문자를 삽입한 배열 프로그램 소스코드 실행결과 #include <stdio.h>
void main(void) { char str[] = {'h', 'e', 'l', 'l', 'o', 0 }; printf("% s \n", str); } // main() NULL문자 ('\0')를 대입해도 됨 문자열을 찍기 위한 printf()문의 출력형식 지정문자 실행결과 정상적으로 출력됨

48 문자배열의 읽기 쓰기 문자배열도 일반 int 배열 등과 마찬가지로 각각의 배열 원소들을 읽거나 쓸 수 있다.

49 문자배열의 크기 문자는 char 자료형에 1바이트의 크기를 갖는다.
이를 배열로 선언하여 문자열을 만들게 되면, 문자열의 문자 개수에 NULL 문자를 포함한 크기를 갖는다.

50 문자배열의 선언 문자열을 선언할 때에는 이중인용부호(“ ”)를 사용하는 것이 일반적이다.
이중인용부호를 사용하면 크기는 6바이트가 되며 자동으로 문자열의 끝에 NULL 문자가 추가된다.

51 잘못된 배열의 선언 “hello”라는 문자열을 배열의 길이를 생략하지 않고, 다음과 같이 지정한다면 에러가 발생할 것이다.
C 언어는 이중인용부호(“ ”) 안의 내용을 문자열로 인식하고 항상 끝에 NULL 문자를 삽입하기 때문

52 문자열의 끝 1바이트의 크기를 갖는 문자는 단일인용부호(‘’)로 표현
1바이트 크기를 갖는 문자가 여러 개 존재할 때는 이중인용부호(“”)를 사용하는 것이 일반적

53 문자배열을 선언하고 각 원소를 확인하는 프로그램
예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램 이중인용부호(“ ”)를 사용하여 문자배열을 선언하고, 일반 배열처럼 문자를 저장하여 2개의 문자배열을 선언하고, 이를 각각 출력하는 프로그램을 작성한다.

54 예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램
// C_EXAMPLE\ch8\ch8_project4\array4.c #include <stdio.h> void main(void) { char s[10] = {'h', 'e', 'l', 'l', 'o'}; // 10개의 공간에 5글자를 대입 char s2[] = "students"; // 문자열 초기화 // s을 %를 이용하여 출력하고, s[5]의 자리의 문자를 확인 printf("s = %s, s[5] = %d \n", s, s[5]); // s2[3]의 문자를 출력함 printf("s2[3] = %c \n", s2[3]); // s2의 크기를 출력 printf("sizeof(s2) = %d \n", sizeof(s2)); printf("%s %s \n", s, s2); } // main() 10개의 공간을 설정했으나, 5개의 공간에만 문자가 저장되고, 그 외의 공간에는 0이 자동으로 삽입됨 자동으로 문자의 길이 + 1만큼의 공간이 할당됨 s[5]에 0이 삽입되어 정상적으로 문자열이 출력됨 문자배열의 크기는 문자길이 + 1바이트

55 예제 8-4 문자배열을 선언하고 각 원소를 확인하는 프로그램
‘h’, ‘e’, ‘l’, ‘l’, ‘o’ 다음에 0이 있으므로 문자열의 끝은 ‘\0’이다. 0은 ASCII 코드로 ‘\0’ 이다. “”로 선언해도 일반 배열과 같다. 문자배열의 크기는 문자열 길이 + 1바이트

56 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램
예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 2차원 배열을 활용하여 화면에 My name is Jane이라는 문장을 출력하는 프로그램을 작성한다.

57 예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램
// C_EXAMPLE\ch8\ch8_project5\array5.c #include<stdio.h> void main(void) { char str[][5] = {"My", "name", "is", "Jane"}; int i; for(i = 0; i < 4; i++) printf("%s ", str[i]); } // for printf("\n"); } // main() 2차원 배열을 선언할 때 행의 개수는 생략가능 i가 0 ~ 3까지 루프를 돌면서 str[0] ~ str[3] 까지의 문자열을 출력한다.

58 예제 8-5 2차원 배열을 활용한 문자열 배열을 출력하는 프로그램 s[0] s[1] s[2] s[3]


Download ppt "C언어: 배열 (Arrays)."

Similar presentations


Ads by Google