SlideShare a Scribd company logo
C언어 세미나
- 함수 -
DDOLGI 15기 이승현
목차
1. 발표자 소개
2. 함수란
3. 함수의 정의
4. 함수의 사용
5. 심화 과정
발표자 소개
• 이승현
• 똘기 15기
• 1991년 3월 6일 생
• 소프트웨어 공학과
• 취미: 웹서핑, 음악감상
함수란?
함수의 개념과 필요성
함수의 개념
• 인수를 전달 받아 일련의 작업을 수행한 뒤 그 결과를 반환하는 문장들의
집합.
• 언어에 따라 메소드(method), 프로시저(procedure) 등으로 불러지기도
한다.
• 간단히 수학에서의 함수를 생각하면 된다.
• C 프로그램은 이러한 함수들이 모여 이루어지게 된다.
F(x)?……!!
함수의 필요성
• 반복되는 작업들을 함수로 작성함으로써 코드의 간략화.
• 간략화된 코드로 인한 가독성 증가.
• 코드의 모듈화를 통한 재사용 용이, 효율성 증대.
• 유지 관리 측면에 많은 이점 제공.
VS
함수의 정의
기본 정의법과 함수 원형 이용
기본 정의법
int add(int a, int b)
{
int result;
result = a + b
return result;
}
반환형
함수 이름 매개 변수
함수 몸체
Q1. 간단한 함수 만들기
• 두 값을 넣으면 큰 값을 반환하는 bigger 함수를 만들어 보라. (단, main 함수는 작성
할 필요 없이, bigger 함수만 작성하도록 한다.)
A1. 간단한 함수 만들기
int bigger(int a, int b)
// 두 개의 int형을 매개변수로 받아 int형을 반환하는 bigger 함수
{
if(a>b) return a; // a가 b보다 크면 a를 반환
else return b; // 그 외의 경우 b를 반환
}
함수 원형 이용(1)
• Q1의 전체 코드
#include <stdio.h>
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
함수 원형 이용(2)
• 함수 원형을 이용한 코드
#include <stdio.h>
int bigger(int a, int b); // 함수원형!
int main(void) // main문이 위로 올라올 수 있다!
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
함수의 사용
함수의 호출과 반환
함수의 호출
• 문법 : (함수명)((매개인자))
• Ex) add(1, 2);
• 매개인자로 넘겨준 데이터를 이용하여 함수 내부의 코드를 실행한다.
Void main()
{
…
add(1, 2);
…
bigger( 2, 3);
…
}
Int add(int a, int b)
{
…
…
}
Int bigger (int a, int b)
{
…
…
}
값의 반환 (1)
• 함수를 통하여 얻어진 값을 반환하려면 ‘return’을 사용하면 된다.
• 또한 반환값은 함수의 반환형과 일치해야 한다.
Int add(int a, int b)
{
return a+b;
}
값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
심화단계
지역변수와 전역변수, 저장 유형 지정자
지역변수 (1)
#include <stdio.h>
int add(int a, int b);
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("result : %dn", add(a, b));
}
int add(int x, int y)
{
int result;
result = x+y;
return result;
}
result 변수의 생존 기간
(add 함수 내에서만 생존!)
a,b 변수의 생존 기간
(add 함수 내에서는 적용되지 않는다!)
지역변수 (2)
각 변수의 생존 기간은??
전역변수
• 전역변수 : 함수 외부에서 선언되어 소스 파일 전체에서 사용되는 변수
#include <stdio.h>
int count = 0;
void main(void)
{
func();
printf(“%dn”, count);
}
void func(void)
{
count++;
}
저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
저장 유형 지정자 (2)
• register : 변수를 메모리가 아닌 CPU 내부의 레지스터에 저장
Ex)
register int i;
for(i=0; i<10000; i++) sum += I;
숙제!
암호화 프로그램의 함수화
1. 지난 세미나 때 만든 암호화 프로그램을 함수화 하세요.
1. 암호화 하는 부분을 함수화 합니다.
2. 평문(char plain[])을 매개 변수로 받아서 암호문(int
chipher[])으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Encrypted(char plain[], char key[], int
chipher[])
암호화 프로그램의 함수화
2. 이번엔 복호화 함수도 만듭니다!
1. 이건 암호화의 역순으로 진행하면 되겠죠?
2. 암호문(int chipher[])을 받아서, 평문(char plain[])
으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Decrypted(int chipher[], char key[],
char plain[],);
암호화 프로그램의 함수화
3. 메인 문에서 기능을 선택해 프로그램을 이용할 수 있도록 하세요.
1. 메뉴는 다음 과 같습니다.
1. 암호화
2. 복호화
3. 프로그램 종료
4. 제출일은 다음 주 토요일 정오, 4월 6일 12:00 까지 입니다!
제출은 dragonznet@naver.com 으로 하세요!
실행화면 - 메뉴
실행 화면 – 1번 메뉴
실행 화면 – 2번 메뉴
실행화면 – 3번 메뉴
Q & A
(숙제 답이 뭔가요,라는 질문은 빼고?)
수고하셨습니다!

More Related Content

What's hot

자료구조05
자료구조05자료구조05
자료구조05
herojoon1378
 
RNC C++ lecture_4 While, For
RNC C++ lecture_4 While, ForRNC C++ lecture_4 While, For
RNC C++ lecture_4 While, For
itlockit
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
HyeonSeok Choi
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
Hyunsoo Jung
 
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
Seok-joon Yun
 
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
Seok-joon Yun
 
[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식
은식 정
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
Jongwook Choi
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
HyeonSeok Choi
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
JinTaek Seo
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
Changwon National University
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Array
itlockit
 
이산수학 C1 프로젝트 3
이산수학 C1 프로젝트 3이산수학 C1 프로젝트 3
이산수학 C1 프로젝트 3pkok15
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기
sung ki choi
 
Ch11
Ch11Ch11
Ch11
Hankyo
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
Circulus
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
HyeonSeok Choi
 
Ch10
Ch10Ch10
Ch10
Hankyo
 

What's hot (20)

자료구조05
자료구조05자료구조05
자료구조05
 
RNC C++ lecture_4 While, For
RNC C++ lecture_4 While, ForRNC C++ lecture_4 While, For
RNC C++ lecture_4 While, For
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
 
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
 
이산수학03
이산수학03이산수학03
이산수학03
 
[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
10th
10th10th
10th
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Array
 
이산수학 C1 프로젝트 3
이산수학 C1 프로젝트 3이산수학 C1 프로젝트 3
이산수학 C1 프로젝트 3
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기
 
Ch11
Ch11Ch11
Ch11
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
Ch10
Ch10Ch10
Ch10
 

Viewers also liked

Terminal de contenedores de buena aventura
Terminal de contenedores de buena aventuraTerminal de contenedores de buena aventura
Terminal de contenedores de buena aventura
hobeth21
 
“ I Had An Awesome Holiday”
“ I Had An Awesome Holiday”“ I Had An Awesome Holiday”
“ I Had An Awesome Holiday”bdeblade
 
University Access Courses (UAC)
University Access Courses (UAC)University Access Courses (UAC)
University Access Courses (UAC)Carel Schoch
 
Truong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
Truong Anh ngu EV - Hoc vien Anh ngu EV - CebuTruong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
Truong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
MYD Vietnam
 
Prancha 01 a 09
Prancha 01 a 09Prancha 01 a 09
Prancha 01 a 09
Sebastião S Belgo
 
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
Carlos Marín Rodríguez
 
Certificado de incentivo forestal
Certificado de incentivo forestalCertificado de incentivo forestal
Certificado de incentivo forestal
jorge alexander arias nuñez
 
Fernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
Fernanda Salles - Projeto de Urbanização da Comunidade Santa MartaFernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
Fernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
WRI Ross Center for Sustainable Cities
 
PubMed avanzado oct_2016a_slideshare
PubMed avanzado oct_2016a_slidesharePubMed avanzado oct_2016a_slideshare
PubMed avanzado oct_2016a_slideshare
Concepción Campos Asensio
 

Viewers also liked (11)

Terminal de contenedores de buena aventura
Terminal de contenedores de buena aventuraTerminal de contenedores de buena aventura
Terminal de contenedores de buena aventura
 
“ I Had An Awesome Holiday”
“ I Had An Awesome Holiday”“ I Had An Awesome Holiday”
“ I Had An Awesome Holiday”
 
University Access Courses (UAC)
University Access Courses (UAC)University Access Courses (UAC)
University Access Courses (UAC)
 
Truong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
Truong Anh ngu EV - Hoc vien Anh ngu EV - CebuTruong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
Truong Anh ngu EV - Hoc vien Anh ngu EV - Cebu
 
0125
01250125
0125
 
2015 Highlights
2015 Highlights2015 Highlights
2015 Highlights
 
Prancha 01 a 09
Prancha 01 a 09Prancha 01 a 09
Prancha 01 a 09
 
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
Métodos estadísticos actualizados_para_el_análisis_de_la_estabilidad_carlos_m...
 
Certificado de incentivo forestal
Certificado de incentivo forestalCertificado de incentivo forestal
Certificado de incentivo forestal
 
Fernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
Fernanda Salles - Projeto de Urbanização da Comunidade Santa MartaFernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
Fernanda Salles - Projeto de Urbanização da Comunidade Santa Marta
 
PubMed avanzado oct_2016a_slideshare
PubMed avanzado oct_2016a_slidesharePubMed avanzado oct_2016a_slideshare
PubMed avanzado oct_2016a_slideshare
 

Similar to C언어 세미나 - 함수

[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
Chris Ohk
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
Chris Ohk
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
Tae Young Lee
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
Kyoungchan Lee
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
arundine
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
Jae-yeol Lee
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
Sang Don Kim
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
QooJuice
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
영욱 김
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
Sungkyun Kim
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
kim HYUNG JIN
 

Similar to C언어 세미나 - 함수 (20)

강의자료 2
강의자료 2강의자료 2
강의자료 2
 
6 function
6 function6 function
6 function
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
 
06장 함수
06장 함수06장 함수
06장 함수
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 

C언어 세미나 - 함수

  • 1. C언어 세미나 - 함수 - DDOLGI 15기 이승현
  • 2. 목차 1. 발표자 소개 2. 함수란 3. 함수의 정의 4. 함수의 사용 5. 심화 과정
  • 3. 발표자 소개 • 이승현 • 똘기 15기 • 1991년 3월 6일 생 • 소프트웨어 공학과 • 취미: 웹서핑, 음악감상
  • 5. 함수의 개념 • 인수를 전달 받아 일련의 작업을 수행한 뒤 그 결과를 반환하는 문장들의 집합. • 언어에 따라 메소드(method), 프로시저(procedure) 등으로 불러지기도 한다. • 간단히 수학에서의 함수를 생각하면 된다. • C 프로그램은 이러한 함수들이 모여 이루어지게 된다. F(x)?……!!
  • 6. 함수의 필요성 • 반복되는 작업들을 함수로 작성함으로써 코드의 간략화. • 간략화된 코드로 인한 가독성 증가. • 코드의 모듈화를 통한 재사용 용이, 효율성 증대. • 유지 관리 측면에 많은 이점 제공. VS
  • 8. 기본 정의법 int add(int a, int b) { int result; result = a + b return result; } 반환형 함수 이름 매개 변수 함수 몸체
  • 9. Q1. 간단한 함수 만들기 • 두 값을 넣으면 큰 값을 반환하는 bigger 함수를 만들어 보라. (단, main 함수는 작성 할 필요 없이, bigger 함수만 작성하도록 한다.)
  • 10. A1. 간단한 함수 만들기 int bigger(int a, int b) // 두 개의 int형을 매개변수로 받아 int형을 반환하는 bigger 함수 { if(a>b) return a; // a가 b보다 크면 a를 반환 else return b; // 그 외의 경우 b를 반환 }
  • 11. 함수 원형 이용(1) • Q1의 전체 코드 #include <stdio.h> int bigger(int a, int b) { if(a>b) return a; else return b; } int main(void) { int a, b; scanf("%d", &a); scanf("%d", &b); printf("n%d is bigger.n", bigger(a, b)); }
  • 12. 함수 원형 이용(2) • 함수 원형을 이용한 코드 #include <stdio.h> int bigger(int a, int b); // 함수원형! int main(void) // main문이 위로 올라올 수 있다! { int a, b; scanf("%d", &a); scanf("%d", &b); printf("n%d is bigger.n", bigger(a, b)); } int bigger(int a, int b) { if(a>b) return a; else return b; }
  • 14. 함수의 호출 • 문법 : (함수명)((매개인자)) • Ex) add(1, 2); • 매개인자로 넘겨준 데이터를 이용하여 함수 내부의 코드를 실행한다. Void main() { … add(1, 2); … bigger( 2, 3); … } Int add(int a, int b) { … … } Int bigger (int a, int b) { … … }
  • 15. 값의 반환 (1) • 함수를 통하여 얻어진 값을 반환하려면 ‘return’을 사용하면 된다. • 또한 반환값은 함수의 반환형과 일치해야 한다. Int add(int a, int b) { return a+b; }
  • 16. 값의 반환 (2) • 단! 반환값은 오직 하나! Int multi_add(int a, int b, int c) { return a+b, b+c, a+b+c; }
  • 17. 값의 반환 (2) • 단! 반환값은 오직 하나! Int multi_add(int a, int b, int c) { return a+b, b+c, a+b+c; }
  • 19. 지역변수 (1) #include <stdio.h> int add(int a, int b); int main(void) { int a, b; scanf("%d", &a); scanf("%d", &b); printf("result : %dn", add(a, b)); } int add(int x, int y) { int result; result = x+y; return result; } result 변수의 생존 기간 (add 함수 내에서만 생존!) a,b 변수의 생존 기간 (add 함수 내에서는 적용되지 않는다!)
  • 20. 지역변수 (2) 각 변수의 생존 기간은??
  • 21. 전역변수 • 전역변수 : 함수 외부에서 선언되어 소스 파일 전체에서 사용되는 변수 #include <stdio.h> int count = 0; void main(void) { func(); printf(“%dn”, count); } void func(void) { count++; }
  • 22. 저장 유형 지정자 (1) • Static : 지역변수를 고정시켜주는 지정자. void main(void) { int i; for(i=0; i<10; i++) printf(“%dn”, func()); } int func(void) { static int count = 0; count++; return count; }
  • 23. 저장 유형 지정자 (1) • Static : 지역변수를 고정시켜주는 지정자. void main(void) { int i; for(i=0; i<10; i++) printf(“%dn”, func()); } int func(void) { static int count = 0; count++; return count; }
  • 24. 저장 유형 지정자 (2) • register : 변수를 메모리가 아닌 CPU 내부의 레지스터에 저장 Ex) register int i; for(i=0; i<10000; i++) sum += I;
  • 26. 암호화 프로그램의 함수화 1. 지난 세미나 때 만든 암호화 프로그램을 함수화 하세요. 1. 암호화 하는 부분을 함수화 합니다. 2. 평문(char plain[])을 매개 변수로 받아서 암호문(int chipher[])으로 바꿔 넣어줍니다. 3. 다음과 같은 함수 원형을 사용합니다. 4. void Encrypted(char plain[], char key[], int chipher[])
  • 27. 암호화 프로그램의 함수화 2. 이번엔 복호화 함수도 만듭니다! 1. 이건 암호화의 역순으로 진행하면 되겠죠? 2. 암호문(int chipher[])을 받아서, 평문(char plain[]) 으로 바꿔 넣어줍니다. 3. 다음과 같은 함수 원형을 사용합니다. 4. void Decrypted(int chipher[], char key[], char plain[],);
  • 28. 암호화 프로그램의 함수화 3. 메인 문에서 기능을 선택해 프로그램을 이용할 수 있도록 하세요. 1. 메뉴는 다음 과 같습니다. 1. 암호화 2. 복호화 3. 프로그램 종료 4. 제출일은 다음 주 토요일 정오, 4월 6일 12:00 까지 입니다! 제출은 dragonznet@naver.com 으로 하세요!
  • 30. 실행 화면 – 1번 메뉴
  • 31. 실행 화면 – 2번 메뉴
  • 33. Q & A (숙제 답이 뭔가요,라는 질문은 빼고?)