## 목차
1. 배열
2. 표현식
3. 명령문
4. 연산자
5. 제어문
#1 Array(배열)
1 - 1) 개요
- 복합 데이터타입
- 동일한 타입인 요소들의 집합
- 개별 요소들에 직접적인 접근이 가능하다.
- 아래와 같이 동일한 타입의 변수를 반복해서 선언할 때 효율적으로 바꾸기 위해서 사용한다.
특징
- 고정된 길이
- 연속된 메모리 주소에 저장
- 인덱스를 통해 접근이 가능
- 인덱스는 0부터 시작하며, 마지막 인덱스는 length-1
- out of bound(배열이나 메모리 범위를 벗어난 에러) 체크 하지 않음
- 초기화 필요
- 효율적인 데이터 구조
int main() {
int scores[6] = { 100, 85, 21, 56, 70, 95 };
}
1 - 2) 선언과 초기화
배열의 기본 선언형
배열의 초기화
int main() {
int scores[5] = { 100, 85, 21, 56, 70 };
int highScores[10] = { 3, 5 }; // 3, 5 and remaining 0
const int daysInYear = 365;
double temperature[daysInYear] = { 0 }; // all to zero
int myArray[] = { 1, 2, 3, 4, 5 }; // automatic sizing
}
1 - 3) 접근
배열 내의 요소들을 사용(=읽고 쓰기)
요소들은 개별적인 주소를 갖고 있으므로 변수와 동일하게 값 수정이 가능하다.
#2 표현식(Expressions)
코드의 가장 작은 구성요소
ex) 연산을 통해 값을 계산
34 // literal
favorite_number // variable
3+5 // addition
3*5 // multiplication
a>b // relational
a = b // assignment
#3 명령문(Statements)
- 명령을 수행하는 코드 단위
- 세미콜론(";")으로 끝나는 문장
- 표현식의 집합
int favorite_number; // declaration
favorite_number = 20; // assignment
3 + 5; //expression
favorite_number = 3 * 5; // assignment
if (a>b) cout << "a is greater than b"; // if
#4 연산자(Operations)
연산자
- 단항(unary), 이항(binary), 삼항(ternary) 연산자
대입 연산자
lhs = rhs
l-value & r-value
- 오른쪽의 값을 계산하여 왼쪽에 대입한다.
- 컴파일러가 대입이 가능한지 체크한다.
- 왼쪽은 대입이 가능해야 한다.(ex. 리터럴, 상수는 될 수 없음)
산술 연산자
+, -, *, /, %(mod)
증감 연산자
- 대입 전 증감 : Prefix(++num, --num)
- 대입 후 증감 : Postfix(num++, num--)
비교 연산자
==, !=
결과는 Boolean 타입의 true or false
관계 연산자
<, >, <=, >=
논리 연산자
- !(not), &&(and), ||(or)
- short-circuit evaluation : 결과 파악이 가능한 경우 나머지 연산을 하지 않음(최적화), && 연산일 때, 하나라도 false이면 무조건 답이 false이고 || 연산일 땐, 하나라도 true이면 무조건 답이 true이다.
if (expr && expr2 && expr3) // if expr1 is false?
if (expr1 || expr2 || expr3) // if expr1 is true?
복합 연산자
a += 1; // a = a + 1;
a *= b + c; // a = a*(b+c);
연산자 우선순위
혼동을 없애기 위해 우선순위 괄호표기 하는 것이 좋은 코드이다.
#5 제어문(Control Flow Statements)
5 - 1) 조건문(Conditional Statement)
if문
표현식이 참일 경우에만 실행하는 명령문
if (Expr)
statement;
if (num > 10)
++num;
if문과 블록
- 조건문 내에서 하나 이상의 명령문을 실행하기 위해서는 블록 내에 명령문을 작성해야 한다.
- 블록은 "{" 로 시작해서 "}" 로 끝난다.
- 블록 내에서 선언된 변수는 "지역변수"라 하며, 블록 내에서만 접근이 가능하다.
if (expr) {
int a = 10; // local variable
}
cout << a << endl; // error!
if - else 문
- 표현문의 참/거짓 여부에 따라 명령문 실행 분기
- else if 키워드를 통해 다양한 조건을 기술 가능하다.
if (score > 90) {
cout << "A";
}
else if (score > 80) {
cout << "B";
}
else if (score > 70) {
cout << "C";
}
else {
cout << "F";
}
nested(중첩) if문
- 블록과 if-else문을 중첩하여 복잡한 조건을 효율적으로 기술 가능하다.
if (my_score != your_score) {
if (my_score > your_score) {
cout << "I Win!";
}
else {
cout << "You Win!";
}
}
else {
cout << "Tie..";
}
switch문
- switch, case, default를 사용한 분기문
- switch 표현문의 결과는 정수형 리터럴이어야 한다.(정수, char, 열거형)
switch (selection) {
case 1: cout << "1 selected";
case 2: cout << "2 selected";
case 3: cout << "3 selected";
case 4: cout << "4 selected";
break;
default: cout << "Not 1, 2, 3, 4";
}
?: 연산자
(conditional_expr) ? expr1 : expr2
- conditional_expr은 boolean 표현식
- 표현식이 참이라면 expr1의 값을 리턴
- 표현식이 거짓이라면 expr2의 값을 리턴
- if-else 문의 사용과 유사함
- 삼항 연산자
int a = 10, b = 20;
int score = 92;
int result {};
result = (a > b) ? a : b;
result = (a < b) ? (b - a) : (a - b);
result = (b != 0) ? (a / b) : 0;
cout << ((score > 90) ? "Excellent!":"Good!");
5 - 2) 반복문(Looping Statement)
반복 조건 + 명령문
사용 목적
- 특정 회수만큼 반복이 필요할 때
- 집합의 각 요소에 대한 연산이 필요할 때
- 특정 조건이 참일 동안 명령의 수행이 필요할 때
- 입력 스트림의 끝까지 반복을 수행해야 할 때
- 무한 반복이 필요할 때
등
for문
for(초기화; 종료조건; 증감) {
명령문;
}
초기화 부분에서 변수를 생성해서 사용한다.
for (int i = 0; i < 5; i++) {
cout << i << endl;
}
i = 10; //Error!
배열루프
int scores[] = {100, 50, 90};
for (int i = 0; i < 3; i++) {
cout << scores[i] << endl;
}
콤마 연산자
for (int i = 0, j = 5; i < 5; i++, j++) {
cout << i << " * " << j << " : " << i * j << endl;
}
for문에 모든 조건이 항상 존재해야 할 필요는 없다
int i = 0;
for (; true; ) {
i++;
if (i <= 5) {
cout << i << endl;
}
else {
break;
}
}
while 문
while 뒤에 오는 조건문이 만족할 동안 {} 내부 로직을 수행한다.
while(expr) {
statements;
}
int i = 0;
while (i < 5) {
cout << i << endl;
i++;
}
Boolean flag 사용
bool is_done = false;
int number = 0;
while (!is_done) {
cout << "enter number under 10" << endl;
cin >> number;
if (number >= 10) {
cout << "wrong number" << endl;
}
else {
cout << "OK!" << endl;
is_done = true;
}
}
do while 문
반복하기 전에 do 코드를 수행하고 반복문을 수행한다.
do {
statements;
} while(expr);
int number;
do {
cout << "enter number under 10" << endl;
cin >> number;
} while (number <= 10);
cout << "OK!" << endl;
continue
- continue문 이후의 문장은 실행되지 않는다.
- 다음 iteration(반복)으로 곧바로 넘어가기 위해사용한다. 즉, 일부 코드를 실행하지 않고 점프한다.
break
- break문 이후의 문장은 실행되지 않는다.
- 루프 밖으로 바로 빠져나가기 위해 사용한다.
int values[] = { 1, 2, -1, 3, -1, -99, 7, 8, 9 };
for (int i = 0; i < 9; i++) {
if (values[i] == -99) {
break;
}
else if (values[i] == -1) {
continue;
}
else {
cout << values[i] << endl;
}
}
※본 블로그는 학습을 하며 제가 이해한 내용을 바탕으로 작성되어 실제 정의와 다를 수 있습니다.
참고문헌
GitHub - diskhkme/cpp_lecture_material: C++ 프로그래밍 강의 자료
https://www.aladin.co.kr/shop/wproduct.aspx?ISBN=K842939734&start=pnaver_02
'ZAION > C++' 카테고리의 다른 글
[C++]Lec03. Function (0) | 2024.04.25 |
---|---|
[C++]Lec02. Debugging (0) | 2024.04.24 |
[C++]Lec01. Variable and Constant (1) | 2024.04.23 |
[C++]Lec01. Program Structure (0) | 2024.04.23 |
[C++]Lec05. OOP / Class (0) | 2024.04.18 |