Presentation is loading. Please wait.

Presentation is loading. Please wait.

C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력

Similar presentations


Presentation on theme: "C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력"— Presentation transcript:

1

2 C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
프로그래머의 개성이 잘 드러난다. 자신의 아이디어와 스타일을 구사할 공간이 매우 넓다. 도전의 이면에 철저한 준비와 체계적인 노력 ‘정리되지 않은 생각을 가지고 키보드를 두드리는’ 잘못을 피하라. 물 붓고 라면 넣고 끓이면 죽이 된다. 문제 해결 절차를 지켜라. 반드시 문제 이해  논리적인 생각으로 알고리즘 설계  C 코딩 이 절은 세 가지 문제를 가지고 문제 해결 연습 2.2 최대 공약수 구하기 2.4 배열 분할 2.5 도형 그리기

3 2.1 문제 해결 과정 문제를 자동 해결하는 지능적인 컴퓨터는 아직 없다.
프로그래머는 명령문과 실행 순서를 일일이 지정해야 한다. 이 과정을 컴퓨터 프로그래밍이라 한다.

4 전형적인 문제 해결 과정 프로그래머의 능력 = ‘논리적인 사고’ + ‘적절한 언어로 표현’ 그림 2.2의 절차를 지켜라.

5 2.2 문제 1: 최대 공약수 최대 공약수 (GCD): 두 정수가 공통으로 갖는 가장 큰 약수

6 2.2.1 우직한 생각 예제 2.1이 사용한 규칙 알고리즘으로 정리하면,
알고리즘 [2.1]은 ‘스케치’ 버전: 바로 코딩하기 어려움 기본 연산이 아니라 복잡한 연산을 사용하기 때문

7 또 다른 규칙 규칙2의 손 시뮬레이션 (손으로 단계를 따라가 봄)

8 규칙2를 알고리즘으로 정리하면, 알고리즘 [2.2]가 사용하는 연산 라인 2의 !과 &&은 not과 and 라인 2에서 나누어 떨어짐은 조건 m%T==0으로 구현

9 알고리즘 [2.2]를 C 코딩하면,

10 알고리즘 [2.2]의 계산 효율 라인 9, 10, 12, 13, 18: 단 한번 수행 라인 15-16의 수행 회수가 계산 시간을 좌우함 경우에 따라 다름 m=12, n=24인 경우 푸프 0번 수행 m=56056, n=14157인 경우 번 수행 계산 효율 나쁨

11 연습 문제

12 2.2.2 유클리드의 생각 기원전 300년경의 그리스 수학자 유클리드의 규칙 (유클리드 호제법) 손 시뮬레이션 해보면,
m=56056, n=14157인 경우 5번의 루프로 답 찾음 매우 효율적

13 유클리드 규칙을 알고리즘으로 정리하면, break 문은 루프 탈출

14 알고리즘 [2.3]을 코딩하면,

15 함수로 다시 코딩하면, 다음 슬라이드에서 계속 …

16 함수로 다시 코딩하면,

17 연습 문제

18 2.3 언어 규칙과 알고리즘을 ‘표현하는’ 도구 머리 속의 생각을 정확하게 표현할 줄 알아야 한다.
컴퓨터의 기본 명령어는 의외로 단순 알고리즘이 기본 명령어만 사용한 경우 C 코딩이 쉽다. 복잡한 명령이 있는 경우 (초보에게는) 코딩이 까다롭다.

19 복잡한 명령문과 기본 명령문 고수는 복잡한 명령문을 가지고 바로 C 코딩할 수 있다. 초보는 아래와 같은 과정을 거쳐야 한다.

20 의사 코드와pseudo code C 코드 의사 코드: C 코드는 아니지만 그에 가까움 스케치 버전: 복잡한 명령어 포함됨 상세 버전: 기본 명령어만 사용 C 코드: C 언어로 기술된 프로그램 소스 프로그램 또는 소스 코드라고도 부름 초보는 아래 순서대로 하는 것이 현명하다. 스케치 코드  상세 코드  C 코딩

21 2.4 문제 2: 배열 분할 배열에 담긴 수를 기준보다 작은 것과 큰 것으로 구분
작은 것은 기준의 왼쪽으로 큰 것은 오른쪽으로 재배치하는 문제

22 2.4.1 배열 실제 응용에서 수십~수백만 개의 데이터를 다루는 경우
성적 처리, 매출액 정리, 국세청의 세금 정리, 쇼핑몰의 고객 관리 등 평균과 분산 계산, 정렬 등의 문제 발생 배열을 사용해야 함 그림 2.3: type은 int, array_name은 score, array_size는 1000 첨자는 0~999까지임

23 배열 접근 n 개 요소를 갖는 배열의 경우 첨자는 0~n-1 유효한 첨자 사용은 프로그래머의 몫 (프로그램이 자동 검사하지 않음) 접근 예

24 배열에서 최대와 최소 구하는 프로그램 배열의 크기는 미리 지정되어야 한다. 보통 충분히 큰 용량 지정 (메모리 낭비 요인)

25 함수 버전 배열과 그 속에 담긴 데이터 개수를 매개 변수로 줌 매개 변수에서 1차원 배열의 크기는 생략 가능

26

27 연습 문제

28 2.4.2 배열 분할 퀵 정렬이 사용하는 연산 (퀵 정렬은 5.4절에서 공부)

29 배열 분할 문제를 어떻게 풀까? 아래 그림에서 실마리를 …

30 시작은 어떻게?  i=0, j=1 끝낼 때 기준 요소는 어디로?  기준 요소 A[0]과 A[i] 교환 다음 슬라이드에서 계속…

31

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

33 for 문으로 바꿔 쓰면, 알고리즘 [2.4]와 논리적으로 같다.

34 C로 코딩하면, 실제 분할하는 부분은 다음 슬라이드에 …

35 실제 분할하는 부분은 라인 16-23 매우 간결하지 않은가!

36 연습 문제

37 2.5 문제 3: 도형 그리기 도형 그리기로 규칙 도출  알고리즘 정리  C 코딩 연습을 또 해 보자.
단순한 직사각형과 약간 복잡한 다이아몬드 ******* * * * * * * * * * * * * *

38 2.5.1 직사각형 그리기

39 알고리즘이 간단하므로 스케치 코드를 바로 C 코딩하면,
실제 그리는 부분은 다음 슬라이드에 …

40

41 연습 문제

42 2.5.2 프로그래밍 스타일: 경계 조건과 예외 조건 프로그램 [2.7]의 경계 조건과 예외 조건에서의 동작은?
경계 조건은 height=0, 1, 또는 2일 때 예외 조건은 height가 음수 또는 화면 길이보다 클 때 경계 조건과 예외 조건의 적절한 처리는 매우 중요하다. 그렇지 않으면 은행이 망하고, 비행기가 추락할 수 있다.

43 경계 조건과 예외 조건을 적절히 처리하는 버전 이하 생략 …

44 연습 문제

45 2.5.3 다이아몬드 그리기 1 bbb* 2 bb*b* 3 b*bbb* 4 *bbbbb* 5 b*bbb* 6 bb*b*

46 다이아몬드 그리기 규칙

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

48 C 코딩하면, 실제 그리는 부분은 다음 슬라이드에 …

49

50

51 연습 문제

52 연습 문제


Download ppt "C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력"

Similar presentations


Ads by Google