C++ Espresso 제2장 제어문과 함수.

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1.
제6장 조건문.
어서와 Java는 처음이지! 제3장선택과 반복.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
명품 C++ 8장 상속.
Recursion SANGJI University KO Kwangman
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
강좌명 : C++프로그래밍 (C++ Programming)
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C++ Espresso 제9장 다형성.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제5장 제어명령
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
7장 클래스.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C ++ 프로그래밍 시작.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
CHAP 2:순환.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
[INA470] Java Programming Youn-Hee Han
자바 5.0 프로그래밍.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
5. 논리적 자료표현 : 구조체.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
Lecture 03 제어문과 메소드 Kwang-Man Ko
printf("Global Korea\n");
강의 #3. 순환(Recursion).
Presentation transcript:

C++ Espresso 제2장 제어문과 함수

이번 장에서는 제어 구조와 함수에 대하여 살펴봅니다. 이번 장에서 학습할 내용 이번 장에서는 제어 구조와 함수에 대하여 살펴봅니다. 조건문 반복문 break, continue 함수 개념 함수 정의 함수 원형 매개 변수 순환 호출

제어문 조건에 따라서 여러 개의 실행 경로 가운데 하나를 선택 문장이 실행되는 순서에 영향을 주는 문장 조건에 따라서 여러 개의 같은 처리를 반복

if-else 문 if( 조건식 ) 문장1; else 문장2; 날씨가 좋은가? 테니스를 친다. 공부를 한다. 거짓 참       문장1; else         문장2; 조건식이 참이면 실행된다. 조건식이 거짓이면 실행된다.

If-else 문 if ( score >= 60 ) cout << "합격입니다.\n"; else {       cout << "합격입니다.\n";       cout << "장학금도 받을 수 있습니다.\n"; } else       cout << "불합격입니다.\n";       cout << "공부하세요.\n"; score가 60이상이면 실행 score가 60미만이면 실행

예제 #1 #include <iostream> using namespace std; int main() { int x, y; cout << "x값을 입력하시오: "; // 입력 안내 출력 cin >> x; cout << "y값을 입력하시오: "; // 입력 안내 출력 cin >> y; if (x > y) cout << "x가 y보다 큽니다. " << endl; else cout << "y가 x보다 큽니다. " << endl; return 0; } x값을 입력하시오: 10 y값을 입력하시오: 20 y가 x보다 큽니다.

중첩 if-else 문 if 문에 다시 if 문이 포함 if( 조건식1 )       if( 조건식2 )               문장;

If 문안의 문장자리에 if-else 문이 들어간 경우 if( score >= 80 ) if( score >= 90 ) cout << "당신의 학점은 A입니다.\n"; else cout << "당신의 학점은 B입니다.\n"; If 문안의 문장자리에 if-else 문이 들어간 경우

if와 else의 매칭 문제 else 절은 가장 가까운 if절과 매치된다. if(score >= 80) cout << “당신의 학점은 A입니다\n”; else cout << “당신의 학점은 B입니다\n”; O X

만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록으로 묶는다. if( score >= 80 ) {    if( score >= 90 )       cout << "당신의 학점은 A입니다.\n"; } else    cout << "당신의 학점은 A나 B가 아닙니다.\n"; 만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록으로 묶는다.

예제 #2 #include <iostream> using namespace std; int main() { int age; // 나이 cout << "나이를 입력하시오: "; cin >> age; if (age<= 12) cout << "어린이입니다."<< endl; else if (age <= 19) cout << "청소년입니다."<< endl; else cout << "성인입니다."<< endl; return 0; } 나이를 입력하시오: 20 성인입니다.

참고사항 C++에서는 다음과 같이 if-else 문장 안에서 변수 선언도 가능하다. if( int condition=get_status() ) { ... }

중간 점검 문제 1. 변수 n의 값이 100보다 크거나 같으면 “large", 100보다 작으면 ”small"을 출력하는 if-else 문을 작성하라. 2. k의 값이 각각 3, 0, -1인 경우에 다음의 코드에 의하여 생성되는 출력은 무엇인가? if( k != 0 ) cout <<"A"; else if( k > 3 ) cout <<"B"; else cout <<"C"; 3. 컵의 사이즈를 받아서 100ml미만은 small, 100ml이상 200ml미만은 medium, 200ml 이상은 large라고 출력하는 연속적인 if-else 문을 작성하시오.

switch 문 여러가지 경우 중에서 하나를 선택하는데 사용

예제 int main() { int number; cout << "정수를 입력하시오:";         cin >> number;         switch(number)         {                 case 0:                         cout << "없음\n";                         break ;                 case 1:                         cout << "하나\n";                 case 2:                         cout << "둘\n";                 default:                         cout << "많음\n";                         break;         } } 정수를 입력하시오: 1 하나

예제

예제

중간 점검 문제 1. case 절에서 break 문을 생략하면 어떻게 되는가? 2. 변수 fruit의 값이 각각 1, 2, 5일 때, 다음의 코드의 출력을 쓰시오. switch(fruit) { case 1: cout <<"사과"; break; case 2: cout <<"배"; case 3: cout <<"바나나"; default: cout <<"과일"; }

반복문의 종류

while 문 주어진 조건이 만족되는 동안 문장들을 반복 실행한다. while( 조건식 )        문장;

예제 // while 문을 이용한 구구단 출력 프로그램 #include <iostream> using namespace std; int main() { int n; int i = 1; cout << "구구단 중에서 출력하고 싶은 단을 입력하시오: "; cin >> n; while (i <= 9){ cout << n << "*" << i << "=" << n * i << endl; i++; } return 0; 구구단 중에서 출력하고 싶은 단을 입력하시오: 9 9*1 = 9 9*2 = 18 9*3 = 27 .... 9*9 = 81

do...while문 반복 조건을 루프의 끝에서 검사 do       문장 while(조건)

예제 i의 값: 10 int main() { int i = 10; do { cout <<"i의 값: " << i << endl; i++;   } while (i <3); } i의 값: 10

게임 예제 // 반복을 이용한 게임 프로그램 #include <iostream> //  반복을 이용한 게임 프로그램 #include <iostream> using namespace std; int main() { int answer =59; // 정답 int guess; int tries = 0; // 반복구조 do { cout << "정답을 추측하여 보시오: "; cin >> guess; tries++; if (guess >answer) // 사용자가 입력한 정수가 정답보다 높으면 cout <<"제시한 정수가 높습니다.\n"; if (guess <answer) // 사용자가 입력한 정수가 정답보다 낮으면 cout <<"제시한 정수가 낮습니다.\n"; } while (guess !=answer); cout << "축하합니다. 시도횟수=" << tries << endl; return 0; } 정답을 추측하여 보시오: 10 제시한 정수가 낮습니다. 정답을 추측하여 보시오: 30 정답을 추측하여 보시오: 60 제시한 정수가 높습니다. 정답을 추측하여 보시오: 59 축하합니다. 시도횟수=4

break 문과 continue 문 break 문은 반복 루프를 빠져 나오는데 사용된다.

예제

예제

중간 점검 문제 1. 다음 코드의 출력을 쓰시오. int n = 12; while (n > 0) { n = n - 2; if( n == 6 ) break; cout << n << endl; }

for 문 정해진 횟수만큼 반복하는 구조

for 문의 구조 for ( 초기화; 조건식; 증감식) 문장; ① 초기화를 실행한다.       문장; ① 초기화를 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 for 문의 실행이 종료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감을 실행하고 ②로 돌아간다.

예제

예제 #include <iostream> using namespace std; int main() { long fact = 1; int n; cout << "정수를 입력하시요:"; cin >> n; for (int i = 1; i <= n; i++) fact = fact * i; cout << n << "!은 " << fact << "입니다.\n"; return 0; } 정수를 입력하시요: 10 10!은 3628800입니다.

중간 점검 문제 1. 다음 코드의 출력을 쓰시오. for(int i = 1; i < 5; i++) cout << i << endl; 2. 다음 코드의 출력을 쓰시오. for(int i = 0; i < 3; i++) for(int j = 0; j < 3; j++) cout << i << " 곱하기 “ << j << " 은 ” << i*j << endl;

함수의 개념 함수(function): 특정한 작업을 수행하는 독립적인 부분 함수 호출(function call): 함수를 호출하여 사용하는 것 함수는 입력을 받으며 출력을 생성한다.

함수의 구조

반환형 C언어에서는 만약 반환형을 명시하지 않으면 int 형을 가정하였다. 만약 값을 반환하지 않는다면 void라고 표시한다. 반드시 반환형을 표시해야 함 get_max(int x, int y) {   if( x > y ) return(x);   else return(y); }

함수 정의 예제 함수를 프로그램을 이루는 부품이라고 가정하자. 입력을 받아서 작업한 후에 결과를 생성한다.

예제 #1 정수의 제곱값을 계산하는 함수 반환값: int 함수 이름: square 매개 변수: int n {   return(n*n); }

예제 #2 두개의 정수중에서 큰 수를 계산하는 함수 반환값: int 함수 이름: get_max 매개 변수: int x, int y int get_max(int x, int y) {   if( x > y ) return(x);   else return(y); }

인수와 매개 변수 인수(argument): 실인수, 실매개 변수라고도 한다. 매개 변수(parameter): 형식 인수, 형식 매개 변수라고도 한다.

반환값 반환값(return value): 호출된 함수가 호출한 곳으로 작업의 결과값을 전달하는 것 인수는 여러 개가 가능하나 반환값은 하나만 가능 return 0; return(0); return x; return x+y; return x*x+2*x+1;

함수 원형 함수 원형(function prototyping): 컴파일러에게 함수에 대하여 미리 알리는 것 함수 원형 #include <iostream> using namespace std; int square(int n); // 함수 원형 int main() { int i, result; for(i = 0; i < 5; i++) result = square(i); // 함수 호출 cout << result << endl; } return 0; int square(int n) // 함수 정의 return(n * n); 함수 원형

중간 점검 문제 1. 함수 이름 앞에 void가 있다면 무슨 의미인가? 2. 함수가 작업을 수행하는데 필요한 데이터로서 외부에서 주어지는 것을 무엇이라고 하는가? 3. 함수 몸체는 어떤 기호로 둘러 싸여 있는가? 4. 두개의 정수의 곱을 반환하는 함수 mult(int x, int y)를 작성하여 보자.

중복 함수 중복 함수(overloading functions): 같은 이름을 가지는 함수를 여러 개 정의하는 것 // 정수값을 제곱하는 함수 int square(int i) {     return i*i; } // 실수값을 제곱하는 함수 double square(double i)

예제

중복 함수의 장점 중복 함수를 사용하지 않은 경우: square_int(int int); square_double(double int); square_short(short int); 중복 함수를 사용하는 경우 square(int int); square(double int); square(short int); 함수 이름의 재사용이 가능

주의할 점 int sub(int); int sub(int, int);// 중복 가능! int sub(int, double);// 중복 가능! double sub(double);// 중복 가능! double sub(int);// 오류!! - 반환형이 다르더라도 중복 안됨! float sub(int, int);// 오류!! - 반환형이 다르더라도 중복 안됨!

예제

예제

디폴트 매개 변수 디폴트 매개 변수(default parameter): 인자를 전달하지 않아도 디폴트값을 대신 넣어주는 기능 void sub(double value = 1.0); // 함수 원형 정의시

주의할 점 디폴트 매개 변수는 뒤에서부터 앞쪽으로만 정의할 수 있다. void sub(int p1, int p2, int p3=30);// OK! void sub(int p1, int p2=20, int p3=30);// OK! void sub(int p1=10, int p2=20, int p3=30);// OK! void sub(int p1, int p2=20, int p3);// 컴파일 오류! void sub(int p1=10, int p2, int p3=30);// 컴파일 오류!

예제 #include <iostream> using namespace std; int calc_deposit(int salary=300, int month=12); int main() { cout << "0개의 디폴트 매개 변수 사용"<< endl; cout << calc_deposit(200, 6) << endl; cout << "1개의 디폴트 매개 변수 사용" << endl; cout << calc_deposit(200) << endl; cout << "2개의 디폴트 매개 변수 사용" << endl; cout << calc_deposit() << endl; return 0; } int calc_deposit(int salary, int month) return salary*month; 0개의 디폴트 매개 변수 사용 1200 1개의 디폴트 매개 변수 사용 2400 2개의 디폴트 매개 변수 사용 3600 계속하려면 아무 키나 누르십시오 . . .

인라인 함수 인라인 함수(inline function): 함수 호출을 하지 않고 코드를 복사하여서 넣는 것

예제 #include <iostream> using namespace std; // 실수값을 제곱하는 함수 inline double square(double i) { return i*i; } int main() cout << "2.0의 제곱은" << square(2.0) << endl; cout << "3.0의 제곱은" << square(3.0) << endl; return 0; 2.0의 제곱은 4 3.0의 제곱은 9 계속하려면 아무 키나 누르십시오 . . .

함수 매크로와의 차이점 함수 매크로는 기계적인 대치라서 잘못 사용될 수 있다. #define SQUARE(x) (x*x) SQUARE(y++); //-> y++*y++로 확장되어서 y의 값이 2번 증가된다. 함수 매크로에서는 타입 검사를 할 수 없다.

중간 점검 문제 1. 다음의 함수 선언이 잘못된 이유를 설명하라. int moveto(int x=0, int y, int z=0); 2. 다음과 같은 함수 선언을 가지는 함수 호출 중 잘못된 것은? int sub(int a, int b=100, int c=100); (a) sub(0, 0, 0); (b) sub(0); (c) sub() (d) sub(0, 0); 3. 다음은 중복 함수와 디폴트 매개 변수를 함께 사용한 함수 선언이다. 잠재적인 문제는 무엇인가? void print(char *s=NULL); void print(void);

변수의 범위 블록 안에서만 정의되는 변수는 지역 변수(local variable) 함수의 외부에서 선언되는 변수는 전역 변수(global variable)

지역 변수 지역 변수(local variable): 블록 안에서 선언되는 변수

어디서나 지역 변수 선언이 가능

전역 변수 전역 변수(global variable): 함수의 외부에 선언되는 변수

저장 유형 지정자 static #include <iostream> i: 1 s: 1 using namespace std; void sub(void) { int i = 0; static int s = 0; i++; s++; cout << "i: " << i << " s: " << s << endl; } int main() sub(); return 0; i: 1 s: 1 i: 1 s: 2 i: 1 s: 3 계속하려면 아무 키나 누르십시오 . . . static을 붙이면 지역 변수가 정적 변수로 된다.

중간 점검 문제 지역 변수를 블록의 중간에서 정의할 수 있는가? 똑같은 이름의 지역 변수가 서로 다른 함수 안에 정의될 수 있는가? 지역 변수가 선언된 블록이 종료되면 지역 변수는 어떻게 되는가? 지역 변수의 초기값은 얼마인가? 전역 변수는 어디에 선언되는가? 전역 변수의 생존 기간과 초기값은? 똑같은 이름의 전역 변수와 지역 변수가 동시에 존재하면 어떻게 되는가?

순환(recursion)이란? 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법 팩토리얼의 정의

팩토리얼 예제 팩토리얼 프로그래밍 : 현재 작성중인 함수를 다시 호출하여 계산(순환 호출) int factorial(int n) { if( n <= 1 ) return(1); else return (n * factorial(n-1) ); } 3!은? 3!를 계산하려면 3! = 3*2! 2!를 계산하려면 2! = 2*1! 1!은 1 3!는? 2!는? 1!는? 6 2 1

팩토리얼 구하기 #2 팩토리얼의 호출 순서 factorial(3) = 3 * factorial(2)                 = 3 * 2 * 1                 = 3 * 2                 = 6 factorial(2) { if( 2 <= 1 ) return 1;     else return (2 * factorial(2-1) ); } factorial(1) if( 1 <= 1 ) return 1; ..... ① ② ③ ④ factorial(3) if( 3 <= 1 ) return 1;     else return (3 * factorial(3-1) );

순환 알고리즘의 구조 순환 알고리즘은 다음과 같은 부분들을 포함한다. 순환 호출을 하는 부분 순환 호출을 멈추는 부분 else return n * factorial(n-1); int factorial(int n) { 순환을 멈추는 부분 순환호출을 하는 부분 } if( n <= 1 ) return 1 만약 순환 호출을 멈추는 부분이 없다면?. 시스템 오류가 발생할 때까지 무한정 호출하게 된다.

Q & A