본문 바로가기

네이버

(40)
C 언어 | 명령행 인자 ✔ 학습목표 명령행 인자를 받는 프로그램을 c로 작성할 수 있다. 명령행 인자 명령행 인자(command line arguments)는 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미한다. 명령행 인자는 자동으로 프로그램의 main함수에 전달된다. 이제껏 당연하게 int main(void)라 써왔던 main 함수를 생각해볼 때다. main도 그 형태를 보면 하나의 함수다. 즉 사용자 정의 함수처럼 입력값과 출력 값을 가질 수 있다는 것이다. #include #include int main(int argc, string argv[]) { if (argc == 2) { printf("hello, %s\n", argv[1]); } else { printf("hello, world\..
C 언어 | 문자열의 활용 ✔ 학습목표 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있다. 문자열의 길이 및 탐색 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어보자. 한 글자씩 출력해야 하기 때문에 출력에 있어서는 루프를 사용해야 할 것이다. 그렇다면 문자열의 끝은 어떻게 알 수 있을까? 한 가지 방법은 지난 강의에서 배운 대로 널 종단 문자(\0)를 이용하는 것이다. s라는 문자열이 있다고 할 때 for(int i = 0; s[i] != '\0'; i++){...} 과 같은 루프를 사용하는 것이 그 예이다. #include #include #include int main(void) { string s = get_string("Input: "); printf("Output:\n"); for (in..
C 언어 | 문자열과 배열 ✔ 학습목표 문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다. 문자열과 배열 문자열(string) 자료형의 데이터는 사실 문자(char) 자료형 데이터들의 배열이었다. string s = "Hi!"; 와 같이 문자열 s가 정의되어 있다고 생각해보자. s는 문자의 배열이기 때문에 메모리상에 아래처럼 저장되고, 인덱스(예) s[0], s[1] 등)로 각 문자에 접근할 수 있다. 여기서 가장 끝의 '\n'은 문자열의 끝을 나타내는 널 종단문자다. 이는 모든 비트가 0인 1바이트를 의미한다. string names[4]; names[0] = "EMMA"; names[1] = "RODRIGO"; names[2] = "BRIAN"; names[3] = "DAVID"; printf("%s\n..
C 언어 | 배열 ✔ 학습목표 배열을 정의하고 사용하는 방법을 설명할 수 있다. 배열 아래와 같이 세 개의 점수를 저장하고 평균을 출력하는 프로그램을 예로 들어보자. #include #include int main(void) { // Scores int score1 = 72; int score2 = 73; int score3 = 33; // Print average printf("Average: %i\n", (score1 + score2 + score3) / 3); } 만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해야 한다(변수 선언, 계산식 등). 이 때 활용할 수 있는 것이 배열이다. 배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리한다. 위 코드에서 배열을 사용하..
컴퓨팅 사고 | 코드의 디자인 ✔ 학습목표 CS50 IDE에서 코드의 정확성과 디자인을 관리하는 방법을 설명할 수 있다. 규모가 큰 프로그램을 작성할 때에는 보통 여럿이 작업을 진행한다. 이때는 코드의 내용뿐만 아니라 형식도 신경 써야 한다. 같은 내용이라 하더라도 어떻게 표현하느냐에 따라 코드를 이해하고 수정하는 속도가 달라진다. CS50 IDE에서는 check50과 style50이라는 프로그램을 사용할 수 있다. check50 check50은 코드의 정확도를 확인하는 자동 검사 프로그램이다. hello.c라는 프로그램을 검사하고 싶다면 명령창에 'check50 cs50/preblems/hello'를 입력하면 된다. 간단한 깃허브 계정 인증과정을 거치면 검사 결과(피드백)가 나온다. style50 style50은 코드가 심미적으로 ..
컴퓨팅 사고 | 디버깅 ✔ 학습목표 디버깅하는 여러 방법을 설명할 수 있다. 버그와 디버깅 버그(bug)는 코드에 들어있는 오류를 말한다. 코드에 있는 버그를 식별하고 고치는 과정이 디버깅(debugging)이다. 프로그래머는 디버거라 불리는 프로그램을 사용해서 디버깅을 한다. 디버깅의 기본 프로그램은 일반적으로 인간보다 훨씬 빠르게 연산을 수행하기 때문에, 프로그램을 실행시켜보는 것만으로는 무엇이 잘못됐는지 찾기 어렵다. 그래서 디버거를 사용한다. 디버거는 프로그램을 특정 행에서 멈출 수 있게 해 주기 때문에 버그를 찾는데 도움이 된다(이때 프로그램이 멈추는 특정 지점을 중지점이라고 한다). 디버거를 사용해 프로그래머는 프로그램을 한 번에 한 행씩 실행할 수 있고, 프로그램이 내리는 모든 결정을 단계별로 따라갈 수 있다. 방..
컴퓨팅 사고 | 컴파일링 ✔ 학습목표 컴파일링의 네 단계를 설명할 수 있다. 컴파일링 지금까지는 아무것도 모른 채 코드를 컴파일했다면, 이제부터는 연습과 응용을 통해 동작 원리를 이해할 수 있을 것이다. C 코드로 작성된 쉬운 예시(hello.c)를 보자. #include int main(void) { printf("hello, world\n"); } "hello, world"를 출력하는 프로그램이다. 우선 main 이라는 함수가 있다. 이는 프로그램의 시작점으로 실행 버튼을 클릭하는 것과 같다. main 함수 안의 printf는 출력을 담당하는 함수이다. 이 함수를 사용하기 위해 stdio.h 가 필요하다. stdio.h는 C언어로 작성된 헤더 파일로, printf 함수의 프로토 타입을 담고 있다. C언어 강의에서 우리는 cl..
컴퓨팅 사고 | 하드웨어의 한계 ✔ 학습목표 메모리 용량이 프로그램의 구동에 미치는 영향을 설명할 수 있다. 메모리 컴퓨터는 RAM(랜덤 엑세스 메모리)라는 물리적 저장장치를 포함하고 있다. 우리가 작성한 프로그램은 구동 중에 RAM에 저장되는데, 이는 유한한 크기의 비트만 저장할 수 있기 때문에 부정확한 결과를 내기도 한다. #include #include int main(void) { // 사용자에게 x 값 받기 float x = get_float("x: "); // 사용자에게 y 값 받기 float y = get_float("y: "); // 나눗셈 후 출력 printf("x / y = %.50f\n", x / y); } 그중 하나가 부동 소수점의 부정확성이다. 예시 프로그램을 보자. 이는 사용자에게 실수형 데이터 타입(float..