C++ 프로그래밍의 핵심 기초 문법을 실습 위주로 정리했다. 변수 선언부터 자료형별 연산, 입출력까지 직접 코드를 작성하며 기본기를 다졌다. 🚀 조건문(if)과 반복문(for)을 활용해 문제 해결 능력을 키웠고, 코드 재사용의 핵심인 함수를 값, 참조, 포인터 방식으로 다양하게 호출해보며 각각의 차이를 명확히 이해했다. 특히 const 포인터와 같은 헷갈리기 쉬운 개념들도 예제와 함께 정리하며 기초를 탄탄히 다졌다.
cin, getline)if / switch, for / while / do...while 실습int, float, char, string, bool)에 맞는 변수를 선언하고 초기화한 뒤, cout으로 출력했다. boolalpha를 사용하면 bool 타입이 1/0이 아닌 true/false로 출력된다.#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 1;
float b = 9.87f;
char c = 'C';
string d = "메롱";
bool e = true;
cout << boolalpha; // true/false로 출력
cout << "a: " << a << ", b: " << b << ", c: " << c << ", d: " << d << ", e: " << e << endl;
return 0;
}
%가 아닌 <cmath> 헤더의 fmod() 함수를 사용해야 한다.#include <iostream>
#include <cmath> // fmod 함수 사용을 위해 포함
using namespace std;
int main() {
int a = 123, b = 456;
cout << a + b << endl; // 덧셈
cout << a % b << endl; // 정수 나머지 연산
float x = 123.0f, y = 456.0f;
cout << x / y << endl; // 실수 나눗셈
cout << fmod(x, y) << endl; // 실수 나머지 연산
return 0;
}
for 반복문으로 1부터 10까지 순회하면서, if 조건문으로 짝수만 골라내 합계를 구하는 예제다.#include <iostream>
using namespace std;
int main() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) { // i가 짝수일 때만
sum += i; // sum에 더함
}
}
cout << "1부터 10까지 짝수의 합: " << sum << endl;
return 0;
}
multiply 함수를 매개변수 타입만 다르게(int, double) 하여 여러 개 정의했다. 컴파일러가 인자 타입에 맞는 함수를 알아서 호출해준다.#include <iostream>
using namespace std;
// 정수형 곱셈 함수
int multiply(int x, int y) { return x * y; }
// 실수형 곱셈 함수 (오버로딩)
double multiply(double x, double y) { return x * y; }
int main() {
cout << "정수 곱셈: " << multiply(3, 4) << endl;
cout << "실수 곱셈: " << multiply(2.5, 4.0) << endl;
return 0;
}
#include <iostream>
using namespace std;
// 참조(reference)를 통해 원본 값 변경
void addOne(int& x) { x += 1; }
// 포인터(pointer)를 통해 원본 값 변경
void addOnePtr(int* x) { (*x) += 1; }
int main() {
int a = 5;
cout << "Original: " << a << endl;
addOne(a); // 참조 전달
cout << "After addOne: " << a << endl; // a가 6으로 변경됨
addOnePtr(&a); // 주소 전달
cout << "After addOnePtr: " << a << endl; // a가 7로 변경됨
return 0;
}
#include <iostream>
using namespace std;
// 두 변수 중 더 큰 변수의 '참조'를 반환
int& getMax(int& x, int& y) {
return (x > y) ? x : y;
}
int main() {
int a = 10, b = 20;
getMax(a, b) = 100; // b가 100으로 변경됨
cout << "a: " << a << ", b: " << b << endl; // 출력: a: 10, b: 100
return 0;
}
const 키워드의 위치에 따라 포인터가 가리키는 값을 보호할지, 포인터 변수 자체의 주소를 보호할지 결정된다.int main() {
int a = 10;
int b = 20;
// p1이 가리키는 '값'을 바꿀 수 없음 (*p1 = 30; // 에러)
const int* p1 = &a;
p1 = &b; // p1이 다른 변수를 가리키는 것은 가능
// p2가 가리키는 '주소'를 바꿀 수 없음 (p2 = &b; // 에러)
int* const p2 = &a;
*p2 = 30; // p2가 가리키는 값 변경은 가능
// p3는 값과 주소 둘 다 변경 불가
const int* const p3 = &a;
return 0;
}
vector<int> v = {1, 2}; 에 v * 2; 같은 연산이 될 줄 알았는데, 벡터는 이런 식의 일괄 연산을 지원하지 않았다. 원소별로 연산하려면 반복문이나 <algorithm>의 transform 함수가 필요했다.int a = 5, b = 2; 일 때 a / b의 결과가 2.5가 아닌 2가 나와서 당황했다. 정수끼리의 나눗셈은 소수점 이하를 버린다는 것을 잊고 있었다. 정확한 결과를 원하면 (float)a / b 처럼 형 변환을 해야 했다.%를 사용할 수 없다는 것을 몰랐다. fmod() 함수를 써야 한다는 것을 새로 배웠다.int a = 5; int b = a++; 와 int c = ++a; 의 결과가 다른 이유를 헷갈렸다. a++는 값을 먼저 대입하고 a를 증가시키고, ++a는 a를 먼저 증가시키고 값을 대입한다는 순서 차이를 명심해야겠다.const int* p와 int* const p의 차이가 너무 헷갈렸다. const가 *의 왼쪽에 있으면 값을, 오른쪽에 있으면 포인터 자체를 보호한다고 외워야겠다.= vs == 실수: if (x = 5) 처럼 조건문에 대입 연산자를 써서 의도치 않은 버그를 만들었다. 비교는 반드시 ==를 사용해야 한다.| 구분 | 핵심 개념 | 예시 코드 / 특징 |
|---|---|---|
| 변수 선언·초기화 | 자료형 + 이름, 초기값 할당 | int a = 1; |
| 산술 연산 | +, -, *, /, % | %는 정수 전용, 실수는 fmod() |
| 대입 연산 | =, +=, -=, *=, /= | a += 3; |
| 비교 연산 | ==, !=, <, >, <=, >= | if (a == b) |
| 증감 연산 | ++, -- (전위/후위) | ++x (증가 후 사용) vs x++ (사용 후 증가) |
| 입출력 | cin / getline | getline은 공백 포함 한 줄 읽기 |
| = vs == | 대입(Assignment) vs 비교(Comparison) | if (x == 5) |
| unsigned | 음수 불가, 양수 표현 범위 2배 | unsigned int u |
| 조건문 | if / switch | switch는 정수 계열 타입으로 분기 |
| 반복문 | for / while / do...while | do...while은 조건을 나중에 검사하여 최소 1회 실행 보장 |
| 함수 | 값/참조/포인터 전달, 오버로딩 | 참조 반환: int& getMax(int&, int&) |
| 전역/지역 변수 | 변수의 범위(scope)와 수명(lifetime)이 다름 | 전역은 프로그램 전체, 지역은 해당 블록({}) 내에서만 유효 |
| 상수 | 값이 변하지 않는 변수 | const double PI = 3.14; |
| const 포인터 | 값 상수 / 포인터 상수 / 둘 다 상수 | const int* p, int* const p, const int* const p |