7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조
배열의 정의 배열의 정의 동일한 자료형을 동시에 다수 선언할 때 사용할 수 있는 방법 자료형 배열이름 [ 배열크기 ] 자료형 배열이름 [ 배열크기 ] int score[10]; 배열의 원소의 개수는 한 개에서부터 메모리가 허락되는 범위 내에서의 무한대까지 선언이 가능하다. 배열로 선언할 수 있는 자료형은 모든 자료형이 된다. 배열의 원소를 나타내는 첨자는 ‘0’번부터 시작한다.
배열의 초기화 02 배열의 초기화 선언을 먼저하고 배열의 각 원소의 값을 할당하는 방법 int a[3]; // 배열의 선언 선언과 동시에 값을 할당하는 방법 int a[3] = { 10, 15, 20 }; // 배열의 선언과 동시에 초기화
【예제 7-1】Ex1.c 02 배열의 초기화 01 #include <stdio.h> 02 int main(void) 03 { 04 int i; 05 int a[] = { 5, 10, 15 }; 06 07 for (i = 0; i < 3; i++) 08 { 09 printf("a[%d] = %d\n", i, a[i]); 10 } 11 return 0; 12 } 표준입력 스트림
【예제 7-2】Ex2.c 02 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int A[5] = { 1, 2, 3, 4, 5 }; 05 int i, sum = 0; 06 double average; 07 08 for (i = 0; i < 5; i++) 09 sum += A[i]; 10 average = (double)sum / i; 11 12 printf("배열 A의 원소의 합은 %d이다.\n", sum); 13 printf("배열 A의 원소의 평균은 %4.2lf이다.\n", average); 14 return 0; 15 } 표준입력 스트림
배열의 종류 03 배열의 종류 배열은 선언 시에 괄호의 수에 따라 1차원 배열, 2차원 배열, 3차원 배열 그리고 다차원 배열 등 원하는 형태를 만들 수 있다. 2차원 배열은 2차원 디지털 이미지의 값을 표현할 수 있다. 3차원 배열은 3D 그래픽 데이터를 표현할 수 있는 형태이다.
【예제 7-3】Ex3.c 02 2차원 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int i, j; 05 int a[2][3] = { { 15, 20 }, { 25, 30 } }; 06 07 for (i = 0; i < 2; i++) 08 { 09 for (j = 0; j < 3; j++) 10 { 11 printf("a[%d][%d] = %d\n", i, j, a[i][j]); 12 } 13 } 14 return 0; 15 } 표준입력 스트림
【예제 7-4】Ex4.c 02 2차원 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int i, j, sum=0; 05 int a[2][2] = { 5, 20, 12, 7 }; 06 07 for (i = 0; i < 2; i++) 08 { 09 for (j = 0; j < 2; j++) 10 { 11 sum += a[i][j]; 12 } 13 } 14 printf("이차원 배열 a의 합은 %d 이다.\n", sum); 15 return 0; 16 } 표준입력 스트림
【예제 7-5】Ex5.c 02 2차원 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int i, j, sum=0; 05 int a[ ][3] = { {90, 80, 90}, // 영희의 국어 영어 수학 점수 06 {70, 100, 100}, // 철수의 국어 영어 수학 점수 07 {80, 90, 90}}; // 미나의 국어 영어 수학 점수 08 double average[3]; 09 for (i = 0; i < 3; i++) { 10 for (j = 0; j < 3; j++) { 11 sum += a[i][j]; 12 } 13 average[i] = (double) sum / j; 14 printf("%d번 학생의 과목 평균은 %.2lf 이다. 15 \n", i+1, average[i]); 16 sum = 0; 17 } 18 return 0; 19 }
【예제 7-6】Ex6.c 02 2차원 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int i, j, sum=0; 05 int a[ ][3] = { {90, 80, 90}, // 영희의 국어 영어 수학 점수 06 {70, 100, 100}, // 철수의 국어 영어 수학 점수 07 {80, 90, 90}}; // 미나의 국어 영어 수학 점수 08 double aveClass[3]; 09 for (j = 0; j < 3; j++){ 10 for (i = 0; i < 3; i++){ 11 sum += a[i][j]; 12 } 13 aveClass[j] = (double)sum / i; 14 if(j == 0) printf("국어의 평균은 %.2lf 이다.\n", aveClass[j]); 15 else if(j == 1) printf("영어의 평균은 %.2lf 이다.\n", aveClass[j]); 16 else if(j == 2) printf("수학의 평균은 %.2lf 이다.\n", aveClass[j]); 17 sum = 0; 18 } 19 return 0; 20 }
【예제 7-7】Ex7.c 02 3차원 배열 예제 02 int main(void) 03 { 01 #include <stdio.h> 02 int main(void) 03 { 04 int x[2][2][5] = {0,1,2,3,4, 05 5,6,7,8,9, 06 10,11,12,13,14, 07 15,16,17,18,19}; 08 int i, j, k; 09 10 for (i = 0; i < 2; i++) 11 for (j = 0; j < 2; j++) 12 for (k = 0; k < 5; k++) 13 printf("x[%d][%d][%d] = %d\n", i, j, k, x[i][j][k]); 14 15 return 0; 16 }
【예제 7-8】Ex8.c 02 문자 배열 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int i, j; 05 char str[4] = { 'A', 'B', 'C', '\0'}; 06 char student[ ] = "John"; 07 08 printf("문자열을 동시에 출력하는 경우\n"); 09 printf("학생의 이름은 %s 이다.\n\n", student); 10 printf("문자열을 한자씩 출력하는 경우 \n"); 11 12 for(i=0; str[i] != '\0'; i++) 13 printf("%c\n", str[i]); 14 return 0; 15 } 표준입력 스트림
변수 접근 방법 04 변수 접근 방법 메모리에 선언한 변수에 접근하는 방법에는 두 가지가 있다. 변수명으로 접근하는 방법 변수의 주소를 이용해서 접근하는 방법 배열에서는 배열의 원소의 주소에 접근하는 방법으로 배열명을 이용한다. 배열명은 배열의 시작주소를 나타내는 상수이다.
【예제 7-9】Ex9.c 02 주소를 사용하는 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a; 05 printf(" 하나의 정수 값을 입력하시오\n"); 06 scanf("%d", &a); 07 08 printf(" 입력받은 정수의 값은 %d 이다.\n", a); 09 printf(" 입력받은 정수의 주소는 %p 이다.\n", &a); 10 11 return 0; 12} 표준입력 스트림
【예제 7-10】Ex10.c 02 배열과 주소 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a[4] = {10, 20, 30, 40}; 05 int i, aryLength; 06 aryLength = sizeof(a) / sizeof(int); 07 printf("배열의 원소값을 출력하면 \n"); 08 for(i = 0; i < aryLength ; i++){ 09 printf("a[%d] = %d \n", i, a[i]); 10 } 11 printf("배열 원소의 주소를 출력하면 \n"); 12 for(i = 0; i < aryLength ; i++){ 13 printf("&a[%d] = %p \n", i, &a[i]); 14 } 15 return 0; 16 } 표준입력 스트림
배열과 주소 05 배열과 주소
【예제 7-11】Ex11.c 02 배열과 주소 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 double b[] = { 2.3, 3.0, 4.1, 5.5}; 05 int a[4] = {10, 20, 30, 40}; 06 int i, aryLenDouble, aryLenInt; 07 aryLenDouble = sizeof(b) / sizeof(double); 08 aryLenInt = sizeof(a) / sizeof(int); 09 printf("double형 배열 원소의 주소를 출력하면 \n"); 10 for(i = 0; i < aryLenDouble; i++){ 11 printf("b+%d = %p \n", i, b+i); 12 } 13 printf("int형 배열 원소의 주소를 출력하면 \n"); 14 for(i = 0; i < aryLenDouble; i++){ 15 printf("a+%d = %p \n", i, a+i); 16 } 17 return 0; 18 }