Presentation is loading. Please wait.

Presentation is loading. Please wait.

많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.

Similar presentations


Presentation on theme: "많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요."— Presentation transcript:

1

2 많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요

3 6.1 1차원 배열 한 분반의 성적을 읽어 평균과 분산을 구하는 문제 배열 선언 배열에 값 읽어 들이기 평균 계산 분산 계산

4 6.1.1 사용 규칙 배열의 크기는 미리 지정되어야 한다. (즉 컴파일 할 때 상수로 지정) 몇 가지 예
따라서 충분히 큰 크기로 선언해야 한다. 메모리 낭비 가능성 예, 1000으로 선언했는데 데이터가 50개 라면 950개는 낭비

5 배열을 함수 매개변수로 넘길 때, 데이터 개수를 알려주어야 함 (아래 예에서 no가 그 역할을 함) 함수 정의에서 배열의 크기는 생략 가능

6 배열 요소에 접근하는 방법

7 배열의 초기화

8 연습 문제

9 6.1.2 배열과 포인터 배열과 포인터는 매우 밀접한 관련 배열의 이름은 포인터이고, 첫 번째 요소의 주소를 갖는다.
몇 가지 예제

10 몇 가지 예제를 살펴 보면,

11 6.1.3 문자 배열 문자열과 포인터는 밀접한 관련 문자열은 배열로 표현되기 때문
문자열 끝에는 문자열 끝을 나타내는 가 채워 짐

12 문자형 배열과 상수 문자열을 가리키는 포인터의 차이

13 문자열의 길이를 알아내는 함수 strlen()
첫 요소에서 시작하여 이 나타날때까지 진행

14 문자열이 같은지 비교하는 함수 strcmp()
s와 t가 같으면 0, s가 크면 1, s가 작으면 -1 반환

15 문자열을 복사하는 함수 strcpy()

16 연습 문제

17 6.2 다차원 배열 여러 분반의 성적을 저장해야 하는 경우 2차원 배열 필요
int score[100][1000]; // 최대 100개 분반, 분반당 최대 1000명 행 우선으로 저장됨 총 100*1000*4=약 400킬로 바이트 할당됨 실제 20분반에 분반 별로 40명 학생이 있다면 20*40*4=3.2킬로 바이트만 사용, 나머지는 낭비 (6.3절의 동적 메모리 사용하면 낭비 제거)

18 여러 분반의 성적 처리 프로그램 main() 함수: 세 개 함수를 호출하는 역할

19 여러 분반의 성적 처리 프로그램 주요 자료 구조 score[][]: 성적 데이터 저장을 위한 2차원 배열 no_student[]: 분반 별 학생수를 저장하는 1차원 배열 ave[], var[]: 분반 별 평균과 분산을 저장하는 1차원 배열

20 여러 분반의 성적 처리 프로그램 성적을 읽어 들이는 함수 read_score()

21 여러 분반의 성적 처리 프로그램 평균과 분산을 구하는 함수 compute_stat()

22 내부 변수 버전으로 수정해 보자. 즉, 주요 자료 구조를 main() 안에 선언 이제 매개 변수를 통해 데이터를 교환해야 한다.

23 3차원 배열 여러 과목 있고, 과목 당 여러 분반 있고, 분반 당 여러 학생 있는 상황

24 연습 문제

25 6.3 동적 메모리와 포인터 배열 동적 메모리 할당을 위한 라이브러리 함수 malloc()과 free()

26 성적 처리 프로그램을 동적 메모리 버전으로 수정하면,
바뀐 부분에 주목할 것

27 2차원 배열의 동적 메모리 int *score[MaxClass]로 정의 MaxClass개의 int *형 요소를 갖는 1차원 배열 ‘포인터 배열’이라 부름

28 여러 분반의 성적 처리 프로그램을 동적 메모리 버전으로 수정하면,
main() 함수

29 주요 자료 구조

30 성적을 읽어 들이는 함수 read_score()
파란 부분이 동적 메모리 할당

31 연습 문제

32 6.4 포인터 배열과 2차원 배열 2차원 배열, 포인터 배열, 그리고 포인터 배열의 포인터
메모리 낭비 가능성: 2차원 배열 > 포인터 배열 > 포인터 배열의 포인터 프로그래밍 쉬움: 2차원 배열 > 포인터 배열 > 포인터 배열의 포인터 좋은 프로그래밍 스타일 가급적 포인터 배열 또는 포인터 배열의 포인터를 사용하라

33 ‘포인터 배열의 포인터’를 사용한다면, 생각보다 손질할 곳이 적다. 프로그램 [6.10]에서 두 곳을 수정

34 2차원 배열의 초기화 방법

35 연습 문제

36 6.5 파일 입출력: fscanf와 fprintf
많은 데이터를 입력해야 하는 경우, 키보드에서 직접 입력하는 것은 매우 번거로움 이때는 파일을 통해 입출력 하는 것이 적절함 파일 포인터를 통해 파일에서 읽거나 파일에 씀 라이브러리 함수 fscanf()와 fprintf() 파일 포인터가 있다는 점만 빼면, scanf()와 printf()와 같다.

37 파일 포인터는 어떻게 생성하나? fopen()을 이용한다. 예), fp_in=fopen(“score_data.txt”, “r”); score_data.txt라는 파일을 r (읽기) 모드로 열고, 그 파일 포인터를 fp_in에 대입한다. 이제 fscanf(fp_in, …)을 수행하면 score_data.txt에서 읽게 된다. 파일 모드 (부록 D에서 fopen() 함수 참조) “r” 읽기 “w” 쓰기 “a” 덧붙여 쓰기 파일 사용이 끝나면 fclose()로 닫는다.

38 뒤에 계속 …

39

40 연습 문제

41 6.6 프로그래밍 연습: 마방진

42

43 알고리즘으로 정리하면,

44 보다 상세하게 다시 정리하면,

45

46 C 코딩 하면,

47

48 연습 문제


Download ppt "많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요."

Similar presentations


Ads by Google