Download presentation
Presentation is loading. Please wait.
1
7장. 분기와 반복 01_ 분기 02_ 반복
2
if/else를 사용한 조건 비교 미성년자를 판별하는 예 int age = 20; // 20 세
// 조건에 따라서 다른 문자열을 출력한다. if ( age <= 19) { cout << "미성년자입니다\n"; } else cout << "성인입니다\n";
3
else if를 사용한 조건문의 확장 19세인 사람을 별도로 처리하는 예 int age = 19; // 19 세
// 조건에 따라서 다른 문자열을 출력한다. if ( age <= 18) { cout << "미성년자입니다\n"; } else if ( age == 19 ) cout << "아쉽네요\n"; else cout << "성인입니다\n";
4
switch/case를 사용한 조건 비교 성적에 따라서 문자열을 출력하는 예 int score = 2;
switch( score ) { case 0: cout << "밀려 쓰셨군요~\n"; break; case 1: cout << "조금 더 노력하세요~\n"; case 2: cout << "안타깝네요~\n"; case 3: cout << "멋있어요~\n"; }
5
switch/case에서의 break switch/case 명령 안에서 break를 사용하면 switch 블록 밖으로 실행의 흐름이 이동된다.
6
switch/case를 사용한 조건 비교 - 기타
모든 조건을 만족하지 않는 경우를 처리하기 위해서 default 를 사용할 수 있다. 할 일이 같은 경우에는 case를 붙여서 사용할 수 있다. switch( score ) { . default: cout << " 올바르지 않은 점수입니다!!\n "; } switch( score ) { case 0: case 1: case 2: cout << "열심히 하세요~\n"; break; case 3: cout << "멋있어요~\n"; default: cout << " 올바르지 않은 점수입니다!!\n "; }
7
삼항 연산자 삼항 연산자를 사용해서 간단한 if/else를 대체할 수 있다. =
삼항 연산자는 C++에서 유일하게 3개의 피연산자를 받는 연산자다. int a = 3; int b = 5; int c = a > b ? a : b; = if ( a > b ) c = a; else c = b;
8
goto를 사용한 무조건 분기 goto 를 사용해서 원하는 위치로 실행의 흐름을 이동할 수 있다. = 실행 결과
int main() { // ILoveYou 라고 찍힌 곳으로 이동한다. goto ILoveYou; // 이곳을 뛰어넘는지 실험 cout << "이 문자열을 출력되면 안됩니다.\n"; ILoveYou: cout << "여기는 ILoveYou 다음입니다.\n"; return 0; } =
9
while 을 사용한 반복 while 을 사용해서 1~10의 합을 구하는 예 실행 결과
int i = 1; // 1 부터 10까지 증가할 변수 int sum = 0; // 전체 합을 보관할 변수 // ‘i <= 10’ 을 만족하는 동안만 반복한다. while( i <= 10) { // 현재까지의 합에 i를 더한다. sum += i; // i에 1을 더한다. ++i; } cout << "현재 i의 값 = " << i << "\n"; cout << "1~10 까지의 합 = " << sum << "\n";
10
while 의 문법 괄호안의 조건식이 참(true)일 동안 중괄호 안쪽의 코드를 반복적으로 실행한다.
11
반복명령 안에서의 break while 블록 안에서 break 를 사용하면 while 블록 밖으로 실행의 흐름이 이동된다.
뒤에서 배우는 for, do while 블록 안에서도 같은 방식으로 사용할 수 있다.
12
for 를 사용한 반복 for 를 사용해서 1~10의 합을 구하는 예 실행 결과 int sum = 0;
// 1~10까지 반복하면서 더한다. for (int i = 1; i <= 10; ++i) sum += i; // 현재까지의 합에 i를 더한다. cout << "현재 i의 값 = " << i << "\n"; cout << "1~10 까지의 합 = " << sum << "\n";
13
for 의 문법 괄호안에 순서대로 초기화 코드, 반복 조건, 증가 코드를 적는다. 초기화 코드는 처음 한 번만 실행한다.
매 반복이 끝날 때마다 반복 조건을 비교해서, 거짓(false)인 경우 반복을 종료한다. 매 반복이 끝날 때마다 증가 코드를 실행한다.
14
continue를 사용해서 반복 건너뛰기 5를 제외한 1~10의 합 구하는 예 실행 결과 int sum = 0;
// 1~10까지 반복하면서 더한다. for (int i = 1; i <= 10; ++i) { // i가 5인 경우는 그냥 넘어간다. if ( 5 == i ) continue; sum += i; // 현재까지의 합에 i를 더한다. } cout << "현재 i의 값 = " << i << "\n"; cout << "1~4, 5~10 까지의 합 = " << sum << "\n";
15
반복 명령을 중첩해서 사용하기 중첩된 반복을 사용해서 구구단을 계산하는 예 실행 결과
for (int i = 2; i <= 9; ++i) { cout << i << " 단 \n"; for (int j = 1; j <= 9; ++j) cout << i << " x " << j << " = " << i * j << "\n"; }
16
do while 을 사용한 반복 do while 사용해서 1~10의 합을 구하는 예 실행 결과
int i = 1; // 1 부터 10까지 증가할 변수 int sum = 0; // 전체 합을 보관할 변수 do { sum += i; // 현재까지의 합에 i를 더한다. ++i; // i에 1을 더한다. } while ( i <= 10); cout << "현재 i의 값 = " << i << "\n"; cout << "1~10 까지의 합 = " << sum << "\n";
17
9장. 배열 01_ 배열의 기본 02_ 배열에서의 문자열 사용
18
배열의 정의 5명의 국어 점수를 보관할 수 있는 배열을 정의해보자. 배열을 정의할 때는 원소의 타입과 개수를 지정해준다.
// int 타입의 배열 정의 int kor_scores[5]; // 임의의 값을 넣어본다. kor_scores[0] = 100; kor_scores[1] = 88; kor_scores[2] = 92; kor_scores[3] = 40; kor_scores[4] = 76;
19
배열의 원소에 접근하기 배열의 원소에 값을 읽거나 변경시키기 위해서는 다음과 같은 문법을 사용한다.
20
배열의 구조 배열의 원소들은 메모리상에 나란히 붙어서 위치한다(Linear).
21
배열의 원소 탐색하기 반복 명령을 사용해서 배열의 모든 원소의 값을 출력하는 예 실행 결과 int kor_scores[5];
for (int i = 0; i < 5; ++i) { cout << i << " 번째 원소 = " << kor_scores[i] << "\n"; }
22
배열의 초기화 배열을 정의하는 동시에 모든 원소들을 초기화 할 수 있다. = 배열을 초기화하는 다양한 방법
// 배열을 정의하면서 초기화 시킨다. int kor_scores[5] = {100, 88, 92, 40, 76}; = int kor_scores[5]; kor_scores[0] = 100; kor_scores[1] = 88; kor_scores[2] = 92; kor_scores[3] = 40; kor_scores[4] = 76; // 첫번째 원소뿐만 아니라 모든 원소들의 값이 0으로 채워진다. int kor_scores[5] = {0}; // 이 배열의 원소의 크기는 자동적으로 5가 된다. int kor_scores[] = {100, 88, 92, 40, 75};
23
배열의 크기 (1) 배열의 크기는 ‘원소의 크기’ x ‘원소의 개수’ 가 된다.
24
배열의 크기 (2) 배열의 크기를 확인하는 예 실행 결과 char cArray[3] = { 'A', 'B', 'C' };
int iArray[4] = { 100, 200, 300, 400}; // cArray의 크기에 대한 조사 cout << "sizeof(cArray) = " << sizeof(cArray) << " (Bytes)\n"; cout << "sizeof(cArray[0]) = " << sizeof(cArray[0]) << " (Bytes)\n"; cout << "원소의 개수 = " << sizeof(cArray) / sizeof(cArray[0]) << "\n\n"; // iArray의 크기에 대한 조사 cout << "sizeof(iArray) = " << sizeof(iArray) << " (Bytes)\n"; cout << "sizeof(iArray[0]) = " << sizeof(iArray[0]) << " (Bytes)\n"; cout << "원소의 개수 = " << sizeof(iArray) / sizeof(iArray[0]) << "\n\n";
25
문자열(Strings) 문자열이란 널문자(Null)로 끝나는 문자의 배열을 말한다.
널문자란 아스키(Ascii) 코드 값이 0인 문자를 말한다. // 다음의 두 가지 방법으로 널문자를 표현할 수 있다. char a = ‘\0’; // a에 널문자를 대입한다. char b = 0; // b에 널문자를 대입한다.
26
문자의 배열 vs 문자열 (1) 문자의 배열과 문자열의 차이점을 보여주는 예 실행 결과 // 그냥 문자의 배열을 만든다.
char ThisIsNotString[] = { 'H', 'e', 'l', 'l', 'o' }; // 문자열을 만든다. char ThisIsString[] = { 'H', 'e', 'l', 'l', 'o', '\0'}; // 두 배열을 cout 객체로 보낸다. cout << ThisIsNotString << "\n"; cout << ThisIsString << "\n";
27
문자의 배열 vs 문자열 (2) 이전 예제에서의 메모리 구조
28
문자열 상수(String Literals)
큰 따옴표를 사용해서 만드는 문자열 상수에는 자동적으로 널문자가 추가된다. 실행 결과 char cArray1[] = "ABCDE"; char cArray2[] = { 'A', 'B', 'C', 'D', 'E', 0 }; // 두 배열의 크기를 비교해 본다. cout << "sizeof(cArray1) = " << sizeof(cArray1) << " (Bytes)\n"; cout << "sizeof(cArray2) = " << sizeof(cArray2) << " (Bytes)\n"; // 두 배열의 4, 5 번째 원소를 출력해본다. cout << cArray1[4] << (int)cArray1[5] << "\n"; cout << cArray2[4] << (int)cArray2[5] << "\n";
29
10장. 구조체 01_ 구조체의 기본
30
구조체의 정의 학생의 정보를 보관하기 위한 구조체를 정의해보자. 구조체를 정의하는 방법
// 'StudentInfo'라는 이름의 구조체를 정의한다. struct StudentInfo { char bloodType; // 혈액형 int stdNumber; // 학번 float grade; // 평점 };
31
구조체 변수의 정의 두 명의 학생 정보를 보관하기 위해서 두 개의 구조체 변수를 정의해보자. 메모리 구조
// StdudentInfo 구조체 타입의 변수 2개를 정의한다. StudentInfo si1; StudentInfo si2;
32
구조체 vs 구조체 변수 구조체는 구조체 변수의 모양(layout)을 명시하는 설계도와 같은 역할을 한다.
ex) 앞에서 본 구조체 정의의 의미 “컴퓨터야, 앞으로 StudentInfo 라는 구조체의 모양(layout)에 대해서 알려줄게. 그 구주체는 bloodType, stdNumber, grade라는 변수가 들어갈거야” 구조체 변수를 정의할 때 실제로 정보를 보관할 수 있는 공간이 마련된다. ex) 앞에서 본 구조체 변수 정의의 의미 “컴퓨터야, 앞에서 정의한 StudentInfo 라는 구조체 알지? 그 때 알려준 모양(layout)으로 변수를 하나 만들어다오”
33
멤버에 접근하기 구조체에 포함되는 각 변수들을 멤버 혹은 멤버변수라고 부른다. 멤버 변수의 값을 얻어오거나 변경하는 방법
ex) StudentInfo 구조체의 멤버 변수들 bloodType, stdNumber, grade 멤버 변수의 값을 얻어오거나 변경하는 방법 StudentInfo si1; si1.bloodType = 'O'; si1.stdNumber = ; si1.grade = 3.5f;
34
구조체의 초기화 구조체 변수를 정의함과 동시에 모든 멤버들을 초기화할 수 있다. struct StudentInfo {
char bloodType; // 혈액형 int stdNumber; // 학번 float grade; // 평점 }; int main() // StudentInfo 구조체 타입의 변수 2개를 정의한다. StudentInfo si1 = { 'O', , 3.5f }; StudentInfo si2 = { 'A', , 2.3f }; .
35
구조체의 대입 구조체 변수끼리 대입을 하면 각 멤버 변수들이 1:1로 복사된다. 실행 결과 struct Point {
int x; // x 좌표 int y; // y 좌표 }; Point pt1 = { 30, 50}; Point pt2; pt2 = pt1; // pt1을 pt2에 대입한다. cout << "pt1 = ( " << pt1.x << ", " << pt1.y << ")\n"; cout << "pt2 = ( " << pt2.x << ", " << pt2.y << ")\n";
36
구조체 정의 2 구조체를 정의하는 동시에 구조체 변수를 정의할 수 있다. 이런 경우에는 구조체의 이름을 생략할 수 있다.
struct Point { int x; int y; } pt1 = { 30, 50}, pt2; struct // 구조체의 이름 생략 { int x; int y; } pt1 = { 30, 50}, pt2;
Similar presentations