우리는 소스 코드 작성법 배우는.
솔루션-프로젝트-소스 코드: 솔루션은 제품 그 자체. 솔루션(오감자) 프로젝트(봉투, 과자, 디핑소스), 소스코드 (실제로 각 프로젝트 동작하게 만드는)
파스칼 케이스: EatDoNotDrink 카멜케이스: eatDoNotDrink 스네이크 케이스: eat_do_not_drink
\n, \t - 개행, 탭. 따옴표/쌍따옴표/역슬래시는 \ 추가로. %% 이 %출력
%d -> 10진수 표시. %c, %f, %s 등등 서식 지정자 중요.
리터럴 - 소스코드에 적힌 값 그 자체.
- 자료형 -
| 자료형 | 크기 == 표현 가능한 수 | 서식 지정자 |
|---|---|---|
| char | 1 byte. -(2^7) ~ (2^7) - 1 [-128 ~ 127] | %c or %hhd |
| short int | 2 byte. -(2^15) ~ (2^15) - 1 [-32768 ~ 32767] | %hd |
| int [기본 정수 자료형] | 4 byte. -(2^31) ~ (2^31) - 1 [-2147483648 ~ 2147483647] | %d or %i |
| long | 4 byte or 8 byte | %ld |
| long long | 8 byte. -(2^63) ~ (2^63) - 1 | %lld |
| float | 4 byte. 유효 자릿수 6~7자리. [부호: 1bit, 지수: 8bit, 가수: 23bit] | %f |
| double [기본 실수 자료형] | 8 byte. 유효 자릿수 15~16자리. [부호: 1bit, 지수: 11bit, 가수: 52bit] | %lf |
| long double | 8 byte 이상 | %Lf |
-값, 식, 문: 값은 리터럴. 식은 피연산자+연산자로 이루어진 값, 문은 수행할 명령어 like if()
5 / 2; // == 2로 나온다
(float)5 / 2; // == 5.0f / 2 == 2.5f
만 명의 학생의 점수 관리하는 프로그램 -> 각각 변수를 따로 선언하고 하지 않는 이유는?
이 경우 사용하는 게 배열: 여러 데이터를 하나의 묶음으로. 반복문으로 데이터 처리를 효율적으로.
성적관리 프로그램 목표: 입력받은 성적 저장. 합 구하기. 평균 구하기.
배열 특징
성적처리 기기 코드 (학생5명 성적입력->평균 출력)
#include <iostream>
using namespace std;
int main()
{
int score[5];
int sum = 0;
float average = 0.0f;
int i;
for (i = 0; i < 5; i++)
{
cout << "Score of Student " << i+1 <<" "<< "is: " << endl;
cin >> score[i];
}
for (i = 0; i < 5; i++)
{
sum += score[i];
}
average = (float)sum / 5;
cout << "Average Score is " << average << endl;
return 0;
}
함수: 반복적으로 사용하는 코드, 논리적으로 묶이는 코드 하나로 이름붙여 갖다쓰기.
작업 정의하기: 숫자 두개 가져와서 더한 값 반환하는 작업(함수) 생각해 보자
#include <iostream>
using namespace std;
// 숫자(integer) 두 개 더해주는 함수
int add(int a, int b) { // 여기에 "인자" 2개 a b 들어옴
return a + b; // 결과 반환: 함수 타입 int임에 주목
}
int main() {
int result = add(3, 7);
cout << "3 + 7 = " << result << endl; // 출력: 3 + 7 = 10
return 0;
}
계산기에 사칙연산/ %0 금지 시키기!
#include <iostream>
using namespace std;
int main()
{
int Num1;
int Num2;
char Operator;
cout << "First Number: " << endl;
cin >> Num1;
cout << "Enter Operator +, -, *, /: " << endl;
cin >> Operator;
cout << "Second Number: " << endl;
cin >> Num2;
if (Operator == '+')
{
cout << "Result is: " << Num1 << Operator << Num2 << " = " << Num1 + Num2 << endl;
}
else if (Operator == '-')
{
cout << "Result is: " << Num1 << Operator << Num2 << " = " << Num1 - Num2 << endl;
}
else if (Operator == '*')
{
cout << "Result is: " << Num1 << Operator << Num2 << " = " << Num1 * Num2 << endl;
}
else if (Operator == '/')
{
if (Num2 != 0)
{
cout << "Result is: " << Num1 << Operator << Num2 << " = " << Num1/Num2 << ". Remainder: " << Num1 % Num2 << endl;
}
else
{
cout << "Cannot Divide by Zero!!" << endl;
}
}
else
{
cout << "Invalid Operator" << endl;
}
return 0;
}
for(초기화; 종료 조건; 사후 동작) {동작} 형식
#include <iostream>
using namespace std;
int main()
{
int num;
int i;
int j;
cout << "Half Height For Your Diamond Star: " << endl;
cin >> num;
if (100 > num && num > 1)
{
for (i = 0; i < num; i++) //피라미드파트 열 = i-1
{
for (j = i; j < num; j++) //num-1개, num-2개...
{
cout << " ";
}
for (j = 0; j <= 2*(i); j++) // 1개, 3개, 5개...
{
cout << "*";
}
for (j = i; j < num; j++)
{
cout << " ";
}
cout << endl; // i가 1열, 2열...이니 열 끝날때마다 개행
}
for (i = num-2; i >= 0; i--) //
{
for (j = i; j < num; j++) //num-1개, num-2개...
{
cout << " ";
}
for (j = 0; j <= 2 * (i - 1); j++) // 1개, 3개, 5개...
{
cout << "*";
}
for (j = i; j < num; j++)
{
cout << " ";
}
cout << endl;
}
}
else
{
cout << "Invalid Half Height";
}
return 0;
}
코드 자첸 나쁘지 않은데 이제 보니 오른쪽 공백들 채워넣는 건 필요없었네?
추가로, 터미널 기준 이쁜 다이아몬드를 만드려면 앞쪽 공백을 공백 2개, * 뒤에도 공백 한개 추가해주면 된다.

int* p = # 식이던지 int* p = arr; 도 가능cout<<(void*)ptr;int* ptr의 경우 *ptr <- ptr 포인터가 가리키는 값.* 로 불러오면 "주소" 를 가져옴.arr[k] = *(arr+k)arr = &Y; 이딴 식 불가능int* ptrArr[4] 는 크기가 4, 각 원소가 int* 인 배열int (*ptr)[4] = &arr; 이렇게 배열 전체의 주소 가져옴int& ref = var; 같이 자료형 뒤에 & 붙이기= 통해서 가리키는 대상 변경 가능NULL 이 없다. 포인터는 유효하지 않음을 나타내기 위해 가끔 쓴다. nullptr 도.*, 주소 가져올 때 &const int& cref = x;