263
:: 6. CFL 프로그래밍

06 CFL 프로그래밍 - t1.daumcdn.net

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 06 CFL 프로그래밍 - t1.daumcdn.net

::6. CFL 프로그래밍

Page 2: 06 CFL 프로그래밍 - t1.daumcdn.net

2 MJU CE C Language Programming

학습 목표

알고리즘과 플로우 차트의 이해 실제 실행가능한 플로우차트의 작성법 플로우차트에 의한 알고리즘 작성 연습

C언어 작동 원리의 사전 학습

Page 3: 06 CFL 프로그래밍 - t1.daumcdn.net

3 MJU CE C Language Programming

알고리즘(Algorithm)?

어원: "Muhamad Ibn Musa Al Kowarizmi" 처리 해야 할 일을 적절한 크기의 요소로 단계별로 서

술 an effective method for solving a problem using

a finite sequence of instructions.알고리즘은 유한한 명령어의 배열을 이용하여 문제를해결하는 방법이다.

Page 4: 06 CFL 프로그래밍 - t1.daumcdn.net

4 MJU CE C Language Programming

알고리즘을 기술할 언어

프로그래밍 언어보다 추상적이어야 한다. 사람이 이해하기 쉬운 언어

Flow chart, Pseudo code, 자연 언어

Page 5: 06 CFL 프로그래밍 - t1.daumcdn.net

5 MJU CE C Language Programming

알고리즘의 기술: flowchart

Page 6: 06 CFL 프로그래밍 - t1.daumcdn.net

6 MJU CE C Language Programming

Flow-Chart Symbols

실행

순서연결

시작/끝데이터입,출력

조건부갈라짐

Page 7: 06 CFL 프로그래밍 - t1.daumcdn.net

7 MJU CE C Language Programming

방에 불이 안 들어올 때...

코드 끼운다

시작

스위치 켠다

전구를 교체

yes

yes

yes

수리공 부른다

코드가 빠졌나

스위치 꺼졌나

전구 고장

Page 8: 06 CFL 프로그래밍 - t1.daumcdn.net

8 MJU CE C Language Programming

밥먹기: 반복

숟가락놓는다

시작

한숟가락먹는다

yes배가 부른가

Page 9: 06 CFL 프로그래밍 - t1.daumcdn.net

9 MJU CE C Language Programming

Program 설계

Data 구조 + Algorithm 설계 = program

Page 10: 06 CFL 프로그래밍 - t1.daumcdn.net

10 MJU CE C Language Programming

암산?

건우야, 1부터 5까지더하면 얼마지?

15

그럼 413부터 435까지더하면?

헐!

Page 11: 06 CFL 프로그래밍 - t1.daumcdn.net

11 MJU CE C Language Programming

메모지의 활용

계산만할줄안다면메모지를활용하면된다.

Page 12: 06 CFL 프로그래밍 - t1.daumcdn.net

12 MJU CE C Language Programming

체계적으로 ... 1: 데이터 구조

green : 지금까지의 합을 기록

yellow: 이번에 더할 수를 기록

blue: 더해야 하는 마지막 수

Page 13: 06 CFL 프로그래밍 - t1.daumcdn.net

13 MJU CE C Language Programming

체계적으로 ... 2: 데이터 초기값

0

435

413

green : 지금까지의 합을 기록

yellow: 이번에 더할 수를 기록

blue: 더해야 하는 마지막 수

Page 14: 06 CFL 프로그래밍 - t1.daumcdn.net

14 MJU CE C Language Programming

쪽지 이름을 잘 지어야…

green, yellow, blue 보다는

0

435

413

sum

numToAdd

lastNumber

이번에더할수

마지막더할수

Page 15: 06 CFL 프로그래밍 - t1.daumcdn.net

15 MJU CE C Language Programming

체계적으로 ... 3: 알고리즘

다음을 끝날 때까지 반복한다. 1: ( ) 이 ( ) 보다 ( )면 계속한다. 2: ( ) 과 ( ) 을 더해서 ( ) 에다 적는다. 3: ( ) 을 1 증가시킨다. 0

435

413

sum

numToAdd

lastNumber

Page 16: 06 CFL 프로그래밍 - t1.daumcdn.net

16 MJU CE C Language Programming

대략의 흐름

준비작업

반복계산

종료

Page 17: 06 CFL 프로그래밍 - t1.daumcdn.net

17 MJU CE C Language Programming

413 ~ 435 합 구하기

sum = 0

numToAdd = 413

last= 435

sum = sum + numToAdd

numToAdd 를 1 증가

numToAdd <= last

종료

Page 18: 06 CFL 프로그래밍 - t1.daumcdn.net

::CFL: 실행되는 플로우차트

4

Page 19: 06 CFL 프로그래밍 - t1.daumcdn.net

19 MJU CE C Language Programming

CFL: C-like Flowchart Language

목적: 실행이 가능한 플로우차트를 작성하여 프로그래밍 언어에 무관하게 (language-neutral) 프로그래밍의 개념을 익히고 실행 시 일어나는 일을 눈으로 확인하여쉽게 이해한다.

특징:C언어의 문법과 1:1 대응 되도록 설계되어 추후 C언어를 배우기 쉽도록 설계되었다.

Page 20: 06 CFL 프로그래밍 - t1.daumcdn.net

20 MJU CE C Language Programming

CFL 의 특징

Simple Aligned with C language Structured programming

Page 21: 06 CFL 프로그래밍 - t1.daumcdn.net

21 MJU CE C Language Programming

CFL 첫 화면

•실행을위해서는Java Runtime (JRE) 필요:• java.oracle.com에서 download

Page 22: 06 CFL 프로그래밍 - t1.daumcdn.net

22 MJU CE C Language Programming

CFL 실습 준비

cfl_3.06.exe 를 다운로드. (현재 최신 버전) 더블 클릭 실행되지 않으면 (초기 화면이 뜨지 않으면) Java RTE 설치 (다음 슬라이드)

설치 된 후 다시 시도

Page 23: 06 CFL 프로그래밍 - t1.daumcdn.net

23 MJU CE C Language Programming

Java Runtime 확인

설치 되어있는지 확인:

없으면 JRE를 설치

Page 24: 06 CFL 프로그래밍 - t1.daumcdn.net

24 MJU CE C Language Programming

JRE설치: Oracle site

Page 25: 06 CFL 프로그래밍 - t1.daumcdn.net

25 MJU CE C Language Programming

Page 26: 06 CFL 프로그래밍 - t1.daumcdn.net

26 MJU CE C Language Programming

Page 27: 06 CFL 프로그래밍 - t1.daumcdn.net

:: 실습은 추후에1. CFL 개요

4,5

Page 28: 06 CFL 프로그래밍 - t1.daumcdn.net

28 MJU CE C Language Programming

목표

CFL 전체를 훑어보자. 상세한 부분은 몰라도 넘어가자.

Page 29: 06 CFL 프로그래밍 - t1.daumcdn.net

29 MJU CE C Language Programming

CFL 편집 및 실행 환경

플로우차트를그리는영역

Page 30: 06 CFL 프로그래밍 - t1.daumcdn.net

30 MJU CE C Language Programming

CFL의 기능

메모리, 연산, 비교, 반복, 배열, 함수 문자 입-출력, 숫자 입-출력 단순한 그래픽 소리파일 재상 LED 이벤트 처리 단계별, 일괄적 실행 가능

Page 31: 06 CFL 프로그래밍 - t1.daumcdn.net

31 MJU CE C Language Programming

CFL 프로그램은...

전체적인 흐름:노드(node)와 그 연결(arc)로 이루어 진다.

노드 안에서는:각종 명령어를 사용한다.

명령어:수식, 변수, 입출력 등

node

arc

Page 32: 06 CFL 프로그래밍 - t1.daumcdn.net

32 MJU CE C Language Programming

A. Node를 만들어보자.

Context menu: 바탕에 마우스 우측 버튼

Page 33: 06 CFL 프로그래밍 - t1.daumcdn.net

33 MJU CE C Language Programming

B. 노드를 연결해보자.

마우스 우측 버튼을 한 노드에서 누르고, 끌어서 다른 노드에서 놓는다.

Page 34: 06 CFL 프로그래밍 - t1.daumcdn.net

34 MJU CE C Language Programming

C. 노드에 글자를 넣어보자

한번클릭 다시클릭 내용타이핑

타이핑후에 Esc 키나 Enter키를누른다.

Page 35: 06 CFL 프로그래밍 - t1.daumcdn.net

35 MJU CE C Language Programming

Node 가 하는 일은…

메모리 상태를 바꾸는 일 외부로 데이터를 보여주는 일 외부에서 데이터를 가지고 들어오는 일

Page 36: 06 CFL 프로그래밍 - t1.daumcdn.net

36 MJU CE C Language Programming

Page 37: 06 CFL 프로그래밍 - t1.daumcdn.net

37 MJU CE C Language Programming

CFL 요소

Node 의 종류:시작 노드(main), 처리 노드(process), 비교 노드(decision

혹은 'if') 입출력 노드(I/O), 코멘트(comment), 함수(Function)

메모리(변수)임시 변수 Acc(정수), fR(실수)정수 변수들(float로 재 정의 가능)배열 변수 r , s

입력과 출력(키보드+모니터) 노드 간의 연결

Page 38: 06 CFL 프로그래밍 - t1.daumcdn.net

38 MJU CE C Language Programming

CFL의 실행

"main" node에서 시작, return 노드에서 종료 연결된 노드가 없으면 실행 종료 화살표 연결을 따라서 하나씩 수행 : step 변화된 값은 붉은 배경으로 표시 처음부터 다시 시작하려면: reset을 먼저 클릭 일괄 수행: run 일괄 수행중 멈춤: stop

Page 39: 06 CFL 프로그래밍 - t1.daumcdn.net

39 MJU CE C Language Programming

연습 문제

배포된 test.cfl 프로그램을 다운로드 받은 다음,[file]-[open]으로 열어서 한 단계씩 실행을 해보자.

제출: 마지막 단계에서의 스크린 샷을 저장하여 제출

Page 40: 06 CFL 프로그래밍 - t1.daumcdn.net

40 MJU CE C Language Programming

변수

기억장치 정수형(int -- integer): a,b,c,d, i,j,k,… 변수 이름 실수형(float – floating point): 추후 필요에 따라 지정

임시 변수 acc (정수형) Accumulator 정수 계산 결과 저장

임시변수 fR(실수형) Floating-point Register 계산 결과 임시 저장

이름과 타입을 새로 정의할 수 있다. 처음에는 값이 제멋대로 들어있음

("garbage value" 혹은 "쓰레기 값")

Page 41: 06 CFL 프로그래밍 - t1.daumcdn.net

41 MJU CE C Language Programming

메모리는 원래 눈에 보이는 것이 아니지만

학습자의이해를돕기위해눈에보이게한것.

Page 42: 06 CFL 프로그래밍 - t1.daumcdn.net

42 MJU CE C Language Programming

임시 변수 ACC(Accumulator)

모든 계산의 결과는 항상 ACC 또는 fR에 임시로 저장된다.

정수 연산의 결과는 ACC 실수 연산의 결과는 fR (floating-point register)

Page 43: 06 CFL 프로그래밍 - t1.daumcdn.net

43 MJU CE C Language Programming

정수를 저장해보자

Process Node를 만든다음 a=1 을 넣어보자. 또다른 노드에 b=2를 넣는다. 그림과 같이 연결 한다.

Page 44: 06 CFL 프로그래밍 - t1.daumcdn.net

일괄 및 단계별 실행

44

• 초기화1: 처음상태로, 입력데이터지운다• 초기화 2: 처음상태로, 입력데이터복구• Step in: 한단계실행(함수호출시함수안으로)• Next(Step over): 한단계(함수호출시함수일괄실행)• Run/Resume: 연속실행• Pause: 일시멈춤• Break Point: 중단점설정

초기화1 초기화2 step-in next run pause breakpoint

* 단계별실행및중단점은오류잡기(debugging)에사용

Page 45: 06 CFL 프로그래밍 - t1.daumcdn.net

Pop-up menu 의 사용(우측 마우스 단추)

45

빈캔버스에클릭한경우

선택한노드위에서클릭한경우

Page 46: 06 CFL 프로그래밍 - t1.daumcdn.net

여러 노드 선택후 메뉴

46

복사

삭제

맞춤

나가는 연결삭제

Page 47: 06 CFL 프로그래밍 - t1.daumcdn.net

새 모듈(페이지) 만들기

47

Page 48: 06 CFL 프로그래밍 - t1.daumcdn.net

48 MJU CE C Language Programming

Tool Tip

툴바가 궁금하면 마우스를 올려놓는다.

48

Page 49: 06 CFL 프로그래밍 - t1.daumcdn.net

49 MJU CE C Language Programming

시작 노드

실행의 시작점 "main"으로 표시 삭제할 수 없음 하나만 존재 화살표 선으로 연결해야

다음 노드 실행

Page 50: 06 CFL 프로그래밍 - t1.daumcdn.net

50 MJU CE C Language Programming

끝 노드

return 혹은 return <값> *상세한 차이는 함수에서 설명

Page 51: 06 CFL 프로그래밍 - t1.daumcdn.net

51 MJU CE C Language Programming

Lesson 1: Assign노드 만들고 연결하기

목표: 그림과 같은 차트 만들고 실행하고 결과 관찰하기

Page 52: 06 CFL 프로그래밍 - t1.daumcdn.net

52 MJU CE C Language Programming

1. 노드 만들기

원하는 위치에 우측 마우스 메뉴가 뜬다. Process node 선택 노드가 생기고 입력 준비가 된

다. 내용물을 입력한다. (키보드) Enter키를 친다. 다음 노드가 생긴다. 내용을 입력한다. Esc 키를 친다. 입력 종료

Page 53: 06 CFL 프로그래밍 - t1.daumcdn.net

53 MJU CE C Language Programming

실습 lab06_01

main 노드와 end노드를 연결해보자. 두 노드의 위치를 이리 저리 옮겨보자. 연결을 다시 삭제해보자

Page 54: 06 CFL 프로그래밍 - t1.daumcdn.net

:: text: 6장처리 노드

6p.12~18

Page 55: 06 CFL 프로그래밍 - t1.daumcdn.net

55 MJU CE C Language Programming

처리 노드(Process Node)

변수값 설정(assignment, 사칙 연산 등) 정수 연산, 실수 연산이 있음 정수 연산 결과는 acc 변수에 임시 저장 실수 연산 결과는 fR 변수에 임시 저장 필요시 일반 변수에 복사 보관

Page 56: 06 CFL 프로그래밍 - t1.daumcdn.net

56 MJU CE C Language Programming

처리 노드 1: 배정(assignment) 연산

k = 3 // k 3, 즉 변수k에 3을 복사"k에 3을 배정한다, k에 3을 assign한다" 등으로 표현

i = k // 변수 i에 k의 값을 복사해 넣는다. 배정 연산은 등식이 아니다. 등호 왼쪽의 변수에 오른쪽 수식 값을 넣어준다.

즉 방향이 i k 방향이며 i k 가 아니다. 3 = n ( ERROR )

Page 57: 06 CFL 프로그래밍 - t1.daumcdn.net

편집 순서

Page 58: 06 CFL 프로그래밍 - t1.daumcdn.net

58 MJU CE C Language Programming

노드의 이동

한 개: 그냥 끌기 여러 개: 범위 선택 후 끌기 범위 선택 방법: 사각형 범위지정 혹은 control-click

여러 번

Page 59: 06 CFL 프로그래밍 - t1.daumcdn.net

59 MJU CE C Language Programming

Demo: simple assignment

노드의 종류 선택 위치에 클릭 생겨난 노드를 클릭 텍스트 입력난이 뜬다 내용을 입력 후 Enter Shift-drag(혹은 우측버튼 누르고 drag)으로 연결(나

중에 연결해도 된다)혹은 이전 노드 바로 아래에 이동 자동 연결

Page 60: 06 CFL 프로그래밍 - t1.daumcdn.net

60 MJU CE C Language Programming

lab06_03

i 변수에 1값을, j변수에 2를, k변수에 3을 각각 순서대로 assign하는 CFL을 작성하고 step을 이용하여 실행하여 보라. 변수에 값이 저장되는 것을 확인하고 제출한다.

Page 61: 06 CFL 프로그래밍 - t1.daumcdn.net

61 MJU CE C Language Programming

처리 노드 2: 정수의 연산

i + j 덧셈 결과를 acc에 i * 3 k / 2 결과는 정수(몫), acc에 저장 n % 3 나머지를 acc에 저장

대개의 경우 assignment 와의 결합 a = k / 2 나눗셈의 몫을 a에 저장 n = n + i 결과를 다시 n에 저장

i + j

Page 62: 06 CFL 프로그래밍 - t1.daumcdn.net

62 MJU CE C Language Programming

처리 노드 3: mixed

a = b + c // Assignment(=) 연산이 나중. a = a + 1 i = n * 2 + 3 // 순서: *, +, =

Page 63: 06 CFL 프로그래밍 - t1.daumcdn.net

63 MJU CE C Language Programming

처리 노드 4: 그 외의 연산

i 값이 1 증가 됨(++되고+ + 안됨)

j 값이 1 감소 됨

k값이 3 증가( k = k + 3 )

n값이 2배가 된다.(n=n*2)

n 값이 반이 된다.

i ++

j --

k += 3

n *= 2

n /= 2

++ i

-- j

Page 64: 06 CFL 프로그래밍 - t1.daumcdn.net

64 MJU CE C Language Programming

그 외의 연산 2

j+k를 i에 저장

연산 결과를 acc에 임시저장

주의: 전치(prefix) 연산 ++n 과 후치(postfix) 연산 n++ 는 assignment와 사용시 결과가 다르다.( -- 도 마찬가지)

i = j + k

i + 2 * j

i = n++ i = ++n

Page 65: 06 CFL 프로그래밍 - t1.daumcdn.net

65 MJU CE C Language Programming

우선 순위

곱셈, 나눗셈, 나머지 덧셈, 뺄셈 Assignment ( = += *= 등) 괄호의 사용

예:a = (( n + 1 )/2 )*(k * 2 + 1)

Page 66: 06 CFL 프로그래밍 - t1.daumcdn.net

66 MJU CE C Language Programming

연습 문제: ex651

CFL에서 i+1 이라는 노드와 i++ 라는 노드 두 개를실행하여보고

두 연산의 차이를 정확히 서술하라.

Page 67: 06 CFL 프로그래밍 - t1.daumcdn.net

67 MJU CE C Language Programming

Instructor Page

651 문제. 종료후 데모와 함께 설명.

Page 68: 06 CFL 프로그래밍 - t1.daumcdn.net

68 MJU CE C Language Programming

Demo

4칙 연산: 결과가 임시 변수에 저장 assignment 연산: 지정된 변수에 저장

Page 69: 06 CFL 프로그래밍 - t1.daumcdn.net

69 MJU CE C Language Programming

실습 lab06_04

다음과 같은 단계로 실행하는 CFL을 작성: Assignment를 이용하여 i에 1을 집어 넣고 j에 9를 집어 넣는다. i + j 를 실행한다. 결과(ACC)를 다시 k에 넣는다. 한 단계씩 실행해서 값이 어떻게 변하는지 관찰한다.

Page 70: 06 CFL 프로그래밍 - t1.daumcdn.net

70 MJU CE C Language Programming

숙제 ex652: 숫자 마술

1부터 9사이의 어떤 수를 n 에 기억시킨다. 이 수에 4를 더한다. 이 결과에 2를 곱한다. 이 결과에 6을 뺀다. 이 결과를 2로 나눈다. 이 결과에서 n(최초의 수)를 뺀다. 최종 결과를 확인하라. 아마도 1이 되었을 것이다.

Page 71: 06 CFL 프로그래밍 - t1.daumcdn.net

71 MJU CE C Language Programming

Comment (Note) Node

실행에 영향 없음. 참고용.

Page 72: 06 CFL 프로그래밍 - t1.daumcdn.net

72 MJU CE C Language Programming

변수 타입 및 이름의 변경

값 대신 타입 + 변수명 + Enter키

Before After

Page 73: 06 CFL 프로그래밍 - t1.daumcdn.net

73 MJU CE C Language Programming

실습 lab06_05

섭씨 24도이면 화씨로 몇 도일까? CFL을 이용하여 계산하여 보자. 24만 다른 수로 바꾸면 나중에 다른 온도도 계산이 가능하게 될 것이다.

공식: F = C * 9/5 + 32 를 변형, 활용하자 두 개의 변수를 각각 far 와 cent로 개명한다. 섭씨 값을 나타내

는 수는 cent에 저장하고 화씨 온도를 나타내는 최종 값은 far에 저장한

다. 여러 가지 데이터를 가지고 테스트하여 어떤 오차가 있는지 살

펴본다.

Page 74: 06 CFL 프로그래밍 - t1.daumcdn.net

74 MJU CE C Language Programming

float 변수의 지정

Page 75: 06 CFL 프로그래밍 - t1.daumcdn.net

75 MJU CE C Language Programming

실수 연산(float)

3.14/2 둘 중 하나라도 실수형이면 실수 연산임

a/b 정수 연산임.

a/b 실수 연산임.

Page 76: 06 CFL 프로그래밍 - t1.daumcdn.net

76 MJU CE C Language Programming

실습 615

섭씨온도를 입력하면 화씨 온도를 출력하는 CFL 프로그램을 작성하라.

정수형을 사용하면 오차가 있으므로 float 를 이용하여오차를 최대한 줄이도록 하라.

공식: F = C * 9/5 + 32 를 변형, 활용하자 두 개의 변수를 각각 far 와 cent로 개명한다. 섭씨 값

을 나타내는 수는 cent에 저장하고 화씨 온도를 나타내는 최종 값은 far

에 저장한다.

Page 77: 06 CFL 프로그래밍 - t1.daumcdn.net

77 MJU CE C Language Programming

정수 연산의 활용

정수는 정밀한 계산에는 부적합 대신 정수로서의 중요한 특성이 있음나눗셈, 나머지 연산

Page 78: 06 CFL 프로그래밍 - t1.daumcdn.net

78 MJU CE C Language Programming

ex653: 정수 연산의 활용

정수 나눗셈, 정수 나머지 연산 원숭이 수를 a 에 assign하고 바나나 수를 b에 assign

한다. 원숭이 한마리당 나눠줄 바나나의 수를 c에,

남는 바나나의 수를 d에 저장하게 계산한다. * Comment 노드를 활용하여 어떤 변수가 어떤 용도

로 쓰였는지 반드시 표기하도록 한다.

Page 79: 06 CFL 프로그래밍 - t1.daumcdn.net

:: Built-in functions미리 만들어진 함수

Page 80: 06 CFL 프로그래밍 - t1.daumcdn.net

80 MJU CE C Language Programming

수학용 함수

sin, cos, tan, exp, log, log10, pow, sqrt sin, cos, tan – sine, cosine, tangent exp x : ex

log x : pow x y : sqrt x : argument는 변수 혹은 상수만 가능. 다른 수식 불가.

x

yxxlog

Page 81: 06 CFL 프로그래밍 - t1.daumcdn.net

81 MJU CE C Language Programming

함수 사용: 변수 혹은 상수만.

사용 예:y = sin xz = cos 0.53y = pow 0.5 3 0.53

z = sqrt 1.44 안되는 예:

y = sin x+1.1z = tan (x * 3.14) 어떻게 하면 될까?

Page 82: 06 CFL 프로그래밍 - t1.daumcdn.net

82 MJU CE C Language Programming

연습 문제

4x2 + 3x + 1 = 0 의 두 해를 구하라.

Hint1: 근의 공식을 이용한다. Hint2: 변수를 float로 선언해야 한다.

Page 83: 06 CFL 프로그래밍 - t1.daumcdn.net

:: text: 7장CFL 입력과 출력

7

Page 84: 06 CFL 프로그래밍 - t1.daumcdn.net

84 MJU CE C Language Programming

User Interaction

Page 85: 06 CFL 프로그래밍 - t1.daumcdn.net

85 MJU CE C Language Programming

출력(output)

컴퓨터 외부시각적인 출력,청각적인 출력 등

가장 흔한 방법은text 출력

Page 86: 06 CFL 프로그래밍 - t1.daumcdn.net

86 MJU CE C Language Programming

입력(input)

외부 컴퓨터* '외부'는 대개 사람.

Page 87: 06 CFL 프로그래밍 - t1.daumcdn.net

87 MJU CE C Language Programming

바보같은 로봇

3x4=12

곱셈해봐.

곱셈해봐.

3x4=12

Page 88: 06 CFL 프로그래밍 - t1.daumcdn.net

88 MJU CE C Language Programming

입력이 있다면

뭘곱할까요?

곱셈해봐.

3 4

3x4=12

8 9

8 x 9 = 72

Page 89: 06 CFL 프로그래밍 - t1.daumcdn.net

89 MJU CE C Language Programming

용어

읽는다 = 읽어 들인다 = 입력한다 (input)

출력한다 = output

Page 90: 06 CFL 프로그래밍 - t1.daumcdn.net

90 MJU CE C Language Programming

프로그램을 수정 없이 여러 번 써먹으려면?

프로그램 자체를 수정하지 않고 외부에서 실행시에 데이터를 가져온다: “입력”

Page 91: 06 CFL 프로그래밍 - t1.daumcdn.net

정수의 입력: scanf

* Process node에 scanf써넣으면I/O node로변함.

Page 92: 06 CFL 프로그래밍 - t1.daumcdn.net

정수 입력 하기

변수명앞에 &를붙인다.

return 키 치는 순간버퍼로 들어간다

Page 93: 06 CFL 프로그래밍 - t1.daumcdn.net

93 MJU CE C Language Programming

내부적인 일

키보드에서 buffer에 입력된 1, 2, 3 세개의 문자는 각기 49, 50, 51 이라는 정수로 저장되어있다.

컴퓨터:흠, 49가 들어왔으니 '1'이라고 써있는 키를 눌렀구만. 일단

이걸 정수 1로 바꿔야하니 48을 빼서 저장하면 되지.이번엔 50이 들어온 걸 보니 사용자가 '2'키를 눌렀구만. 그

럼 아까 1은 10으로 바꾸고 2를 더해서 12를 저장하자.이번엔 51이 들어온 걸 보니 사용자가 '3'키를 눌렀구만. 그

럼 아까 12는 10을 곱해서 120으로 바꾸고 3를 더해서 123을 저장하자.

이번엔 32가 들어온 걸 보니 space bar를 눌렀군. 그럼 정수는 아까 끝난거니까 123을 전달해주면 되겠군.

93

Page 94: 06 CFL 프로그래밍 - t1.daumcdn.net

94 MJU CE C Language Programming

사용자가 입력을 안하면...

scanf 에서 진행되지 못한다. "blocking" 되었다고 표현함.

94

Page 95: 06 CFL 프로그래밍 - t1.daumcdn.net

문자열 및 정수의 출력: printf

95

Page 96: 06 CFL 프로그래밍 - t1.daumcdn.net

96 MJU CE C Language Programming

여러 항목

빈 칸으로 구분

Page 97: 06 CFL 프로그래밍 - t1.daumcdn.net

출력에서 줄을 바꾸고 싶으면…

97

영문자판에서는 \ 키,한글 자판에서는 ₩키.

Page 98: 06 CFL 프로그래밍 - t1.daumcdn.net

98 MJU CE C Language Programming

lab06_07 (614번)

두 개의 정수를 입력하여 곱을 출력하는 CFL 프로그램을 작성한다.

코멘트에 어느 변수와 어느 변수를 곱해서 어디에 저장할 것인지 적어두고 시작한다.

Page 99: 06 CFL 프로그래밍 - t1.daumcdn.net

99 MJU CE C Language Programming

연습 ex654

정수로 분(minutes)을 입력하면 몇 시간 몇 분인지 출력하게 하라.

변수 이름을 적절한 이름으로 개명하고 코멘트를 달아준다.

사용자가 편리하도록 무엇을 입력할지를 출력으로 알려주고 결과도 친절하게 표시하라. (입력 안내 예: "시간을 분 단위로 입력:" 출력 예: "110분은 1시간 50분입니다.")

Hint: 정수 나눗셈과 정수 나머지를 활용

Page 100: 06 CFL 프로그래밍 - t1.daumcdn.net

100 MJU CE C Language Programming

연습 655

시간과 분을 정수로 입력하면 이것을 총 분 수로 표시하라.

출력 형식: “130분은 2시간 10분입니다.”

Page 101: 06 CFL 프로그래밍 - t1.daumcdn.net

::문자의 표현

7

Page 102: 06 CFL 프로그래밍 - t1.daumcdn.net

102 MJU CE C Language Programming

숫자 계산 보다는 텍스트가 많다!!!

글자들은 어떻게 나타낼까?

Page 103: 06 CFL 프로그래밍 - t1.daumcdn.net

103 MJU CE C Language Programming

문자의 저장

컴퓨터의 키보드가 망가졌다. 메모를 해야 하는데 숫자 키보드밖에는 작동하지 않는다. 그래서 다음과 같이 암호화를 하기로 한다.문자 a b c d e f g h i j코드 97 98 99 100 101 102 103 104 105 106문자 k l m n o p q r s t코드 107 108 109 110 111 112 113 114 115 116문자 u v w x y z코드 117 118 119 120 121 122

Page 104: 06 CFL 프로그래밍 - t1.daumcdn.net

104 MJU CE C Language Programming

아래의 숫자들은 무슨 단어들일까?

104 10597 112 112 108 101115 117 110 110 121

a b c d e f g h i j97 98 99 100 101 102 103 104 105 106k l m n o p q r s t107 108 109 110 111 112 113 114 115 116u v w x y z117 118 119 120 121 122

Page 105: 06 CFL 프로그래밍 - t1.daumcdn.net

105 MJU CE C Language Programming

CFL에서 문자를 저장해보자

a = 'a' b = 'z' c = 'A' d = 'B' e = '1';

"문자 a 의코드값"이라는뜻.a = 97 과같음.

Page 106: 06 CFL 프로그래밍 - t1.daumcdn.net

106 MJU CE C Language Programming

문자를 출력하는 함수 putchar

putchar 정수 예: putchar 98 putchar 문자상수 예: putchar 'k' putchar 변수 명 예: putchar c putchar 수식 X

Page 107: 06 CFL 프로그래밍 - t1.daumcdn.net

107 MJU CE C Language Programming

정수로 문자 나타내기

m = 97 을 실행한 이후에 putchar m 을 실행하여보라. n = 98 을 실행한 이후에 putchar n 을 실행하여보라.

이번에는 같은 m 과 n을 printf로 출력해보라. m = 'a' 라고 실행한 후에 putchar를 해보라. 또 m= 'b' 라고 실행한 후에 putchar n 을 해보라.

Page 108: 06 CFL 프로그래밍 - t1.daumcdn.net

108 MJU CE C Language Programming

정수 값과 문자 값은 구분이 될까?

i = 97 putchar를 하면 'a'가 출력 printf를 쓰면 97이 출력.

==> 이것만 가지고 의도를 알 수는 없다.

Page 109: 06 CFL 프로그래밍 - t1.daumcdn.net

109 MJU CE C Language Programming

ASCII 표준 코드표

Page 110: 06 CFL 프로그래밍 - t1.daumcdn.net

110 MJU CE C Language Programming

apple 입력, 저장하는 방법 1

a p p l e

97 112 112 108 101

Page 111: 06 CFL 프로그래밍 - t1.daumcdn.net

111 MJU CE C Language Programming

apple 입력, 저장하는 방법 2

a p p l e

97 112 112 108 101a p p l e

Page 112: 06 CFL 프로그래밍 - t1.daumcdn.net

112 MJU CE C Language Programming

apple 출력 하는 방법 1

97 112 112 108 101

Page 113: 06 CFL 프로그래밍 - t1.daumcdn.net

113 MJU CE C Language Programming

apple 출력 하는 방법 2

apple

97 112 112 108 101

Page 114: 06 CFL 프로그래밍 - t1.daumcdn.net

::문자 별 입력과 출력

Page 115: 06 CFL 프로그래밍 - t1.daumcdn.net

115 MJU CE C Language Programming

관점의 차이

표준입력에서 입력한 글자들은 여러 가지 다른 관점에서 볼 수 있다.

예: 123 정수 백이십삼세 개의 글자 '1', '2', '3'

Page 116: 06 CFL 프로그래밍 - t1.daumcdn.net

116 MJU CE C Language Programming

CFL 문자 입력

get a character from "standard input device" (표준입력 장치에서 입력된 문자의 코드 값을(정수) 임시메모리에 저장한다.

getcharcharacter = 문자

Page 117: 06 CFL 프로그래밍 - t1.daumcdn.net

117 MJU CE C Language Programming

CFL 문자 출력

put the given character to the "standard output device"

putchar aa의내용(정수)을 char로변환하여표준출력장치로보낸다. 표준출력장치가콘솔이면문자형태로출력함.표준출력장치가파일이면한바이트를저장

Page 118: 06 CFL 프로그래밍 - t1.daumcdn.net

118 MJU CE C Language Programming

CFL 비교(demo)

scanf &a

scanf &a 실행전 scanf &a 실행후

Page 119: 06 CFL 프로그래밍 - t1.daumcdn.net

119 MJU CE C Language Programming

getchar 의 경우

getchar실행전 getchar실행후

Page 120: 06 CFL 프로그래밍 - t1.daumcdn.net

120 MJU CE C Language Programming

저장까지 한번에

같다

Page 121: 06 CFL 프로그래밍 - t1.daumcdn.net

121 MJU CE C Language Programming

putchar and printf

Page 122: 06 CFL 프로그래밍 - t1.daumcdn.net

122 MJU CE C Language Programming

연습 ex672

키보드 버퍼에서 3개의 문자를 읽어서 각각 문자로도출력하고 정수 값으로도 출력해주는 프로그램을 작성하라.

Page 123: 06 CFL 프로그래밍 - t1.daumcdn.net

123 MJU CE C Language Programming

연습 673 나중에

키보드 버퍼에서 읽어 들일 문자가 있는 동안에는 모두 하나씩읽어들인다.

문자 읽기에 성공하면 그 문자가 영어 소문자인지 아닌지를 판별하여 소문자의 개수를 세고 입력이 끝나면 소문자의 총 개수를 출력한다.

*주의: 데이터가 더 이상 없으면 어떤 변화가 생기는지를 관찰해서 멈출 조건을 결정한다.

** x 가 5 이상 10 이하인지를 판별하려면5 <= x <= 10 이렇게 쓰면 틀린다.5<= x && x <=10 이라고 써야 한다.

"그리고"의뜻.

Page 124: 06 CFL 프로그래밍 - t1.daumcdn.net

124 MJU CE C Language Programming

문자로 입력된 숫자 값 저장하기

키보드에서 숫자 문자 하나를 읽어서 변수 c에 그에 해당하는 정수 값을 변수 n에 저장하라. (코드 값이 아니다. 예를 들어 '1' 이 입력된 경우 코드 값은 49 이지만우리가 원하는 값은 1이 저장되는 것이다.

비교를 10번 하는 것은 바보 같은 짓이다. 범위만 체크한 후 간단한 뺄셈이면 된다.

Page 125: 06 CFL 프로그래밍 - t1.daumcdn.net

125 MJU CE C Language Programming

ex674: 두 자리 정수

두 번의 getchar를 이용하여 두 자리 정수의 두 자리를 각각 입력하여 그 정수 값을

n에 저장하라. 예를 들어 2345 가 키보드 버퍼에 있었다면 2와 3만

을 읽어서 정수 23으로 하나의 변수에 저장하는 것이다. 간단한 산수로 가능하다.

Page 126: 06 CFL 프로그래밍 - t1.daumcdn.net

126 MJU CE C Language Programming

675: 세자리 정수

키보드 버퍼에 세자리 정수를 입력하였다. 이때 scanf를 쓰면 간단히 정수 값을 알 수 있지만

getchar로 세 글자를 읽어들여 정수를 만들어 낼 수있다. 예를 들어 123이 입력된다면 문자 '1', 문자'2', 문자 '3' 으로 읽는 것이다. 정수로 따지면 49, 50, 51이 들어온다.

첫째 문자에 해당하는 정수값을 알아내어 k에 저장, 둘째를 l에, 세째를 m에 저장한 다음 k*100 + l*10 + m 을 계산하면 정수 값을 알 수 있다.

이것을 printf로 출력하라.

Page 127: 06 CFL 프로그래밍 - t1.daumcdn.net

127 MJU CE C Language Programming

ex676: 소문자를 대문자로

입력된 모든 문자를 대문자로 변환하여 출력하는 프로그램을 작성하라. 소문자가 아닌 경우는 그대로 출력하면 된다. 예를 들어

입력: Hello World. 라면 출력은 HELLO WORLD. 가 된다.

Page 128: 06 CFL 프로그래밍 - t1.daumcdn.net

::조건부 분기 구조

8

Page 129: 06 CFL 프로그래밍 - t1.daumcdn.net

129 MJU CE C Language Programming

조건에 따라 갈 길을 다르게

Page 130: 06 CFL 프로그래밍 - t1.daumcdn.net

IF: 만들기

if 노드생성

내용입력(“if”는입력않음)

입력후

Page 131: 06 CFL 프로그래밍 - t1.daumcdn.net

각 경우 실행 내용을 입력

131

Page 132: 06 CFL 프로그래밍 - t1.daumcdn.net

132 MJU CE C Language Programming

비교 노드에서는: 비교 연산

n > 0 n < k + 1 i <= 0 i (주의: i =< 0 안됨) m >= k m k (주의: m => k 안됨) m == 5 (주의: m=5 안됨). n != 0 n ≠ 5 의 뜻.

Page 133: 06 CFL 프로그래밍 - t1.daumcdn.net

133 MJU CE C Language Programming

주의 사항

같은가 물어볼 때는 = 가 아니라 == 이다.

Page 134: 06 CFL 프로그래밍 - t1.daumcdn.net

134 MJU CE C Language Programming

연습 문제 632

두개의 정수를 입력 받아서 먼저 입력된 정수를 두번째입력된 정수로 나눈 몫을 출력하게 하라.

단, 두번째 수가 0이면 나눌 수가 없으므로 계산 대신적절한 오류 메시지(예: "나눌 수 없습니다.")를 출력하고 종료하면 된다.

Page 135: 06 CFL 프로그래밍 - t1.daumcdn.net

135 MJU CE C Language Programming

연습 633

두개의 정수를 입력 받으면 둘 중에 큰 수를 출력하는프로그램을 작성하라.

Page 136: 06 CFL 프로그래밍 - t1.daumcdn.net

136 MJU CE C Language Programming

여러 개의 조건

i > 0 && i < 100 0보다 크고 100보다 작으면 True (조건 만족)둘 중 하나라도 아니면 false

주의: 0 < i < 100 이렇게는 안된다! i < 0 || i >= 100 0 미만이거나 혹은 100 이상이면 True둘 다 아니면 false

Page 137: 06 CFL 프로그래밍 - t1.daumcdn.net

137 MJU CE C Language Programming

연습 문제 634

원금과 이율 (percentage)을 입력하면 원리합계를 계산하여 출력하게 하라.

단, 원금은 정수로 입력하며 이율은 실수로 입력한다. 이율이 음수이거나 30%을 넘으면 오류이다.

Page 138: 06 CFL 프로그래밍 - t1.daumcdn.net

또다시 갈라지려면 .. 포함

138

Page 139: 06 CFL 프로그래밍 - t1.daumcdn.net

139 MJU CE C Language Programming

예제

Page 140: 06 CFL 프로그래밍 - t1.daumcdn.net

140 MJU CE C Language Programming

연습 문제

문자 하나를 입력받아 영어 소문자인지 아닌지를 판별하는 프로그램을 작성하라.

Page 141: 06 CFL 프로그래밍 - t1.daumcdn.net

141 MJU CE C Language Programming

연습 656

정수를 입력하면 양수인지, 음수인지, 아니면 0인지를판별하여

출력하게 하라.

Page 142: 06 CFL 프로그래밍 - t1.daumcdn.net

142 MJU CE C Language Programming

연습 657

정수를 입력하고 입력된 정수가 90 이상이면 "수" 80이상이면 "우", 70이상이면 "미", 60이상이면 "양" 아니면 "가"를 출력하는 프로그램을 작성하라.

Page 143: 06 CFL 프로그래밍 - t1.daumcdn.net

143 MJU CE C Language Programming

연습 661

연 소득을 입력하면 이에 대한 세금을 계산하여 출력한다. 단 소득은 만원 단위 정수로 입력하고 세율은 소득에 따라서 아래와 같이 달라진다.

5000 이상 10% 4000이상 5000미만 5% 4000미만 3%

Page 144: 06 CFL 프로그래밍 - t1.daumcdn.net

144 MJU CE C Language Programming

여러 가지 기준으로 갈라지기

x와 y의 값에 따라서

1사분면2사분면

3사분면 4사분면

Page 145: 06 CFL 프로그래밍 - t1.daumcdn.net

145 MJU CE C Language Programming

사분면 ex662

x와 y 정수 값을 입력하면 1~4사분면 중 어디에 있는지 출력하는 프로그램을 작성하라.

단, 점이 좌표축 상에 있으면 "축"이라고 입력한다.

Page 146: 06 CFL 프로그래밍 - t1.daumcdn.net

146 MJU CE C Language Programming

ex663 실습: 좀 더 복잡한 세금

소득세가 다음과 같이 계산된다. 소득액(만원 단위)과 나이를 각기정수로 입력했을 때 (둘 사이는 하나 이상의 빈 칸으로 구분) 세액을계산하는 프로그램을 작성하라. (세액만을 출력)

세율을 나타내는 변수는 float로 한다. 변수가 그 내용을 잘 나타내도록 이름을 짓도록 한다. 세액 = 소득 * 해당 세율 세율:

60세 미만 60세 이상

1000 이하 5% 4%

1001~2000 6% 5.5%

2000 초과 8% 7%

다음쪽에계속소득: income 세금 tax 비율 rate 나이 age

Page 147: 06 CFL 프로그래밍 - t1.daumcdn.net

147 MJU CE C Language Programming

과제: 연말 정산 프로그램 연말 세금 계산 프로그램을 작성하라. 총 수입에서 공제액을 뺀 액수를 과세 대상 소득이라 하고, 과세 대상

소득에 세율을 적용한 것이 세금이다. 단, 세율은 단순 세율이 아니고 누진세이다. (즉 많이 번 사람은 높은 비율로 세금을 낸다.) 입력 데이터는: 올해의 소득, 부양가족 수, 신용카드 사용액, 의료비 지출, 기부금 순서로 만 단위 정수로 입력한다.

공제 내역은 다음과 같다. 본인 공제 100만원, 부양 가족 1인당 100씩 공제 신용카드는 1000만원을 초과하는 경우에만 초과 분의 10%를 공제 의료비는 수입의 5%를 초과하는 경우에만 의료비 전액 공제 기부금은 전액 공제 공제액이 소득액을 넘으면 세금은 0원

과세대상소득액 1000 이하에 대해서는 1% 1000 초과분 2000이하에 대해서는 3 % 2000 초과분 3000이하에 대해서는 10 % 3000 초과분은 20 %를 적용한다.

출력: 각 항목별 공제액(부양가족 공제, 신용카드공제, 의료비 공제 순서) 과세 대상 소득액 , 총 세금액

Page 148: 06 CFL 프로그래밍 - t1.daumcdn.net

:: text 10장, 11장반복 구조

10,11

Page 149: 06 CFL 프로그래밍 - t1.daumcdn.net

149 MJU CE C Language Programming

while 반복 구조

Page 150: 06 CFL 프로그래밍 - t1.daumcdn.net

150 MJU CE C Language Programming

while 구조를 이용한 무한 반복

X순환불가

임의순환은프로그램구조를나쁘게만든다.

이조건은항상true이므로...

Page 151: 06 CFL 프로그래밍 - t1.daumcdn.net

151 MJU CE C Language Programming

제한된 반복

5 4 3 2 1 까지만 출력되고 멈추려면 5에서 시작. 어떻게? 매번 n 값을 1 감소. 어떻게? 1까지만 되도록 조건. 어떻게?

Page 152: 06 CFL 프로그래밍 - t1.daumcdn.net

152 MJU CE C Language Programming

while 을 이용한 제한된 반복

Page 153: 06 CFL 프로그래밍 - t1.daumcdn.net

"for"를 이용하면 쉽다

1. 준비(prepare)

2. 계속할조건

3. 다음번반복준비

break는벗어난다는뜻

반복할내용은여기에넣는다.

Page 154: 06 CFL 프로그래밍 - t1.daumcdn.net

while 과 for 비교

154

Page 155: 06 CFL 프로그래밍 - t1.daumcdn.net

155 MJU CE C Language Programming

예제

i=1부터 10 까지에 대해 i의 제곱을 출력

continue를 실행하면"다음"노드로 간다.<<생략가능>>

Page 156: 06 CFL 프로그래밍 - t1.daumcdn.net

"준비"와 "다음"은 비워도 된다.

이 경우 while과차이가 없다.

Page 157: 06 CFL 프로그래밍 - t1.daumcdn.net

157 MJU CE C Language Programming

연습 664

1, 2, 3, …, 10 까지를 출력하는 프로그램을 제한된반복(for)을 이용하여 구현하라.

각 숫자 사이에는 빈 칸을 넣어 준다.

Page 158: 06 CFL 프로그래밍 - t1.daumcdn.net

158 MJU CE C Language Programming

연습 665

정수를 읽어 n에 저장한 뒤 1부터 n 값 까지의 합을 변수 sum에 더하라. (변수 명 지정 필요)

Page 159: 06 CFL 프로그래밍 - t1.daumcdn.net

159 MJU CE C Language Programming

ex666 계차 수열

1, 2, 4, 7, 11 처럼 두 수의 차이가 계속 1씩 증가하는 수열을 출력하되 출력할 값이 100이 넘으면 종료한다.

Hint: 두수의 차이를 나타내는 변수가 필요하다. 반드시 코멘트를 달도록 한다.

Page 160: 06 CFL 프로그래밍 - t1.daumcdn.net

160 MJU CE C Language Programming

연습 667: prime number

어떤 정수를 입력했을 때, 이 정수가 소수인지 아닌지를 판별하는 프로그램을 작성하라. 소수는 1과 자기 자신 이외의 수로는 나누어 떨어지지 않는 수를 말한다.

Hint: 2로 나누어 떨어지는지 확인, 3으로 나누어지는지 확인, … n/2 으로 나누어 떨어지는지 확인. 까지만하면 된다.

예를 들어 99가 소수인지 확인 하려면 최대 49까지만해보면 된다. (왜냐면 50 이상의 수로는 절대로 나누어질 리가 없으니까)

중간에 한번이라도 나누어지면 소수가 아닌 것이고 끝까지 가도 한번도 나누어 떨어진 적이 없으면 소수인것이다.

Page 161: 06 CFL 프로그래밍 - t1.daumcdn.net

::2중, 3중 반복

Page 162: 06 CFL 프로그래밍 - t1.daumcdn.net

162 MJU CE C Language Programming

문제 예시: 2중 반복

입력된 정수의 크기에 맞는 숫자 삼각형을 출력한다. 예를 들어 5를 입력하였다면

1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 처럼 출력하면 된다.

Page 163: 06 CFL 프로그래밍 - t1.daumcdn.net

163 MJU CE C Language Programming

해결책이 못 되는 것

printf "1\n" printf "1 2\n" printf "1 2 3\n" printf "1 2 3 4\n" 반복을 사용할 수가 없다.

Page 164: 06 CFL 프로그래밍 - t1.daumcdn.net

164 MJU CE C Language Programming

쉬운 해결책: 한꺼번에 해결하려 하지 말자.

1부터 1까지 출력 1부터 2까지 출력 1부터 3까지 출력 … 1부터 5까지 출력

Page 165: 06 CFL 프로그래밍 - t1.daumcdn.net

165 MJU CE C Language Programming

작은 덩어리

Page 166: 06 CFL 프로그래밍 - t1.daumcdn.net

166 MJU CE C Language Programming

안으로 집어 넣는다

Page 167: 06 CFL 프로그래밍 - t1.daumcdn.net

167 MJU CE C Language Programming

for 안에 for: 완성

변수명달라야함.

Page 168: 06 CFL 프로그래밍 - t1.daumcdn.net

168 MJU CE C Language Programming

과제 670

정수값 n, k 에 따라 다음과 같은 정수 사각형을 출력하게 하라. n=5, k=3 이라면 답은:

1 2 3 4 5 2 3 4 5 6 3 4 5 6 7

Page 169: 06 CFL 프로그래밍 - t1.daumcdn.net

169 MJU CE C Language Programming

671

입력된 정수의 크기에 맞는 숫자 삼각형을 출력한다. 예를 들어 5를 입력하였다면

5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 처럼 출력하면 된다.

Page 170: 06 CFL 프로그래밍 - t1.daumcdn.net

::간단한 그림 그리기(graphics)

19

Page 171: 06 CFL 프로그래밍 - t1.daumcdn.net

171 MJU CE C Language Programming

Graphics

canvas (혹은 canvas width height) 필요 color 255 0 0 (Red Green Blue: 0 0 0 검은색) drawrect x y width height (erase) fillrect x y width height (erase) 예:

drawrect 10 10 100 100drawrect 10 10 100 100 erasefillrect 200 100 50 50fillrect 200 100 50 50 erase

Page 172: 06 CFL 프로그래밍 - t1.daumcdn.net

172 MJU CE C Language Programming

canvasheight

canvaswidth

xy

Page 173: 06 CFL 프로그래밍 - t1.daumcdn.net

173 MJU CE C Language Programming

도형 그리기 함수

drawoval x y width height (erase) filloval x y width height (erase) drawtext "Hello" x y (erase) drawline x1, y1, x2, y2 (erase) * erase 가 뒤에 붙으면 지우기. 시간 지연: sleep milliseconds

sleep 1000 1초sleep 500 0.5초

Page 174: 06 CFL 프로그래밍 - t1.daumcdn.net

174 MJU CE C Language Programming

연습 문제

크기 10,10 짜리 사각형을 canvas 의 100, 100 위치에서 300,300 위치까지 5간격으로 이동하도록 그려라. 그리고 지우기까기 100ms 간격을 둔다.

Page 175: 06 CFL 프로그래밍 - t1.daumcdn.net

175 MJU CE C Language Programming

연습 문제

작은 공 하나를 캔버스의 위쪽 적당한 곳에 떨어뜨리면일정한 속도로 내려갔다 다시 올라오도록 만들어보라. sleep을 이용해서 적당한 속도로 조절한다.

Page 176: 06 CFL 프로그래밍 - t1.daumcdn.net

176 MJU CE C Language Programming

연습 문제(고급)

작은 공 하나를 캔버스의 위쪽 적당한 곳에 떨어뜨리면자유낙하를 하는 모양으로 내려갔다 다시 올라오도록만들어보라. 인터넷을 찾아서 시간에 따른 낙하 거리를 계산하면 된다. speed = 0.5 gt2

즉, 단위 시간에 이동한 거리는 경과 시간의 제곱에 비례한다. 화면상의 거리는 실거리가 아니므로 보기 좋을 정도로 적당한 비례 상수를 사용하면 된다.

Page 177: 06 CFL 프로그래밍 - t1.daumcdn.net

177 MJU CE C Language Programming

random 함수

random 을 호출하면 임의의 정수가 생긴다. 이것을 적절히 나누어 나머지를 이용하면 원하는 범위

의 정수를 만들어 낼 수가 있다.

Page 178: 06 CFL 프로그래밍 - t1.daumcdn.net

178 MJU CE C Language Programming

연습 문제

canvas 상의 임의의 위치에 가로 100 세로 200인 사각형을 그린다.100개의 임의의 점을 생성하여 (random 이용) 이 사각형 안에 있으면 위치에 작은 원을 그리고 아니면 작은 사각형을 그리도록 한다.

Page 179: 06 CFL 프로그래밍 - t1.daumcdn.net

179 MJU CE C Language Programming

이미지 파일 그리기

* 실행하려면 png 파일이 있는 디렉토리에 cfl 프로그램을 먼저 저장해야 함.

loadimage "파일명" drawimage 번호 x y 지우려면 fillrect로. 이미지 번호는 loadimage

순서로 0,1,2…

Page 180: 06 CFL 프로그래밍 - t1.daumcdn.net

180 MJU CE C Language Programming

연습

두더지가 구멍에서 1초에 한번씩 나왔다 들어갔다를 5번 반복하게 하라.

Hint: sleep(1000) 1초 쉬었다 가기

mole_up.png mole_down.png

Page 181: 06 CFL 프로그래밍 - t1.daumcdn.net

::이벤트(event) 기반 프로그램

21

Page 182: 06 CFL 프로그래밍 - t1.daumcdn.net

182 MJU CE C Language Programming

마우스 이벤트 다루기

순차적 실행이 아님 특정 이벤트가 발생되면 독립적으로 실행

(예: 마우스 클릭)

Page 183: 06 CFL 프로그래밍 - t1.daumcdn.net

183 MJU CE C Language Programming

Event 란?

프로그램의 순차적 실행과 독립적으로 발생하는 사건 Event기반 프로그램이란?

이벤트가 프로그램의 특정 부분을 실행하도록 만들어주어서 일종의 입력 역할을 하게 하는 것.

Page 184: 06 CFL 프로그래밍 - t1.daumcdn.net

184 MJU CE C Language Programming

이벤트의 종류

mousedown, mouseup, keydown, keyup

mousedown x y 마우스 버튼을 눌렀을 때, canvas내에서의 위치가 x y에 저장됨.mouseup x y 마우스 버튼을 뗄 때.

여기에입력하면 이런모양이된다.

Page 185: 06 CFL 프로그래밍 - t1.daumcdn.net

185 MJU CE C Language Programming

이벤트의 종류

mousedown, mouseup, keydown, keyup

연결되어있지않음에유의하자.

Page 186: 06 CFL 프로그래밍 - t1.daumcdn.net

186 MJU CE C Language Programming

주의사항

키의 코드 값은 대문자로 비교해야함. if ( c == 'A' ) OK if ( c =='a' ) NOT OK

Page 187: 06 CFL 프로그래밍 - t1.daumcdn.net

187 MJU CE C Language Programming

데모:

simplemouse

Page 188: 06 CFL 프로그래밍 - t1.daumcdn.net

188 MJU CE C Language Programming

과제

캔버스 안의 적당한 곳에 4각형을 그린다. (이 위치를기억시켜야 한다.)

마우스가 4각형 밖을 클릭하면 점수를 1점 빼고4각형 안을 클릭하면 1점을 더하도록 한다.

점수를 나타내는 변수는 알아서 지정하고 코멘트로기록해 둔다. 초기 점수는 0점으로 둔다.

Page 189: 06 CFL 프로그래밍 - t1.daumcdn.net

189 MJU CE C Language Programming

623번 과제: 두더지 한마리 잡기

두더지 한마리를 적절한 위치에 그리고(mole_up.png - 크기는 100x110)

10초안에 클릭하면 mole_hit.png를 그리고 10초가지나면

클릭해도 소용없게 만들고, 그림을 mole_down.png로 바꾸어라.

Page 190: 06 CFL 프로그래밍 - t1.daumcdn.net

190 MJU CE C Language Programming

실습

캔버스 내의 임의의 위치에 작은 사각형을 1초에 하나씩 만들어서 10개가 되면 멈추도록 한다.

Page 191: 06 CFL 프로그래밍 - t1.daumcdn.net

191 MJU CE C Language Programming

게임 만들기: 두더지 잡기

캔버스 상의 9개의 정해진 위치 중 하나에 random하게 두더지를 그린다.

2초 후면 이 두더지는 숨는다. 그리고 다시 위치를 선정해서 튀어나오기를 10회 반복한다.

이때, 두더지가 튀어 나와 있는 동안에 사용자가 마우스를 제 위치에 클릭하면 점수가 1점 오르게 한다.

Page 192: 06 CFL 프로그래밍 - t1.daumcdn.net

::소리 파일 재생하기

20

Page 193: 06 CFL 프로그래밍 - t1.daumcdn.net

193 MJU CE C Language Programming

소리 파일 재생하기

loadsound "wav 파일명" play <번호> ... loadsound 순서대로 0번 부터

* loadsound를 실행하려면 wav 파일이 있는 디렉토리에 cfl 프로그램을 먼저 저장해야함.

Page 194: 06 CFL 프로그래밍 - t1.daumcdn.net

::배열

12

Page 195: 06 CFL 프로그래밍 - t1.daumcdn.net

195 MJU CE C Language Programming

번호의 좋은 점

이름 대신 번호로 지칭 반복 구조를 단순화 할 수 있음.

김선화, 이명진,홍길동,조성민,...

1번부터10번까지완전군장집합!!!

Page 196: 06 CFL 프로그래밍 - t1.daumcdn.net

196 MJU CE C Language Programming

변수 작명의 한계: 예제 1

다섯 명의 성적 중평균보다 작은 수만출력.

Page 197: 06 CFL 프로그래밍 - t1.daumcdn.net

197 MJU CE C Language Programming

변수 작명의 한계: 예제 2

10명이면?

Page 198: 06 CFL 프로그래밍 - t1.daumcdn.net

198 MJU CE C Language Programming

수학에서는...

N

xxni

i2

,1)(

N

xx Ni

i ,1

아래첨자(subscript)

Page 199: 06 CFL 프로그래밍 - t1.daumcdn.net

199 MJU CE C Language Programming

프로그래밍 언어에서는 …

첨자가 붙은 변수를 "배열"이라고 한다.

1X

nX

2X

r[1]

r[2]

r[n]

수학기호 배열기호

Page 200: 06 CFL 프로그래밍 - t1.daumcdn.net

200 MJU CE C Language Programming

CFL array

Page 201: 06 CFL 프로그래밍 - t1.daumcdn.net

201 MJU CE C Language Programming

진짜 장점은 반복 구조

Page 202: 06 CFL 프로그래밍 - t1.daumcdn.net

202 MJU CE C Language Programming

연습 문제: 692

10개의 정수를 읽어서 r배열에 읽은 순서대로 저장한다. (r[0] 부터 r[9]까지 임에 주의)

저장이 끝나면 반대 순서로 전부 출력한다. hint: 다음 예를 실행해 보면 감이 잡힐 것이다.

Page 203: 06 CFL 프로그래밍 - t1.daumcdn.net

203 MJU CE C Language Programming

연습 문제

몇 개일지 알 수 없는 (10개보다 크지는 않다) 정수를읽어서 배열 r에 순서대로 저장한다.

그런 다음 실제 개수를 n에 저장하고 n개 중에서 가장 작은 데이터를 찾아서 출력한다. 또 n개 중에서 가장 큰 데이터를 찾아서 출력한다.

Page 204: 06 CFL 프로그래밍 - t1.daumcdn.net

204 MJU CE C Language Programming

최대치를 맨 끝으로 옮겨보자

10개의 정수를 배열 r에 읽어들인다. (r[0]~r[9]) 함수 movemax n 을 작성해서 호출한다. movemax n 은 n개의 배열 (r[0] ~ r[n-1] 중 가장

큰 것을 r[n-1]로 이동하게 한다. 방법: 인접한 것끼리 비교해서 큰 것이 뒤에 있도록 바

꾼다. 이것을 반복하면 된다. 일단은 r[0]와 r[1] 만바꾼다.

9r[0]

7r[1]

7r[0]

9r[1]

Page 205: 06 CFL 프로그래밍 - t1.daumcdn.net

205 MJU CE C Language Programming

전체를 정렬하자

2개의 인접한 데이터를 비교하여 바꾸어 주는 함수change

N개의 배열 데이터를 비교하여 최대 값을 n-1 위치로보내는 함수 movemax

전체를 정렬하는 함수 sort

Page 206: 06 CFL 프로그래밍 - t1.daumcdn.net

206 MJU CE C Language Programming

Searching

10개의 데이터를 읽어서 배열에 저장한다. 그 다음부터 읽는 데이터는 읽은 후 n 에 저장하고 이

수가 배열에 들어 있는 수인지 아닌지를 확인하여Yes 혹은 No 를 출력하면 된다.

데이터가 더 이상 없으면 종료한다.

Page 207: 06 CFL 프로그래밍 - t1.daumcdn.net

207 MJU CE C Language Programming

연습 658: 데이터의 유무 판별

하나의 정수를 입력하게 하고 데이터가 준비되어 있는경우와 데이터가 없는 경우에 실행 결과가 어떻게 달라지는지를 살펴보고 설명하라.

Page 208: 06 CFL 프로그래밍 - t1.daumcdn.net

208 MJU CE C Language Programming

연습 문제: 659

여러 개의 정수를 입력하여 각 정수마다 2를 곱하여 출력하되 데이터가 더 이상 없으면 "끝"이라고 출력한다.

예를 들어 2 3 6 8 이 입력되었다면 4 6 12 16 끝 이렇게 출력하면 된다. 출력 수 사이에는 빈칸을 두도록 하자.

Page 209: 06 CFL 프로그래밍 - t1.daumcdn.net

209 MJU CE C Language Programming

연습: 660

입력된 정수가 홀수 인지 짝수인지를 출력하는 프로그램을 작성하라. 여러 개의 정수가 입력되는 대로 출력하되 더 이상 입력이 없으면 "끝"이라고 출력하고 마친다.

Page 210: 06 CFL 프로그래밍 - t1.daumcdn.net

210 MJU CE C Language Programming

Page 211: 06 CFL 프로그래밍 - t1.daumcdn.net

211 MJU CE C Language Programming

작은 정수

int i 대신에 char i로 데이터 유형을 바꿔본다. i = 257 을 실행해본다. i = 128을 실행해 본다. i = 127을 실행해 본다.

Page 212: 06 CFL 프로그래밍 - t1.daumcdn.net

212 MJU CE C Language Programming

Page 213: 06 CFL 프로그래밍 - t1.daumcdn.net

213 MJU CE C Language Programming

Bits view

257을 복사

0000....0000000100000001

00000001

int

char

0000....0000000000000001

Page 214: 06 CFL 프로그래밍 - t1.daumcdn.net

214 MJU CE C Language Programming

128은 왜?

00000000 --> 0 00000001 --> 1 00000010 ... 01111111 --> 127 10000000 --> -128 10000001 --> -127 10000010 --> -126 ... 11111111 --> -1

Page 215: 06 CFL 프로그래밍 - t1.daumcdn.net

::CFL 함수

16

Page 216: 06 CFL 프로그래밍 - t1.daumcdn.net

216 MJU CE C Language Programming

함수란?

동일한 일을 여러 번 할 때 필요 예: 세 개의 수의 평균을 구하는 함수.

Page 217: 06 CFL 프로그래밍 - t1.daumcdn.net

CFL functions: 동일한 일만 하는 경우

217

Page 218: 06 CFL 프로그래밍 - t1.daumcdn.net

218 MJU CE C Language Programming

함수의 특징

외부와 연결이 없다. 함수 이름으로 호출해야 한다. "return"으로 돌아간다.

218

Page 219: 06 CFL 프로그래밍 - t1.daumcdn.net

호출하기

입력중 입력후

Page 220: 06 CFL 프로그래밍 - t1.daumcdn.net

Step과 Next 차이

s1s2

s3s4

n1

n2

Next 는 함수 안에서 멈추지 않는다.

Page 221: 06 CFL 프로그래밍 - t1.daumcdn.net

221 MJU CE C Language Programming

677 (CFL)

자신의 이름과 줄 바꿈을 한번 출력하는 함수call_me 를 작성하고 2 번 호출한다.

Page 222: 06 CFL 프로그래밍 - t1.daumcdn.net

Parameter를 전달받아서 일하는 경우

222

formal parameter

actual parameter

Page 223: 06 CFL 프로그래밍 - t1.daumcdn.net

223 MJU CE C Language Programming

CFL 파라메터의 특징 1

상수 혹은 변수로만 작성할 것 fun a 123 Okay fun a+b+ x cos y 안됨.

* 필요하면 여러 단계로:y = a + b + xz = cos yfun y z

223

Page 224: 06 CFL 프로그래밍 - t1.daumcdn.net

224 MJU CE C Language Programming

파라메터의 특징

함수는 실질 파라메터의 값을 변경하지 못한다.

224

이러한호출방식을 "Call by value"혹은 "값에의한호출"이라고한다. 배열은이방식을

따르지않는다.

Page 225: 06 CFL 프로그래밍 - t1.daumcdn.net

225 MJU CE C Language Programming

ex677에 추가

파라메터로 주어진 정수와 그의 제곱을 출력하는 함수sq_print 를 작성하고 main에서는 scanf로 읽은 정수를 이용하여 호출하여보라.

출력 예시: 3 의 제곱은 9입니다.

Page 226: 06 CFL 프로그래밍 - t1.daumcdn.net

226 MJU CE C Language Programming

3. 정수 값의 반환하는 함수

반환값(return value)

Page 227: 06 CFL 프로그래밍 - t1.daumcdn.net

함께 써도 된다.

Page 228: 06 CFL 프로그래밍 - t1.daumcdn.net

228 MJU CE C Language Programming

float의 반환

Page 229: 06 CFL 프로그래밍 - t1.daumcdn.net

229 MJU CE C Language Programming

그냥 이렇게 쓰면 안되나?

생각해보기

Page 230: 06 CFL 프로그래밍 - t1.daumcdn.net

230 MJU CE C Language Programming

연습 679 원의 면적

원의 지름을 전달하면 면적을 계산하여 돌려주는 함수circle 을 작성하고 이를 이용하여 면적을 계산하여 출력한다. 원하는 지름은 scanf로 받아들인다.* 주의1: 전달 받은 수가 반지름이 아닌 지름이다.* 주의2: 원주율은 3.14로 한다. 반환 값은 float이므로 주의.

Page 231: 06 CFL 프로그래밍 - t1.daumcdn.net

231 MJU CE C Language Programming

파라메터의 특징

같은 변수를 써도 함수 호출시의 값은 종료시 없어짐 (데모)

Page 232: 06 CFL 프로그래밍 - t1.daumcdn.net

232 MJU CE C Language Programming

연습 문제

정수 n 값을 전달하면 1+2+...+n 값을 계산하여 돌려주는 함수 sum을 작성하고

sum 5 sum 10 sum 100 을 호출해서 각각 결과를 출력한다.

Page 233: 06 CFL 프로그래밍 - t1.daumcdn.net

233 MJU CE C Language Programming

정수를 파라메터로 주면 이 정수가 소수인지(prime number) 확인하여 소수이면 1을 돌려주고 아니면 0을 돌려주는 함수 "prime"을 만들고, 이를 이용하여키보드에서 입력된 정수가 소수인지 아닌지 확인하여"소수" 혹은 "소수 아님"으로 출력하게 하라.

Page 234: 06 CFL 프로그래밍 - t1.daumcdn.net

:: For FunLED 가지고 놀기

23

Page 235: 06 CFL 프로그래밍 - t1.daumcdn.net

235 MJU CE C Language Programming

Line형 LED 만들기

canvas 먼저 생성 led k 150 150

k 가 제어 변수. 위치 150x150 k 의 아래쪽 8비트의 값에 따라 켜지고 꺼짐.

Page 236: 06 CFL 프로그래밍 - t1.daumcdn.net

236 MJU CE C Language Programming

Shift 연산

c = 5 // 00000101 c = c << 2 // 2비트 좌로 이동 00010100 c = c >> 1 // 1비트 우로 이동 00001010

Page 237: 06 CFL 프로그래밍 - t1.daumcdn.net

237 MJU CE C Language Programming

연습

LED하나를 생성하여 최초에 맨 오른쪽에 하나만 켜지게 하고 1초마다 켜진 LED가 하나씩 우측으로 이동하게 하여 맨 왼쪽까지 옮긴다.

Page 238: 06 CFL 프로그래밍 - t1.daumcdn.net

238 MJU CE C Language Programming

7-segment LED

Page 239: 06 CFL 프로그래밍 - t1.daumcdn.net

239 MJU CE C Language Programming

LED 7-segment 다루기

seven segment LED "led7 p 700 100" 700 100 위치에 LED가 생기

고 p 변수의 2진수 값에 따라서 LED가 켜진다.

11101100

④ ⑤

⑥⑦

쓰레기값

Page 240: 06 CFL 프로그래밍 - t1.daumcdn.net

240 MJU CE C Language Programming

비트에서 정수로 바꾸기

2진수 10진수로 계산해도 되기는 됨. 그보다는 8진수나 16진수가 편리함 예: 10100011 10 100 011 0243

k = 0243 첫숫자가 0이면8진수라는뜻.

Page 241: 06 CFL 프로그래밍 - t1.daumcdn.net

241 MJU CE C Language Programming

연습

LED7 을 이용하여 0 과 1이 교대로 깜빡이도록 만들라.

Page 242: 06 CFL 프로그래밍 - t1.daumcdn.net

242 MJU CE C Language Programming

프로젝트

두자리수의 LED timer 를 만들자. 초기 값(100 미만)을 주고 호출하면 1초마다 수를 줄

이고, 0이 되면 알람 소리를 울리도록 해보자. 1단계: 0~9 까지의 수를 표시하는 값을 배열

s[0]~s[9]에 만들어 넣어둔 다음 테스트한다. 정수를0~9까지 변경시키면서 하나의 LED에 제어변수를s[0]~s[9]까지 변경시키면서 테스트해본다.

2단계: 2자리의 LED를 만들려면 두개의 정수를 대응시키고 일정시간 마다 값을 증가시킬 수 있도록 한다.

Page 243: 06 CFL 프로그래밍 - t1.daumcdn.net

243 MJU CE C Language Programming

단원 요구사항

플로우차트의 일반적인 개념을 알고 프로그램 아이디어를 플로우차트로 설명할 수 있어야 한다.

CFL을 실행하고 사칙 연산과 복제 연산을 이용하여 복잡한 정수 계산을 단계별로 나누어 CFL로 작성하여 실행할 수 있어야 한다.

Page 244: 06 CFL 프로그래밍 - t1.daumcdn.net

::재귀적 함수(recursion)

18

Page 245: 06 CFL 프로그래밍 - t1.daumcdn.net

245 MJU CE C Language Programming

단어의 뜻

recur: 되돌아가다, 반복되다. recursive : 반복되는 (recursive function call) recursion: 재귀 재귀 再歸 : 다시 돌아가다

Page 246: 06 CFL 프로그래밍 - t1.daumcdn.net

246 MJU CE C Language Programming

함수는 자기 자신의 clone을 호출할 수 있다

"치키치키 차카차카... 펑 !"

한마리는내가처치할테니나머지는니가알아서해! 알았어.

Page 247: 06 CFL 프로그래밍 - t1.daumcdn.net

247 MJU CE C Language Programming

복사본도 또 복사를...

한마리는내가처치할테니나머지는니가알아서해!

알았어."치키치키차카차카.."한마리는내가처치할테니나머지는니가알아서해!

펑!

알았어.

Page 248: 06 CFL 프로그래밍 - t1.daumcdn.net

248 MJU CE C Language Programming

Recursion (재귀호출)

Stack top (최근에생긴activation record)

Stack bottom

호출

호출

호출 결과반환

결과반환

결과반환

Page 249: 06 CFL 프로그래밍 - t1.daumcdn.net

249 MJU CE C Language Programming

호출 상태는 우측에 보인다.

첫호출직후

재귀호출직전

재귀호출직후

Page 250: 06 CFL 프로그래밍 - t1.daumcdn.net

250 MJU CE C Language Programming

실습

임의의 void 함수를 만들어 그 안에서 자신을 또다시호출하게 해보라.

함수의 내부에서는 먼처 "치키치키"를 출력하고 그다음에 자기 자신을 호출하는 노드를 만든다. 일괄 실행하면 끝나지 않으므로 단계별로 실행하면서

몇 단계만 관찰해본다.

Page 251: 06 CFL 프로그래밍 - t1.daumcdn.net

:: 쓸모 있는 재귀 호출을 이용하자.무한 호출을 방지하고

Page 252: 06 CFL 프로그래밍 - t1.daumcdn.net

252 MJU CE C Language Programming

파라메터가 있는 함수를 재귀 호출

최초에 파라메터를 5로 준다. 함수에서는 받은 파라메터 값 먼저 출력한다. 출력 예시: 5마리 할당 받았습니다. 다시 같은 파라메터로 자신의 clone을 호출한다.

그후 파라메터 값을 1 감소 시키고, 새로운 값(1 줄어든) 값을 파라메터로 주어 자신의

clone을 호출한다.

Page 253: 06 CFL 프로그래밍 - t1.daumcdn.net

253 MJU CE C Language Programming

파라메터를 변경하여 호출

최초에 파라메터를 5로 준다. 함수에서는 받은 파라메터 값 먼저 출력한다. 출력 예시: 5마리 할당 받았습니다. 그후 파라메터 값을 1 감소 시키고, 새로운 값(1 줄어든) 값을 파라메터로 주어 자신의

clone을 호출한다.

Page 254: 06 CFL 프로그래밍 - t1.daumcdn.net

254 MJU CE C Language Programming

호출의 종료

if 를 이용하여 받은 마리수가 1이면 출력만 하고재귀 호출은 하지 않는다.

즉, 받은 파라메터가 1보다 큰 경우만 재귀 호출한다. 재귀 호출이 없는 경우는 process 노드에서 return을

해준다.

Page 255: 06 CFL 프로그래밍 - t1.daumcdn.net

255 MJU CE C Language Programming

반환 값을 이용

return 반환 값을 이용하여 1부터 n 까지 재귀 호출을이용하여 더하는 함수를 작성하고

main에서 두번 호출하여 결과를 출력해본다.

m = add 10 printf m m = add 5 print m

Page 256: 06 CFL 프로그래밍 - t1.daumcdn.net

256 MJU CE C Language Programming

재귀의 핵심은 재귀적 문제 정의

1+2+3+…+n 을 구하는 방법은"문제를 잘 쪼개는 것"

1 + 2 + 3 + … (n-1) + n 로 정의 되니까

나는 + n 만 돌려주면 된다.

Page 257: 06 CFL 프로그래밍 - t1.daumcdn.net

재귀 호출의 개념도

Page 258: 06 CFL 프로그래밍 - t1.daumcdn.net

258 MJU CE C Language Programming

좋은 함수와 나쁜 함수(1)

좋은 함수: 파라메터와 반환값 만을 사용 나쁜 함수: 파라메터가 아닌 변수를 함수가 사용

demo: bad_function

Page 259: 06 CFL 프로그래밍 - t1.daumcdn.net

259 MJU CE C Language Programming

좋은 함수와 나쁜 함수 (2)

결과 값을 반환하지 않고 함수가 처리 함수의 유용성이 떨어짐 결과는 반환 값으로 받아서 주 함수에서 처리함이 좋다 예) 두 수의 최대값을 반환하는 함수:이를 이용하여 4개 수의 최대값을 구해서 사용할 수 있다.

두 수의 최대값을 출력하는 함수:출력 이외에 다른 용도로 쓸 수 없다.

Page 260: 06 CFL 프로그래밍 - t1.daumcdn.net

260 MJU CE C Language Programming

좋지 않은 재귀의 사용 예

demo: bad_recursion

Page 261: 06 CFL 프로그래밍 - t1.daumcdn.net

261 MJU CE C Language Programming

좋은 재귀

add n의 값은n이 0이면 0이고0보다 크면n-1까지의 합에n을 더한 것이다.

즉, n + add(n-1)

demo: good_recursion

Page 262: 06 CFL 프로그래밍 - t1.daumcdn.net

262 MJU CE C Language Programming

연습 문제

Mr. 손은 혼자서는 여러마리의 요괴를 싸워서 이기지못한다. 재귀 함수로 자기 자신의 분신을 호출해서 요괴를 처리하도록 만들어보자.

파라메터 n 은 요괴의 마리수이다. n값이 0이면 아무 일 하지 않고 돌아간다(return) n>0 이면 "한마리 처치"를 출력하고,

자기 분신을 호출하는 데, 파라메터 값으로 n-1을 준다.

main에서는 sohn 5 로 호출해서 단계별로 실행되는것을 살펴보고 결과를 확인하라.

Page 263: 06 CFL 프로그래밍 - t1.daumcdn.net

::CFL 끝.