C 프로그래밍.

Slides:



Advertisements
Similar presentations
제6장 조건문.
Advertisements

데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제2장 제어문과 함수.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
C 개론 정리.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
-Part3- 제5장 전처리기와 파일 분할 컴파일
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
Chapter 06. 선택문.
Chapter 13 변수 범위.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 10 함수 기본.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
쉽게 풀어쓴 C언어 Express 제15장 전처리 및 비트연산 C Express Slide 1 (of 29)
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
Chapter 11. 배열과 포인터.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
#1 배열 활용 #include 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.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
-Part1- 제6장 자료형이란 무엇인가.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
printf("Global Korea\n");
개정판 누구나 즐기는 C언어 콘서트 제3장 변수와 자료형 출처: pixabay.
Chapter 09. 배열.
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
11장. 1차원 배열.
Presentation transcript:

C 프로그래밍

-Part1- 제9장 함수란 무엇인가

학습목차 9.1 함수란 9.2 다양한 형태의 함수들 9.3 함수 적용 방법 9.4 변수의 종류와 범위 9.5 재귀 함수

9.1 함수란

9.1 함수란 함수 특정 작업을 수행하는 코드의 집합 함수의 종류 표준 라이브러리 함수 C 언어에서 제공 사용자 정의 라이브러리 함수 사용자가 직접 만든 함수 함수 사용의 장점 코드의 안정성 향상 에러 수정이 쉬움 재사용성 향상 복잡성↓, 응집력↑

9.2 다양한 형태의 함수들

9.2 다양한 형태의 함수들 (1/7) 함수의 기본요소 입력 형태 : 함수가 입력 받을 형태 함수 이름 : 함수의 이름을 표현 출력 형태 : 함수의 출력을 나타내 함수의 기능 : 함수가 수행할 기능 정의

9.2 다양한 형태의 함수들 (2/7)

사례: 음료 자판기

9.2 다양한 형태의 함수들 (3/7)---[9-1.c 실습] #include <stdio.h> int sum(int x, int y) { int result=0; result=x+y; return result; } int main(void) int answer = 0; answer=sum(3, 4); printf("%d \n", answer); return 0;

9.2 다양한 형태의 함수들 (4/7) 함수의 형태 4가지 – 11 형태 출력 형태 있음(int)  1 입력 형태 있음(int x, int y)  1 해석 x, y를 입력 받아 sum() 함수의 기능을 처리하고 int형으로 출력 특이점 출력 형태가 있어서 함수 내에서 반드시 return문을 사용해야 함

9.2 다양한 형태의 함수들 (5/7) 함수의 형태 4가지 – 10 형태 출력 형태 있음(int)  1 입력 형태 없음(void)  0 해석 입력 받는 값 없이 input() 함수의 기능을 처리하고 int형으로 출력 특이점 출력 형태가 있어서 함수 내에서 반드시 return문을 사용해야 함

9.2 다양한 형태의 함수들 (6/7) 함수의 형태 4가지 – 01 형태 출력 형태 없음(void)  0 입력 형태 있음(int x)  1 해석 값 하나를 입력받아 print() 함수의 기능을 처리하고 출력은 하지 않음 특이점 출력 형태가 void이므로 함수 내에서 return 문이 없어도 됨

9.2 다양한 형태의 함수들 (7/7) 함수의 형태 4가지 – 00 형태 출력 형태 없음(void)  0 입력 형태 해석 입력 없이 output() 함수의 기능을 처리하고 출력은 하지 않음 특이점 출력 형태가 void이므로 함수 내에서 return 문이 없어도 됨

9.3 함수 적용 방법 (2/11) 함수 적용 방법 1 함수의 정의 함수의 기능을 정의한 문장 함수의 정의 함수의 기능을 정의한 문장 함수의 호출 정의한 함수를 호출 하는 문장 첫 번째 방법 함수의 정의 함수의 호출

9.3 함수 적용 방법 (3/11)

9.3 함수 적용 방법 (4/11)---[9-2.c 실습] #include <stdio.h> int max(int a, int b) // 함수의 정의(11 형태) { if(a > b) return a; else return b; } int main(void) int i, j; int k; printf("숫자 두 개를 입력하세요: "); scanf("%d %d", &i, &j); k = max(i, j); //함수의 호출 printf("%d와 %d 중 큰 수는 %d입니다. \n", i, j, k); return 0;

9.3 함수 적용 방법 (1/11) 함수 적용 방법 2가지 첫 번째 방법 함수의 정의 함수의 호출 두 번째 방법 함수의 선언

9.3 함수 적용 방법 (5/11) 함수의 정의 함수의 호출

9.3 함수 적용 방법 (6/11) 함수의 호출 함수의 정의

9.3 함수 적용 방법 (7/11) 함수 적용 방법 2 함수의 선언 함수의 목록이 있는 문장 함수의 선언 함수의 목록이 있는 문장 함수의 호출 정의한 함수를 호출 하는 문장 함수의 정의 함수의 기능을 정의한 문장 두 번째 방법 함수의 선언 함수의 호출 함수의 정의

9.3 함수 적용 방법 (8/11) 함수의 선언 함수의 호출 함수의 정의

9.3 함수 적용 방법 (9/11) 함수의 선언 함수 적용에 있어서 일반적인 방법 함수 목록들을 직관적으로 볼 수 있다 대략적으로 함수의 기능 분석 가능

9.3 함수 적용 방법 (10/11)---[9-3.c 실습(1/2)] #include <stdio.h> double divide(double x, double y); // 함수의 선언(11 형태) double input(void); // 함수의 선언(10 형태) void output(double x); // 함수의 선언(01 형태) void information(void); // 함수의 선언(00 형태) int main(void) { double num1, num2, result; information( ); // 함수의 호출(00 형태) printf("첫 번째 실수 입력: "); num1=input( ); // 함수의 호출(10 형태) printf("두 번째 실수 입력: "); num2=input( ); // 함수의 호출(10 형태) result=divide(num1, num2); // 함수의 호출(11 형태) output(result); return 0; }

9.3 함수 적용 방법 (11/11)---[9-3.c 실습(2/2)] double divide(double x, double y) // 함수의 정의(11 형태) { double val; val=x/y; return val; } double input(void) // 함수의 정의(10 형태) scanf("%lf", &val); void output(double x) // 함수의정의(01 형태) printf("나눗셈 결과: %lf \n", x); return; void information(void) // 함수의정의(00 형태) printf("--- 프로그램 시작 ---\n");

9.4 변수의 종류와 범위

9.4 변수의 종류와 범위 (1/22) 지역 변수(Local Variable) 전역 변수(Global Variable) 정적 변수(Static Variable) 외부 변수(Extern Variable) 레지스터 변수(Register Variable)

9.4 변수의 종류와 범위 (2/22) 지역 변수(Local Variable) 사용 범위 함수 내부에서 사용 조건문 또는 반복문의 중괄호({ }) 내부에서 사용 함수의 매개 변수(Parameter) 즉, 함수의 입력 변수로 사용

9.4 변수의 종류와 범위 (3/22) 지역적으로 전혀 다른 지역 변수

9.4 변수의 종류와 범위 (4/22)---[9-5.c 실습] #include <stdio.h> void func_A (void); int main(void) { int aaa=10; // main( ) 함수의 지역변수aaa printf("main( ) 함수의 aaa 값: %d\n", aaa ); func_A( ); return 0; } void func_A(void) int aaa=20; // func_A( ) 함수의 지역변수 aaa int bbb=30; // func_A( ) 함수의 지역변수 bbb printf("func_A( ) 함수의 aaa 값: %d\n", aaa ); printf("func_A( ) 함수의 bbb 값: %d\n", bbb ); return ;

9.4 변수의 종류와 범위 (5/22) { }(중괄호)지역을 빠져나가면 메모리가 자동으로 소멸

9.4 변수의 종류와 범위 (6/22)---[9-6.c 실습] #include <stdio.h> int main(void) { int i=0; // int total=0; for(i=1; i<3; i++) int total=0; // 지역변수total 선언 total=total+i; } if(total<10) // 에러발생 printf("total 값은 %d입니다.\n", total); return 0;

9.4 변수의 종류와 범위 (7/22)---[9-7.c 실습] #include <stdio.h> int subtract(int x, int y); // 함수의 선언(11 형태) int main(void) { int a=5, b=3; int result=0; result=subtract(a, b); // 함수의 호출 printf("뺄셈결과: %d \n", result); return 0; } int subtract(int x, int y) // 함수의 정의 return x-y;

9.4 변수의 종류와 범위 (8/22)

9.4 변수의 종류와 범위 (9/22) 지역 변수의 특징 정리 초기화를 하지 않으면 쓰레기 값이 저장됨 지역 변수의 메모리 생성 시점: 중괄호 내에서 초기화할 때 지역 변수의 메모리 소멸 시점: 중괄호를 탈출할 때

9.4 변수의 종류와 범위 (10/22) 전역 변수(Global Variable) 사용 범위 중괄호({ }) 외부에서 사용

9.4 변수의 종류와 범위 (11/22)---[9-8.c 실습] #include <stdio.h> int num; // 전역변수선언, 초기화하지 않아도 0 설정 void grow(void); int main(void) { printf("함수 호출 전num : %d \n", num); // 0 출력 grow( ); // 함수 호출 printf("함수 호출 후 num : %d \n", num); return 0; } void grow(void) num=60; // 전역변수 num의 값 변경

9.4 변수의 종류와 범위 (12/22) 전역 변수의 특징 초기화를 하지 않아도 자동으로 0 설정 전역 변수의 메모리 생성 시점: 프로그램이 시작될 때 전역 변수의 메모리 소멸 시점: 프로그램이 종료될 때

9.4 변수의 종류와 범위 (13/22) static int num; 정적 변수(Static Variable) 프로그램이 종료되지 않는 한 메모리가 소멸되지 않음 초깃값을 지정하지 않아도 자동으로 0을 가짐 프로그램이 시작되면 초기화는 딱 한 번만 수행 static int num;

9.4 변수의 종류와 범위 (14/22)---[9-9.c 실습] #include <stdio.h> void count(void); int main(void) { count( ); return 0; } void count(void) static int x=0; // 정적 변수, 초기화를 한 번만 수행 int y=0; // 지역 변수, 초기화를 매 번 수행 x=x+1; y=y+1; printf("x 값: %d, y 값: %d \n", x, y); ‘정적 변수는 중괄호가 있는 지역에서 전역 변수의 기능이 필요할 때 사용한다.’

9.4 변수의 종류와 범위 (15/22) 정적 변수의 특징 초기화를 하지 않아도 자동으로 0 설정 초기화는 한 번만 수행 정적 변수의 메모리 생성 시점: 중괄호 내에서 초기화될 때 정적 변수의 메모리 소멸 시점: 프로그램이 종료될 때

9.4 변수의 종류와 범위 (16/22) 외부 변수 외부 파일에 선언된 변수를 참조하는 변수 자료형 앞에 extern 키워드를 사용 다른 파일(외부)에 있는 전역 변수를 참조

9.4 변수의 종류와 범위 (17/22)

9.4 변수의 종류와 범위 (18/22)

9.4 변수의 종류와 범위 (19/22) 특정 전역 변수를 외부에서 참조 못하게 하려면? static 키워드를 사용

9.4 변수의 종류와 범위 (20/22) 레지스터 변수(Register Variable) CPU 내부의 레지스터에 변수를 할당하는 변수 처리속도가 빠름

9.4 변수의 종류와 범위 (21/22)---[9-10.c 실습] #include <stdio.h> #include <time.h> // 연산 속도 측정을 위해 clock( ) 함수 사용 #define MAX 1000000 // 백만을 상수화 int main(void) { register int i; // int i; clock_t startTime, endTime, result; startTime=clock( ); // startTime : 측정 시작 for (i=0; i<=MAX; i++) printf("%d\n", i); } endTime=clock( ); // endTime : 측정 완료 result=endTime-startTime; // 연산 속도 printf("레지스터 변수 속도: %lf초 \n", (double)result/1000); return 0;

9.4 변수의 종류와 범위 (22/22) 프로세스의 메모리 구조 코드 영역 : 프로그램의 실행 코드 또는 함수들이 저장되는 영역 스택 영역 : 매개 변수 및 중괄호(블록) 내부에 정의된 변수들이 저장되는 영역 데이터 영역 : 전역 변수와 정적 변수들이 저장되는 영역 힙 영역 : 동적으로 메모리 할당하는 변수들이 저장되는 영역

9.5 재귀 함수

9.5 재귀 함수 (1/5) 재귀 함수(Recursive Function) 함수 내에서 자기 자신을 호출하는 함수 재귀 호출(Recursive Call) : 자기 자신을 호출하는 행위 재귀 호출의 문제점 시간과 메모리 공간의 효율이 저하  개발에 신중해야 함

9.5 재귀 함수 (2/5)---[9-11.c 실습] #include <stdio.h> void self_service(void); // 함수의 선언(00 형태) int main(void) { self_service( ); // 함수의 호출 return 0; } void self_service(void) // 함수의 정의 printf("셀프서비스\n"); self_service( );

9.5 재귀 함수 (3/5)---[9-12.c 실습] #include <stdio.h> void self_service(void); int main(void) { self_service( ); return 0; } void self_service(void) static int i=1; // int i=1; if(i>5) // 함수의 ‘무한 반복 문제’를 해결하는 조건 return; // 값을 반환하지 않고 그냥 함수를 종료 printf("셀프서비스 %d 회 \n", i); i=i+1;

9.5 재귀 함수 (4/5)---[9-13.c 실습] #include <stdio.h> void self_service(int n); int main(void) { int a=1; self_service(a); return 0; } void self_service(int n) if(n>5) return; printf("셀프서비스 %d 회 \n", n); self_service(n+1); // n을 하나 증가해서 self_service( ) 함수 재귀 호출

9.5 재귀 함수 (5/5)---[9-14.c 실습] #include <stdio.h> int factorial(int n); int main(void) { int a; int result; printf("정수입력: " ); scanf("%d", &a); result=factorial(a); printf( "%d 팩토리얼은: %d입니다. \n", a, result); return 0; } int factorial(int n) // 함수의 정의 if (n<=1) return 1; else return n * factorial(n-1);

수고 하셨습니다