Download presentation
Presentation is loading. Please wait.
1
강좌명 : C++프로그래밍 (C++ Programming)
강좌번호 : E (2016학년 1학기, 컴퓨터공학과) 이수구분 : 전공선택 강의시간 : 수12A-14B (수 12:00-14:50) 강의실 : 7호관 414호 담당교수 : 김권양(컴퓨터공학과) 7호관 401호 평가 : 중간고사(30%), 기말고사(30%), 보고서(20%), 출석(20%) 1
2
교 재 C++ ESPRESSO 천인국 지음 인피니티북스 | 2011
3
참고 문헌
4
목 차 PART 01. 프로그래밍 기초 PART 02. 객체 지향 프로그래밍 PART 03. 고급 프로그래밍 기법
CHAPTER 01. 기초사항 CHAPTER 02. 제어문과 함수 CHAPTER 03. 배열과포인터 PART 02. 객체 지향 프로그래밍 CHAPTER 04. 객체 지향 소개 CHAPTER 05. 클래스의 기초 CHAPTER 06. 생성자와 소멸자 CHAPTER 07. 클래스의 활용 CHAPTER 08. 상속 CHAPTER 09. 다형성 CHAPTER 10. 프렌드와 연산자 중복 PART 03. 고급 프로그래밍 기법 CHAPTER 11. 예외처리와 형변환 CHAPTER 12. 템플릿 CHAPTER 13. 입출력과 파일처리 CHAPTER 14. STL 컨테이너 CHAPTER 15. STL 알고리즘
5
C++ Espresso 제1장 기초 사항
6
이번 장에서 학습할 내용 C++에 대한 기초적인 사항들을 살펴봅니다. C++ 언어의 역사 C++ 언어의 특징
객체 지향의 간단한 소개 C++ 개발 과정 첫번째 예제 설명 변수와 상수 연산자
7
프로그래밍 언어의 진화와 C++의 기원 비야네 스트롭스트룹 7 Ken Tompson Martin Richards
Dennis Ritchie Bjarne Stroustrup Assembly BCPL Fortran Algol Basic C C++ Java C# Javascript Objective-C B 1970 1972 1983 1995 1967 1954 2000 1958 1964 Visual Basic 1991 Perl 1987 PHP 비야네 스트롭스트룹 7
8
C 언어
9
C++ 언어의 개발 C++는 1980년대 초에 AT&T 벨연구소의 Bjarne Stroustrup(덴마크)에 의하여 개발
C with Classes -> C++ C++는 C언어에 클래스 개념을 추가하고 이어서 가상 함수, 연산자 중복 정의, 다중 상속, 템플릿, 예외 처리 등이 기능이 차례로 추가
10
C++의 설계 철학 엄격한 타입 검사, 범용 언어, 효율적, 이식성
여러 가지의 프로그래밍 스타일을 지원 (절차 지향 프로그래밍, 데이터 추상화, 객체 지향 프로그래밍, 일반화 프로그래밍) 프로그래머가 자유롭게 선택할 수 있도록 설계 최대한 C와 호환 플랫폼에 의존적이거나 일반적이지 않은 특징은 제거
11
C++ 언어 순차적인알고리즘 사용 하나의 코드로 여러 가지의 경우를 처리 데이터와 알고리즘을 합친 객체 사용
12
절차적 프로그래밍 절차적 프로그래밍에서는 데이터보다는 알고리즘(절차)을 중시
13
절차적 프로그래밍의 단점 무조건적인 점프 문장->난해
14
구조화 프로그래밍 무조건적인 점프를 없앴음 그러나 여전히 데이터와 알고리즘은 분리되어 있음
15
객체 지향 프로그래밍 객체 지향 프로그래밍에서는 데이터와 알고리즘이 묶여있음.
16
중간 점검 문제 Java와 C#는 C++와 어떤 관계가 있을까?
C++ 언어가 C 언어의 상위집합이라면 C언어를 반드시 배워야 할까?
17
객체 지향이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법
18
객체 지향의 과정
19
객체 지향의 개념들 캡슐화(encapsulation) 정보 은닉(information-hiding)
상속(inheritance) 다형성(polymorphism) 앞으로 하나씩 학습할 것임.
20
Quiz (….): 데이터와 알고리즘을 하나의 단위(클래스)로 묶는 것이다.
(….): 데이터에 대한 불필요한 접근을 차단하여서 데이터를 보호 (….): 비슷한 클래스가 이미 존재하고 있다면 그 클래스를 가져다가 사용하는 것 (….): 같은 이름의 함수나 연산자를 중복 정의하여서 상황에 따라서 가장 적절한 함수나 연산자를 프로그램이 자동적으로 선택 앞으로 하나씩 학습할 것임.
21
객체 지향의 최종 목표 최종 목표: 코드의 재사용
22
중간 점검 문제 객체 지향 프로그래밍은 ________들을 조합하여서 프로그램을 작성하는 기법이다.
2. 객체 지향 프로그래밍의 시작은 __________년대에 개발된 ________언어이다.
23
통합 개발 환경 통합 개발 환경(IDE: integrated development environment):
에디터 + 컴파일러 + 디버거
24
통합 개발 환경의 종류 비주얼 C++(Visual C++) 마이크로소프트사의 제품
윈도우 기반의 거의 모든 형태의 응용 프로그램 제작 가능 최신 버전: 비주얼 C , 2013, 2015
25
Visual Studio 10.0 시작 25
26
C:\C++\chap1\Hello 폴더가 생긴다.
프로젝트 만들기 프로젝트 이름 C:\C++\chap1 폴더를 생성한다. C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치 26
27
생성된 프로젝트에 대한 확인 창 27
28
Win32 응용프로그램 마법사 체크해야 함 28
29
Hello 프로젝트 생성 후 29
30
새 항목 만드는 메뉴 선택 30
31
hello.cpp 소스 파일 생성 코드 선택 C++ 소스 파일 이름 입력 hello.cpp가 생기는 폴더 31
32
hello.cpp 파일이 생성된 초기 모습 빈 hello.cpp 파일 생성 32
33
hello.cpp 작성 프로그램 작성 33
34
솔루션 탐색기에서 컴파일 메뉴 선택 hello.cpp 컴파일, 컴파일만 수행 34
35
Hello 프로젝트의 빌드로 Hello.exe 생성
35
36
Ctrl+F5(디버깅하지 않고 실행하기 메뉴)로 실행할 때 빌드를 묻는 창
소스가 수정되어 빌드되지 않은 상태에서, 실행을 요청하는 경우에 출력되는 창 36
37
Hello 프로젝트가 실행되는 화면 Hello 프로젝트 빌드 성공. Hello.exe 생성 37
38
오류 메시지의 분석 1> Hello.cpp
1>c:\documents and settings\kiu\my documents\visual studio 2010\projects\firstprogram\firstprogram\hello.cpp(6): error C2065: 'sss' : 선언되지 않은 식별자입니다. 1> 1>빌드하지 못했습니다. 1>경과 시간: 00:00:00.31 ========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
39
중간 점검 문제 1. 새로운 프로젝트를 생성하고 프로젝트에 소스 파일을 추가하는 메뉴는 무엇인가?
2. 프로젝트에 속하는 소스 파일을 컴파일하여 실행하는 메뉴는 무엇인가? 3. C++ 언어에서는 대문자와 소문자를 구별하는가?
40
첫 번째 프로그램의 분석
41
주석 주석(comment): 프로그램에 대한 설명 // 첫 번째 예제 프로그램 /* 한줄로된주석 */
주석은 프로그램을 설명하는 글입니다. /* 한줄로된주석 */ int main() /* 줄의일부분인주석 */ /* 여러 줄로 된주석 */
42
헤더 파일 포함 #include는 소스 코드 안에 특정 파일을 현재의 위치에 포함
#include <iostream> #include는 소스 코드 안에 특정 파일을 현재의 위치에 포함 헤더 파일(header file): 컴파일러가 필요로 하는 정보를 가지고 있는 파일 iostream: 표준 입출력 스트림 주의!: 전처리기 지시자 문장 끝에는 세미콜론을 붙이면 안 된다.
43
iostream 헤더 파일
44
이름 공간 using은 이름 공간을 지정하는 지시어이다.
using namespace std; using은 이름 공간을 지정하는 지시어이다. 프로그램에서는 많은 이름들이 사용되고 이들 이름들은 효율성을 위하여 이름 공간(name space)이라고 하는 몇 개의 영역으로 구성되어 있다. 이름 공간 std를 사용한다는 의미 Network Graphics message() message() int mode; int mode;
45
이름 공간 정의 namespace 이름 { 형식 변수 정의; 함수 정의; 클래스 정의; ... } 예
namespace Graphics { int mode; int x, y; void draw(); void message(); ... }
46
같은 이름 사용 가능 namespace Graphics { int mode; int x, y; void draw();
void message(); ... } namespace Network { int mode; int speed; void send(char *); void message(); ... }
47
이름 공간 지정 Graphics 이름 공간 안의 mode 변수를 사용하려면 Graphics::mode = 1;
Network::mode = 1; 이름 공간 지정
48
예제 #include <iostream> using namespace std;
int mode; // 전역 변수 mode namespace Graphics { int mode; int x, y; void draw() { cout << "Graphics 이름 공간 안의 draw()" << endl; }; void message() { cout << "Graphics 이름 공간 안의 message()" << endl; }; } namespace Network { int mode, speed; void send(char *) { cout << "Graphics 이름 공간 안의 send()" << endl; }; void message() { cout << "Network 이름 공간 안의 message()" << endl; };
49
예제 int main() { //x = y = 100; // 컴파일 오류! //speed = 22900; // 컴파일 오류!
//draw(); // 컴파일 오류! mode = 1; // 전역 변수 Graphics::mode = 1; Network::mode = 2; Graphics::message(); Network::message(); return 0; } Graphics 이름 공간 안의 message() Network 이름 공간 안의 message() 계속하려면 아무 키나 누르십시오 . . .
50
using 문 using 이름공간::식별자;
예를 들어서 다음과 같이 선언하면 Network안의 speed는 이름 공간을 붙이지 않아도 접근이 가능하다. using Network::speed; speed = 100; // Network 이름 공간 안의 speed를 의미 using namespace Network; speed = 19200; // Network 이름 공간 안의 speed를 의미 send("This is a test"); // Network 이름 공간 안의 send()를 의미 using namespace 이름공간;
51
std:: 란? <iostream> 헤더 파일에 선언된 모든 이름: std 이름 공간 안에 있음
51 std ANSI C++ 표준에서 정의한 이름 공간(namespace) 중 하나 <iostream> 헤더 파일에 선언된 모든 이름: std 이름 공간 안에 있음 cout, cin, endl 등 std 이름 공간에 선언된 이름을 접근하기 위해 std:: 접두어 사용 std::cout, std::cin, std::endl std:: 생략 using 지시어 사용 using std::cout; // cout에 대해서만 std:: 생략 cout << "Hello" << std::endl; // std::cout에서 std:: 생략 std:: 생략 using namespace std; // std 이름 공간에 선언된 모든 이름에 std:: 생략 cout << "Hello" << endl; // std:: 생략 std:: 생략 std:: 생략
52
#include <iostream>과 std
52 <iostream>이 통째로 std 이름 공간 내에 선언 <iostream> 헤더 파일을 사용하려면 다음 코드 필요 #include <iostream> using namespace std;
53
함수 int main() 입력 함수(function): 특정한 작업을 수행하기 위하여 작성된 독립적인 코드
출력
54
함수의 구조
55
문장 함수는 여러 개의 문장으로 이루어진다. 문장들은 순차적으로 실행된다.
56
출력 객체 cout cout은 컴파일러가 제공하는 객체로서 출력을 담당합니다. 큰따옴표 안의 문자열을 화면에 출력합니다.
cout << “Hello World!” << endl; cout은 컴파일러가 제공하는 객체로서 출력을 담당합니다. 큰따옴표 안의 문자열을 화면에 출력합니다. endl은 문장의 끝을 나타내는 기호(\n로 정의되어 있다). Hello World!
57
함수 반환문 return은 함수의 결과값을 외부로 반환합니다. return 0; 운영 체제 main()
cout << Hello World!\n”; return 0; 운영 체제
58
응용 프로그램 #1 다음과 같은 출력을 가지는 프로그램을 제작하여 보자. Hello World! Kim ChulSoo
59
첫 번째 버전 문장들은 순차적으로 실행된다는 사실 이용 #include <iostream>
using namespace std; int main() { cout <<" Hello World!"; cout << “Kim ChulSoo"; return 0; } 우리가 원하는 결과가 아님! Hello World!Kim ChulSoo
60
줄바꿈 문자 \n 줄바꿈 문자인 \n은 화면에서 커서는 다음줄로 이동하게 한다.
cout << “Hello World!”; cout << “Hello World!\n”;
61
변경된 프로그램 줄바꿈 문자를 포함하면 우리가 원하던 결과가 된다. #include <iostream>
using namespace std; int main() { cout <<“Hello World!\n"; cout << “Kim ChulSoo\n”; return 0; } Hello World! Kim ChulSoo
62
응용 프로그램 #2 다음과 같은 출력을 가지는 프로그램을 제작하여 보자. 3X1=3 3X2=6 3X3=9
63
응용 프로그램 #2 역시 문장들은 순차적으로 수행된다는 점을 이용한다. #include <iostream>
using namespace std; int main() { cout <<“3X1=3\n"; cout <<“3X2=6\n"; cout <<“3X3=9\n"; return 0; }
64
오류 메시지의 분석
65
중간 점검 문제 1. 주석이 하는 역할은 무엇인가? 2. 주석을 여러 줄로 하려면 어떤 스타일을 사용하여야 하는가?
3. #include 문은 어떤 동작을 하는가?
66
변수 Q) 변수(variable)이란 무엇인가? A) 프로그램에서 일시적으로 데이터를 저장하는 공간 Q) 변수는 왜 필요한가?
67
변수 = 상자 변수는 물건을 저장하는 상자와 같다. int 데이터 변수의 타입 변수의 이름
68
변수와 상수 변수(variable): 저장된 값의 변경이 가능한 공간
상수(constant): 저장된 값의 변경이 불가능한 공간 (예) 3.14, 100, ‘A’, “Hello World!”
69
자료형 자료형(data type): 데이터의 타입(종류) (예) 정수형 , 실수형
70
자료형의 종류 short int long unsigned short unsigned int unsigned long char
설명 바이트수 범위 정수형 부호있음 short short형 정수 2 -32768~32767 int 정수 4 ~ long long형 정수 부호없음 unsigned short 부호없는 short형 정수 0~65535 unsigned int 부호없는 정수 0~ unsigned long 부호없는 long형 정수 문자형 char 문자 및 정수 1 -128~127 unsigned char 문자 및 부호없는 정수 0~255 부동소수점형 float 단일정밀도 부동소수점 1.2E-38~3.4E38 double 두배정밀도 부동소수점 8 2.2E-308~1.8E308 부울형 bool 참이나 거짓을 나타낸다. true, false
71
bool형 논리형의 변수는 참 또는 거짓의 값만을 가질 수 있다. bool condition = true;
72
중간 점검 문제 1. 변수와 상수의 차이점은 무엇인가?
______________________________________________ 2. 변수와 자료형의 관련성을 설명하라. 3. C++가 지원하는 자료형들을 메모리 크기순으로 나열하라.
73
변수의 이름짓기 식별자(identifier): 식별할 수 있게 해주는 이름 변수 이름 함수 이름 김철수 김영희
74
식별자를 만드는 규칙 알파벳 문자와 숫자, 밑줄 문자 _로 구성 첫 번째 문자는 반드시 알파벳 또는 밑줄 문자 _
대문자와 소문자를 구별 C 언어의 키워드와 똑같은 이름은 허용되지 않는다. (Q) 다음은 유효한 식별자인가? sum _count king3 n_pictures 2nd_try Dollor# double O X // 숫자로 시작 X // #기호 X // 키워드
75
키워드 키워드(keyword): C++언어에서 고유한 의미를 가지고 있는 특별한 단어
예약어(reserved words) 라고도 한다. C언어의 키워드 C++언어의 키워드 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while asm false protected try bool friend public typeid catch inline reinterpret_cast typename class mutable static_cast using const_cast namespace template virtual delete new this wchar_t dynamic_cast operator throw explicit private true
76
중간 점검 문제 1. 변수 이름을 만들 때 지켜야 하는 규칙은 무엇인가?
2. 변수 이름의 첫 번째 글자로 허용되는 글자들은 어떤 글자인가? 3. C++에서 고유한 의미를 가지고 있는 단어들을 무엇이라고 하는가?
77
변수 선언(Variable Declaration)
변수 선언: 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것 자료형 변수이름; 변수 선언의 예 char c; int i; double interest_rate; int height, width; *변수 사용 전에 반드시 선언!!!
78
변수에 값을 저장하는 방법 char c; // 문자형 변수 c 선언 int i; // 정수형 변수 i 선언
double interest_rate; // 실수형 변수 interest_rate 선언 c = 'a'; // 문자형 변수 c에 문자 'a'를 대입 i = 60; // 정수형 변수 i에 60을 대입 interest_rate = 4.9; // 실수형 변수 interest_rate에 82.9를 대입
79
변수의 초기화(변수 선언시) 자료형 변수이름 = 초기값; 변수 초기화의 예 char c = ‘a’; int i = 7;
자료형 변수이름 = 초기값; 변수 초기화의 예 char c = ‘a’; int i = 7; double interest_rate = 0.05;
80
문자열 타입 string 타입을 제공한다. + 연산자
81
문자열 타입 문자열의 비교는 == 연산자로 가능
82
기호 상수(Symbolic Constant)
(예) area = * radius * radius; area = PI * radius * radius; income = salary * salary; income = salary - TAX_RATE * salary; 기호 상수의 장점 가독성이 높아진다. 값을 쉽게 변경할 수 있다. const double TAX_RATE = 0.15; const double PI = ;
83
기호 상수를 만드는 방법 const 키워드 이용 #include <iostream>
using namespace std; // 이름공간설정 int main() { const int MONTHS = 12; // 기호상수선언 double m_salary, y_salary; // 변수선언 cout << "월급을입력하시요: "; // 입력안내문 cin >> m_salary; y_salary = MONTHS * m_salary; // 연봉계산 cout << "연봉은" << y_salary << "입니다" << endl; return 0; } 기호 상수 정의
84
중간 점검 문제 1. 변수와 상수의 차이점은 무엇인가?
2. 왜 정수를 하나의 타입으로 하지 않고 char, int, short, long 등의 여러 가지 타입으로 복잡하게 분류하여 사용하는가? 3. 숫자값을 직접 사용하는 것보다 기호 상수를 사용하는 것의 이점은 무엇인가? 4. 변수 x와 y를 하나의 문장을 사용하여서 bool형으로 선언하여 보라. bool x, y;
85
출력과 입력 C++에서는 콘솔 입력은 cin 객체가, 콘솔 출력은 cout 객체가 담당
이들은 모두 iostream 라이브러리에 포함 #include <iostream> cin cout << : 스트림 삽입 연산자(stream insertion operator) >> :스트림 추출 연산자(stream extraction operator)
86
출력 cout << 100; int i = 100; cout << i;
cout << “변수 i의 값은 ” << i << “입니다.”
87
출력 cout은 스스로 변수의 자료형에 따라 적절하게 출력할 수 있다. 여러 개의 << 연산자로 여러 값 출력
int i; float f; cout << i; // 정수 형식으로 i의 값이 출력된다. cout << f; // 실수 형식으로 f의 값이 출력된다. 여러 개의 << 연산자로 여러 값 출력 cout << "Hello\n" << "첫 번째 맛보기입니다.";
88
입력 int main(void) { int i; cin >> i; // 정수를 읽어서 i에 저장 double f;
cin >> f; // 실수를 읽어서 f에 저장 return 0; }
89
예제
90
연속된 >> 연산자를 사용하여 여러 값 입력 가능
90 연속된 >> 연산자를 사용하여 여러 값 입력 가능 cout << "너비와 높이를 입력하세요>>"; cin >> width >> height; cout << width << '\n' << height << '\n'; 너비와 높이를 입력하세요>>23 36 23 36 width에 입력 height에 입력
91
<Enter> 키를 칠 때 변수에 값 전달
91 cin의 특징 입력 버퍼를 내장하고 있음 <Enter>키가 입력될 때까지 입력된 키를 입력 버퍼에 저장 도중에 <Backspace> 키를 입력하면 입력된 키 삭제 >> 연산자 <Enter>키가 입력되면 비로소 cin의 입력 버퍼에서 키 값을 읽어 변수에 전달
92
cin으로부터 키 입력 받는 과정 92
93
실행문 중간에 변수 선언 C++의 변수 선언 변수 선언은 아무 곳이나 가능 C++ 변수 선언 방식의 장점
93 C++의 변수 선언 변수 선언은 아무 곳이나 가능 C++ 변수 선언 방식의 장점 C에서와 같이 변수 선언부과 실행 문 사이를 왔다 갔다 하는 번거로움 해소 변수를 사용하기 직전 선언함으로써 변수 이름에 대한 타이핑 오류 줄임 C++ 변수 선언 방식의 단점 선언된 변수를 일괄적으로 보기 힘듦 코드 사이에 있는 변수 찾기 어려움 int width; cin >> width; // 키보드로부터 너비를 읽는다. cout << "높이를 입력하세요>>"; int height; cin >> height; // 키보드로부터 높이를 읽는다. // 너비와 높이로 구성되는 사각형의 면적을 계산한다. int area = width*height; cout << "면적은 " << area << "\n"; // 면적을 출력하고 한 줄 띈다. 실행문 중간에 변수 선언
94
중간 점검 문제 “변수 i의 값: "와 변수 i의 값을 이어서 출력하는 출력문을 작성하라.
cout << “변수 i의 값: ” << i; 2. 키보드로부터 double형의 실수를 받아서 변수 n에 저장하는 문장을 작성하라. double n; cin >> n; 3. 키보드로부터 문자열을 받아서 변수 s에 저장하는 문장을 작성하라. string s; cin >> s;
95
수식 수식(expression) x + y x*x + 5*x + 6
(principal * interest_rate * period) / 12.0 수식(expression) 상수, 변수, 연산자의 조합 연산자(operator)와 피연산자(operand)로 나누어진다.
96
> < == != >= <= & | ^ ~ << >>
연산자의 분류 :기능에 따른 연산자의 분류 연산자 의미 대입(할당, 배정) = 오른쪽을 왼쪽에 대입 산술 + - * / % 사칙연산과 나머지 연산 부호 + - 양수, 음수 증감 ++ -- 증가, 감소 연산 관계 > < == != >= <= 오른쪽과 왼쪽을 비교 논리 && || ! 논리적인 AND, OR, NOT 조건 ? : 조건에 따라 선택 콤마 , 피연산자들을 순차적으로 실행 비트 단위 연산자 & | ^ ~ << >> 비트별 AND, OR, XOR, 이동, 반전 sizeof 연산자 sizeof 자료형이나 변수의 크기를 바이트 단위로 반환 형변환 (type) 변수나 상수의 자료형을 변환 포인터 연산자 * & [] 주소계산, 포인터가 가리키는 곳의 내용 추출 구조체 연산자 . -> 구조체의 멤버 참조
97
피연산자수에 따른 연산자 분류 단항 연산자(Unary Operator): 피연산자의 수가 1개
++x; --y; 이항 연산자(Binary Operator): 피연산자의 수가 2개 x + y x - y 삼항 연산자(Ternary Operator): 피연산자의 수가 3개 x ? y : z
98
중간 점검 문제 수식(expression)이란 어떻게 정의되는가? 상수, 변수, 연산자의 조합
2. 상수 10도 수식이라고 할 수 있는가? Ok 3. 아래의 수식에서 피연산자와 연산자를 구분하여 보라. y = ; 4. 연산자를 단항 연산자, 이항 연산자, 삼항 연산자로 나누는 기준은 무엇인가?
99
산술 연산자(Arithmatic Operator)
덧셈, 뺄셈, 곱셈, 나눗셈 등의 사칙 연산을 수행하는 연산자 연산자 기호 의미 예 덧셈 + x와 y를 더한다 x+y 뺄셈 - x에서 y를 뺀다. x-y 곱셈 * x와 y를 곱한다. x*y 나눗셈 / x를 y로 나눈다. x/y 나머지 % x를 y로 나눌 때의 나머지값 x%y
100
나머지 연산자(modulo Operator)
#include <iostream> using namespace std; int main() { int input, minute, second; const int SEC_PER_MINUTE=60; cout << "초단위의시간을입력하시요:(32억초이하) "; cin >> input; // 초단위의시간을읽는다. minute = input / SEC_PER_MINUTE; // 몇분 second = input % SEC_PER_MINUTE; // 몇초 cout << input << "초는" << minute << "분" << second << "초입니다." << endl; return 0; } 초단위의 시간을 입력하시요:(32억초이하) 1000 1000초는 16분 40초 입니다.
101
관계 연산자(Relational Operator)
두개의 피연산자를 비교하는 연산자 결과값은 참(1) 아니면 거짓(0) 연산자 기호 의미 사용예 == x와 y가 같은가? x == y != x와 y가 다른가? x != y > x가 y보다 큰가? x > y < x가 y보다 작은가? x < y >= x가 y보다 크거나 같은가? x >= y <= x가 y보다 작거나 같은가? x <= y
102
사용 예(관계 연산자) 1 == 1 // 1과 1이 같으므로 참 1 != 2 // 1와 2가 다르므로 참
1 == 1 // 1과 1이 같으므로 참 1 != 2 // 1와 2가 다르므로 참 1 <= 2 // 1이 2보다 작으므로 참 1 < 2 // 1이 2보다 작으므로 참 (1+2) == (1*2) // (1+2)가 (1*2)와 같지 않으므로 거짓 x >= y // x가 y보다 크거나 같으면 참 i == 10 // i가 10과 같으면 참 k > 3 // k가 3보다 크면 참 m != 6 // m과 6이 같지 않으면 참
103
예제 unsetf(cout.boolalpha)
104
논리 연산자(Logical Operator)
여러 개의 조건을 조합하여 참과 거짓을 따지는 연산자 결과값은 참(1) 아니면 거짓(0) 연산자 기호 사용예 의미 && x && y AND 연산, x와 y가 모두 참이면 참, 그렇지 않으면 거짓 || x || y OR 연산, x나 y중에서 하나만 참이면 참, 모두 거짓이면 거짓 ! !x NOT 연산, x가 참이면 거짓, x가 거짓이면 참
105
윤년 예제(Example:Leap year)
지구가 태양을 한 바퀴 도는 데에는 365일 5시간 48분 46초가 걸리므로 365일을 제외한 시간들을 모아 태양력에서는 4년마다 한 번 2월 29일을 두어 하루를 늘린다…
106
윤년 예제 실습 : 입력한 연도가 윤년이면 xxx년은 윤년입니다. 평년이면 xxx년은 평년입니다.
107
연산자 우선 순위(Operator Precedence)
수식에서 어떤 연산자를 먼저 계산할 것인지의 문제 우선 순위 연산자 결합 규칙 1 () [] -> . ++(후위) --(후위) ->(좌에서 우) 2 sizeof &(주소) ++(전위) --(전위) ~ ! *(역참조) +(부호) -(부호), 형변환 <-(우에서 좌) 3 *(곱셈) / % 4 +(덧셈) -(뺄셈) 5 << >> 6 < <= >= > 7 == != 8 &(비트연산) 9 ^ 10 | 11 && 12 || 13 ?(삼항) ->(우에서 좌) 14 = += *= /= %= &= ^= |= <<= >>= 15 ,(콤마) 결합규칙:Associativity 표 5.4) 연산자의 우선순위
108
우선 순위의 일반적인 지침 콤마 < 대입 < 논리 < 관계 < 산술 < 단항
괄호 연산자는 가장 우선순위가 높다. 모든 단항 연산자들은 이항 연산자들보다 우선순위가 높다. 콤마 연산자를 제외하고는 대입(할당,배정’=’) 연산자가 가장 우선순위가 낮다. 연산자들의 우선 순위가 생각나지 않으면 괄호를 이용 ( x <= 10 ) && ( y >= 20 ) 관계 연산자나 논리 연산자는 산술 연산자보다 우선순위가 낮다. x + 2 == y + 3
109
결합 규칙(Association) 만약 같은 우선순위를 가지는 연산자들이 여러 개가 있으면 어떤 것을 먼저 수행하여야 하는가의 규칙 결합규칙을 따른다
110
예제 x = y = z = 1 1 2 -2 -1 ①②③ (- ++x + y--) ①②③④
#include <iostream> using namespace std; int main() { int x=0, y=0, z=0; cout << (2 > 3 || 6 > 7) << endl; cout << (2 || 3 && 3 > 2) << endl; cout << (x = y = z = 1) << endl; cout << (- ++x + y--) << endl; return 0; } 1 -1 x = y = z = 1 1 2 -2 -1 ①②③ (- ++x + y--) ①②③④
111
중간 점검 문제 1. 관계 수식의 결과로 생성될 수 있는 값은 무엇인가? true false
2. (3 >= 2) + 5의 값은? 6 3. 다음의 조건에 해당하는 논리 연산식을 만들어 보시오. 변수는 적절하게 선언되어 있다고 가정한다. “무주택 기간 3년 이상, 가구주의 연령이 40세 이상, 가족의 수가 3명 이상” year >=3 && age >= 40 && numoffam >=3 4. 수식 !3의 값은? 0 5. 논리 연산자인 &&과 || 중에서 우선 순위가 더 높은 연산자는 무엇인가? && 6. 단항 연산자와 이항 연산자 중에서 어떤 연산자가 더 우선 순위가 높은가? 단항 연산자
112
Q & A
113
EXERCISE P.35-37 5. 다음의 코드에서 잘못된 부분을 모두 지적하라.
#include <iostream> using namespace std; int main() { int x = 0, y = 0; char grade = 'A'; double rate = 1e10; // 1x1010 int salary = ; return 0; }
114
EXERCISE 7. 다음과 같이 변수들이 정의되어 있는 경우, 다음의 각 문장이 실행되는 경우, 각 변수에는 어떤 값이 저장되는가? 각 문장은 독립적으로 실행된다고 가정하자. (1) x += y -= 2; (2) x *= y + 2; (3) z = ++x + ++y; (4) z = x y; int x = 10, y = 3, z = 2; x y z (1) (2) (3) (4)
115
EXERCISE 8. 다음 논리 연산을 설명해보아라. (1) (x >= 10) && (x < 30)
9. 다음의 문장에 해당하는 조건식을 써보아라. (1) x는 짝수이다. (x가 홀수이다, x가 짝수가 아니다) (2) x가 0 이상이거나 100이하이다. (3) x가 1 또는 100
116
Programming P.38 1. 상자의 체적을 구하는 프로그램을 작성하여 보자.
#include <iostream> using namespace std; int main() { short height = 0, lenth = 0, width = 0; int cubage = 0; cout<<"상자의 높이를 입력하시오:"; cin>>height; cout<<"상자의 길이를 입력하시오:"; cin>>lenth; cout<<"상자의 너비를 입력하시오:"; cin>>width; cubage = ; cout<<"상자의 체적은 "<<cubage<<"입니다."<<endl; return 0; }
117
Programming // 기호상수 선언 // SEC_PER_MIN // MIN_PER_HOUR
4. 시, 분, 초로 표현된 시간을 초 단위의 시간으로 변환하는 프로그램을 완성하라. #include <iostream> using namespace std; int main() { int hour = 0, min = 0, second = 0, result = 0; cout<<"시간을 입력하시오.(시):"; cin>>hour; cout<<"시간을 입력하시오.(분):"; cin>>min; cout<<"시간을 입력하시오.(초):"; cin>>second; result = cout<<hour<<"시간 "<<min<<"분 "<<second<<"초는 "<<result<<" 초입니다."<<endl; return 0; } // 기호상수 선언 // SEC_PER_MIN // MIN_PER_HOUR
118
LAB 교과서 P. 39의 1번 문제를 읽고 물음에 답하라.
Similar presentations