일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring
- JS
- Godot
- CPP
- 개발노트
- ruby2d
- gnuplot
- OTLanguage
- rubymine
- gradle
- ruby
- Vane
- 루비
- error
- RaspberryPi
- IntelliJ
- maven
- Baekjoon
- Java
- OAuth
- Python
- Shell
- jetbrains
- react
- plugin
- C
- Android
- kotlin
- GitHub
- boj
- Today
- Total
목록Language/C (15)
PersesTitan(페르) 기술블로그
클래스 정의 출력은 ostream의 의 연산자를 재정의 해주었습니다. 입출력 함수를 재정의할 때는 앞에 friend를 붙여주는데 전역 함수로 선언되여 쉬운 입출력 접근을 가능하게 만들어줍니다. class Time { int hour; int second; public: Time() {} Time(int hour, int second): hour(hour), second(second) {} friend ostream &operator(istream &in, Time &time); }; 입출력 연산자 정의 출력은 데이터가 변경되지 않기 때문에 Time클래스에 const가 사용되어도 무방하지만 입력은 값의 변경이 일어나야하기 때문에 const사용시 문제가 발생할 수 있습니다. ostream &operator ..
기본 구조 (element는 저장할 데이터 타입입니다.) typedef struct { element array[SIZE]; int size; } ArrayListType; size: 객체의 길이를 나타냅니다. 리스트 뒤에 객체 추가(add) 마지막에 추가하는 코드는 간단합니다. 크기를 1증가 시키고 해당 위치에 값을 넣어주면 됩니다. void add(ArrayListType *l, element item) { if (l->size >= SIZE) fprintf(stderr, "Stack Over Flow"); l->array[l->size++] = item; } 특정 위치에 객체 추가(set) position(값을 넣을 위치)가 범위를 넘어가지 않았는지 확인하고 만약 값이 유효하다면 position뒤에..
해당 글에서는 동작 구조를 중심으로 작성하였기 때문에 포화상태 및 공백 상태를 확인하는 코드는 작성하지 않았다는 점 참고 바랍니다. 기본 구조 (element는 저장할 데이터 타입입니다.) typedef struct { int front; int rear; element data[SIZE]; } QueueType; front: 현재 위치를 나타냅니다. rear: 현재 저장되어 있는 아이템 갯수를 나타냅니다. data: 아이템이 저장되는 위치를 나타냅니다. 원형큐는 초기 값으로 front, rear는 -1값으로 시작하며 선형큐의 재사용이 불가능한 문제를 해결하기 위해서 한번 추출되어 빈 공간을 재사용하여 데이터가 저장되는 구조가 됩니다. 데이터 추가 선형큐에서 SIZE의 나머지의 값을 이용하여 용량을 넘..
해당 글에서는 동작 구조를 중심으로 작성하였기 때문에 포화상태 및 공백 상태를 확인하는 코드는 작성하지 않았다는 점 참고 바랍니다. 기본 구조 (element는 저장할 데이터 타입입니다.) typedef struct { int front; int rear; element data[SIZE]; } QueueType; front: 현재 위치를 나타냅니다. rear: 현재 저장되어 있는 아이템 갯수를 나타냅니다. data: 아이템이 저장되는 위치를 나타냅니다. 선형큐는 초기 값으로 front, rear는 -1값으로 시작하며 한번 할당된 공간은 다시 사용할 수 없으므로 SIZE크기를 다 사용하면 더 이상 사용할 수 없는 특징을 가지고 있습니다. 데이터 추가 PP언어라서 *q를 넘겨줘야한다. 이런 거 볼때마다 ..
https://persestitan.tistory.com/130 [C] 팩토리얼 함수 만들기 해당 글에서는 제귀함수와 반복문을 사용하는 방법 2가지 다 서술하였는데 재귀함수과 반복문 뭘쓰는지에 대한 의견이 많은 것 같은데 개인적으로 저는 반복문을 선호하는 편입니다. 반복문을 persestitan.tistory.com 이전 글에서 언급하였지만 제귀함수, 반복문 중 자신이 계산이 편하다고 느끼는 방식으로 작성하시면 됩니다. 해당 코드에서는 x의 n승을 구하는 코드로 작성하였습니다. 제귀함수 반복 n이 0이 될때까지 1씩 감소시키면서 x을 계속 곱하여 값을 구하는 방법입니다. double power1(double x, int n) { if (n == 0) return 1; else return x * pow..
해당 글에서는 제귀함수와 반복문을 사용하는 방법 2가지 다 서술하였는데 재귀함수과 반복문 뭘쓰는지에 대한 의견이 많은 것 같은데 개인적으로 저는 반복문을 선호하는 편입니다. 반복문을 사용하는 것이 코드가 잘 보이기 때문에 반복문을 많이 사용하는 본인이 편한걸 사용하는게 베스트 인 듯 싶습니다. 제귀함수 이용 n이 1이하가 될때까지 재귀함수를 이용하여 팩토리얼을 구현하는 방법입니다. int fact1(int n) { if (n
동적 할당이란 말그대로 프로그램이 돌아가는 동안 메모리를 할당 시켜주는 작업인데 c에서는 기본적으로 배열크기라던가 변수를 미리 생성해두지 않으면 해당 변수를 생성할 수 없으므로 동적 할당을 사용하여 프로그램이 실행하고 있는 도중에 변수를 사용할 수 있도록 하는 것이 동적할당입니다. 동적 할당을 하기 위해서는 stdlib.h를 가져와주어야합니다. #include malloc 기본적으로 동적할당을 할때 사용하는 함수 입니다. 기본값은 쓰레기 값이 들어가기 때문에 값을 변경해주어야합니다. 파라미터 : (할당할 크기) #include #include int main() { int *array = malloc(sizeof(int) * 5); for (int i = 0; i < 5; ++i) { array[i] =..
rand() rand() 함수를 사용하기 위해서는 stdlib를 추가해주어야합니다. #include rand() 함수는 램던한 int 타입의 값을 반환해줍니다. 아래와 같이 그냥 사용하여도 램던한 값이 나오기는 하지만 코드를 다시 실행을 하면 처음 나왔던 램던한 값이 고정되어서 출력됩니다. 예시 코드 #include #include int main() { for (int i = 0; i < 10; ++i) { printf("%d\n", rand()); } return 0; } 1차 실행 2차 실행 3차 실행 해결방법 time.h를 추가하여 초기화 시켜주는 것이 일반적입니다. #include 다음과 같이 srand를 이용하여 램던 값을 초기화 시킬 수 있습니다. 예시 코드 #include #include ..
int 형식 출력 타입 대조 타입 %d 정수(10진수) int %x 정수(16진수, 소문자) int %X 정수(16진수, 대문자) int %o 정수(8진수) int %u unsigned 정수 unsigned int long 형식 출력 타입 대조 타입 %ld 정수(10진수) long %lx 정수(16진수, 소문자) long %lX 정수(16진수, 대문자) long %lo 정수(8진수) long %lu unsigned 정수 unsigned long long long 형식 출력 타입 대조 타입 %lld 정수(10진수) long long %llx 정수(16진수, 소문자) long long %llX 정수(16진수, 대문자) long long %llo 정수(8진수) long long %llu unsigned 정수 ..
10진수를 2진수로 바꾸는 방법은 여러가지가 있지만 특이한 방법으로 변환을 해보고 싶어져서 작성하게 되었습니다. 코드 #include int main() { int count, i = 1; double t; scanf("%d", &count); for (t=0;count>0;count/=2,i*=10,t/=10.0) t+=count%2; printf("%d", (int) (t*i)); return 0; }설명 count는 2진수로 변환할 10진수를 저장하고 i는 소수로 저장된 총합을 정수로 변환해줄 값을 저장합니다. 값을 넣은뒤에 10을 나누어 값을 소수점에 저장한뒤에 마지막에 자리수만큼 10의 거듭제곱을 곱하여서 결과를 구하게 구현하였습니다. (예시값 : 15) 순서 t의 값 i의 값 t * i 1 0..