6. 배열, 동적배열과응용(정렬,...

34
6. 배열, 동적 배열과 응용 (정렬, 탐색) 2015-1 Programming Language March 28, 2015 Prof. Young-Tak Kim Advanced Networking Technology Lab. (YU-ANTL) Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : [email protected])

Upload: others

Post on 09-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

6. 배열, 동적 배열과 응용 (정렬, 탐색)

2015-1 Programming Language

March 28, 2015

Prof. Young-Tak KimAdvanced Networking Technology Lab. (YU-ANTL)

Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA

(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])

Page 2: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 2

Outline

배열 (Array)배열의 초기화배열의 응용배열과 함수동적배열정렬 (sorting)탐색 (searching)다차원 배열 (multi-dimensional array) 2차원 배열을 사용한 행렬 계산

Page 3: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 3

배열의 필요성

학생이 10명이 있고 이들의 평균 성적을 계산한다고 가정하자.

개별변수를 사용하는방법은 학생수가

많아지면번거로워집니다.

int s0;int s1;…int s9;

int[10];

방법 #1 : 개별 변수 사용

방법 #1 : 배열 사용

Page 4: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 4

배열이란? 배열(array): 동일한 자료형의 데이터가 여러 개 저장되어 있는 데이터 저장

장소 배열 안에 들어있는 각각의 데이터들은 정수로 되어 있는 인덱스(첨자)에

의하여 접근 배열을 이용하면 동일한 자료형의 여러 개의 데이터 들을 하나의 이름으로

관리할 수 있다.

Page 5: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 5

배열 원소와 인덱스인덱스(index): 배열 원소의 번호

첨자 또는 인덱

Page 6: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 6

배열의 선언

자료형: 배열 원소들이 int형라는 것을 의미 배열 이름: 배열을 사용할 때 사용하는 이름이 grade 배열 크기: 배열 원소의 개수가 10개 인덱스(배열 번호)는 항상 0부터 시작한다.

int score[60]; // 60개의 int형 값을 가지는배열 gradefloat cost[12]; // 12개의 float형값을 가지는배열 costchar name[50]; // 50개의 char형값을가지는배열 namechar src[10], dst[10]; // 2개의문자형배열을 동시에선언int index, days[7]; // 일반변수와 배열을동시에선언

Page 7: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 7

배열 원소 접근

grade[5] = 80;grade[1] = grade[0];grade[i] = 100; // i는 정수변수grade[i+2] = 100; // 수식이 인덱스가된다. grade[index[3]] = 100; // index[]는정수배열

grade[0] grade[1] grade[2] grade[3] grade[4] grade[5] grade[6] grade[7] grade[8] grade[9]

80

grade[5] = 80

인덱스

Page 8: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 8

#include <stdio.h>

int main(void){

int i;int grade[5];

grade[0] = 10;grade[1] = 20;grade[2] = 30;grade[3] = 40;grade[4] = 50;

for(i=0;i < 5; i++)printf("grade[%d]=%d\n",i, grade[i]);

return 0;}

배열 선언 예제

grade[0]=10grade[1]=20grade[2]=30grade[3]=40grade[4]=50

Page 9: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 9

배열과 반복문

배열의 가장 큰 장점은 반복문을 사용하여서 배열의원소를 간편하게 처리할 수 있다는 점

#define SIZE 5...for(i=0 ; i<SIZE ; i++)

grade[i] = 0;

grade[0] = 0;grade[1] = 0;grade[2] = 0;grade[3] = 0;grade[4] = 0;

Page 10: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 10

#include <stdio.h>#include <stdlib.h>#define SIZE 5

int main(void){

int i;int grade[SIZE];

for(i = 0; i < SIZE; i++)grade[i] = rand() % 100;

for(i = 0; i < SIZE; i++)printf("grade[%d]=%d₩n", i, grade[i]);

return 0;}

배열 선언 예제

grade[0]=41grade[1]=67grade[2]=34grade[3]=0grade[4]=69

Page 11: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 11

#include <stdio.h>#include <stdlib.h>#define SIZE 5

int main(void){

int i;int grade[SIZE];printf("5명의점수를 입력하시오₩n");

for(i = 0; i < SIZE; i++)scanf("%d", &grade[i]);

for(i = 0; i < SIZE; i++)printf("grade[%d]=%d₩n", i, grade[i]);

return 0;}

배열 선언 예제

5명의 점수를 입력하시오2335674521grade[0]=23grade[1]=35grade[2]=67grade[3]=45grade[4]=21

Page 12: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 12

#include <stdio.h>#define STUDENTS 5int main(void){

int grade[STUDENTS];int sum = 0;int i, average;for(i = 0; i < STUDENTS; i++){

printf("학생들의 성적을 입력하시오: ");scanf("%d", &grade[i]);

}for(i = 0; i < STUDENTS; i++)

sum += grade[i];average = sum / STUDENTS;printf("성적 평균= %d\n", average);

return 0;}

배열 선언 예제

학생들의 성적을 입력하시오: 10학생들의 성적을 입력하시오: 20학생들의 성적을 입력하시오: 30학생들의 성적을 입력하시오: 40학생들의 성적을 입력하시오: 50성적 평균 = 30

Page 13: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 13

잘못된 인덱스 문제

인덱스가 배열의 크기를 벗어나게 되면 프로그램에치명적인 오류를 발생시킨다.

C에서는 프로그래머가 인덱스가 범위를 벗어나지않았는지를 확인하고 책임을 져야 한다.

int grade[5];…grade[5] = 60; // 치명적인 오류!

Page 14: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 14

#include <stdio.h>int main(void){

int grade[5];int i;

grade[0]=10;grade[1]=20;grade[2]=30;grade[3]=40;grade[4]=50;grade[5]=60;

for(i = 0; i <= 5; i++)printf("grade[%d]=%d\n", i, grade[i]);

return 0;}

잘못된 인덱스 예제

시스템에 심각한 오류가 발생할 수도 있다.

Page 15: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 15

배열의 초기화 int grade[5] = { 10,20,30,40,50 };

int grade[5] = { 10,20,30 };초기값을 일부만주면 나머지 원소들은 0으로 초기

화됩니다.

grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]

int grade[5] = { , , , , };,10 20 30 40 50 60

grade[0] grade[1] grade[2] grade[3] grade[4]

int grade[5] = { , , };10 20 30

0 0

Page 16: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 16

배열의 초기화

배열의 크기가 주어지지 않으면 자동적으로 초기값의개수만큼이 배열의 크기로 잡힌다.

grade[0] grade[1] grade[2] grade[3] grade[4] grade[5]

int grade[ ] = { , , , , };,10 20 30 40 50 60

6

Page 17: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 17

#include <stdio.h>int main(void){

int grade[5] = { 31, 63, 62, 87, 14 };int i;

for(i = 0; i < 5; i++)printf("grade[%d] = %d\n", i, grade[i]);

return 0;}

배열 초기화 예제

grade[0] = 31grade[1] = 63grade[2] = 62grade[3] = 87grade[4] = 14

Page 18: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 18

#include <stdio.h>int main(void){

int grade[5] = { 31, 63 };int i;

for(i = 0; i < 5; i++)printf("grade[%d] = %d\n", i, grade[i]);

return 0;}

배열 초기화 예제

grade[0] = 31grade[1] = 63grade[2] = 0grade[3] = 0grade[4] = 0

Page 19: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 19

#include <stdio.h>int main(void){

int grade[5] ;int i;

for(i = 0; i < 5; i++)printf("grade[%d] = %d\n", i, grade[i]);

return 0;}

배열 초기화 예제

grade[0]=4206620grade[1]=0grade[2]=4206636grade[3]=2018779649grade[4]=1

Page 20: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 20

배열 원소의 개수 계산

int grade[] = { 1, 2, 3, 4, 5, 6 };int i, size;

size = sizeof(grade) / sizeof(grade[0]);

for(i = 0; i < size ; i++)printf("%d ", grade[i]);

배열 원소 개수 자동 계산

Page 21: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 21

배열의 복사int grade[SIZE];int score[SIZE];

score = grade; //컴파일오류!

#include <stdio.h>#define SIZE 5

int main(void){

int i;int a[SIZE] = {1, 2, 3, 4, 5};int b[SIZE];

for(i = 0; i < SIZE; i++)b[i] = a[i];

return 0;}

잘못된 방법

올바른 방법

원소를 일일이복사한다

Page 22: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 22

배열의 비교#include <stdio.h>#define SIZE 5

int main(void){

int i; int a[SIZE] = { 1, 2, 3, 4, 5 }; int b[SIZE] = { 1, 2, 3, 4, 5 };

if( a == b ) // ① 올바르지 않은 배열 비교printf("잘못된 결과입니다.\n");

elseprintf("잘못된 결과입니다.\n");

for(i = 0; i < SIZE ; i++) // ② 올바른 배열 비교{

if ( a[i] != b[i] ) {

printf("a[]와 b[]는같지 않습니다.\n"); return 0;

} } printf("a[]와 b[]는같습니다.\n"); return 0;

}

원소를 일일이 비교한다

Page 23: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 23

실습: 투표 집계하기

투표 결과를 컴퓨터를 이용하여서 집계한다고 가정각 후보 (candidate)별로 득표수를 집계하는 것은

후보별 기호 (데이터) 발생 빈도(frequency)를계산하는 것과 동일

배열의 개념을 이용하면 손쉽게 구현할 수 있다.

Page 24: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 24

실행 결과

몇번 후보자를 선택하시겠습니까?(종료 -1): 1몇번 후보자를 선택하시겠습니까?(종료 -1): 1몇번 후보자를 선택하시겠습니까?(종료 -1): -1

값 득표결과1 72 33 14 5

...9 810 3

Page 25: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 25

알고리즘

Procedure Voting()배열 freq[]의 원소를 0으로 초기화한다. while(1) {

사용자로부터 후보자 (candidate)를 입력받는다. freq[candidate]++;

}freq 배열의 내용을 출력한다. END Procedure

freq[0] freq[1] . . . . . freq[100] freq[101]

0 0 0 0

SIZE = 101score

100

+1

1

Page 26: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 26

소스#include <stdio.h>#define SIZE 11int main(void){ int freq[SIZE] = { 0 }; // 빈도를 나타내는 배열

int i, candidate;while(1){

printf("몇번 후보자를 선택하시겠습니까?(종료-1): ");scanf("%d", &candidate);if (candidate < 0) break; //음수이면 반복종료freq[candidate]++;

}printf("값 득표결과\n");for(i = 1; i < SIZE; i++)

printf("%3d %3d \n", i, freq[i]);return 0;

}

해당되는 점수의 빈도를 증가

한다.

Page 27: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 27

배열 원소 역순 출력#include <stdio.h>#define SIZE 5

int main(void){

int data[SIZE]; int i;

for(i = 0; i < SIZE; i++) // 정수를 입력받는 루프{

printf("정수를 입력하시오:"); scanf("%d", &data[i]);

}

for(i = SIZE - 1;i >= 0; i--) // 역순출력루프{

printf("%d₩n", data[i]); } return 0;

}

정수를 입력하시오:10 정수를 입력하시오:20 정수를 입력하시오:30 정수를 입력하시오:40 정수를 입력하시오:50 50 40 30 20 10

data[0] data[1] data[2] data[3] data[4]

SIZE = 5

10 20 30 40 50

Page 28: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 28

예제#include <stdio.h>#define STUDENTS 5

int main(void){

int grade[STUDENTS] = { 30, 20, 10, 40, 50 }; int i, s;

for(i = 0; i < STUDENTS; i++) {

printf("번호%d: ", i); for(s = 0; s < grade[i]; s++)

printf("*"); printf("₩n");

}

return 0; }

번호 0: ****************************** 번호 1: ******************** 번호 2: ********** 번호 3: **************************************** 번호 4: **************************************************

grade[0] grade[1] grade[2] grade[3] grade[4]

STUDENTS = 5

3020

1040

50

30 20 10 40 50

Page 29: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 29

주사위면 빈도 계산#include <stdio.h>#include <stdlib.h>

#define SIZE 6

int main(void){

int freq[SIZE] = { 0 }; // 주사위의 면의 빈도를 0으로 한다.int i;

for(i = 0; i < 10000; i++) // 주사위를 10000번 던진다.++freq[ rand() % 6 ]; // 해당면의 빈도를 하나 증가한다.

printf("====================₩n"); printf("면 빈도₩n"); printf("====================₩n");

for(i = 0; i < SIZE; i++) printf("%3d %3d ₩n", i, freq[i]);

return 0; }

==================== 면 빈도====================

0 1657 1 1679 2 1656 3 1694 4 1652 5 1662

Page 30: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 30

배열과 함수

배열의 경우에는사본이 아닌원본이전달된다.

int main(void){

...

get_average( , int n);

...}

int get_average(int score[], int n){

...

sum += score[i];

...}

배열 매개 변수의 경우, 원본이 직접참조됩니다.

Page 31: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 31

배열을 함수의 인수로 전달(array argument)

#include <stdio.h>#define STUDENTS 5int get_average(int score[], int n); // ①

int main(void){

int grade[STUDENTS] = { 1, 2, 3, 4, 5 }; int avg;

avg = get_average(grade, STUDENTS);printf("평균은 %d입니다.\n", avg); return 0;

}

int get_average(int score[], int n) // ②{

int i; int sum = 0;

for(i = 0; i < n; i++) sum += score[i];

return sum / n; }

배열이 인수인 경우,참조에 의한 호출

배열의 원본이score[]로 전달

Page 32: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 32

배열이 함수의 인수인 경우 (1)#include <stdio.h>#define SIZE 7

void square_array(int a[], int size);void print_array(int a[], int size);

int main(void){

int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7 } ;

print_array(list, SIZE);square_array(list, SIZE);print_array(list, SIZE);

return 0; }

// 배열은 원본이 전달된다. (인수 : 배열)

Page 33: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 33

배열이 함수의 인수인 경우 (2)void square_array(int a[], int size){

int i;

for(i = 0; i < size; i++) a[i] = a[i] * a[i];

} void print_array(int a[], int size){

int i;

for(i = 0; i < size; i++) printf("%3d ", a[i]);

printf("\n"); }

배열의 원본이a[]로 전달

1 2 3 4 5 6 7 1 4 9 16 25 36 49

Page 34: 6. 배열, 동적배열과응용(정렬, 탐색)elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungtak/5-1.pdf · Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim6 - 34

원본 배열의 변경을 금지하는 방법

void print_array(const int a[], int size)

{

...

a[0] = 100; // 컴파일 오류!

}

함수안에서 a[]는변경할수없다.