1 / 15

의문점

의문점. 함수를 왜 쓰나요 . main() 안에 다 때려 넣으면 편한데 … 정말 그렇군요 . 프로토타입도 만들어야되고 반환 규칙 , 매개변수를 귀찮게 정해야되며 프로그램이 어디서 어떻게 흐르는지 헷갈리게 하는 함수를 일부러 만들어 쓰는거 같군요 . 다음 소스코드를 봅시다. void main(){ printf(“ 나는 도대체 함수를 왜 쓰는지 모르겠다 .<br>”); }. 이 코드가 어떤 동작을 일으키는지 아직도 모르는 학생은 없겠죠 . 물론 자신있게 말할 겁니다 . 이렇게요 .

Download Presentation

의문점

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 의문점 • 함수를 왜 쓰나요.main()안에 다 때려 넣으면 편한데… • 정말 그렇군요. 프로토타입도 만들어야되고 반환 규칙, 매개변수를 귀찮게 정해야되며프로그램이 어디서 어떻게 흐르는지 헷갈리게 하는 함수를 일부러 만들어 쓰는거 같군요. • 다음 소스코드를 봅시다. void main(){ printf(“나는 도대체 함수를 왜 쓰는지 모르겠다.\n”); } • 이 코드가 어떤 동작을 일으키는지 아직도 모르는 학생은 없겠죠. • 물론 자신있게 말할 겁니다. 이렇게요. • 조교님 장난 칩니까. 흥! 저를 뭘로보고 이래뵈도 중간고사까지 치룬 베테랑 1학년생이란 말입니다. 이 프로그램은 printf 함수를 사용해서 “나는 도대체 함수를 왜 쓰는지 모르겠다.\n”라는 문자열을 출력하는것 아닙니까. • 오. 그렇군요. 이렇게 대답 할려고 했던 학생이 있습니까? 있다면 칭찬하고 싶군요. • 그렇습니다. 이 프로그램은 printf라는 함수를 이용해서 매우 간단하게 모니터에 “나는 도대체 함수를 왜 쓰는지 모르겠다.\n”라는 문자열을 출력하는 것입니다. 그런데 함수가 없다면??

  2. 의문점계속 • printf라는 함수가 없다면 main함수에는 어떤 것을 넣어야 할까요? • printf함수가 할 수 있는 일을 넣어야겠죠. • 오 훌륭합니다. 근데 그게 뭐죠? • 음… 문자를 그래픽 카드를 통하여 모니터에 출력하는 것? • 오. 맞습니다. 그럼 그런 기능을 이번 실습시간에 한번 만들어 보도록 할까요? • ㅁ니ㅏ리머랴ㅐㅓㅣㅏㅓㅟ 차라리 방사능 값을 이용한 암석의 나이 구하기가 쉽겠네요. • 이제 함수를 왜 써야 되는지 의문점이 풀렸나요?

  3. 의문점계속 • 함수는 좀더 쉬운 프로그램을 위하여 만들어진 프로그래머의 친구 입니다. • 남이 만들어 놓은 코드들이거나 • 여러 번 구현하기가 쉽지 않은 코드들이거나 • 정말로 자주 사용해야 되는 코드들이거나 • 함수가 있어야겠죠?

  4. 매개변수의 이름?? 매개변수는 함수 만의 것… 다른 함수에서 쓰던 말던 매개변수의 이름은 그 함수 안에서는 자유롭다… 따라서 main함수에서 apple을 썼다고 하더라도 sample 함수의 매개변수의 이름으로 apple을 쓸 수 있다.  다만 main 함수의 apple이 정적변수로 선언되면 안됨. 그리고 main 함수에서 sample에 값을 매개변수를 통하여 전달할때 매개변수 이름이 apple이라고 좌측에 보이는 orange를 apple이라고 할 필요가 없다. int sample(int apple){ return apple++; } void main(){ int orange = 2; sample(orange); }

  5. add1과 half의 prototype add1과 half 정의 prototype.c • 프로토타입 선언후에는 선언한 함수를사용할 수 있다. 실행결과: 정수를 하나 입력하세요. 123 123 의 바로 다음 정수는 124 이고 123 의 반은 61.5 입니다. 제가 맞게 계산했나요 ?

  6. 함수 밖에 있는 변수 • 지역변수(local variable) • 함수 내에 있는 변수 • 함수 내부에서만 볼 수 있음 • 함수가 호출될 때 생성되므로 동적변수(dynamic variable)임 • 비지역변수(nonlocal variable) • 함수 밖에 있는 변수 • 여러 함수에서 볼 수 있음 • 전역변수(global variable): 프로그램 전체에서 볼 수 있음 • 파일범위변수(file scope variable): 같은 파일 내의 함수에서만 볼 수 있음 • 지역변수 • 프로그램이 시작할 때 생성되므로 정적변수(static variable)임

  7. nonlocal.c • 비지역 변수 GX는 세 함수에서 모두 볼 수 있다. • 이렇게 선언된 GX는 전역변수다. • 다른 파일에서 GX를 볼려면externint GX;선언을 해 주어야 한다. 실행결과: [main 에서] GX = 12345 [f 에서] GX = 12345 [g 에서] GX = 12345

  8. nonlocal1.c nonlocal2.c 볼 수 있음 볼 수 없음 파일범위 변수와 전역변수 • 함수 밖에 선언된 변수 중 static으로 선언된 변수 • 파일범위 변수는 전역변수와는 달리 다른 파일에서는 볼 수 없음

  9. count.c • 정적변수 초기화 • 모든 정적변수는 초기화해야 한다. • 초기화하지 않았을 경우엔 0으로 초기화 된다. 지역 정적변수 타입이 생략되었으므로 자동으로 int형이다. 호출 사이에 값이 보존된다. 실행결과: count = 1 count = 2 count = 3 count = 4 count = 5

  10. 변수 분류 • 유효범위(scope): 해당 변수를 볼 수 있는 범위 • 지속시간(lifetime): 변수가 생성과소멸 사이의 시간 지속시간이 길어짐 유효범위가 넓어짐

  11. 재귀함수 • 재귀호출(recursive call) • 어떤 함수가 종료되지 않은 상황에서 자신을 다시 호출하는 것 • 재귀함수(recursive function) • 재귀호출을 이용하는 함수 • 재귀적인 그림 Niklaus Wirth, Algorithms + Data Structures = Programs (발췌)

  12. 계승(factorial) 정의 n ! = n × (n – 1) × … × 1 재귀적인 계승 정의 0 ! = 1 n ! = n × (n – 1) ! fact.c 재귀호출 실행결과: 자연수를 하나 입력하세요: 10 fact(10) = 3628800 입니다.

  13. 재귀 함수 스택 #include <stdio.h> void recursive(int i); void main(){ int i = 0; recursive(i); } void recursive(int i){ if(i == 10) return; i++; recursive(i); printf("%d\n",i); } recursive(5) recursive(4) recursive(3) recursive(2) recursive(1)

  14. 매크로 함수 인수를 받는 매크로 함수와 유사하지만 실제로 함수는 아님 max.c : 매크로 함수 MAX(i, j)는 전처리기를 거치면 (i > j)? i: j 로 확장된다. 실행결과: 두 수를 입력하세요. 2 3 MAX(2, 3) = 3

  15. 실습 • 집의 면적을 구하는 프로그램을 작성하여 보자 • 한 프로그램안에 집의 면적을 구하는 함수를 두 개 구현할 것 • 첫 번째 것은 매개변수를 이용하여 리턴값으로 구해주는 것 • 두 번째 것은 매개변수를 사용하지 않고 정적변수를 사용하는 것 • 시간을 초를 서로 바꾸어 주는 프로그램 • 시간을 초로 바꿀 건지 초를 시간으로 바꿀 건지 선택하도록 함 • 시간을 초로 바꿀 경우의 예 • 입력하는 예(3시간 20분 30초): 3 20 30 • 출력되는 예 : 3시간 20분 30초는 12030초 입니다. • 초를 시간으로 바꿀 경우의 예 • 입력하는 예(12030초): 12030 • 출력되는 예 : 12030초는 3시간 20분 30초 입니다. • 출력을 마치면 시간을 초로 또는 초를 시간으로 바꾸는 것을 선택하는 메뉴로 돌아간다. • 함수를 반드시 쓰되 함수의 역할은 자유롭게 설계하세요.

More Related