IT_Study/C++

[C++] 기초 (1) : Visual Studio, 자료형, 입력, 조건문, 반복문, 배열, 함수

__Vivacé__ 2023. 1. 13. 07:45

프로젝트 = 프로그램을 만드는 단위 (프로젝트 1개 == 프로그램 1개)

 

 

Visual Studio C++ 프로젝트 생성 시 화면

우측 솔루션 탐색기에 외부 종속성, 리소스 파일, 소스 파일, 헤더 파일이 default로 생성된다.

 

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