컴퓨터공학/배열 8

명령행 인자

들어가기 전에 make나 clang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수도 있습니다. 이런 정보들을 명령행 인자 라고 부릅니다. 우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있도록 설계할 수 있습니다. 학습 목표 명령행 인자를 받는 프로그램을 C로 작성할 수 있습니다. 핵심 단어 명령행 인자 argv argc 우리가 여태껏 많이 사용해온 main 함수를 보다 자세히 들여다볼 때가 왔습니다. main도 그 형태를 보면 하나의 함수임을 알 수 있는데요, 이젠 더이상 main() 안에 기계적으로 void 라고 입력하는 대신 아래 코드와 같이 argc, argv 를 정의해보겠습니다. 여기서 첫번째 변수 argc는..

문자열의 활용

들어가기 전에 여태까지의 강의에서 문자열의 기본적인 개념들을 학습하였습니다. 이번 강의에서는 문자열을 좀 더 깊이 활용하는 방법을 배워보겠습니다. 문자열 안에 포함되어 있는 문자를 검색하기 위해서는 어떻게 해야 할까요? 또 특정 문자를 다른 문자로 바꾸기 위해서는 어떻게 해야 할까요? 이런 질문들에 답해보도록 하겠습니다. 학습 목표 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있습니다. 핵심 단어 strlen toupper 문자열의 길이 및 탐색 사용자로 부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어 보겠습니다. 간단하게 for 루프를 통해 문자열의 인덱스를 하나씩 증가시켜가면서 해당하는 문자를 출력하면 될텐데요, 문자열의 끝은 어떻게 알 수 있을까요? 한가지 방법은 해당하는 ..

문자열과 배열

들어가기 전에 우리는 여태껏 문자열을 저장하기 위해 string 자료형을 사용하였습니다. ‘문자열’이라는 단어는 다시 말해 문자가 ‘나열되어 있다’ 또는 ‘배열되어 있다’ 라는의미로 추측해 볼 수 있습니다. 이런 관점에서 봤을 때 string 자료형은 C에서 정확히 어떻게 정의되어 있을까요? 배열이라는 개념이 문자열과 어떻게 연결되는지 알아보도록 하겠습니다. 학습 목표 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있습니다. 핵심 단어 문자 문자열 우리가 여지껏 사용한 문자열(string) 자료형의 데이터는 사실 문자(char) 자료형의 데이터들의 배열이었습니다. string s = “HI!”; 과 같이 문자열 s가 정의되어 있다고 생각해봅시다. s는 문자의 배열이기 때문에 메모리상..

배열2

들어가기 전에 우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까요? 메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보겠습니다. 학습 목표 배열을 정의하고 사용하는 방법을 설명할 수 있습니다. 핵심 단어 배열 전역 변수 전역 변수 이전 강의에 이어서, 아래 코드에서 scores 배열의 크기를 정해주는 N이라는 변수를 새로 선언하였습니다. 만약 N이 고정된 값(상수)이라면 그 값을 선언할 때 const를 앞에 붙여서 전역 변수, 즉 코드 전반에 거쳐 바뀌지 않는 값임을 지정해줄 수 있습니다. 관례적으로 이런 전역 변수의 이름은 대문자로 표기 합니다. #include ..

배열

들어가기 전에 우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까요? 메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보겠습니다. 학습 목표 배열을 정의하고 사용하는 방법을 설명할 수 있습니다 핵심 단어 배열 메모리 C에는 아래와 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 차지합니다. bool: 불리언, 1바이트 char: 문자, 1바이트 int: 정수, 4바이트 float: 실수, 4바이트 long: (더 큰) 정수, 8바이트 double: (더 큰) 실수, 8바이트 string: 문자열, ?바이트 컴퓨터 안에는 아래 사진과 같은 RAM ..

코드의 디자인

들어가기 전에 규모가 큰 프로그램을 작성할 때는 보통 한 사람이 아닌 여러 사람들이 함께 작업을 진행하게 됩니다. 이 때는 내가 기여한 부분이 프로그램에 오류를 발생시키지 않도록 주의를 기울여야 합니다. 또한 코드의 내용 뿐만 아니라 그 형식도 신경써야 합니다. 같은 내용이라 하더라도 어떻게 표현하느냐에 따라 코드를 이해하고 수정하는 속도가 달라질 수 있기 때문입니다. 코드의 정확성과 디자인을 어떻게 잘 관리할 수 있을지 배워봅니다. 학습 목표 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있습니다. 핵심 단어 check50 sytle50 고무 오리 check50 check50 프로그램을 이용하면 과제를 잘 수행했는데 자동으로 검사할 수 있습니다. 물론 이 프로그램은 cs50 강의를 위해서만 작성되..

디버깅

들어가기 전에 우리가 소스코드를 작성하다보면, 때때로 우리 의도와는 다른 오류나 결과를 맞닥뜨리게 됩니다. 이를 “버그”라고 하는데요, 버그를 효과적으로 찾고 해결하는 방법에 대해 알아 보겠습니다. 학습 목표 디버깅 하는 여러 방법을 설명할 수 있습니다. 핵심 단어 디버깅 help50 debug50 버그와 디버깅 버그(bug)는 코드에 들어있는 오류입니다. 버그로 인해 프로그램의 실행에 실패하거나 프로그래머가 원하는 대로 동작하지 않게 됩니다. 버그를 만들고 싶지 않겠지만 모든 프로그래머들은 버그와 마주하게 되어있습니다. 디버깅(debugging)은 코드에 있는 버그를 식별하고 고치는 과정입니다. 프로그래머는 디버거라고 불리는 프로그램을 사용하여 디버깅을 하게 됩니다. 디버깅의 기본 프로그램은 일반적으로..

컴파일링

들어가기 전에 우리가 작성한 C 코드를 실행하기 위해서는 컴파일링을 해줘야 합니다. C문법로 작성된 텍스트 형식의 파일은 컴파일링시 구체적으로 어떤 단계를 거쳐서 컴퓨터가 해석 가능한 파일로 변환될까요? 학습 목표 컴파일링의 네 단계를 설명할 수 있습니다. 핵심 단어 컴파일링 어셈블링 링킹 지금까지는 아무것도 모른채 마구잡이로 쓴 코드가 잘 돌아갔다면 이제부터는 연습과 응용을 통해 동작 원리를 이해할 수 있을 것입니다. 우선 첫 수업에 봤던 예제를 다시 살펴보며 지금 사용하는 방법이 그때 우리가 사용한 방법과 어떻게 다른지 알아봅시다. 첫 수업에 봤던 C코드를 다시 봐보겠습니다. 우선 main이라는 함수가 있습니다. 프로그램의 시작점으로써 실행 버튼을 클릭하는 것과 같습니다. printf는 출력을 담당하..