프로그래밍 언어/C++

    [C] 이스케이프 문자(Escape Character)

    C/C++의 이스케이프 문자(Escape Character) 또는 이스케이프 시퀀스라 부른다. 백슬래시(\)와 특정문자(알파벳,',? 등)를 결합하여 언어특성상 표현할 수 없는 기능, 문자를 표시해준다. 백슬래시는 \이지만 키보드에는 백슬래시가 없고 ₩로 대체한다. \와 ₩는 같은 의미이니 참고 바람 https://arer.tistory.com/95

    [C++] 쓰레기값 거르기(아주 작은값) numeric_limits

    numeric_limits 클래스 template class numeric_limits epsilon 함수는 1과 데이터 형식에 대해 나타낼 수 있는 1보다 큰 가장 작은 값 사이의 차이를 반환 // numeric_limits_epsilon.cpp // compile with: /EHsc #include #include using namespace std; int main( ) { cout

    [C] 쓰레기값과 초기화

    쓰레기 값이란? C언어에서 변수를 선언하면 어떠한 메모리 공간을 할당받는 것이다. 그렇다면 그 메모리 공간 안의 상황은 할당받을 당시 어떤 상황일까? 어디서 어떠한 의도로 그 메모리 공간이 사용되고 있었는지 모르기 때문에 그 안에는 의미 없는 값이 들어가 있는데 이러한 값들을 바로 쓰레기 값이라고 한다. 실제로 쓰레기 값이 들어있는지 한번 확인해 보도록 하자 int main() { int a; printf("%d\n", a); return 0; } 다음과 같은 에러가 발생한다. 왜 쓰레기 값이 존재하는가? 사용자들이 생각하기에는 그렇다면 변수를 선언과 동시에 초기화를 시킨다면 쓰레기값이 없을 텐데 왜 C언어에서는 그런 방향을 만들지 않았을까 하는 의문이 생길 수 있습. 이 이유는 연산의 증가가 발생하기 ..

    [C++] sort , stable_sort

    sort()함수 #include 헤더 포함 - default 는 오름차순이다. - 정렬 조건을 주고 싶을때 함수를 만들어 함수이름 자리에 넣어주면 된다. (필수 X ) sort(시작주소, 끝주소+1, 함수이름 ) 1) 기본 배열의 sort 배열의 이름은 배열의 시작 주소값이므로 arr과 arr+ (요소의 개수) 를 단순하게 인자값으로 넣어주면 된다. #include #include using namespace std; int main() { int arr[5] = {3,7,1,9,5}; sort(arr, arr + 5); for (int i = 0; i < 5; i++) { cout

    [C] gets 함수는 사용하지 말아야 한다.

    프로그래밍을 하는 고수 프로그래머의 대부분(아니 거의 전부) 는 다들 gets 함수를 사용하지 말라고 조언한다. 그 이유에 대해서 1988년 엄청난 피해를 입혔던 모리스 웜(Morris Worm) 에 대해 언급하고자 한다. 컴퓨터 해킹의 역사에서 엄청나게 굵고 큰 한 획을 그었던 Morris Worm 의 컴퓨터 파괴 원리는 바로 버퍼 오버플로우이다. 요즘의 언어인 JAVA나 Python 같은 언어는 메모리를 자체적으로 관리하기 때문에 버퍼 오버플로우에 대해서는 안전할 수 있겠지만, 프로그래머에게 엄청난 자유를 선사하는 어셈블리어, C, C++ 등은 시스템에 매우 밀접하게 동작하므로 버퍼 오버플로우에 대한 고려를 프로그래머가 직접 해야 한다. Morris Worm은 바로 C 언어의 표준 함수 중 버퍼 오버..

    [C] while 반복문을 종료하는 방법: 센티넬, EOF, 플래그

    카운터 제어 while 반복문 반복 횟수를 알고 있다면 카운터를 사용해 while문을 종료시킬 수 있다. while문을 카운터 조건을 통해 종료하려고 하는데, 카운터를 증가시키거나 감소시키는 코드를 까먹고 적지 않았다면 무한루프가 발생할 우려가 있다. 조건은 구문이 시작될 때 적어야 하는데, 조건을 충족할 수 있게 제어하는 코드는 while문 내부에 있어서 이런 실수가 발생할 확률은 은근히 높다. 따라서 이 경우에는 for문을 사용하는 것이 일반적이다. #include using namespace std; int main() { int counter = 0; while (counter > num; } cou..

    [C++] EOF(End Of File) 처리 방법

    1. scanf()가 입력받은 인자의 갯수를 리턴하는 특성을 활용하는 방법 #include int main() { int a, b; while (scanf("%d%d", &a, &b) == 2) // scanf는 입력받은 갯수를 리턴한다 // 만약에 scanf("%d",&a); 에서 입력이 제대로 들어왔다면 1이 리턴된다. // 그렇기 때문에 a,b를 입력받는 scanf가 2와 같다면이란 말은 입력이 있다면과 같은 말이다 printf("%d\n", a + b); }​ 2. scanf()를 EOF와 직접 비교하는 방법 #include int main(){ int a,b; while(scanf("%d %d",&a,&b) != EOF) // EOF == End Of File // 말그대로 파일의 끝에 도달하면..

    [C] 자료형 - 정수/실수

    자료형이란? 메모리에 데이터가 저장되는 형식이다. 자료형마다 메모리 공간을 다르게 할당되는데, 예를 들어 int의 경우 4byte, char의 경우 1byte 이다. 자료형에는 정수형과 실수형으로 나눠진다. 정수형에는 char, short, int, long 이 존재하고 실수형에는 float, double, long double이 존재한다. 참고 : bit 와 byte 1byte는 8bit를 나타낸다. 종종 컴퓨터보면 32bit, 64bit로 나눠지는것을 본적이 있다. 이는 CPU가 한번에 처리하는 비트의 수로 32bit는 한번에 32개의 bit를 처리하고, 64bit 64개의 비트를 처리한다. 사용 범위 - 정수형 char : 1byte(8bit) : -128 ~ 127 short : 2byte(16b..

    [C] 서식 지정자의 모든것 (서식문자)

    서식 지정자란? printf, scanf, sprintf, fprintf 등의 여러 API 에서 가변인자를 받아서 처리하기 위한 데이터 포맷이다. 가변인자를 처리하는 API 함수 내부에서 어떤 인자를 어떤식으로 처리할지 지정하기 위해서 사용한다. 여러 API 에서 가변인자를 서식 지정자를 통해 처리하는데 printf 와 scanf 만 비교해봐도 서식 지정자로 특정할 수 있는 자료형의 스펙이 조금씩 다르다. printf 는 타입을 전달받아 데이터를 출력하기 때문에 형변환(type casting) 및 형승격(type promotion) 을 통해 크기가 다른 타입에 대해서 유연한 메모리 처리가 가능하지만, scanf 는 포인터를 전달받아 입력받은 데이터를 저장하기 때문에 서식 지정자에 의존하여 메모리 처리를 ..

    [C] 피보나치 수열과 메모이제이션

    피보나치 수열은 수학에서 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. 점화식은 Fn = Fn-1 + Fn-2으로 정리된다. 재귀 함수를 이용한 풀이 #include long long fibo(int n); int main(){ printf("%lld", fibo(10)); return 0; } long long fibo(int n){ if (n < 2) return n; return fibo(n-1) + fibo(n-2); } 당장 fibo(100)만 넣어보면. 프로그램이 계산하다가 뻗어버리는 모습을 볼 수 있다. 불필요한 호출이 일어나서 프로그램이 느려지는건데 간단히 fibo(10) 을 계산하려면 fibo(9), fibo(8) 이 호출되고 fibo(9)가 다시 fib..