11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수
이상한 요구사항 5개의 정수를 받아서 역순으로 출력하는 프로그램 을 작성하라. 실행 예 점진적 세분화 입력: 19 10 8 29 36 출력: 36 29 8 10 19 점진적 세분화 5개의 정수를 읽어 x0, x1, x2, x3, x4에 저장한다. (scanf를 이용하여 바로 구현 가능) x4, x3, x2, x1, x0 순으로 출력한다. (printf를 이용하여 바로 구현 가능)
scanf와 printf 패턴이 중복 되는 것이 마음에 불편하지요? 마음에 듭니까? scanf와 printf 패턴이 중복 되는 것이 마음에 불편하지요? "배열"을 이용하면 이 중복을 제 거할 수 있습니다. scanf 중복 printf 중복 실행결과: 다섯 개의 정수를 입력해 주세요. 19 10 8 29 36 입력된 정수를 역순으로 출력하면 다음과 같습니다. 36 29 8 10 19
배열 소개 배열이란? 배열 원소 참조 배열 예 같은 자료형의 자료 여러 개를 하나로 묶은 것 또는 이런 자료를 나타내는 자료형 첨자 연산자(index operator) []를 이용하여 참조한다. C 배열의 첨자는 항상 0부터 시작한다. 배열 예 다섯 개의 원소로 이루어진 배열 x
revPrint2.c 실행결과: 다섯 개의 정수를 입력해 주세요. 19 10 8 29 36 크기 5인 int 배열 x 첨자연산자 []가 주소연산자 &보다 높은 우선순위임. 따라서 &(x[i])와 같은 뜻임 실행결과: 다섯 개의 정수를 입력해 주세요. 19 10 8 29 36 입력된 정수를 역순으로 출력하면 다음과 같습니다. 36 29 8 10 19
11-1 배열이란 무엇인가? 둘 이상의 변수를 동시에 선언하는 효과를 지닌다. 많은 양의 데이터를 일괄적으로 처리해야 하는 경 우에 유용하다. 지역적 특성을 지닐 수도 있고, 전역적 특성을 지 닐 수도 있다.
11-2 1차원 배열의 선언 및 초기화 배열 선언에 있어서 필요한 것 세 가지 11-2 1차원 배열의 선언 및 초기화 배열 선언에 있어서 필요한 것 세 가지 배열 길이 : 배열을 구성하는 변수의 개수 (반드시 상수를 사용) 배열 요소 자료형 : 배열을 구성하는 변수의 자료형 배열 이름 : 배열에 접근할 때 사용되는 이름 그림 11-1
11-2 1차원 배열의 선언 및 초기화 1차원 배열의 접근 배열 요소의 위치를 표현 : 인덱스(index) 11-2 1차원 배열의 선언 및 초기화 1차원 배열의 접근 배열 요소의 위치를 표현 : 인덱스(index) 인덱스는 0에서부터 시작 그림 11-2
11-2 1차원 배열의 선언 및 초기화 배열 선언과 접근의 예(array1.c 참조) 그림 11-3 int main(void) 11-2 1차원 배열의 선언 및 초기화 배열 선언과 접근의 예(array1.c 참조) int main(void) { int array[10]; // 배열 선언 array[0]=10; // 첫 번째 요소 접근 array[1]=20; // 두 번째 요소 접근 array[2]=30; // 세 번째 요소 접근 . . . . . return 0; } 그림 11-3
11-2 1차원 배열의 선언 및 초기화 /* array1.c */ #include <stdio.h> 11-2 1차원 배열의 선언 및 초기화 /* array1.c */ #include <stdio.h> int main(void) { double total; double val[5]; val[0]=1.01; val[1]=2.02; val[2]=3.03; val[3]=4.04; val[4]=5.05; total=val[0]+val[1]+val[2]+val[3]+val[4]; printf("평균 : %lf \n", total/5); return 0; }
11-2 1차원 배열의 선언 및 초기화 선언과 동시에 초기화(array2.c 참조) 그림 11-4 int main(void) 11-2 1차원 배열의 선언 및 초기화 선언과 동시에 초기화(array2.c 참조) int main(void) { int arr1[5]={1, 2, 3, 4, 5}; int arr2[ ]={1, 3, 5, 7, 9}; int arr3[5]={1, 2} } 그림 11-4
11-2 1차원 배열의 선언 및 초기화 그림 11-5 그림 11-6
11-3 배열 기반 문자열 변수 문자열 상수 문자열 변수(ar_str.c 참조) 문자열이면서 상수의 특징을 지닌다. 11-3 배열 기반 문자열 변수 문자열 상수 문자열이면서 상수의 특징을 지닌다. 문자열 변수(ar_str.c 참조) 문자열이면서 변수의 특징을 지닌다. printf("Hello World! \n"); char str1[5]="Good"; char str2[]="morning";
/* ar_str.c */ #include <stdio.h> int main(void) { char str1[5]="Good"; char str2[]="morning"; printf("%s \n", str1); printf("%s %s \n ", str1, str2); return 0; }
11-3 배열 기반 문자열 변수 문자열의 특징 문자열은 널(null)문자를 끝에 지닌다. 11-3 배열 기반 문자열 변수 문자열의 특징 문자열은 널(null)문자를 끝에 지닌다. 널(null) 문자 : '\0'(아스키 코드 값으로 0) int main(void) { char str[6]="Hello"; printf("Hello"); . . . . . 그림 11-7
11-3 배열 기반 문자열 변수 널(null) 문자를 지녀야 하는 이유 문자열의 끝을 표현하기 위해서 11-3 배열 기반 문자열 변수 널(null) 문자를 지녀야 하는 이유 문자열의 끝을 표현하기 위해서 쓰레기 값과 실제 문자열의 경계를 나타내기 위해 printf 함수는 널 문자를 통해서 출력의 범위를 결정 짓는다. int main(void) { char str[100]=”Hello World!”; printf(“%s \n”, str); . . . . .
11-3 배열 기반 문자열 변수 문자열 변수를 활용한 다양한 예제 문자열과 char형 배열의 차이점 11-3 배열 기반 문자열 변수 문자열 변수를 활용한 다양한 예제 va_str.c : 문자열 변수의 데이터 조작 scanf_str.c : 문자열 변수를 통한 문자열의 입력 문자열과 char형 배열의 차이점 char arr1[ ] = "abc"; char arr2[ ] = {'a', 'b', 'c'}; char arr3[ ] = {'a', 'b', 'c', '\0'};
11-3 배열 기반 문자열 변수 /* va_str.c */ #include <stdio.h> 11-3 배열 기반 문자열 변수 /* va_str.c */ #include <stdio.h> int main(void) { int i; char ch; char str[6]="Hello"; printf("--변경 전 문자열--\n"); printf("%s \n", str); for(i=0; i<6; i++) printf("%c | ", str[i]); /* 문자열 변경 */ for(i=0; i<3; i++) ch=str[4-i]; str[4-i]=str[i]; str[i]=ch; } printf("\n\n--변경 후 문자열--\n"); return 0;