CS 기초 다지기
스크레치의 기초와 심화 그리고 퀴즈를 다룹니다.
1. C 기초 hello, world!를 출력한 뒤 줄바꿈 하는 코드입니다. 실습은 cs50을 위한 사이트에서 진행하였습니다. 자세한 사용법은 다음 주소에서 확인할 수 있습니다. https://www.boostcourse.org/cs112/lecture/133454?isDesc=false 좌측의 리스트를 통해 파일들을 확인할 수 있습니다. 우측 상...
3. 조건문과 루프 변수를 선언할 때 저장하고자 하는 변수의 종류를 알려줘야한다. 위 코드에서 int는 integer라는 숫자를 의미하는 단어에서 따왔다. ** "HEY~ 컴퓨터 int라는 자료형의 변수를 만들고 이름은 counter로 만들어줘 그리고 값은 0으로 초기화해줘"** "="은 일반적인 수학에서 사용하는 의미와 달리 할당연산자를 의미한다. ...
1. 사용자 정의함수 이렇게 cough라는 사용자 정의함수를 만들 수 있다. cough라는 함수를 호줄하면 함수를 사용할 수 있지만 함수내부에서는 어떻게 실행되는지 알수없다. 이를 추상화라고 한다. 그런데 여기서 문제는 사용자 정의함수가 많아질수록 main이 뒤로 간다는 것이다. 이를 해결하기위해서 만약 cough함수를 main뒤에 놓는다면? 에러가...
1. 컴파일링 (1) # include 이 코드는 stdio라는 c언어로 작성된 헤더파일을 내가 사용하겠다는 의미이다. 다른 사람들이 이미 작성해둔 코드를 사용할 수 있게 해주는 것으로 라이브러리라고 한다. stdio.h에 printf 함수의 프로토타입이 있어서, clang 컴파일러가 프로그램을 컴파일할 때 printf가 무엇인지 알려준다. 함수의 ...
1. 배열(1) 1) 칩에 어떻게 저장되나요? c언어는 위 사진과 같은 여러 자료형이 있습니다. 각 자료형은 다른 크기의 메모리를 차지합니다. 컴퓨터나 휴대폰에는 RAM이있어 메모리역할을 합니다. RAM에는 칩이 있는데 칩은 여러 바이트의 묶음을 저장합니다. 예를 들어 'H' 인 char을 저장한다고 하면 RAM내부의 칩에 1byte가 할당되어 H가...
1. 명령행 인자 > command-line argument 명령행 인자는 명령어 뒤에 쓰고, 프로그램의 입력과 같이 넣어주는 인자를 말한다. 예를 들어 clang -o hello hello.c에서 -o를 말한다. 1) main의 인자는 대체 뭘까? 지금까지 이렇게 main을 써왔다 인자로는 void로 아무것도 주지않았다. 이것을 인수를 받도록 변...
1. 버블정렬 버블 정렬은 거품이 떠오르듯 큰 숫자가 왼쪽에서 오른쪽으로 정렬된다. 즉, 올바른 위치로 갈 때까지 움직인다. 두 개의 인접한 자료 값을 보고 큰 수를 오른쪽으로 위치시키는 방법을 사용한다. 바깥 부분은 n-1 , 안쪽 부분도 n-1 이므로 둘을 곱하면 n^2 + 2n + 1이다. 수가 커질 수록 n^2의 영향력도 커지므로 Big - ...
1. 병합정렬 병합정렬은 3단계로 이루어져있습니다. 왼쪽 정렬 오른쪽 정렬 하나의 배열로 합치기 (병합) 병합은 왼쪽과 오른쪽 배열 각각 가장 작은 값을 꺼내 작은 값끼리 비교하여 정렬한 후 이와 동일한 방식으로 왼쪽과 오른쪽 배열 전부를 merge하는 과정을 말합니다. 즉 두 배열에서 작은 값 꺼내서 그 둘을 비교하는 것입니다. 만약 8개를 정렬...
1. 메모리 주소 메모리에서는 16진수를 이용하여 주소를 나타낸다. 16진수는 0부터 15까지 한 글자로 표현할 수 있는데 10을 A로 11을 B로 ....15를 F로 표현한다. 16진수와 10진수가 헷갈릴수 있기에 16진수는 앞에 0x를 붙여 16진수임을 표현한다. 메모리와 관련된 c언어에서 사용할 수 있는 표현이 몇개 있다. 1) & &는 ~...
1. 문자열 비교 이와 같은 코드를 실행하면 위 사진과 같은 결과를 얻을 수 있습니다. s[1]은 당연하게도 s의 1번째 원소에 접근하게 하는 것이고 *(s+1)은 s에 적혀있는 주소에 1을 더해 한바이트 이후의 문자 즉 첫번째 원소에 접근하게 합니다. 1) 문자열 비교 코드 이와 같은 코드를 실행하면 어떤 글자를 입력되는지와는 상관없이 s와 t가...
1. 포인터 복습 위 코드는 에러가 발생한다. 그 이유가 무엇일까? 이유를 설명하기전에 코드를 설명하면 int *x; 는 정수를 가리키는 포인터 변수를 만든다. malloc은 메모리를 할당하는 역할을 하며 할당하고 싶은 크기를 유일한 인자로 받는다. sizeof(int)로 4byte 공간을 요청하여 할당한 메모리 영역의 첫번째 주소를 반환한다. x...
1. 연결리스트 먼저 배열은 임의접근을 할 수있어서 이진탐색을 쓸수있습니다. 그러나 연결리스트는 역동성을 가지며 임의접근이 불가합니다. 즉, 이진탐색이 불가합니다. 기존의 연결리스트는 하나의 포인터를 갖고있던 반면 두개의 포인터를 가지게 하여 이진탐색을 할 수 있도록 만들 수 있습니다. 이것을 트리라고 하며 이진탐색 트리입니다. 모든 노드의 왼쪽 자식...
학교 수업보다 잘가르치신다. 포인터, 트리, 연결 리스트의 내용을 분명 수업 때 들었지만 잘 이해가 안갔었다. 코드에 *, &가 들어가면 무섭고 연결리스트의 ->가 나오면 모른다고 먼저 말했다. 하지만 이 강의를 통해 극복했다. 포인터를 이렇게 쉽게 가르치시다니 ..감동의 눈물이 흐를정도다. 객체지향프로그래밍 수업듣는 내 후배들에게 꼭 이 강의 들으...