본문 바로가기
ZAION/C++

[C++]Lec02. Basic Syntax

by 우기37 2024. 4. 23.

## 목차

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