• 검색 결과가 없습니다.

제07장-배열-정리

N/A
N/A
Protected

Academic year: 2021

Share "제07장-배열-정리"

Copied!
41
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

7

7

장 배열

장 배열

7

7

장 배열

장 배열

(2)

 C 프로그램에서 배열 (array) 의 개념과 사용법에 대해 설명할 수 있다 .  임의의 수에 대하여 올림차순 , 내림차순 정렬 (sorting) 프로그램을 작성할 수 있다 .

(3)

7.1 배열

7.2 1 차원 배열

7.3 2 차원 배열

7.4 3 차원 배열

(4)

동일한 종류의 데이터를 여러 개 모아 메모리에 순차적으로 기억시키는 것을 말한다 . 배열을 이루는 여러 개의 데이터는 하나의 집단을 이루게 된다 .  프로그램에서는 이 집단을 대표하는 어떤 변수 이름을 만든 후에 이용한다 . 이때 만들어진 변수 이름을 우리는 배열명이라 부른다 .  배열을 선언하는 형식은 [ 와 ] 기호를 이용하여 정의한다 .

배열

(array) 이란 ?

(5)

int a0; int a1; int a2; int a3; int a4; int a[5]; int a; int b; int c; int d; int e; 일반적인 형태로 변수선언 순번을 붙인 형태로 변수선언 배열형식으로 변수선언

예 ) 5 개의 정수형 변수를 정의할 때

a b c d a0 a1 a2 a3 a[0] a[3] a[1] a[2]

(6)

[ 기본 사용형식 ]

데이터형 배열명 [

요소크기

1

] [

요소크기

2

] [

요소크기

3

];

[ 사용 예 ] int A[5]; /* 정수 값 5 개를 기억할 수 있는 1 차원 배열을 선언 */ int B[3][4]; /* 정수 값 (3*4) 개를 기억할 수 있는 2 차원 배열을 선언 */ int C[3][4][2]; /* 정수 값 (3*4*2) 개를 기억할 수 있는 3 차원 배열을 선언 */

(7)

퀴즈 풀어보기

교제

189 쪽 ( 1 번 ~ 4

)

(8)

 대괄호 1 개만 사용해 다음과 같이 요소크기를 지정한다 .

 1 차원 배열은 한 줄에 일직선으로 펼쳐진 형태로 각 배열요소들을

구성하는 형태이다 .

예 ) int

A[5]; A[0] A[1] 데이터데이터12

A[2] 데이터3

A[3] 데이터4

(9)

(1) 1 차원 배열의 선언

[ 사용형 식 ]데이터형 배열명 [ 요소크기 ]; 행 (row) 의 수 char A[5]; int A[5]; float A[5]; double A[5]; [ 사용 예 ] [ 메모리 할당 형태 ] A[0] 데이터1 A[1] 데이터2 A[2] 데이터3 A[3] 데이터4 A[4] 데이터5

(10)

예 ) 배열선언 시 메모리공간 확보 형태

사용 예 설명 char A[5]; 총 5 개의 문자를 기억시킬 수 있는 문자형 배열로서, 이용하는 메모리 공간은 5 바이트 ( 5 문자 * 1 바이트 ) int A[5]; 총 5 개의 정수를 기억시킬 수 있는 정수형 배열로서, 이용하는 메모리 공간은 20 바이트 ( 5 개 정수 *4 바이트 ) float A[5]; 총 5 개의 실수 값을 기억시킬 수 있는 단정도 실수형 배열로서 , 이용하는 메모리 공간은 20 바이트 ( 5 개 단정도실수 * 4 바이 트 ) double A[5]; 총 5 개의 실수 값을 기억시킬 수 있는 배정도 실수형 배열로서 , 이용하는 메모리 공간은 40 바이트 ( 5 개 배정도실수 * 8 바이 트 )

(11)

퀴즈 풀어보기

교제

190 쪽 ( 5 번 ~ 9

)

(12)

#include <stdio.h> void main() { int a, A[5]; A[0] = 10; A[1] = 20; A[2] = 30; A[3] = 40; A[4] = 50;

for( a=0; a<5; a++ )

printf( "%d 번째 요소에 기억된 값은 %d \n", a, A[a] ); } ◀7-1.C▶ 1 차원 배열의 각 요소의 데이터 값 할당과 출력 예 실행결과 0 번째 요소에 기억된 값은 10 1 번째 요소에 기억된 값은 20 2 번째 요소에 기억된 값은 30 3 번째 요소에 기억된 값은 40 4 번째 요소에 기억된 값은 50

(13)

#include <stdio.h> void main()

{

int a, A[5];

for( a=0; a<5; a++ ) {

printf( "%d 번째 요소 값은 ? ", a ); scanf( "%d", &A[a] );

}

printf( "\n“ );

for( a=0; a<5; a++ )

printf( "%d 번째 요소에 기억된 값은 %d \n", a, A[a] ); } ◀7-2.C▶ 1 차원 배열의 입력과 출력 예 실행결과 0 번째 요소 값은 ? 10 <Enter>← 입 1 번째 요소 값은 ? 20 <Enter> 2 번째 요소 값은 ? 30 <Enter> 3 번째 요소 값은 ? 40 <Enter> 4 번째 요소 값은 ? 50 <Enter> 0 번째 요소에 기억된 값은 10 ← 출력 1 번째 요소에 기억된 값은 20 2 번째 요소에 기억된 값은 30 3 번째 요소에 기억된 값은 40 4 번째 요소에 기억된 값은 50

(14)

(2) 1 차원 배열의 초기화

[ 사용형식] 데이터형 배열명 [ 요소크기 ] = { 데이터 1, 데이터 2, … }; 배열변수에도 배열을 선언할 때 , 그 요소의 값을 미리 지정할 수 있다 . 이렇게 변수를 선언하면서 값을 지정하는 것을 초기화라고 한다 . 초기화 방법은 다음 형식에 의해 대입연산자 (=) 를 이용한다 .  초기화 값들은 { 와 } 로 감싸고 , 값 사이에는 콤마 (,) 로 구분된다 . int OB[5] = { 10, 20, 30, 40, 50 }; 예 )

(15)

[ 사용 예 1] 배열요소의 크기 지정한 경우

char OA[5] = { 'a', 'b', 'c', 'd‘ };

int OB[5] = { 10, 20, 30, 40, 50 }; double OC[3] = { 55.12, 66.0, 77.345 };

[ 사용 예 2] 배열요소의 크기 생략한 경우

char OA[ ] = { 'a', 'b', 'c', 'd‘ };

int OB[ ] = { 10, 20, 30, 40, 50 }; double OC[ ] = { 55.12, 66.0, 77.345 }; 잠깜!!! 배열선언과 동시에 데이터 값을 초기화 시키는 경우에는 그 배열의 요소크기를 생략할 수 있다 . 잠깜!!! 문자형 배열 선언 시 배열요소의 크기는 기억할 ( 문자개수 +1) 개의 크기로 지정해야 한다 . 그 이유는 C/C++ 에서 단일문자와 문자열 데이터를 구분하기 위해서 문자열 데이터로 기억된 경우에는 문자열 뒤에 ‘ \0’ 문자를 붙여 넣기 때문이다 .

(16)

char A[ ] = { 'a', 'b', 'c', 'd‘ }; A[0] a A[1] b A[2] c A[3] d A[4] ∖0 int B[ ] = { 10, 20, 30, 40, 50 }; B[0] 10 B[1] 20 B[2] 30 B[3] 40 B[4] 50 double C[ ] = { 55.2, 66.78, 77.345 }; C[0] 55.2 C[1] 66.78 이 문자는 문자열의 끝을 표시하는 문자로써 , 컴파 일러가 할당한 문자이다.

(17)

퀴즈 풀어보기

교 제

194 쪽 ( 10 번 ~

11 번 )

(18)

◀7-3.C▶ 1 배열을 이용한 문자처리 예 1

#include <stdio.h> void main()

{

int a;

char A[10] = {'c','o','m','p','u','t','e','r'}; char B[10] = "computer“;

for( a=0; a<10; a++ ) printf( "%c", A[a] ); printf( "\n“ );

for( a=0; a<10; a++ ) printf( "%c", B[a] ); printf( "\n“ ); } 잠깐!!! 실행결과 computer computer

(19)

◀7-4▶ 1 차원 배열을 이용한 문자처리 예 2

#include <stdio.h> void main()

{

char A[10] = {'c','o','m','p','u','t','e','r'}; char B[10] = "computer"; printf( "%s", A ); printf( "\n“ ); printf( "%s", B ); printf( "\n“ ); } 실행결과 computer computer

(20)

◀7-5.C▶ 1 차원 배열을 이용한 문자열 입력과 출력

#include <stdio.h>

void main()

{

char A[10];

scanf( "%s", A );

printf( "%s", A );

}

잠깐!!! 이 프로그램 예에서는 배열 선언시에 그 배열의 요소크기를 생략하면 에러가 발생한다 . 그 이유는 배열 선언시 초기화가 안 이루어졌기 때문이다 . 실행결과 computer <enter> computer

(21)

◀7-6.C▶ 1 차원 배열을 이용한 문자열의 복사 예

  #include <stdio.h> #include <string.h> void main()

{

char A[10] = "computer"; char B[10]; strcpy( B, A ); printf( "A: %s \n", A ); printf( "B: %s \n", B ); } 잠깐!!! 실행결과 A: computer B: computer

(22)

◀7-7.C▶ 1 차원 배열을 이용한 정수 값 처리 예  #include <stdio.h> void main() { int a, sum; int B[ ] = { 10, 20, 30, 40, 50 }; for( a=0; a<5; a++ )

printf( "%d ", B[a] ); printf( "\n“ );

sum = 0;

for( a=0; a<5; a++ ) sum = sum + B[a];

printf( “ 합계 : %d \n", sum );

} 실행결과 10 20 30 40 50

(23)

◀7-8.C▶1 차원 배열을 이용한 배정도 실수 값 처리 예  #include <stdio.h> void main() { int a; double sum, C[ ] = { 1.23, 22.4, 333.12, 4.5, 55.345 }; for( a=0; a<5; a++ )

printf( "%f ", C[a] ); printf( "\n“ );

sum = 0;

for( a=0; a<5; a++ ) sum = sum + C[a];

printf( "합계 : %f \n " , sum ); }

(24)

◀7-9.C▶ 응용 프로그램 예 ( 최대값과 최소값 출력하기 ) #include <stdio.h> #define N 9 void main() { int a; int number[N] = { 77, 22, 99, 11, 33, 88, 66, 44, 55 };

int max = number[0]; int min = number[0]; for( a=1; a<N; a++ ) { if( number[a] > max ) max = number[a]; else if( number[a] < min ) min = number[a]; } printf( " 최대값 : %d \n", max ); printf( " 최소값 : %d \n", min ); 실행결과 최대값 : 99

(25)

◀7-10.C▶ 응용 프로그램 예 ( 올림차순으로 정렬하기 ) #include <stdio.h> #define N 9 void main() { int a, b, temp; int number[N] = { 77, 22, 99, 11, 33, 88, 66, 44, 55 };

for( a=0; a<N-1; a++ ) { for( b=0; b<N-1; b++ ) {

if( number[b] > number[b+1] ){ temp = number[b];

number[b] = number[b+1]; number[b+1] = temp;

} }

(26)

퀴즈 풀어보기

교 제

199 쪽 ( 12 번 ~

16 번 )

(27)

☞ 2 차원 배열은 행 (row) 과 열 (column) 의 요소로 구성된 평면 데이터 구조를 갖는다 .

☞ 2 차원 배열의 데이터의 초기화는 1 차원 배열을 확장시킨 것이기 때문에 1 차원 배열의 초기화 방법과 유사하다 .

(28)

[ 사용형식]         데이터형 배열명 [ 요소크기 1] [ 요소크기2];           ↑       ↑           행 (row) 의 수 열 (column) 의 수 [ 사용 예 ]  char   B[2][3];   int  B[2][3];   float  B[2][3];   double B[2][3];      0 열    1 열   2 열 0 행  B[0][0]  B[0][1]  B[0][2] 1 행  B[1][0]  B[1][1]  B[1][2]

(1) 2 차원 배열의 선언

(29)

퀴즈 풀어보기

교 제

200 쪽 ( 17 번 ~

20 번 )

(30)

◀7-11.C▶ #include <stdio.h> void main() { int a, b, B[2][3]; B[0][0] = 10; B[0][1] = 20; B[0][2] = 30; B[1][0] = 40; B[1][1] = 50; B[1][2] = 60;

for( a=0; a<2; a++ ) for( b=0; b<3; b++ ) printf( "(%dx%d) 의 요소에 기억된 값은 %d \n", a, b, B[a][b] ); } 실행결과 (0x0) 의 요소에 기억된 값은 10 (0x1) 의 요소에 기억된 값은 20 (0x2) 의 요소에 기억된 값은 30 (1x0) 의 요소에 기억된 값은 40 (1x1) 의 요소에 기억된 값은 50 (1x2) 의 요소에 기억된 값은 60

(31)

◀7-12.C▶ 2 차원 배열에서의 입력과 출력

#include <stdio.h> void main()

{

int a, b, B[2][3];

for( a=0; a<2; a++ ) { for( b=0; b<3; b++ ) { printf( "(%dx%d) 에 입력될 값은 ? ", a, b ); scanf( "%d", &B[a][b] ); } } printf( "\n“ );

for( a=0; a<2; a++ ) for( b=0; b<3; b++ )

(32)

2 차원 데이터 초기화 방법 2 가지

사용형식 1 과 같이 1 차원 배열의 초기화처럼 행 단위로 데이터 항목 리스트 각각 구성하고 , 이들을 다시 집합으로 그룹화 시켜서 2 차원 배열 형태를 구성하여 초기화시키는 방법과 사용형식 2 와 같이 1 차원 배열의 데이터 초기화 방법처럼 그냥 행 중심으로 데이터를 1 차원 배열로 펼쳐서 초기화하는 방법이 있다 .

(2) 2 차원 배열의 초기화

(33)

 [ 사용형식 1] 2 차원 구조 ( 면 단위 ) 로 초기화시키는 방법 데이터형 배열명 [ 요소크기 1] [ 요소크기 2] = {                   { 데이터값 , 데이터값 , … },              { 데이터값 , 데이터값 , … }, { 데이터값 , 데이터값 , … }        }; [ 사용 예 ] int  B[2][3] = {            { 10, 20, 30 }, /* 0 행의 요소 값들 */            { 40, 50, 60 }  /* 1 행의 요소 값들 */        };

(34)

[ 사용형식 2] 1 차원 구조 ( 행 단위 리스트 ) 로 초기화시키는 방법

데이터형 배열명 [ 요소크기 1] [ 요소크기 2] = { 데이터값 , 데이터값 , … };

[ 사용 예]

(35)

잠깐 !!! 2 차원 배열에서도 배열변수 선언과 동시에 데이터 값을 초기화시킬 때에는 배열 선언 시에 요소크기 1 의 지정은 생략할 수 있다 . [ 사용 예 1]    int  B[ ][3] = {        { 10, 20, 30 },                 { 40, 50, 60 }        }; [ 사용 예 2]  int  B[ ][3] = { 10, 20, 30,  40, 50, 60 };

(36)

◀7-13.C▶ 2 차원 배열을 이용한 문자처리 예 1

#include <stdio.h> void main()

{

int a, b;

char B[3][10] = { "computer", "internet", "database“ }; for( a=0; a<3; a++ ) {

for( b=0; b<10; b++ ) printf( "%c", B[a][b] ); printf( "\n“ ); } } 실행결과 computer internet database

(37)

◀7-14.C▶ 2 차원 배열을 이용한 문자처리 예 2

#include <stdio.h> void main()

{

int a;

char B[3][10] = { "computer", "internet", "database“ }; for( a=0; a<3; a++ ) {

printf( "%s \n", B[a] ); }

} 실행결과 computer

internet database

(38)

◀7-15.C▶ #include <stdio.h> void main() { int a, b; int A[2][3] = { {11,12,13}, {14,15,16} };

for( a=0; a<2; a++ ) { for( b=0; b<3; b++ ) printf( "%d ", A[a][b] ); printf( "\n“ ); } } 실행결과 11 12 13 14 15 16

(39)

◀7-16.C▶ 2 차원 배열을 이용한 행렬 합 계산 #include <stdio.h> void main() { int a, b, C[2][3]; int A[ ][3] = { {11,12,13}, {14,15,16} }; int B[ ][3] = { {21,22,23}, {24,25,26} }; printf( "A 와 B 행렬의 합 \n“ );

for( a=0; a<2; a++ ) { for( b=0; b<3; b++ )

C[a][b] = A[a][b] + B[a][b]; }

for( a=0; a<2; a++ ) { for( b=0; b<3; b++ )

(40)

퀴즈 풀어보기

교 제

208 쪽 ( 23 번 ~

25 번 )

(41)

참조

관련 문서

[r]

회귀모형에서, 예측하고자 하는 변수를 종속변수(dependent variable)라 하고, 종속변수의 변화를 설명해 주는 변수를 독립변수(independent variable)이라고

 이들은 동일한 이름을 가지고 있으며, 단지 괄호 안의 첨자 (subscript)만 다르다.. 첨자가 배열

[r]

이 책자는 2021년 하반기부터 달라지는 정부부처의 각종 제도 및 법규개선사항을

동일 또는 유사한 사업계획으로 다른 정부기관 또는 지방자치단체 로부터 중복하여 보조금을

분장사무 처리,생활기록부 정리,건강기록부 정리 등의 각종장부 정리,공문서

[r]