Presentation is loading. Please wait.

Presentation is loading. Please wait.

8. 배열.

Similar presentations


Presentation on theme: "8. 배열."— Presentation transcript:

1 8. 배열

2 이 장에서 다룰 내용 배열의 이해 1. 2. 배열과 문자열 2차원 배열 3.

3 01_배열의 이해 배열의 개념 여러 개의 변수를 나란히 연결하는 개념
박스(변수)를 한 줄로 붙이고, 박스의 이름(aa)을 지정 각각의 박스는 aa[0], aa[1], … 과 같이 첨자를 붙임

4 [기본예제 8-1] 여러 개의 변수 값을 선언하여 출력하는 예
01 #include <stdio.h> 02 03 int main() 04 { 05 int a, b, c, d; 06 int hap = 0; 07 08 printf("1번째숫자를입력하세요: "); 09 scanf("%d", &a); 10 printf("2번째숫자를입력하세요: "); 11 scanf("%d", &b); 12 printf("3번째숫자를입력하세요: "); 13 scanf("%d", &c); 14 printf("4번째숫자를입력하세요: "); 15 scanf("%d", &d); 16 17 hap = a + b + c + d; 각각의 입력 변수와 합계 변수 선언 숫자 4개 입력 입력받은 숫자 더하기

5 [기본예제 8-1] 여러 개의 변수 값을 선언하여 출력하는 예
18 19 printf(" 합계==> %d \n", hap); 20 } 출력

6 01_배열의 이해 배열의 선언 데이터형 배열이름[개수]; int aa[4]; int a, b, c, d; a 사용 b 사용
4개의 변수를 담은 정수형 배열 선언 데이터형 배열이름[개수]; int aa[4]; ① 변수 선언(배열 미사용) ② 배열 선언(배열 사용) int a, b, c, d; a 사용 b 사용 c 사용 d 사용 int aa[4]; aa[0] 사용 aa[1] 사용 aa[2] 사용 aa[3] 사용

7 [기본예제 8-2] 배열에 값을 선언하여 출력하는 예
01 #include <stdio.h> 02 03 int main() 04 { 05 int aa[4]; 06 int hap; 07 08 printf("1번째 숫자를 입력하세요 : "); 09 scanf("%d", &aa[0]); 10 printf("2번째 숫자를 입력하세요 : "); 11 scanf("%d", &aa[1]); 12 printf("3번째 숫자를 입력하세요 : "); 13 scanf("%d", &aa[2]); 14 printf("4번째 숫자를 입력하세요 : "); 15 scanf("%d", &aa[3]); 16 정수형 배열과 변수 선언 배열 aa[0]~aa[3]에 숫자 4개 입력

8 [기본예제 8-2] 배열에 값을 선언하여 출력하는 예
17 hap = aa[0] + aa[1] + aa[2] + aa[3]; 18 19 printf(" 합계 ==> %d \n", hap); 20 } 배열에 저장된 숫자 더하기 출력

9 01_배열의 이해 배열의 활용 범위 첨자의 특성과 반복문 결합하는 형태  효율성 극대화

10 [응용예제 8-3] for 문으로 배열의 첨자를 활용하는 예
01 #include <stdio.h> 02 03 int main() 04 { 05 int aa[4]; 06 int hap=0; 07 int i; 08 09 for (i=0 ; i<=3 ; i++) 10 { 11 printf("%d번째 숫자를 입력하세요 : ", i+1 ); 12 scanf("%d", [ ① ] ); 13 } 14 15 hap = aa[0] + aa[1] + aa[2] + aa[3]; 16 17 printf(" 합계 ==> %d \n", hap); 18 } 배열과 합계 변수, 첨자 선언 aa[0]~aa[3] 배열에 숫자 네 개를 입력받음 &aa[i] 배열에 저장된 네 숫자 더하기 출력

11 01_배열의 이해 15행 수정 수동 덧셈  숫자 개수에 맞춘 자동 덧셈으로 수정하기
for (i=0; i<3 ; i++) { hap = hap + a[i]; }

12 01_배열의 이해 배열의 초기화 다양한 초기화 예 배열을 정의하는 동시에 값을 대입하는 것 선언과 초기화가 잘 된 경우 ||
초기화를 하지 않고, 선언만 한 경우 int aa[4] = {100, 200, 300, 400}; int aa[ ] = {100, 200, 300, 400}; int aa[4];

13 01_배열의 이해 배열의 개수보다 초기화 값의 개수가 적은 경우 || 배열의 개수보다 초기화 값의 개수가 많은 경우
100개의 배열을 0으로 초기화하는 경우 int aa[4] = {100, 200}; int aa[4] = {100, 200, 0, 0}; int aa[4] = {100, }; int aa[4] = {100,200,300,400,500}; int aa[1000] = {0};

14 [기본예제 8-4] 배열의 초기화 예 ① 01 #include <stdio.h> 02 03 int main()
04 { 05 int aa[4] = {100, 200, 300, 400}; 06 int bb[] = {100, 200, 300, 400}; 07 int cc[4] = {100, 200}; 08 int dd[4] = {0}; 09 int i; 10 11 for (i=0 ; i<=3 ; i++) 12 printf("aa[%d]==>%d\t", i, aa[i] ); 13 printf("\n"); 14 15 for (i=0 ; i<=3 ; i++) 16 printf("bb[%d]==>%d\t", i, bb[i] ); 개수지정 + 초기화 개수 미지정 + 초기화 일부만 초기화 전체를 0으로 초기화 4회 반복하며 배열 aa[0]~aa[3] 값 출력 4회 반복하며 배열 bb[0]~bb[3] 값 출력

15 [기본예제 8-4] 배열의 초기화 예 ① 17 printf("\n"); 18
19 for (i=0 ; i<=3 ; i++) 20 printf("cc[%d]==>%d\t", i, cc[i] ); 21 printf("\n"); 22 23 for (i=0 ; i<=3 ; i++) 24 printf("dd[%d]==>%d\t", i, dd[i] ); 25 printf("\n"); 26 } 4회 반복하며 배열 cc[0]~cc[3] 값 출력 4회 반복하며 배열 dd[0]~dd[3] 값 출력

16 01_배열의 이해 for 문을 사용한 배열 초기화 aa[100]에 2의 배수로 초기화하기 bb[100]에 역순으로 넣기

17 [응용예제 8-5] 배열의 초기화 예 ② 01 #include <stdio.h> 02 03 int main()
04 { 05 int aa[100], bb[100]; 06 int i; 07 08 for (i=0 ; i<100 ; i++) 09 { 10 aa[i] = i * 2; 11 } 12 13 for (i=0 ; i<100 ; i++) 14 { 15 [ ① ] = aa[99-i]; 16 } 17 18 printf("bb[0]는 %d, bb[99]는 %d 입력됨\n", bb[0], bb[99]); 19 } 배열 aa, bb 선언 0~99까지 100번 반복하며 aa[i]에 2의 배수 대입 0~99까지 100번 반복하며 bb[i]에 aa[99-i] 대입 bb[i] 출력

18 01_배열의 이해 배열의 크기 알아내기 int aa[4] 배열의 개수(크기) 구하기
선언한 배열의 데이터형 크기(4byte)로 나누면 배열의크기(요소개수) = sizeof(전체배열이름) / sizeof(배열의데이터타입); 배열의크기(요소개수) = sizeof(aa) / sizeof(int);

19 [기본예제 8-6] 배열의 크기를 계산하는 예 01 #include <stdio.h> 02 03 int main()
04 { 05 int aa[] = {10, 20, 30, 40, 50}; 06 int count; 07 08 count = sizeof(aa) / sizeof(int); 09 10 printf("배열 aa[]의 요소의 개수는 %d 입니다.\n", count); 11 } 배열 선언, 개수는 모름 배열의 크기를 저장하는 변수 배열의 크기 계산 출력

20 02_배열과 문자열 정수형 배열과 문자열 배열

21 [기본예제 8-7] 문자열 선언과 출력 01 #include <stdio.h> 02 03 int main()
04 { 05 char ss[8] = "Basic-C"; 06 int i; 07 08 ss[5] = '#'; 09 10 for(i=0 ; i<8 ; i++) 11 { 12 printf("ss[%d] ==> %c \n", i, ss[i]); 13 } 14 15 printf("문자열 배열 ss ==> %s \n", ss); 16 } 크기가 8인 문자형 배열 선언 및 초기화 6번째 문자를 바꿈 8번 반복하면서 배열 ss의 각 문자 출력 배열 ss의 전체 문자열 출력

22 02_배열과 문자열 문자열 조작 과정

23 [응용예제 8-8] 문자열 순서를 뒤집어 출력하는 예
01 #include <stdio.h> 02 03 int main() 04 { 05 char ss[5] = "abcd"; 06 char tt[5]; 07 int i; 08 09 for(i=0 ; i<4 ; i++) 10 { 11 tt[i] = [ ① ] ; 12 } 13 tt[4] = '\0'; 14 15 printf("거꾸로 출력한 결과==> %s \n", tt); 16 } 크기 5의 문자형 배열 변환할 문자형 배열 첨자 변수 선언 0~3까지 4회 반복하며 각 배열에 문자를 거꾸로 대입 tt[0] = ss[3] tt[1] = ss[2] tt[2] = ss[1] tt[3] = ss[0] ss[3-i] 마지막에 널 문자 삽입 순서가 뒤집힌 문자열 출력

24 02_배열과 문자열 문자열 처리 함수 문자열의 길이를 알려주는 함수  strlen( )
<string.h> 파일을 포함시켜야 사용 가능 문자열의 길이를 알려주는 함수  strlen( ) 널 문자 제외

25 [기본예제 8-9] strlen() 사용 예 01 #include <stdio.h>
02 #include <string.h> 03 04 int main() 05 { 06 char ss[] = "XYZ"; 07 int len; 08 09 len = strlen(ss); 10 11 printf("문자열 \"%s\"의 길이 ==> %d \n", ss, len); 12 } 문자열 배열, 길이 변수 선언 배열 ss의 길이 구하기 출력

26 02_배열과 문자열 문자열을 복사하는 함수  strcpy() 이미 선언된 문자열 배열에 다른 문자열을 대입하고 싶을 때 사용
널 문자도 함께 복사됨

27 [기본예제 8-10] strcpy() 사용 예 01 #include <stdio.h>
02 #include <string.h> 03 04 int main() 05 { 06 char ss[4]; 07 08 strcpy(ss, “XYZ"); 09 10 printf(“문자열 ss의 내용 ==> %s \n", ss); 11 } 문자열 배열 선언 배열 ss에 문자열 복사 출력

28 02_배열과 문자열 두 문자열을 이어주는 함수  strcat() 두 문자열을 이어주는 함수로, 널 문자 자리부터 시작
strcat(A, B)의 경우, A에는 문자형 배열이 와야 함

29 [기본예제 8-11] strcat() 사용 예 01 #include <stdio.h>
02 #include <string.h> 03 04 int main() 05 { 06 char ss[7] = "XYZ"; 07 08 strcat(ss, "ABC"); 09 10 printf("이어진 문자열 ss의 내용 ==> %s \n", ss); 11 } 문자열 배열 선언과 함께 초기값 ‘XYZ’ 입력 배열 ss에 ‘ABC’를 연결한 후 다시 배열 ss에 넣음 출력

30 02_배열과 문자열 두 문자열을 비교하는 함수  strcmp() strcmp(A, B)일 때, A-B의 결과를 돌려줌

31 [기본예제 8-12] strcmp() 사용 예 01 #include <stdio.h>
02 #include <string.h> 03 04 int main() 05 { 06 char ss[] = "XYZ"; 07 char tt[] = "xyz"; 08 int r; 09 10 r = strcmp(ss, tt); 11 12 printf("두 문자열의 비교결과 ==> %d \n", r); 13 } 문자열 배열 ss와 tt의 선언 및 초기화 두 문자열을 비교한 결과를 r에 대입 출력

32 02_배열과 문자열 문자열을 입력받는 함수  gets() 문자열을 출력하는 함수  puts()
scanf()와 비슷한 기능으로, 문자열 입력 시 상대적으로 유용 Enter 키를 입력할 때까지 ss에 문자열을 받아들임 문자열을 출력하는 함수  puts() printf()와 비슷한 기능으로, 문자열 출력 시 상대적으로 유용 ‘\n’이 없어도 출력 후에 자동으로 줄이 넘어감 char ss[10]; gets(ss); char ss[10]= “XYZ”; puts(ss);

33 [응용예제 8-13] 문자열 입출력 함수 gets(), puts()
01 #include <stdio.h> 02 #include <string.h> 03 04 int main() 05 { 06 char ss[20]; 07 char tt[20]; 08 int r1, r2; 09 10 puts("첫번째 문자열을 입력하세요."); 11 gets(ss); 12 13 puts("두번째 문자열을 입력하세요."); 14 [ ① ] ; 15 문자형 배열 ss, tt 선언 첫 번째 문자열과 두 번째 문자열 입력 gets(tt)

34 [응용예제 8-13] 문자열 입출력 함수 gets(), puts()
16 r1 = strlen(ss); 17 r2 = strlen(tt); 18 19 printf("첫번째 문자열의 길이 ==> %d \n", r1); 20 printf("두번째 문자열의 길이 ==> %d \n", r2); 21 22 if ( [ ② ] == 0) 23 puts("두 문자열의 길이가 같습니다.\n"); 24 else 25 puts ("두 문자열의 길이가 다릅니다.\n"); 26 } 배열 ss와 tt의 문자열 길이 저장 각 배열의 문자열 길이 출력 strcmp(ss, tt) ss와 tt의 문자열을 비교하여 두 값이 같은지 다른지 판단

35 03_2차원 배열 2차원 배열의 기본 개념 1차원 배열을 여러 개 연결한 것 두 개의 첨자 사용
① 1차원 배열 : int aa[행] ② 2차원 배열 : int aa[행][열]

36 [기본예제 8-14] 2차원 배열의 사용 예 ① 01 #include <stdio.h> 02
03 int main() 04 { 05 int aa[3][4]; 06 07 aa[0][0] = 1 ; aa[0][1] = 2 ; aa[0][2] = 3 ; aa[0][3] = 4; 08 aa[1][0] = 5 ; aa[1][1] = 6 ; aa[1][2] = 7 ; aa[1][3] = 8; 09 aa[2][0] = 9 ; aa[2][1] =10 ; aa[2][2] =11 ; aa[2][3] =12; 10 11 printf("aa[0][0]부터 aa[2][3]까지 출력 \n"); 12 13 printf("%3d %3d %3d %3d\n", aa[0][0], aa[0][1], aa[0][2], a[0][3]); 14 printf("%3d %3d %3d %3d\n", aa[1][0], aa[1][1], aa[1][2], a[1][3]); 15 printf("%3d %3d %3d %3d\n", aa[2][0], aa[2][1], aa[2][2], a[2][3]); 16 } 2차원 배열 선언 각 요소에 값 대입 a[0]행 출력 a[1]행 출력 a[2]행 출력

37 [응용예제 8-15] 2차원 배열의 사용 예 ② 01 #include <stdio.h> 02
03 int main() 04 { 05 int aa[3][4]; 06 int i, k; 07 08 int val=1; 09 10 for( i=0 ; i<3 ; i++) 11 { 12 for([ ① ] ) 13 { aa[i][k] = val; val++; 16 } 17 } 2차원 배열과 첨자 변수 선언 배열에 들어갈 값 초기화 3회 반복하며 행 단위 변경 k=0; k<4 ; k++ 4회 반복하며 열 단위 조정 val 값 입력 후 val 값을 1 증가시킴

38 [응용예제 8-15] 2차원 배열의 사용 예 ② 18 19 printf("aa[0][0]부터 aa[2][3]까지 출력 \n"); 20 21 for( i=0 ; i<3 ; i++) 22 { 23 for( k=0; k<4 ; k++) 24 { printf("%3d ", [ ② ] ); 26 } 27 printf("\n"); 28 } 29 } 배열에 들어갈 값 초기화 4회 반복하며 열 단위 변경 a[0][0]~a[2][3]까지 출력 aa[i][k] 첫 행 출력 후 행 넘기기

39 03_2차원 배열 2차원 배열의 초기화 배열을 정의하는 동시에 값 초기화하기

40 [기본예제 8-16] 2차원 배열의 초기화 01 #include <stdio.h> 02 03 int main()
04 { 05 int aa[3][4] = { 06 { 1, 2, 3, 4 } , 07 { 5, 6, 7, 8 } , 08 { 9,10,11,12 } 09 }; 10 11 int i, k; 12 printf("aa[0][0]부터 aa[2][3]까지 출력 \n"); 13 14 for( i=0 ; i<3 ; i++) 15 { 배열 초기화 aa[0][0]~aa[0][3] aa[1][0]~aa[1][3] aa[2][0]~aa[2][3] 3행 4열의 배열에 저장된 값 출력

41 [기본예제 8-16] 2차원 배열의 초기화 16 for( k=0 ; k<4 ; k++) 17 {
17 { printf("%3d", aa[i][k]); 19 } 20 printf("\n"); 21 } 22 }

42 03_2차원 배열 3차원 이상의 배열 2차원 배열 위에 또 다른 2차원 배열을 쌓은 것

43 03_2차원 배열 3차원 배열의 초기화 2차원 배열의 초기화를 한번 더 하는 개념
컴마로 분리하고, 전체를 다시 블록으로 묶으면 됨

44 [예제모음_19] 입력된 문자열을 거꾸로 출력 예제설명 문자열 배열을 이용해서 입력된 문자열을 거꾸로 출력하는 프로그램
실행결과

45 예제모음_19 소스 01 #include <stdio.h> 02 #include <string.h> 03
04 int main() 05 { 06 char ss[100]; 07 char tt[100]; 08 int count, i; 09 10 printf("문자열을 입력하세요 : "); 11 scanf("%s", ss); 12 13 count = strlen(ss); 14 문자형 배열 ss, tt 선언 정수형 변수 count, i 선언 문자열 입력받기 문자열 개수 구하기

46 예제모음_19 소스 15 for(i=0 ; i<count ; i++) 16 {
16 { 17 tt[i] = ss[count-(i+1)]; 18 } 19 tt[count] = '\0'; 20 21 printf("내용을 거꾸로 출력 ==> %s \n", tt); 22 } 문자열 개수만큼 반복하며 tt 배열에 문자열을 거꾸로 저장 마지막에 널 문자 입력 배열 tt 내용 출력

47 [예제모음_20] 대문자와 소문자의 변환 예제설명
입력된 문자열이 대문자면 소문자로, 소문자면 대문자로 변환하고, 그 외의 문자는 그대로 출력하는 프로그램이다. 실행결과

48 예제모음_20 소스 01 #include <stdio.h> 02 #include <string.h> 03
04 int main() 05 { 06 char in[50], out[50]; 07 int i, len; 08 int diff = 'a' - 'A'; 09 10 printf(" 문자 입력 : "); 11 gets(in); 12 13 len = strlen(in); 14 문자형 배열 in, out 선언 정수형 변수 i, len 선언 소문자와 대문자의 차이값을 diff에 저장 문자열 입력받기 입력한 문자열의 길이 구하기

49 예제모음_20 소스 15 for(i=0 ; i<len ; i++) 16 {
16 { 17 if ( ('A' <= in[i]) && (in[i] <= 'Z')) out[i] = in[i] + diff; 19 else if ( ('a' <= in[i]) && (in[i] <= 'z')) out[i] = in[i] - diff; 21 else out[i] = in[i]; 23 } 24 out[i] = '\0'; 25 26 printf(" 변환된 문자 =>%s \n", out); 27 } 문자열 길이만큼 반복 문자가 ‘A’~‘Z’ 사이면 대소문자 차이만큼 더함 문자가 ‘a’~‘z’ 사이면 대소문자 차이만큼 더함 영문자가 아니면 그대로 둠 마지막 널 문자 넣어줌 바뀐 문자열 출력

50 [예제모음_21] 구구단의 결과를 2차원 배열에 저장
예제설명 구구단의 결과를 2차원 배열에 저장한 후에 출력하는 프로그램이다. 실행결과

51 예제모음_21 소스 01 #include <stdio.h> 02 03 int main() 04 {
05 int gugu[9][9]; 06 int i, k; 07 08 for(i=0 ; i<9 ; i++) 09 for (k=0 ; k<9 ; k++) gugu[i][k] = (i+1) * (k+1) ; 11 12 for(i=0 ; i<9 ; i++) 13 { 14 for (k=0 ; k<9 ; k++) 15 { printf("%dX%d=%2d", k+1, i+1, gugu[i][k]); 17 } 18 printf("\n"); 19 } 20 } 문자열 배열 gugu와 첨자 변수 i, k 선언 i가 0~8까지 반복됨 k가 0~8까지 반복하면서 곱한 결과를 배열에 저장(1~9까지 곱한 결과) i가 0~8까지 반복됨 k가 0~8까지 반복하면서 해당 배열 요소 출력 출력 후 다음 행으로 커서 이동

52 [예제모음_22] 문자열 내 특정 문자의 변환 실행결과 예제설명
문자열을 입력받고, 변환될 문자와 변환할 문자를 입력받아 최초의 문자열에서 해당 문자를 변환하는 프로그램이다. 실행결과

53 예제모음_22 소스 01 #include <stdio.h> 02 #include <string.h> 03
04 int main() 05 { 06 char str[100]; 07 char ch1, ch2; 08 int i; 09 10 printf("여러 글자를 입력 : "); 11 gets(str); 12 13 printf("변환될 문자와 변환할 문자 : "); 14 scanf("%c %c", &ch1, &ch2); 15 문자열 배열 str 선언 문자형 변수와 정수형 변수 선언 문자열 입력받기 바뀔 문자와 바꿀 문자 입력

54 예제모음_22 소스 16 for(i=0 ; i<strlen(str) ; i++) 17 {
17 { 18 if (str[i] == ch1) str[i] = ch2; 20 } 21 22 printf("변환된 결과 ==> %s \n", str); 23 } 문자열의 길이만큼 반복하면서 해당 문자가 바뀔 문자와 같다면 지정한 문자로 교체함 결과 출력

55 요약 배열의 기본 배열&문자열 문자열 함수 배열은 변수 여러 개를 나란히 나열해 놓은 개념
여러 개의 변수를 공통된 변수 이름으로 사용(첨자만 변경) 배열의 첨자는 0부터 시작 for 문과 같은 반복문과 함께 사용 배열의 개수를 알아내려면 sizeof() 함수 사용 배열의 기본 여러 개의 문자를 나열한 문자열은 배열의 형태로 표현 가능 문자열 배열의 크기 : ‘문자열 길이 + 1’ 문자열의 끝을 나타내는 ‘\0’을 고려 배열&문자열 문자열 함수 종류 기능 strlen() 문자열의 길이를 알려준다. strcpy() 문자열을 복사한다. strcat() 두 문자열을 이어준다. strcmp() 두 문자열을 비교한다. gets(), puts() 문자열을 키보드로 입력하거나 화면에 출력한다.

56 요약 2차원 배열 행과 열로 만든 배열, 2차원 배열의 개수 = ‘행수 × 열수’ 선언과 동시에 2차원 배열의 초기화하기
int aa[3][4]={ { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12};


Download ppt "8. 배열."

Similar presentations


Ads by Google