Download presentation
Presentation is loading. Please wait.
1
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열
2
일차원 배열 일차원 배열의 선언 배열의 첨자 배열 원소의 데이타형, 배열의 이름, 배열의 크기를 명시해야 함
배열 원소의 데이타형, 배열의 이름, 배열의 크기를 명시해야 함 예) char code[4]; double price[6]; float amount[100]; 배열의 원소들은 기억장소의 연속된 위치에 저장됨 배열의 첨자 배열의 원소의 위치를 색인(index) 혹은 첨자(subscript)라고 함 배열의 원소를 색인 변수 혹은 첨자 변수라고 부름 예) amount[0], amount[1], ... 배열의 이름 ?, 원소의 자료형 ?, 배열의 크기 ? 원소의 크기 ? amount amount[0] amount[1] amount[99]
3
일차원 배열 int array[5]; array array == &array[0] address 20 24 28 32 36
4
일차원 배열 배열을 사용한 성적 처리 예제 : [프로그램 7-2] #include <stdio.h>
배열을 사용한 성적 처리 예제 : [프로그램 7-2] #include <stdio.h> void main(void) { int i, grades[5], total = 0; for (i = 0; i <=4; ++i) printf(“Enter a grade:”); scanf(“%d”, &grades[i]); } printf(“\n The total of the grades”); for (i = 0; i <= 4; ++i) printf(“%d ”, grades[i]); total += grades[i]; printf(“is %d”, total);
5
배열의 초기화 배열의 초기화 변수의 초기화와 유사한 개념으로 배열의 원소들을 초기화 할 수 있음
배열의 초기치는 여러 개이므로 중괄호를 사용하여 표시함 일반적으로 프로그램의 첫 부분에서 배열을 초기화함 예) int grades[5] = {98, 87, 92, 79, 85}; char codes[6] = {'s', 'a', 'm', ’p', ‘l’, 'e’} ; char codes[ ] = {'s', 'a', 'm', ’p', ‘l’, 'e’} ; char codes[ ] = “sample”; double width[7] = {10.96, 6.43, 2.58, .86, 5.89, 7.56, 8.22}; double width[ ] = {10.96, 6.43, 2.58, .86, 5.89, 7.56, 8.22}; static int temp[4] = {10, 20, 30, 40}; static float temp[4] = {98.6, 97.2, 99.0, 101.5};
6
배열의 초기화 주의할 점 초기치는 나열된 순서대로 배열의 원소에 저장되며, 초기치가 모자라면 뒷부분의 배열 원소는 0으로 초기화됨 문자 배열의 초기화 char codes[6]={'s', 'a', 'm', ‘p’, 'l', 'e’} ; 대신에 간단히 char codes[ ]=“sample”; 형식으로 할 수 있으며, 맨 뒤 원소는 \0로 채워짐
7
배열의 전달 배열을 함수의 인자로 전달하는 방안 배열 원소의 전달 예) find_min(grades[2], grades[6])
첨자 변수를 함수의 인자로 사용하여 원소의 값이 전달됨 예) find_min(grades[2], grades[6]) 배열 원소 grades[2]와 grades[6]이 함수 find_min( )에 전달됨 (값이 전달됨) 배열 전체의 전달 배열 명을 함수의 인자로 사용 이 경우 배열의 첫 원소의 주소가 함수로 전달됨 예) find_min(grades) 배열 grades 전체가 함수 find_min( )에 전달됨
8
배열의 전달 배열 인자 전달의 예 int nums[5]; char keys[256];
double units[500], prices[500]; /* 이 배열들에 대하여 다음의 함수 호출이 가능하다. */ find_max(nums); find_ch(keys); calc_tot(nums, units, prices); /* 인자로 전달된 배열에 직접 접근할 수 있음 */ int find_max(int vals[5]) char find_ch(char in_key[256]) void calc_tot(int arr1[5], double arr2[500], double arr3[500])
9
배열 전달 프로그램 예 [프로그램 7-3 ] #include < stdio.h > void main (void )
{ int nums[5] = {2, 18, 1, 27, 16 }; void find_max(int [5]); find_max(nums); } void find_max (int vals[5]) int i, max = vals[0]; for ( i= 1; i <= 4; ++i ) if(max < vals[i]) max = vals[i]; printf ( “ The maximum value is %d”, max );
10
이차원 배열 이차원 배열 행과 열로 구성됨 예) 3행 4열로 구성되는 2차원 배열 : val 8 16 9 52
이차원 배열의 선언 예) int val[3][4]; 배열 내의 원소들은 첨자 변수 형태로 지칭하며, 스칼라 변수나 일차원 배열의 변수와 동일한 자격으로 사용됨 num = val[3][4]; val[0][0] = 62; new_num = 4* (val[1][0] – 5); sum_row0 = val[0][0] + val[0][1] + val[0][2] + val[0][3];
11
이차원 배열 지역 배열과 전역 배열 이차원 배열의 초기화 : 두 가지 방법 2차원 배열의 초기화는 행 우선 방식임
1차원 배열과 동일한 개념임 이차원 배열의 초기화 : 두 가지 방법 2차원 배열의 초기화는 행 우선 방식임 첫 행이 전부 초기화된 후에, 두 번째 행, …, 마지막 행 순서로 초기화됨 주어진 초기값이 모자라면 행 우선으로 초기화되고, 나머지 원소들은 널(null) 값으로 채워짐 int val[3][4] = { { 8, 16, 9, 52 }, { 3, 15, 27, 6 }, {14, 25, 2, 10 } }; int val[3][4] = { 8, 16, 9, 52, 3, 15, 27, 6, 14, 25, 2, 10 };
12
이차원 배열 2 차원 배열의 입출력 예 : [프로그램 7-6] 실행 결과
#include <stdio.h> void main(void) { int i, j, val[3][4] = { 8, 16, 9, 52, 3, 15, 27, 6, 14, 25, 2, 10}; printf(“\nDisplay of multiplied elements \n”); for (i = 0; i < 3; ++i) print (“\n”); for ( j = 0; j < 4; ++j) val[i][j] = val[i][j] * 10; printf(“%3d ”, val[i][j]); } 실행 결과 Display of multiplied elements
13
이차원 배열 2차원 배열의 전달 프로그램 예 : [프로그램 7-7] 실행 결과 : 8 16 9 52 3 15 27 6
#include <stdio.h> void main(void) { int i, j, val[3][4] = { 8, 16, 9, 52, 3, 15, 27, 6, 14, 25, 2, 10}; void display(int [3][4]); /*function prototype */ display(val); } void display(int nums[3][4]) int row-num, col_num; for (row_num = 0; row_num < 3; ++row_num) for (col_num = 0; col_num <4; ++col_num) printf(“%4d\n”, nums[row_num][col_num]); printf(“\n”); 실행 결과 :
14
이차원 배열 10 6 4 다차원 배열 각 차원의 크기를 배열명 다음에 명시함으로써 생성됨
예) int response[10][4][6]; response[0][0][0] 10 6 response[9][3][5] 4 response[9][3][0]
15
자주 사용되는 에러들 배열의 선언을 하지 않았을 경우 배열의 첨자 영역을 벗어난 경우
invalid indirection error message 배열의 첨자 영역을 벗어난 경우 충돌(crash) 혹은 메모리로부터 접근 가능한 원소가 아니라는 메시지 출력 배열의 모든 원소를 검침할 만큼 반복문의 첨자 크기가 충분하지 못한 경우 배열의 원소가 10개인데 for 문의 인덱스가 충분하지 못한 경우 배열의 초기화를 생략한 경우 대부분의 컴파일러가 자동으로 0 값이 초기화되지만 그렇지 않을 수 도 있음
Similar presentations