프로젝트 = 프로그램을 만드는 단위 (프로젝트 1개 == 프로그램 1개)
Visual Studio C++ 프로젝트 생성 시 화면
1. 외부 종속성 : 일단 무시 (자주 건들 일은 없음)
2. 리소스 파일 : 이미지나 기타 블러올 파일들을 넣어두는 곳
3. 소스 파일 : 우리가 프로그램에 코드를 작성할 부분
4. 헤더 파일 : 기타 명령어 셋을 추가하거나 만들 부분
소스.cpp에 작성하는 것이나, 소스.txt 에 코드 작성 후 확장자명을 .cpp로 바꿔도 똑같이 작용
(그런데, 인코딩 형식이 다르면 안되는 듯)
#include <iostream>
using namespace std;
cpp할 때 꼭 들어갈 부분 // 일종의 명령어를 불러오는 역할
- iostream : header라는 의미 / 우리가 쓰는 명령어가 들어가있음.
int main() {}
여러 줄의 코드에서, 시작점을 의미
우리가 실행할 부분이 어떤 건지 설명해주는 부분
cout : 우리가 볼 수 있게 콘솔에서 출력을 해주겠다 라는 의미
int main()
{
cout << "민코딩";
cout << "좋아요";
cout << "위 글과 이어서" << "또" << "쓰기";
}
출력
민코딩좋아요위 글과 이어서또쓰기
모두 1줄에 출력됨
줄바꿈을 하고 싶다면, \n을 글 중간에 삽입하면 됨
int main()
{
cout << "민코딩";
cout << "\\n";
cout << "좋아요";
}
출력
민코딩
좋아요
명령어 1줄 끝마다 세미콜론(;)을 사용함
이유 - 소스코드의 구분을 위해 / 세미콜론 단위로 코드가 실행됨
ctrl + F5 또는 F5로 프로그램 실행 (차이는 나중에 알고리즘 때 설명해주실 예정)
프로그램이란?
- 명령어들로 우리가 원하는대로 작동하게 만드는 것
- 계산기 역할 (내부적으로는 +, -, and, or 등을 해주는 계산기)
수(data)를 저장해야 하는데, 이 방법을 소개할 것
<기본 형태>
int a = 10;
- int : 자료형 (내가 지금 어떤 데이터인 지 미리 선언)
- a : 변수명 (그 데이터를 어떤 이름으로 사용할 지 선언)
- int b 라고만 써도 무방 ( 단, 이 때는 메모리를 할당한 상태 )
- a = 10
- 오른쪽에 있는 데이터를 왼쪽에 저장하겠다는 의미
위의 변수를 출력하고자 하면 다음과 같이 쓰면 된다
int main()
{
cout << a;
}
알파벳 a를 출력하고 싶다면, cout << “a”; 로 문자열 표시를 해주면 됨
int a = 10;
a = 10 * 10 + 20 * 5;
위와 같이 사칙연산이 진행될 시, 수학의 규칙을 그대로 따른다.
메모리 상에서 사칙연산은 어떻게 진행되는가?
- 변수는 RAM에 저장됨 → 연산은 CPU에서 → 결과를 RAM으로 가져와 할당된 메모리에 저장
자료형
자료형에는 다양한 것이 있다. 기본적으로 3가지를 보면,
어떤 자료형을 저장할 지, 어느 정도 크기인 지를 알려주는 것
- char (1 byte == 8 bit == 2진수 8자리)
- character의 약자 - ‘문자 1개’ 를 저장할 수 있음
- int (4 byte) ~
long- integer의 약자
- 정수 (약 -2,147,483,648 ~ +2,147,483,647까지 저장)
- 앞 1 bit는 부호 표기, 뒤 31 bit는 이진법 숫자 표기
- long long (8 byte)
- integer에 해당하는 정수를 저장 / integer로 표현 안 되는 큰 수를 저장
- double (8 byte)
- 실수(소수점이 존재하는 수)
※ 흔히 말하는 운영체제를 얘기할 때
- 32 bit 단위 ← 4 byte를 기본 숫자 단위로 사용
- int는 4 byte로 사용
- long은 4 byte로 사용
- 64 bit 단위 ← 8 byte를 기본 숫자 단위로 사용
- int는 4 byte로 사용
- long은 8 byte로 사용 (윈도우즈 64 bit 운영체제에서는 long도 4 byte)
문자를 나타낼 때, “ “(큰 따옴표) 는 문자 여러 개를 의미
char ch = 'A';
char ch2 = 'AEB';
int main()
{
cout << ch;
cout << '\\n'
cout << ch2;
return 0;
}
출력은
A
B
주의!) 작은따옴표로 표기 시, 가장 뒤의 문자만 저장됨
int main()
{
int a = 10;
a = a + 1;
// a++; // a에다가 1을 더해라
// ++a;
cout << (a++) << "\\n";
cout << (++a) << "\\n";
return 0
}
출력은
11
13
이유는 다음과 같다.
- cout << (a++) 는 아래의 코드를 줄여놓은 것이다
cout << a << "\\n"; // 기존의 a를 출력한 다음
a = a + 1; // 1을 더해라
- cout << (++a) 는 아래의 코드를 줄여놓은 것이다
a = a + 1; // 1을 더한 다음
cout << a << "\\n"; // 기존의 a를 출력해라
입력
출력은 cout, 입력은 cin을 사용
int main()
{
int a; // 입력받을 변수 선언
cin >> a; // 외부로부터 입력받은 수를 변수 a에 저장
cout << a; // a 값 출력
return 0;
}
cin은 알아서 변수의 형태에 맞게 넣어줌
예외1)
int main()
{
int a;
cin >> a;
cout << a;
return 0;
}
cin에 대문자 T를 입력 시 0이 출력
→ 입력을 받는 것 : 변수의 자료형에 영향을 받음
예외2)
int main()
{
int a;
char ch;
cin >> ch;
a = ch;
cout << a;
return 0;
}
출력
1
49
입력은 문자 ‘1’을 받은 것 (’1’과 1은 서로 다름; 저장 방식이 다름)
조건문
if ('조건') // 해당 '조건'을 만족시켰을 때, '행동1'을 진행해라
{
'행동1'
}
else // 위의 조건을 만족하지 않으면
{
'행동2' // 행동2를 진행해라
}
예시
int main() {
int a;
cin >> a;
// a가 홀수면 '홀'이라고 출력, a에다가 10을 더한 것을 출력
// a가 짝수면 '짝'이라고 출력
if (a % 2 == 1) // a % b : a를 b로 나눈 나머지 a == b : a와 b가 같은가?
{
cout << "홀";
//< -어떻게 진행해라
cout << (a + 10);
}
// 홀수가 아니면 '무조건' 짝
//<- 앞의 조건이 만족하지 '않으면'
else if (a > 10)
a = a + 100; // 한 줄만 쓸 때는 중괄호 생략 가능
else
a = a + 50;
// 짝수인 경우
// 10을 넘으면 100을 더함
// 10을 넘지 않으면 50을 더함
}
뒤는 중괄호 생략 가능
조건을 묶어야 하는 경우
ex) A가 3의 배수이면서 100이 넘는 경우
if (a % 3 == 0 && a > 100)
- && : AND의 의미; 양쪽의 조건을 모두 만족
- || : OR의 의미; 하나의 조건만 만족
조건이 3개 이상일 때
if (a > 100 && a % 3 == 0 || a % 2 == 0)
앞에서부터 계산됨. 따라서
조건2와 조건3을 먼저 계산하고 싶다면 소괄호로 묶어 계산
반복문
For 문
int main() {
// 1 ~ 150을 한 줄에 하나씩 작성 <- 150번 반복
for (문법 1; 문법 2; 문법 3)
{
// 문법 1 : 초기 세팅 (기준될 것을 만듦 / 시작점)
// 문법 2 : 조건 (반복문 종료 조건)
// 문법 3 : 반복 시 변화시킬 내용,
}
}
int main() {
for (int i = 1; i <= 150; i = i + 1)
{
cout << i << "\\n";
}
}
출력
1
2
...
149
150
- a가 1까지만 출력되게 하는 예제
int main() {
for (int i = 150; i >= 1; i = i - 1)
{
cout << i << "\\n";
}
}
출력
150
149
...
2
1
- A부터 Z까지 출력
for (char ch = 'A'; ch <= 'Z'; ch = ch + 1)
// 대문자 A는 65, 대문자 Z는 90
{
cout << ch;
}
‘모든 문자’는 숫자로 이루어져 있음 ⇒ 아스키 코드 확인
While 문
위 for 문을 while 문으로 바꿔보면..
char ch = 'A': // ch에 'A'를 저장
while (ch <= 'Z') { // 조건 확인 후 내용을 진행
cout << ch;
ch = ch + 1;
} // 도착하면 다시 위로
배열
데이터를 저장할 변수를 한 번에 여러 개 선언
int main() {
int arr[1000]; // 자료형 변수명[개수]
// 할당된 메모리에는 따로 값을 지정해주지 않으면 쓰레기 값(-85899~ 등)이 들어감
int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 중괄호로 묶어서 표현함
arr1[1] = 123; // 2번째 위치에 있는 배열의 값 (2) 을 123으로 덮어씌움
}
배열이 시작은 index = 0 부터
- 왜 0인가?
- (offset) : 시작에서부터 얼마나 떨어져 있는가? 의 의미
- system은 기본적으로 시작점의 정보만 갖고 있다.
- 쓰레기 값을 조심해야 함 / Visual Studio랑 실제 테스트에서는 다른 환경에서 돌아감
- VS에서는 쓰레기 값이 이상한 값으로 setting
- 채점 사이트에서는 다른 값으로 setting이 됨
int arr[1000] = {0}; // 이런 식으로 하면, 배열 내 원소는 전부 0으로 초기화
int arr[1000] = {0, 1}; // 이것은 [0, 1, 0, 0, 0, ---] 으로 세팅됨
// 위와 아래의 케이스 -> 직접 넣어준 값 제외하면 모두 0으로 세팅됨
2번째 코드와 연속해서 작성할 때 오류
i) int arr[1000] = {2, 3, 4, 5} // int는 새로 만든다는 의미이므로, 기존 변수 이름과 충돌
ii) arr[0] = {2, 3, 4, 5} // 크기가 지정된 메모리에 값이 전부 안 들어감
따라서, 처음 만들어줄 때 외에는 중괄호로 사용 불가
- 배열에 있는 원소를 한 번에 바꾸고 싶을 때
temp[4] = {2, 3, 4, 5};
for (int inde=0; index <= 3; index++){
arr[index] = temp[index]
} // 이런 식으로 배열과 반복문을 묶어 사용
함수
# 문법
void f() // <- 문법 : 자료형 함수이름()
// 괄호가 없으면 변수 있으면 함수
{
cout << "출력"; // 실행할 명령 코드들 기입
}
---
int main(){ // main 함수는 내부적으로 처음 실행시키는 명령어
f(); // 함수 f가 실행되면서 함수의 내부 코드가 돌아감
}
매개변수 : 함수를 사용할 때 값을 받아와 사용하겠다라는 의미
void f(int X){
for (int i = 0; i < X; i++) // '출력'을 X 번만큼 반복하게끔 함
{ // X 는 '매개변수'라고 함
cout << "출력";
}
}
int main(){
f(6); // f라는 함수에 6이라는 매개변수 전달
}
void : 결과가 따로 정해져있지 않다는 의미
void f(int X)
{
~
} // 실행하고 사라짐
int f(int X)
{
~
return ( ) // 이 함수의 결과를 알려주는 것
// 결과를 알아냈으므로, 밑의 코드는 실행 X
}
함수 변수 예시
#include<iostream>
using namespace std;
// 영역(중괄호) 안에서 만들어지는 변수 : 지역 변수(해당 영역 안에서만 사용이 가능)
int X = 5; // <- 함수 바깥에 선언(모든 함수에서 공통적으로 사용이 가능) : 전역 변수
void f() {
// main에서 사용하는 X의 값을 수정 : 2가지 방법으로 구현
// 1. '직접 찾아가서' <- '주소값을 사용하여 해결'
// 2. 애초에 X를 main과 f에서 공통적으로 사용할 수 있도록
X = 10;
cout << X << "\\n";
}
int main() {
cout << X << "\\n";
f(); // main에서는 정지
cout << X << "\\n";
}
출력
5
10
10
'IT_Study > C++' 카테고리의 다른 글
[그래프 #5] 유니온 파인드(Union Find) 알고리즘을 활용한 문제 풀이 방법 (2) | 2023.02.16 |
---|---|
[그래프 #4] 다익스트라(Dijkstra) 알고리즘을 활용한 문제 풀이 방법 (0) | 2023.02.15 |
[C++] STL : Sorting, Priority Queue 사용법 정리 (0) | 2023.02.13 |
[C++] 기초 (3) : 문자열(String), 벡터(Vector) (0) | 2023.02.06 |
[C++] 기초 (2) : 재귀 함수 & 전역변수와 지역변수 & Problem Solving (0) | 2023.01.27 |