
2. 포인터 * 를 사용해 그 메모리 주소의 실제 값을 얻어올 수도 있으며, ~의 주소로 이동해달라는 의미를 가진다. 이 연산자를 사용해 포인터 역할을 하는 포인터 변수를 선언할 수 도 있다. #include int main(void) { int n = 50; int *p = &n; printf("%p\n", p);//0x7ffd9792ee98 printf("%d\n", *p);//50 return 0; } 첫 번째 출력 함수에서는 형식 지정자 % p를 사용해 포인터 변수 *p 저장된 주소를 출력했다. 두 번째 출력 함수에서는 포인터 변수 *p에 저장된 주소로 이동해서 n에 저장된 값을 형식 지정자 % d를 통해 받아와 출력했다. 즉, 포인터 변수를 사용해 포인터 변수에 저장된 주소를 출력하거나, 포인터..

1. 메모리 주소 16진수의 유용성 10진수 255 216 255 2진수 1111 1111 1101 1000 1111 1111 16진수 0xff 0xd8 0xff 컴퓨터 과학에서는 숫자를 2진수 대신 16진수로 표현하는 경우가 많다. 2진법으로 표현할 때에는 너무 길어진 데이터를 16진수로는 간단하게 표현할 수 있기 때문이다. 2^4 는16이므로, 4비트씩 두 덩어리로 나누어보면 0000부터 1111까지 16진수로 간단하게 표현할 수 있음을 알 수 있다. 이처럼 데이터 처리할 때 장점이 많기 때문에 16진수를 사용해 숫자를 표현하는 경우가 많다. 메모리 주소 C언어에서는 변수의 메모리 상 주소를 받기위해 & 연산자를 사용한다. & 연산자를 통해 변수의 메모리상 주소에 값을 저장하기도 하고, 실제 주소값을..

1. 검색 알고리즘 배열은 한 자료형의 여러 값들이 모여있는 구조. 배열 안에 있는 어떤 값을 찾기 위해서는 선형 검색, 이진 검색 등의 검색 알고리즘을 사용. ✔ 선형 검색 : 배열의 인덱스를 처음부터 끝까지 하나하나 증가시키면서 방문하여 그 값이 속하는지 확인 (a to z) ✔ 이진 검색 : 정렬된 배열이라면, 배열 중간 인덱스부터 시작하여 비교, 다시 중간 인덱스부터 비교를 반복 2. 알고리즘 표기법 Big O 표기법 ✔ Big O 는 알고리즘 실행시간의 상한을 의미한다 ✔ 선형 검색에서는 n개의 항목이 있을 때, 최대 n번의 검색을 해야 하므로 상한이 Big O(n) 이 된다 ✔ 이진 검색은 (이미 정렬된 데이터의 경우) 선형 검색보다 빠르고, 1번 이상의 검색을 해야 하므로상한이 Big O(l..

1. 컴파일링 컴파일링의 과정 : preprocessing → compiling → assembling → linking ✔ 전처리(preprocessing) : 실질적인 컴파일 전에 헤더 파일 추가 ✔ 컴파일(compiling) : 전처리한 코드를 컴퓨터가 이해할 수 있는 어셈블리어라는 저수준 프로그래밍 언어로 컴파일 ✔ 어셈블링(assembling) :: 어셈플리코드를 중앙처리장치가 프로그래밍을 수행할 수 있도록, 연속된 0과 1로 변경 ✔ 링커(링크) : 여러개의 파일을 하나의 오브젝트 파일로 합쳐야 할 때 필요한 단계 (컴파일을 하나만 해야 하면 진행 X) 2. 디버깅 버그와 디버깅 ✔ 버그 : 코드에 들어있는 오류 ✔ 디버깅 : 모드에 있는 버그를 식별하고 고치는 과정 디버거 ✔ 프로그래머들이 ..

1. C 기초 Hello World! #include int main(void){ printf("Hello World!"); return 0; } 컴파일러 ✔ 작성한 코드를 컴퓨터가 이해할 수 있는 2진수의 머신코드로 변환해 실행할 수 있는 실행파일을 생성하는 과정 ✔ 실행 파일 : 컴퓨터가 이해할 수 있는 기계어 형태의 파일 2 . 문자열 출력 printf( ) ✔ C언어의 표준 출력 함수로, 여러 종류의 데이터를 다양한 서식에 맞춰 출력할 수 있다. ✔ 기본적으로 문자열을 출력하기 위한 함수로 문자열 외의 형태를 출력하고자 할 때에는 형식 지정자가 필요하다 3. 조건문과 루프 if 문 ✔ 조건식이 참인 경우 내부의 코드가 실행 #include int main(void){ int num = 2; if(..

0. 컴퓨팅 사고 컴퓨터 과학은 문제 해결에 대한 학문이다. 입력을 받아 출력을 만들어 내는 과정을 문제 해결이라 하며, 이 과정이 곧 컴퓨터 과학을 의미한다. 1. 2진법 ✔ 전기를 켜고 끄는 방식의 컴퓨터에게 적합하기 때문에, 데이터를 2진법을 사용해 표현한다. ✔ 0 은 false를 의미하고, 1은 true를 의미한다. 비트 ✔ 정보를 저장하고 연산을 수행하기 위해 비트(bit)라는 측정 단위를 사용한다. ✔ 비트(bit)는 이진 숫자라는 뜻의 "binary digit" 의 줄임말이며, 0과 1 두 가지의 값만 가질 수 있는 측정 단위이다. 비트열 ✔ 비트 하나로 표현할 수 있는 데이터에 양에는 한계가 있으므로, 여러 숫자의 조합을 컴퓨터에 나타내기 위해 비트열을 사용한다. 단위 정의 저장공간 크기..

1047. 정수 1개를 입력받아 2배 값을 출력해보자. (비트단위 시프트 연산자 를 사용하자.) ✔ insight. 2진수 값을 왼쪽()으로 지정한 비트 수만큼 밀어주면 10진수의 값은 2배씩 늘어나거나 반으로 줄어든다. 왼쪽 비트시프트()의 경우, 0이나 양수라면 왼쪽에 0, 음수라면 왼쪽에 1이 개수만큼 추가된다. 그리고 범위(32비트)를 넘어서 이동되는 비트는 삭제된다. 즉, 10진수일 때를 기준으로 말하면 왼쪽 비트 시프트()는 1/2배의 연산을 수행한다. (예) int a = 10; printf("%d", a1); //5 printf("%d", a2); //2 (결과는 2.5지만 형식 지정자가 정수형이므로) 입력. 1024 출력. 2048 #include int main(void){ int nu..

1038. 정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. (단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.) ✔ insight. 입력받는 정수의 범위가 int 이므로, 먼저 int 변수를 만들어두고 입력값을 저장. 입력받은 정수의 합이 int의 범위를 벗어날 수 있으므로 long long으로 형변환해 합계를 출력. 입력. 123 -123 출력. 0 #include int main(void){ int a,b; scanf("%d %d",&a,&b); printf("%ld",(long long)a+(long long)b); return 0; } 1039. 정수 2개를 입력받아 합을 출력해보자. 단, 입력되는 정수는 -2147483648 ~ +2147483648 이다. ✔ ..

1031. 10진수를 입력받아 8진수(octal)로 출력해보자. 입력. 10 출력. 12 #include int main(void){ int num; scanf("%d",&num); printf("%o",num); return 0; } 1032. 10진수를 입력받아 16진수(hexadecimal)로 출력해보자 (소문자) 입력. 255 출력. ff #include int main(void){ int num; scanf("%d",&num); printf("%x",num); return 0; } 1033. 10진수를 입력받아 16진수(hexadecimal)로 출력해보자 (대문자) 입력. 255 출력. FF #include int main(void){ int num; scanf("%d",&num); printf..

1028. 정수 1개를 입력받아 절댓값을 출력해보자. (단, 입력되는 정수의 범위는 0 ~ 4,294,967,295 이다.) 양수만 출력하는 unsigned int 데이터형을 사용하면 0 ~ 4294967295 범위의 정수를 저장할 수 있다. 2147483648 #include int main(void){ unsigned int num; scanf("%u",&num); printf("%u",num); return 0; } 1029. 실수 1개를 입력받아 그대로 출력해보자. (단, 입력되는 실수의 범위는 +- 1.7*10-308 ~ +- 1.7*10308 이다.) 어떤 실수를 입력받아도 소수점 이하 11자리까지 출력되도록 해야만 정답으로 처리된다. 3.14159265359 3.14159265359 #inc..