Stage
-
[알고리즘] 검색 알고리즘Stage/Computer Science 2021. 5. 29. 00:40
학습 목표 주어진 배열 속에서 특정 값을 찾는 방법을 설명할 수 있다. 0. 인트로 배열은 한 자료형의 여러 값들이 메모리상에 모여 있는 구조이다. 컴퓨터는 이 값들에 접근할 때 배열의 인덱스 하나하나에 접근한다. 만약 어떤 값이 배열 안에 속해 있는지를 찾아보려면 배열이 정렬되어 있는지의 여부에 따라 다른 방법을 사용할 수 있다. 1. 선형 검색 배열의 인덱스를 처음부터 끝까지 하나씩 증가시키면서 방문하여 그 값이 속하는지를 검사하는 것이다. 케비넷에서 숫자 50을 찾기 위해 Eric이 첫번째 사물함부터 마지막 사물함까지 문을 하나씩 차례대로 열어봤던 장면을 떠올려보자. 2. 이진 검색 배열이 정렬되어 있다면, 배열의 중간 인덱스부터 시작해서 찾으려고 하는 값과 비교하여 그 값보다 작은 값이 저장되어 ..
-
[배열] 문자열의 활용Stage/Computer Science 2021. 5. 27. 23:04
학습목표 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다.1. 문자열 탐색 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 코드를 짜야 한다면 간단하게 for문을 이용해 문자열의 인덱스를 1씩 증가시켜나가면 된다. 1.1 문자열이 끝나는 인덱스는 어떻게 알 수 있을까? 해당 인덱스의 문자가 null 종단 문자와 일치하는지 검사하면 된다. for (int i = 0; s[i] != ‘\0’; i++) { ... } strlen() 함수를 사용하면 된다. #include #include #include int main(void) { string s = get_string("Input: "); printf("Output:\n"); for (int i = 0, n = strlen(s); i < ..
-
[배열] 문자열과 배열Stage/Computer Science 2021. 5. 27. 22:50
학습목표 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다. 1. 문자열? 문자열(string) 자료형의 데이터는 문자(char) 자료형의 데이터들의 배열이다. string s = "HI!"; 문자열 s는 문자의 배열이기 때문에 메모리상에 아래의 그림과 같이 저장된다. 인덱스로 각 문자에 접근이 가능하다. s[0] = H s[1] = I s[2] = ! s[3] = \0 3번째 인덱스의 '\0' 은 문자열의 끝을 나타내는 null 종단 문자이다.
-
[배열] 배열Stage/Computer Science 2021. 5. 27. 22:49
학습목표 배열을 정의하고 사용하는 방법을 설명할 수 있다. 1. 메모리 C에는 다음과 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 갖는다. bool: 1byte char: 1byte int: 4byte float: 4byte long: 8byte double: 8byte string: ?byte 컴퓨터에서는 RAM이라는 물리적 칩이 메모리 역할을 한다. 쉽게 생각하면 위 사진에 나와있는 조그만 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나는 1바이트를 의미한다. 2. 배열 배열은 같은 자료형의 데이터를 메모리상에 연속으로 저장하고 이를 하나의 변수로 관리하기 위해 사용된다. #include #include int main(void) { // Scores int ..
-
[배열] 디버깅Stage/Computer Science 2021. 5. 27. 22:46
학습목표 디버깅 하는 여러 방법을 설명할 수 있다. 1. 버그와 디버깅 1.1 버그 버그는 코드에 들어있는 오류이다. 버그로 인해 프로그램 실행에 실패하거나 프로그래머가 원하는대로 동작하게 하는 데 실패한다. 1.2 디버깅 코드에 있는 버그를 식별하고 고치는 과정을 말한다. 디버거라고 불리는 프로그램을 사용하여 디버깅을 하게 된다. 디버거는 프로그램을 특정 행에서 멈출 수 있게 해주기 때문에 버그를 찾는 데 도움이 된다. 프로그램이 멈추는 특정 지점을 break point(중지점)라고 한다. 프로그래머가 프로그램을 한번에 한 행씩 실행할 수 있게 해주므로 프로그램이 수행되는 과정들을 단계별로 파악하는 것이 가능하다.
-
[배열] 컴파일링Stage/Computer Science 2021. 5. 27. 10:40
학습목표 컴파일링의 네 단계를 설명할 수 있다. 1. 동작원리 이전에 사용한 예제 코드를 다시 보면서 동작 원리를 이해해보자. 1.1 #include int main(void) { printf("hello, world\n"); } main 함수를 만나서 프로그램을 시작한다. printf 함수를 수행해야 하는데, 그러려면 stdio.h 라이브러리가 필요하다. stdio.h 라이브러리에 대해 좀 더 자세히 알아보자. stdio.h는 헤더 파일이고 C언어로 작성되어 있으며 파일 확장자가 .h로 끝난다. stdio.h 파일에는 printf 함수의 프로토타입이 있어서 Clang 컴파일러가 프로그램을 컴파일 할 때 printf가 무엇인지 알려준다. 1.2 clang hello.c로 컴파일하고 그 결과 a.out 이..
-
[C언어] 하드웨어의 한계Stage/Computer Science 2021. 5. 27. 09:03
학습목표 메모리 용량이 프로그램의 구동에 미치는 영향을 설명할 수 있다. 우리가 작성한 프로그램은 구동 중에 RAM에 저장이 된다. RAM은 유한한 크기의 비트만 저장할 수 있으므로 때때로 부정확한 결과를 내기도 한다. 1. 부동 소수점 부정확성 #include #include int main(void) { float x = get_float("x: "); float y = get_float("y: "); printf("x / y = %.50f\n", x / y); } x / y를 했을 때 소수점 50자리까지 출력하는 코드이다. x = 1, y = 10 을 대입해보자. x / y = 0.10000000149011611938476562500000000000000000000000 0.1 이라는 결과가 나와야..
-
[C언어] 사용자 정의 함수, 중첩 루프Stage/Computer Science 2021. 5. 27. 09:02
학습목표 사용자 정의 함수와 중첩 루프를 작성할 수 있다. 1. 사용자 정의 함수 #include #include int get_positive_int(void); int main(void) { int i = get_positive_int(); printf("%i\n", i); } int get_positive_int(void) { int n; do { n = get_int("Positive Integer: "); } while (n < 1); return n; } get_positive_int()라는 함수를 호출하고 있는데, 이는 CS50 라이브러리에는 없는 함수이다. 위 코드에서 정의해놓은 get_positive_int() 함수를 살펴보자. int get_positive_int(void) 여기서 (v..