C++ 발제, Git 특강, 프로그래밍 기초 1-3강, 1-4강
C++ 발제 - 16일 까지 해올 것(당장 시작할 필요는 없다.)
변수, 배열, 함수, 조건문, 반복문
요구 사항 분석 및 설계 - 코드 작성 및 구현 - 테스트 및 디버깅
변수 이름 짓는데 오래 걸린다 라는 우스겟 소리가 있다. (농담 반 진담 반)
===
HP, MP, 공격력, 방어력int형 배열로 선언, 전체 값들은 0으로 초기화
(배열 이름이 status라면 status[0]은 HP, status[3]은 방어력)
HP와 MP를 입력 받고, HP/MP중 하나라도 50 이하의 숫자를 입력 받을 경우 다시 입력 받습니다.
HP와 MP에 값을 입력 받은 후 공격력과 방어력을 입력 받습니다.
공격력이나 방어력이 하나라도 0 이하의 숫자를 입력 받을 경우 다시 입력 받습니다.
스텟 관리 시스템을 시작합니다.
1. HP UP 2. MP UP 3. 공격력 UP 4. 방어력UP 5. 현재 능력치 6. Level UP 0. 나가기
선택지를 출력한 후, int형 정수 하나를 입력 받아서 해당 선택지를 실행합니다.
포션 지급 함수를 작성합니다.
래포지토리
2번 과제
점검 예시
===
과제는 화요일 14:00까
아스키 아트
객체 지향 프로그래밍(OOP)
클래스(구조체)
재정의(오버라이딩)
==============================
Git 특강
Git이라는 것이 무엇인가 에 대한 설명.
리파지토리(저장소?)
깃헙 데스크탑을 사용하는 것을 권장한다.
깃에 기록이 어떻게 흘러가는가.
제목/주석 으로 관리할 수 있다.
풀 - 서버->컴퓨터 저장
푸시 - 컴퓨터->서버 저장
커밋 - 컴퓨터에 저장
브랜치 전략
==============================
프로그래밍 기초 1-3
if /else if /else를 활용하는 방법
depth - 들여쓰기가 3개를 넘어가면 잘 짜여진 코드가 아닐 수 있다.
&&, ||
and, or 직렬/병렬 과 같은 구조.
for 문
(a; , b; , c) {코드}
초기화 a 와 조건 b의 뒤에는 반드시 종결; 을 붙여줘야 하고 c뒤에는 오지 않아도 된다.
===============================
프로그래밍 기초 1-4
포인터 와 레퍼런스
포인터 - 변수의 주소 값을 담는 명령
주소는 자리일 뿐이다.
포인터의 타입도 중요하다. (크기와 관련되어있는 듯?)
배열의 이름은 0번(시작) 자리 주소를 의미한다는 특징을 가진다.
char이라면 1byte씩 움직인다. (int 는 4씩 움직임)
*p - 포인터 p , &a - a의 주소 값
변수와 포인터의 문법이 일치해야 사용할 수 있다. (크기가 다르니까)
===
#include <iostream>
using namespace std;
int main() {
int x = 3;
char y = 'A';
int* ptr1 = &x;
char* ptr2 = &y;
cout << "ptr1: " << ptr1 << ", ptr1 + 1: " << ptr1 + 1 << endl;
cout << "ptr2: " << (void*)ptr2 << ", ptr2 + 1: " << (void*)(ptr2 + 1) << endl;
return 0;
}
/*
출력 결과 (주소는 실행할 때마다 다를 수 있음):
ptr1: 0x61ff00, ptr1 + 1: 0x61ff04 (int는 4바이트)
ptr2: 0x61ff04, ptr2 + 1: 0x61ff05 (char는 1바이트)
*/
===
void* - 메모리의 주소만 가진 포인터, 순수한 주소 값으로 바꿀 때 사용된다.
배열 buf가 있을 때
buf[k] = *(buf+k)
*ptr == ptr[0] / *(ptr+1) == ptr[1] - ptr 배열의 포인터일 때는 배열 번호[]를 포인터도 사용이 가능하다.
배열 포인터는 2차원 배열에 활용된다.
레퍼런스 - ref
레퍼런스는 선언과 동시에 초기화를 해야 한다.
선언한 이후 다른 대상으로 변경할 수 없다.
Null *Null
Null => (void*)0 -0인지 0번째인지 구분하기 어렵기 때문에 Null*를 사용한다고 한다.
=====
#include <iostream>
int main() {
// 1. 정수형 변수 value를 선언하고 25라는 값을 할당하세요.
int value = 25; // <-- 이 부분을 채우세요. value 변수에 초기값 25를 넣으세요.
// int value = ___; // <-- 이 부분을 채우세요. value 변수에 초기값 25를 넣으세요.
// 2. value 변수의 주소를 저장할 포인터 변수 ptr을 선언하세요.
// ptr이 value를 가리키도록 value 변수의 주소를 ptr에 저장하세요.
int* ptr = &value; // <-- 이 부분을 채우세요. value 변수의 주소를 여기에 넣으세요.
// int* ptr = ___; // <-- 이 부분을 채우세요. value 변수의 주소를 여기에 넣으세요.
// 3. 포인터 ptr을 사용하여 value 변수의 값을 출력하세요.
// (힌트: 포인터가 가리키는 값을 얻으려면 역참조 연산자 '*'를 사용합니다.)
std::cout << "포인터를 통해 접근한 value의 값: " << *ptr; // <-- 이 부분을 채우세요. ptr이 가리키는 값을 출력하세요.
// std::cout << "포인터를 통해 접근한 value의 값: " << ___; // <-- 이 부분을 채우세요. ptr이 가리키는 값을 출력하세요.
std::cout << std::endl;
return 0;
}
=====
#include <iostream>
int main() {
// 1. 정수형 변수 score를 선언하고 80이라는 값을 할당하세요.
int score = 80; // <-- 이 부분을 채우세요. score 변수에 초기값 80을 넣으세요.
// int score = ___; // <-- 이 부분을 채우세요. score 변수에 초기값 80을 넣으세요.
// 2. score 변수를 참조(Reference)하는 레퍼런스 변수 score_ref를 선언하세요.
int& score_ref = score; // <-- 이 부분을 채우세요. score_ref가 score를 참조하게 만드세요.
// int& score_ref = ___; // <-- 이 부분을 채우세요. score_ref가 score를 참조하게 만드세요.
// 3. 레퍼런스 score_ref를 사용하여 score 변수의 값을 출력하세요.
std::cout << "레퍼런스를 통해 접근한 score의 값: " << score_ref; // <-- 이 부분을 채우세요. score_ref를 사용하세요.
// std::cout << "레퍼런스를 통해 접근한 score의 값: " << ___; // <-- 이 부분을 채우세요. score_ref를 사용하세요.
std::cout << std::endl;
// 4. 레퍼런스 score_ref를 사용하여 score 변수의 값을 95로 변경하세요.
score_ref = 95; // <-- 이 부분을 채우세요. score_ref에 새 값 95를 할당하세요.
// score_ref = ___; // <-- 이 부분을 채우세요. score_ref에 새 값 95를 할당하세요.
// 5. score 변수의 값이 실제로 변경되었는지 확인하기 위해 score 변수 자체를 출력하세요.
std::cout << "레퍼런스 변경 후 score의 값: " << score; // <-- 이 부분을 채우세요. score 변수 자체를 사용하세요.
// std::cout << "레퍼런스 변경 후 score의 값: " << ___; // <-- 이 부분을 채우세요. score 변수 자체를 사용하세요.
std::cout << std::endl;
return 0;
}
=====

====================
미니 실습, 도전 실습(4일 학습한 계산기 변형 전(단순화)과 개선 및 주석 추가)
=====
#include <iostream>
using namespace std;
int main() {
int FirstNum = 0;
int SecondNum = 0;
//사용할 변수 둘 초기화
cout << "Input First Num : ";
cin >> FirstNum;
//입력 받을 첫 번째 수를 알리고 입력 값을 첫 번째 변수(FirstNum)에 저장
cout << "Input Second Num : ";
cin >> SecondNum;
//입력 받을 두 번째 수를 알리고 입력 값을 두 번째 변수(SecondNum)에 저장
cout << FirstNum << "+" << SecondNum << "=" << FirstNum + SecondNum <<endl;
//연산을 완료한 값을 출력합니다.
return 0;
}
=====
#include <iostream>
using namespace std;
int main() {
int FirstNum = 0;
int SecondNum = 0;
char Calculation = 0;
//사용할 세 변수를 형식에 맞게 각각 초기화.
cout << "Operater(+, -, *, /) To Use : ";
cin >> Calculation;
// 사용할 수 있는 연산자를 명시하고 입력 받은 값을 Calculation에 대입
cout << "Input First Num : ";
cin >> FirstNum;
// 첫 번째 수를 받는 다는 것을 명시하고 입력 받은 값을 FirstNum에 대입
cout << "Input Second Num : ";
cin >> SecondNum;
// 두 번째 수를 받는 다는 것을 명시하고 입력 받은 값을 SecondNum에 대입
cout << " Result : ";
//공통으로 출력 될 "결과 : "를 우선 출력
if (Calculation == '+') {
cout << FirstNum + SecondNum << endl; // + 연산자가 입력 되었을 때 덧셈을 실행시키는 내용
} else if (Calculation == '-') {
cout << FirstNum - SecondNum << endl; // - 연산자가 입력 되었을 때 뺄셈을 실행시키는 내용
} else if (Calculation == '*') {
cout << FirstNum * SecondNum << endl; // * 연산자가 입력 되었을 때 곱셈을 실행시키는 내용
} else if (Calculation == '/') {
cout << FirstNum / SecondNum << endl; // / 연산자가 입력 되었을 때 나눗셈을 실행시키는 내용
} else cout << " Wrong Operator Used "; // 명시되지 않은 문자가 입력 되었을 때 이를 알리는 내용
return 0;
}
=====
제시된 숙제의 예시대로 출력되도록 변형하려면 Calculation을 int형으로 변환하고 형식에 맞게 1, 2, 3, 4에 각각 +, -, *, / 연산자를 할당하겠다고 출력한 후 마지막 if문을 1, 2, 3, 4에 각각의 연산을 하게 만든 후 마찬가지로 그외는 입력이 잘못되었다 라고 출력해주면 된다.
cout << " 1) + \n" << " 2) - \n" << ... <<endl;
if (Calculation == 1 ) {
.....
} else cout << " Can't find correct Operator " << endl;
과 같이 변형할 수 있다.
*p - 포인터 p , &a - a의 주소 값
void* - 메모리의 주소만 가진 포인터, 순수한 주소 값으로 바꿀 때 사용된다.
depth - 들여쓰기가 3개를 넘어가면 잘 짜여진 코드가 아닐 수 있다.
const - 뒤의 변수를 상수로 취급하겠다 라는 선언
배열 buf가 있을 때 -> buf[k] = *(buf+k) buf[k]- 배열 buf의 k번 값은 포인터 buf+k와 같다.
*ptr == ptr[0] / *(ptr+1) == ptr[1] - ptr 배열의 포인터일 때는 배열 번호[]를 포인터도 사용이 가능하다.
.
'TIL' 카테고리의 다른 글
| 25.12.09일자 -TIL (0) | 2025.12.09 |
|---|---|
| 25.12.08일자 - TIL (0) | 2025.12.08 |
| 25.12.04 - TIL (1) | 2025.12.04 |
| 25.12.03일자 - TIL (0) | 2025.12.03 |
| 25.12.02일자 - TIL (0) | 2025.12.02 |