+ All Categories
Home > Documents > chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant)...

chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant)...

Date post: 13-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
62
SeoulTech 2010-2 nd 프로그래밍입문 2 2. 원시 데이터 유형과 연산 박종 종혁 혁 교수 교수 UCS Lab UCS Lab (http://www.parkjonghyuk.net) Tel: 02-970-6702 Email: [email protected] C++로 시작하는 객체지향 프로그래밍 1
Transcript
Page 1: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

SeoulTech 2010-2nd 프로그래밍입문 2

2장. 원시 데이터 유형과 연산

박박 종종 혁혁 교수교수

UCS LabUCS Lab(http://www.parkjonghyuk.net)

Tel: 02-970-6702

Email: [email protected]

C++로 시작하는 객체지향 프로그래밍 1

Page 2: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

목 차간단한 계산을 수행하는 C++ 프로그램 작성(2 2)간단한 계산을 수행하는 C++ 프로그램 작성(2.2)cin 객체를 사용하여 키보드에서 입력 값 읽기(2.3)std:: 접두어(prefix)를 생략하여 프로그램 간소화(2 4)std:: 접두어(prefix)를 생략하여 프로그램 간소화(2.4)프로그램 식별자 작성 방법(2.5)변수에 데이터 저장(2.6-2.7)대입문과 수식(2.7)상수를 사용하여 변경되지 않는 값 정의(2.8)숫자 데이터 유형을 사용한 변수 선언(2 9)숫자 데이터 유형을 사용한 변수 선언(2.9)수식 표현과 연산자(2.9)형변환 연산자를 사용하여 다른 유형으로 숫자 변환(2 10)형변환 연산자를 사용하여 다른 유형으로 숫자 변환(2.10)char 유형과 문자 표현(2.11)C++ 문서, 프로그래밍 방법, 명명 규칙(2.13)문법 오류, 실행 오류, 논리 오류(2.14)논리 오류 디버깅(2.15)

C++로 시작하는 객체지향 프로그래밍 2

Page 3: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

간단한 프로그램 작성간단한 프로그램 작성

프로그램을 작성할 때 고려사항

- 자료구조

. 데이터표현, 데이터 조작, 배열 , 문자 등데이터 현, 데이터 작, 배열 , 문자 등

. 원시 (primitive) 데이터유형 / 기본(fundamental) 데이터 유형 in C++(fundamental) 데이터 유형 in C++

- 알고리즘

.문제를 해결하기 위한 실행과정

C++로 시작하는 객체지향 프로그래밍 3

Page 4: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

간단한 프로그램 작성간단한 프로그램 작성

리스트 2.1 ComputeArea.cpp 원의 면적 구하기

//이 프로그램은 원의 면적을 구하는 프로그램이다//이 프로그램은 원의 면적을 구하는 프로그램이다.알고리즘은 ?

1) 반지름 읽기

2) 원의면적 구하기2) 원의면적 구하기

3) 면적 출력

ComputeArea Run

C++로 시작하는 객체지향 프로그래밍 4

Page 5: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그램 수행 과정#include <iostream> radius 메모리

할당

int main() {double radius;double area;

no valueradius

// Step 1: Read in radiusradius = 20;radius 20;

// Step 2: Compute areaarea = radius * radius * 3 14159;area radius radius 3.14159;

// Step 3: Display the areastd::co t << "The area is "; d 화면 출력std::cout << "The area is ";std::cout << area << std::endl;

}

std::out 화면 출력std::endl 라인의 끝

C++로 시작하는 객체지향 프로그래밍 5

Page 6: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그램 수행 과정

memory#include <iostream>

no valueradiusint main() {double radius;d bl

no valueareadouble area;

// Step 1: Read in radiusdi

area 메모리radius = 20;

// Step 2: Compute area

할당

area = radius * radius * 3.14159;

// Step 3: Display the areap p ystd::cout << "The area is ";std::cout << area << std::endl;

}

C++로 시작하는 객체지향 프로그래밍 6

}

Page 7: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그램 수행 과정radius에 20 치환#include <iostream>

20radius

no valuearea

int main() {double radius;double area;double area;

// Step 1: Read in radiusradius = 20;radius 20;

// Step 2: Compute areaarea radi s * radi s * 3 14159;area = radius * radius * 3.14159;

// Step 3: Display the aread h istd::cout << "The area is ";

std::cout << area << std::endl;}

C++로 시작하는 객체지향 프로그래밍 7

Page 8: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그램 수행 과정

memory#include <iostream>

20radius

1256.636area

int main() {double radius;double area;double area;

// Step 1: Read in radiusradius = 20; 면적을 계산하여 area

변수에 기억

radius = 20;

// Step 2: Compute areadi * di * 3 14159area = radius * radius * 3.14159;

// Step 3: Display the areastd::cout << "The area is ";std::cout << area << std::endl;

}

C++로 시작하는 객체지향 프로그래밍 8

}

Page 9: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그램 수행 과정

memory#include <iostream>

20radius

1256.636area

int main() {double radius;double area;;

// Step 1: Read in radiusradius = 20;

화면에 출력radius 20;

// Step 2: Compute areaarea = radius * radius * 3 14159;area = radius * radius * 3.14159;

// Step 3: Display the areatd t << "Th i "std::cout << "The area is ";

std::cout << area << std::endl;}

C++로 시작하는 객체지향 프로그래밍 9

Page 10: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

키보드에서 입력 값 읽기

std::cin객체를 사용해서 키보드로부터 값을 읽어 들인다.

ComputeArea1 RunComputeArea1 Run

C++로 시작하는 객체지향 프로그래밍 10

Page 11: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

std:: 접두어(prefix) 생략(p )std::cout, std::endl, std::cin 등은 모두 std::로 시작하고있다있다. – std의 의미: 표준 네임스페이스(standard name space)– C++는 잠재적인 명명(naming) 문제를 해결하기 위해 모든C++는 잠재적인 명명(naming) 문제를 해결하기 위해 모든

이름에 네임스페이스를 부여하고 있다. – std::cout는 cout이 std 네임스페이스에 속한다는 것을

의미한다. 하지만, std::를 계속 사용하는 것은 번거로운면이 있다.

이를 해결하는 방법 중 하나는 다음 문장을 사용하는이를 해결하는 방법 중 하나는 다음 문장을 사용하는것이다.

i tdusing namespace std;

ComputeArea2 Run

C++로 시작하는 객체지향 프로그래밍 11

ComputeArea2 Run

Page 12: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

식별자(Identifier)( )식별자라고하는 특별한 기호를 사용하여 변수, 상수, 함수 등에 대해 이름을 부여함함수 등에 대해 이름을 부여함

규칙규칙– 식별자는 문자열로 문자, 숫자, _(밑줄)을

사용하여 작성사용하여 작성

– 식별자의 시작은 문자나 _가 앞에 와야 한다.– 식별자는 예약어(키워드)를 사용하면 안 된다

식별자의 길이는 제한이 없으나 컴파일러에 따라길이에 제한이 있을 수 있으며 보통 이식성을 위해

C++로 시작하는 객체지향 프로그래밍 12

길이를 31자나 그 이하로 함

Page 13: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

변수(Variables)변수(Variables)변수

// 첫 번째 면적 계산

프로그램에서 데이터를 저장하는 공간

// 첫 번째 면적 계산

radius = 1.0;area radius * radius * 3 14159;area = radius * radius * 3.14159;std::cout << area;

// 두 번째 면적 계산

radius = 2.0;radius 2.0;area = radius * radius * 3.14159;std::cout << area;

C++로 시작하는 객체지향 프로그래밍 13

;

Page 14: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

변수 선언변수 선언변수선언컴파일러에게 사용하려는 데이터 유형의 크기만큼 필요한

메모리 공간을 할당하도록 함

예)int x; // 정수 변수 x를 선언;

double radius; // double(배정도실수) 변수 radius를 선언

double interestRate; // double 변수 interestRate를 선언

char a; // 문자 변수 a를 선언

C++로 시작하는 객체지향 프로그래밍 14

Page 15: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

대입문(Assignment Statements)과 수식대입문(Assignment Statements)과 수식

대입문을 사용하여 값을 지정

int x = 1; // 변수 x에 1을 할당

double radius = 1.0; // 변수 radius에 1.0을 할당

x = 5 * (3 / 2) + 3 * 2; // 수식의 값의 변수 x에 할당

x = y + 1; // 변수 y와 1을 더해서 변수 x에 할당

area = radius * radius * 3.14159; // 면적(area) 계산

C++로 시작하는 객체지향 프로그래밍 15

Page 16: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

변수 선언과 기화변수 선언과 초기화

int x = 1; int x(1); // 동일표현 (C++에서만 가능)

int x;x = 1;x = 1;

double d = 1.4;

C++로 시작하는 객체지향 프로그래밍 16

Page 17: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

상수(constant) 만들기상수(constant) 만들기상수

- 프로그램의 실행동안 변하지 않는 영구한 값을 가짐

vs 변수: 프로그램 실행동안 변경됨

d CONSTANTNAME VALUE

- 선언과 초기화가 한번에 이루어져야 함

const datatype CONSTANTNAME = VALUE;

const double PI = 3.14159; const int SIZE = 3;

ComputeArea4

C++로 시작하는 객체지향 프로그래밍 17

ComputeArea4

Page 18: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

숫자 데이터 유형 Name Synonymy Range Storage Size

15 15short short int –215 (-32,768) to 215–1 (32,767) 16-bit signed

unsigned short unsigned short int 0 to 216–1 (65535) 16-bit unsigned

int –231 (-2147483648) to 231–1 (2147483647) 32-bit signed ( ) ( ) g

unsigned int unsigned 0 to 232–1 (4294967295) 32-bit unsigned i dlong long int –231 (-2147483648) to 231–1 (2147483647) 32-bit signed

32unsigned long unsigned long int 0 to 232–1 (4294967295) 32-bit unsigned float Negative range: 32-bit IEEE 754 -3.4028235E+38 to -1.4E-45 Positive range: 1.4E-45 to 3.4028235E+38

double Negative range: 64-bit IEEE 754 -1.7976931348623157E+308 to -4.9E-324 Positive range: 4.9E-324 to 1.7976931348623157E+308

long double Negative range: 80-bit -1.18E+4932 to 3.37E-4932 Positive range: 3.37E-4932 to 1.18E+4932 Significant decimal digits: 19

C++로 시작하는 객체지향 프로그래밍 18

g g

Page 19: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

sizeof 함수sizeof 함수

데이터 유형의 크기를 구할 때 sizeof 함수를사용한다. 예를 들어, 다음 문장은 현재사용 다 예를 들어, 다 장 재시스템의 int, long, double의 크기를 출력하는코드이다.드이다.

cout << sizeof(int) << " " << sizeof(long) << " " <<cout << sizeof(int) << << sizeof(long) << << sizeof(double);

C++로 시작하는 객체지향 프로그래밍 19

Page 20: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

같은 타입같은 타입

short int = short unsigned short int = unsigned shortunsigned short int unsigned shortunsigned int = unsignedl i llong int = longunsigned long int = unsigned long

예를 들면예를 들면,short int i = 2; 과 short i = 2;는 동일

C++로 시작하는 객체지향 프로그래밍 20

Page 21: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

숫자 리터럴숫자 리터럴

리터럴(literal)프로그램에서 직접 사용되는 상수 값프로그램에서 직접 사용되는 상수 값

예를 들어, 다음 코드에서 34, 1000000, 5.0은리터럴이다.

int ii = 34;long k = 1000000;long k = 1000000;double d = 5.0;

C++로 시작하는 객체지향 프로그래밍 21

Page 22: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

8진수와 16진수 리터럴8진수와 16진수 리터럴

정수 값은 10진수를 기본으로 한다정수 값은 10진수를 기본으로 한다. 8진수 리터럴을 작성하려면 앞에 0(영)을 붙이고

16진수 리터럴을 작성하려면 앞에 0 또는 0X(영과16진수 리터럴을 작성하려면 앞에 0x 또는 0X(영과X)를 붙인다.

예를 들어, 다음의 코드에서 16진수 0xFFFF는 10진수로 65535이고

8진수 010은 10진수로 8이다8진수 010은 10진수로 8이다.

cout << 0xFFFF << " " << 010;

C++로 시작하는 객체지향 프로그래밍 22

cout << 0xFFFF << << 010;

Page 23: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

부동소수점(floating-point)부동소수점(floating point) float나 double 유형은 소수점을 사용하여 수를 표현한다.float나 double 유형은 소수점을 사용하여 수를 표현한다. 부동소수점 숫자(floating-point number)이란 의미가 붙은 것은

컴퓨터에서는 숫자를 저장할 때 과학적 기수법을 사용하여 저장컴퓨터에서는 숫자를 저장할 때 과학적 기수법을 사용하여 저장

예를 들어예를 들어, 50.534e+1을 컴퓨터에 저장하면

5 0534e+2와 같이 수정하여 저장5.0534e+2와 같이 수정하여 저장

즉, 이 경우 소수점이 고정(fixed) 상태로 있는 게 아니라

움직이는 부동(floated) 상태가 되기 때문에 그런 이름을움직이는 부동(floated) 상태가 되기 때문에 그런 이름을

부여함

C++로 시작하는 객체지향 프로그래밍 23

Page 24: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

수 관련 연산자

Name Meaning Example Result

+ Addition 34 + 1 35 - Subtraction 34.0 – 0.1 33.9 * Multiplication 300 * 30 9000 / Division 1.0 / 2.0 0.5 % Remainder 20 % 3 2

C++로 시작하는 객체지향 프로그래밍 24

Page 25: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

정수 나눗셈

+ - * / %+, , , /, %

5 / 2는 정수 2가 된다.5.0 / 2는 double 값 2.5가 된다.

는 이 된다 (나머지 값)5 % 2는 1이 된다. (나머지 값)

C++로 시작하는 객체지향 프로그래밍 25

Page 26: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

나머지 연산자나머지는 프로그램 작성할 때 매우 유용한 기능

ex1) 짝수 나누기 2는 항상 0, 홀수 나누기 2는 1이 성질을 사용하면 임의 숫자가 짝수인지 홀수인지를 쉽게 알 수 있다인지를 쉽게 알 수 있다.

ex2) 오늘이 토요일이고 친구와 10일 후에 만나기로 했다면그날은 무슨 요일일까?그날은 무슨 요일일까?

다음처럼 계산하면 화요일이란 것을 쉽게 구할 수 있다.

Saturday is the 6th day in a week

A week has 7 days

(6 + 10) % 7 is 2

After 10 days

The 2nd day in a week is Tuesday(6 + 10) % 7 is 2

C++로 시작하는 객체지향 프로그래밍 26

Page 27: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제: 시간 계산

초(seconds)에서 시간과 분을 구하는프로그램을 작성하라프로그램을 작성하라.

DisplayTime RunDisplayTime Run

C++로 시작하는 객체지향 프로그래밍 27

Page 28: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

오버플로우

변수에 임의의 값을 저장할 때 값이 저장할 수 있는크기보다 크면 오버플로우 가 발생크기보다 크면 오버플로우(overflow)가 발생

예를 들어, 다음 문장에서는 오버플로우가 발생하는데 short에 저장다음 문장에서는 오버플로우가 발생하는데 short에 저장가능한 최대값은 32767이지만 32768이 저장될 수 없기때문이다때문이다.

short value = 32767 + 1;short value = 32767 + 1;

C++로 시작하는 객체지향 프로그래밍 28

Page 29: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

언더플로우

변수에 임의 값을 저장할 때 값이 저장할 수 있는크기보다 작으면 언더플로우 가 발생크기보다 작으면 언더플로우(underflow)가 발생

예를 들어, 다음 문장에서는 언더플로우가 발생하는데 short에다음 문장에서는 언더플로우가 발생하는데 short에저장 가능한 최소값은 -32768이지만 -32769가 저장될수 없기 때문이다수 없기 때문이다.

h l 32769short value = -32769;

C++로 시작하는 객체지향 프로그래밍 29

Page 30: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

산술식산술식

94))(5(1043 b )94(9))(5(10543

yx

xxcbayx +

++++−

−+

위 산술식은 다음과 같이 작성한다.

(3+4*x)/5 – 10*(y-5)*(a+b+c)/x + 9*(4/x + (9+x)/y)

C++로 시작하는 객체지향 프로그래밍 30

Page 31: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제: 온도 변환화씨(℉)를 섭씨(℃)로 변경하는 프로그램을다음 공식을 사용하여 작성하라다음 공식을 사용하여 작성하라.

)32)(( 5 −= fahrenheitcelsius )32)(( 9= fahrenheitcelsius

FahrenheitToCelsius RFahrenheitToCelsius Run

C++로 시작하는 객체지향 프로그래밍 31

Page 32: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

단축연산자단축연산자

연산자 사용예 같은표현연산자 사용예 같은표현

+= i += 8 i = i + 8

-= f -= 8.0 f = f - 8.0

*= i *= 8 i = i * 8

/= i /= 8 i = i / 8

%= i %= 8 i = i % 8

C++로 시작하는 객체지향 프로그래밍 32

Page 33: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

증가 / 감소 연산자증가 / 감소 연산자

Operator Name Description++var 전치증가 변수의 값을 우선 1만큼 증가 시킨 후 사용된다.

var++ 후치증가 변수의 값을 사용 후 1만큼 증가 시킨다.

--var 전치감소 변수의 값을 우선 1만큼 감소 시킨 후 사용된다.

var-- 후치감소 변수의 값을 사용 후 1만큼 감소 시킨다.

C++로 시작하는 객체지향 프로그래밍 33

Page 34: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

증가/ 감소 연산자증가/ 감소 연산자, cont.

int i = 10; int newNum = 10 * i++; int newNum = 10 * i

i = i + 1;

Same effect as

i i 1;

int i = 10; int newNum = 10 * (++i); i = i + 1;

Same effect as

int newNum = 10 * i;

C++로 시작하는 객체지향 프로그래밍 34

Page 35: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

증가/ 감소 연산자증가/ 감소 연산자, cont.증가/감소 연산자를 사용하면 프로그램을 간단히작성하는데 도움을 줄 수 있다.

하지만, 경우에 따라서는 복잡하게 만들거나 이해하기,어렵게 만드는 경우도 있다.

수식에서 여러 변수를 사용하는 경우나 같은 변수를여러 번 사용하는 경우에는 이 연산자를 사용하지 않는것이 좋다.

C++로 시작하는 객체지향 프로그래밍 35

int k = ++i + i.

Page 36: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

대입문과 수식대입문과 수식

변수를 선언한 다음, 대입문을 사용하여 값을 지정한다. C++에서는 등호(=)를 대입 연산자(assignment operator)로 사용한다.

variable = expression;

수식(expression)이란 값, 변수, 연산자로 구성되어 원하는 값을 구하기 위해계산을 하는 것을 의미한다.

int x = 1; // 변수 x에 1을 할당double radius = 1.0; // 변수 radius에 1.0을 할당x = 5 * (3 / 2) + 3 * 2; // 수식의 값의 변수 x에 할당( ) ;x = y + 1; // 변수 y와 1을 더해서 변수 x에 할당area = radius * radius * 3.14159; // 면적(area) 계산

C++로 시작하는 객체지향 프로그래밍 36

Page 37: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

수의 유형 변환수의 유형 변환

때로는 계산에서 다양한 유형의 숫자 값을때로는 계산에서 다양한 유형의 숫자 값을혼용하는 경우가 있다.

short i = 100;short i = 100;long k = i * 3 + 4;double d = i * 3.1 + k / 2;

C++로 시작하는 객체지향 프로그래밍 37

Page 38: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

Conversion Rules서로 다른 유형 값에 대해서 이항 연산을 할 때 C++는자동으로 피연산자를 다음의 규칙에 따라 변환한다. 자동 피 자를 다 의 규칙에 따라 다

1 피연산자에 하나의 l d bl 이 있으면 나머지도 l1. 피연산자에 하나의 long double이 있으면 나머지도 long double로 변환된다.

2. 그렇지 않고, double이 있으면 나머지도 double로 변환된다. ,3. 그렇지 않고, float가 있으면 나머지도 float로 변환된다. 4. 그렇지 않고, unsigned long이 있으면 나머지도 unsigned

long으로 변환된다long으로 변환된다. 5. 그렇지 않고, long이 있으면 나머지도 long으로 변환된다. 6. 그렇지 않고, unsigned int가 있으면 나머지도 unsigned int로6. 렇지 않 , unsigned int가 있 면 나머지 unsigned int

변환된다. 7. 그렇지 않으면 모든 피연산자가 int로 변환된다.

C++로 시작하는 객체지향 프로그래밍 38

Page 39: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

형 변환

암시적인 캐스팅

d bl d ( id i )double d = 3; (type widening)

명시적인 캐스팅

int i = static cast<int>(3 0); (타입 축소)int i = static_cast<int>(3.0); (타입 축소)int i = (int)3.9; (소수점 이하는 버림)

C++로 시작하는 객체지향 프로그래밍 39

Page 40: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

NOTE형변환을 해도 변수의 유형이 변경되지는 않는다. 예를 들어예를 들어, 아래 프로그램에서 d는 형변환을 한 뒤에도 유형이변하지 않 대 형이다변하지 않고 그대로 double 형이다.

double d = 4.5; int i = static cast<int>(d); // d의 유형은 변경되지 않음int i = static_cast<int>(d); // d의 유형은 변경되지 않음

C++로 시작하는 객체지향 프로그래밍 40

Page 41: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

NOTEC++에서 임의의 문장도 수식 표현이 될 수있다있다. 예로 다음 문장은 맞는 표현이지만 실제로아무런 의미가 없게 된다.

2 / 3; // 문법적으로는 맞음

GNU 컴파일러인 gcc에서 -Wall(enable all warnings) 옵션을 사용하면 이런 종류의문장에서 “statement has no effect”

C++로 시작하는 객체지향 프로그래밍 41

경고(warning)가 발생하게 된다.

Page 42: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제: 소수점 이하예제: 소수점 이하두 자리까지 구하기

소수점 아래 두 자리까지 세금(sale tax)을계산하는 프로그램을 작성하라.

SalesTax RSalesTax Run

C++로 시작하는 객체지향 프로그래밍 42

Page 43: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

char 유형char: 문자하나를 정의

문자리터럴은 문자 앞뒤에 단일 인용부호 (‘)로 표시문자리터럴은 문자 앞뒤에 단일 인용부호 ( )로 표시char letter = 'A'; // cf) “A” 문자열 A를 의미char numChar = '4‘;

NOTE: 증감 연산자를 문자에도 사용할 수 있는데

char numChar = 4 ;

NOTE: 증감 연산자를 문자에도 사용할 수 있는데, 다음 문자나 이전 문자를 구하고자 할 때 사용한다.

예를 들면, 다음은 문자 b를 출력한다. char ch = 'a'; cout << ++ch;

C++로 시작하는 객체지향 프로그래밍 43

;

Page 44: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

문자 읽어들이기

키보드에서 문자를 읽어 들이는 방법은 다음과같다.

cout << "Enter a character: "; char ch; i >> hcin >> ch;

C++로 시작하는 객체지향 프로그래밍 44

Page 45: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

이스케이프 문자

Ch t E S N ASCII C dCharacter Escape Sequence Name ASCII Code

\b Backspace 8 \t Tab 9 \n Linefeed 10 \f Formfeed 12 \r Carriage Return 13 \\ Backslash 92 \' Single Quote 39g Q \" Double Quote 34

C++로 시작하는 객체지향 프로그래밍 45

Page 46: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

Appendix B: ASCII 문자세트pp

C++로 시작하는 객체지향 프로그래밍 46

Page 47: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ASCII Character Set, cont.,

C++로 시작하는 객체지향 프로그래밍 47

Page 48: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

문자 유형과 숫자 유형간의형변환형변환

int i = 'a'; // int i = (int)'a';와 같다.

char c = 97; // char c = (char)97;와 같다.

C++로 시작하는 객체지향 프로그래밍 48

Page 49: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

문자에 수치 연산자 사용char 유형은 바이트 크기의 정수인 것처럼 사용된다. 모든 숫자 연산은

char에 적용될 수 있다. h 피연산자는 다른 피연산자가 숫자 또는 문자이면 자동적으로 숫자로char 피연산자는 다른 피연산자가 숫자 또는 문자이면 자동적으로 숫자로

형변환된다.

예를 들어 다음의 문장을 살펴보자예를 들어, 다음의 문장을 살펴보자. int i = '2' + '3'; // (int)'2'는 50이고 (int)'3'은 51이다. cout << "i is " << i << endl; // i는 10진수 101이다.

int j = 2 + 'a'; // (int)'a'는 97이다. cout << "j is " << j << endl; cout << j << " is the ASCII code for character " <<

static_cast<char>(j) << endl;

출력결과출력결과 ?

C++로 시작하는 객체지향 프로그래밍 49

Page 50: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

문자에 수치 연산자 사용char 유형은 바이트 크기의 정수인 것처럼 사용된다. 모든 숫자 연산은

char에 적용될 수 있다. h 피연산자는 다른 피연산자가 숫자 또는 문자이면 자동적으로 숫자로char 피연산자는 다른 피연산자가 숫자 또는 문자이면 자동적으로 숫자로

형변환된다.

예를 들어 다음의 문장을 살펴보자예를 들어, 다음의 문장을 살펴보자. int i = '2' + '3'; // (int)'2'는 50이고 (int)'3'은 51이다. cout << "i is " << i << endl; // i는 10진수 101이다.

int j = 2 + 'a'; // (int)'a'는 97이다. cout << "j is " << j << endl; cout << j << " is the ASCII code for character " <<

static_cast<char>(j) << endl;

출력결과출력결과 ?i is 101 j is 99

C++로 시작하는 객체지향 프로그래밍 50

99 is the ASCII code for character c

Page 51: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

Note •ASCII 코드에서 소문자는 'a'에서부터 'b', 'c', ...,

까지 연속된 값을 가진다'z'까지 연속된 값을 가진다.

•이것은 대문자도 마찬가지이며, 소문자 'a'의값이 대문자 'A'의 값보다 크다. 'a' - 'A'와 'b' -값이 대문자 A 의 값보다 크다. a A 와 b 'B'는 같은 값이 된다.

•소문자인 ch 문자의 대문자 값은i h ('A' ( h ' '))로 구할 수 있다static_cast<char>('A' + (ch - 'a'))로 구할 수 있다.

C++로 시작하는 객체지향 프로그래밍 51

Page 52: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

실 전 연 습

예제1 대출 납입금 계산하기예제1. 대출 납입금 계산하기

예제2 돈을 소단위 화폐로 변환하기예제2. 돈을 소단위 화폐로 변환하기

예제3 현재 시각 표시하기예제3. 현재 시각 표시하기

C++로 시작하는 객체지향 프로그래밍 52

Page 53: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제1 대출 납입금 계산하기예제1.대출 납입금 계산하기이 예는 대출한 돈에 대한 상환 대부금을 계산하는 방법을 설명한다.

대출금은 자동차 대출, 학자금, 주택담보대출 등 임의의 대출이라고생각하자.

사용자가 대출 이자율, 상환 연수, 대출액을 입력하면 매월 납입금과전체 납입 금액을 표시한다.

× erestRatemonthlyIntloanAmount납입금 계산식

1211−

×

b OfY

erestRatemonthlyIntloanAmount

12)1(1 ×+ arsnumberOfYeerestRatemonthlyInt

C++로 시작하는 객체지향 프로그래밍 53

ComputeLoan Run

Page 54: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제2 돈을 소단위 화폐로 환하기예제2. 돈을 소단위 화폐로 환하기

일정한 금액의 을 소단위 화폐 변환하는일정한 금액의 돈을 소단위 화폐로 변환하는프로그램을 살펴본다. 사용자가 일정 금액에 대해달러와 센트 값을 형태로 입력하면 금액을달러와 센트 값을 double 형태로 입력하면 금액을작은 화폐 단위(달러(dollar), 쿼터(quarter), 다임 니켈 페니 로 변환하여다임(dime), 니켈(nickel), 페니(penny))로 변환하여출력한다. 출력 조건은 달러를 시작으로 큰 단위의 화폐를출력 조건은 달러를 시작으로 큰 단위의 화폐를최대로 하여 출력하는 것이다.

ComputeChange Run

C++로 시작하는 객체지향 프로그래밍 54

ComputeChange Run

Page 55: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ComputeChange 분석

int remainingAmount = (int)(amount * 100); 1156remainingAmount

amount는 11.56

// Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;

remainingAmount 초기화

// Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;

// Find the number of dimes in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;remainingAmount = remainingAmount % 10;

// Find the number of nickels in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;

// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;

C++로 시작하는 객체지향 프로그래밍 55

int numberOfPennies = remainingAmount;

Page 56: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ComputeChange 분석animation

int remainingAmount = (int)(amount * 100); 1156remainingAmount

Amount는 11.56

// Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;

11numberOfOneDollars

// Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;

numberOfOneDollars 저장

// Find the number of dimes in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;remainingAmount = remainingAmount % 10;

// Find the number of nickels in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;

// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;

C++로 시작하는 객체지향 프로그래밍 56

int numberOfPennies = remainingAmount;

Page 57: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ComputeChange 분석animation

int remainingAmount = (int)(amount * 100); 56remainingAmount

Amount는 11.56

// Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;

11numberOfOneDollars

// Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;

remainingAmount 갱신

// Find the number of dimes in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;remainingAmount = remainingAmount % 10;

// Find the number of nickels in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;

// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;

C++로 시작하는 객체지향 프로그래밍 57

int numberOfPennies = remainingAmount;

Page 58: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ComputeChange 분석animation

int remainingAmount = (int)(amount * 100); 56remainingAmount

Amount는 11.56

// Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;

11numberOfOneDollars

// Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;

2numberOfOneQuarters

// Find the number of dimes in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;

numberOfOneQuarters 저장

remainingAmount = remainingAmount % 10;

// Find the number of nickels in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;

// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;

C++로 시작하는 객체지향 프로그래밍 58

int numberOfPennies = remainingAmount;

Page 59: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

ComputeChange 분석animation

int remainingAmount = (int)(amount * 100); 6remainingAmount

Amount는 11.56

// Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;

11numberOfOneDollars

// Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;

2numberOfQuarters

// Find the number of dimes in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;

remainingAmount 갱신remainingAmount = remainingAmount % 10;

// Find the number of nickels in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;

// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;

C++로 시작하는 객체지향 프로그래밍 59

int numberOfPennies = remainingAmount;

Page 60: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

예제3. 현재 시각 표시하기이 절에서는 현재 시간을 GMT(Greenwich Mean Time) 기준으로하여 13:19:8과 같이 시(hour):분(minute):초(second) 형식으로( ) ( ) ( )출력하는 프로그램을 살펴본다. time(0) 함수는 ctime 헤더 파일에 있는 함수이며, 1970년 1월일( )을 으로 하여 현재 시각까지 지난 시간을1일(GMT)을 00:00:00으로 하여 현재 시각까지 지난 시간을

초(second)로 반환한다(그림 2.1). 이 시간은 UNIX 기준(epoch) 시간이라고도 하는데 이때 UNIX 시스템이 공식적으로시간이라고도 하는데 이때 UNIX 시스템이 공식적으로출시되었기 때문이다.

Sh C Ti

Elapsed time ShowCurrentTime

RunUnix Epoch 01-01-1970 00:00:00 GMT

Current Time

Time

time(0)

C++로 시작하는 객체지향 프로그래밍 60

Run

Page 61: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

프로그래밍 스타일 및 문서화프로그래밍 스타일 및 문서화

적절한 주석과 주석 작성 스타일

변수와 상수의 이름변수와 상수의 이름

들여쓰기 및 줄간격

블록 작성 스타일

C++로 시작하는 객체지향 프로그래밍 61

Page 62: chap02.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/...상수(constant) 만들기) 상수 - 프로그램의실행동안변하지않는영구한값을가짐

질의 및 응답

끝끝

C++로 시작하는 객체지향 프로그래밍 62


Recommended