본문 바로가기

c언어

(8)
C 언어 | 문자열과 포인터 이제껏 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용했다. 하지만 이는 실제 C에서는 존재하지 않는 자료형이다. 학습 목표 문자열 형태의 새로운 자료형인 string이 어떻게 정의되었는지 설명할 수 있다. 문자열과 포인터 변수 s에 "EMMA"라는 값을 저장하는 프로그램을 예로 들어보자. #include #include int main(void) { string s = "EMMA"; printf("%s\n",s); } cs50 라이브러리를 사용해, 즉 string 타입을 사용해 값을 출력한 모습이다. 프로그램을 설명하자면 다음과 같다. "EMMA"는 문자의 배열이고 s[0]=E, s[1]=M과 같이 하나씩 표현될 수 있다. 문자의 마지막인 s[4]는 \0로, 0으로 이루어..
C 언어 | 포인터 학습 목표 포인터 변수를 정의하고 사용할 수 있다. 포인터 C에서는 포인터 개념을 통해 변수의 주소를 쉽게 저장하고 접근할 수 있게 한다. 지난 글에서 배운 '*'연산자를 사용해서 프로그램을 만들어보자. #include int main(void) { int n = 50; int *p = &n; printf("%p\n", p); printf("%i\n", *p); } 위 프로그램을 보면 *p라는 변수에는 &n값, 즉 변수 n의 주소를 저장한다. int *p에서 *는 이 변수가 포인터임을, int는 이 포인터가 int 타입의 변수임을 가리킨다. 첫 번째 출력 값을 보면 p는 형식 지정자 %p를 사용해 변수 n의 주소를 출력한다(= 포인터 p의 값). 두 번째 출력 값을 보면 *p는 형식 지정자 %i를 사용해..
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 언어 | 사용자 정의 함수와 중첩 루프 ✔ 학습목표 사용자 정의 함수와 중첩 루프를 작성할 수 있다. 사용자 정의 함수 프로그래밍을 하다 보면 반복적으로 작성해야 하는 코드가 있다. 이런 코드를 여러 번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있다. 이것이 사용자 정의 함수다. "cough"라고 세 번 말하는 프로그램을 작성한다고 생각해보자. #include int main(void) { printf("cough\n"); printf("cough\n"); printf("cough\n"); } 가장 단순한 방법은 printf 함수를 세 번 반복해서 사용하는 것이다. 하지만 이는 말 그대로 동일한 작업의 반복이기 때문에 효율적이지 않다. #include int main(void) { for (int i = 0; ..
C 언어 | 조건문과 루프 ✔ 학습목표 조건문과 루프를 c로 작성할 수 있다. 변수 설정 조건문과 루프에 관한 코드를 작성하기에 앞서, 앞서 배운 변수를 복습해보자. 지난 글에서 처럼 C는 오래된 언어기 때문에 저장하고자 하는 변수의 종류를 꼭 명시해주어야 한다. 만약 숫자를 세는 프로그램을 만들고 싶어 counter라는 변수를 설정한다면 int counter = 0; 처럼 말이다. 여기서 int는 저장하려는 데이터가 정수(integer)라는 것을 의미한다. counter는 변수의 이름, 0은 그 값에 0을 저장(초기화)하는 것이다(할당 연산자 '=' 사용). 코드의 마지막에는 꼭 세미콜론(;)을 붙여주는 것도 중요하다. 그렇다면 숫자를 세는 기능은 어떻게 구현할까. C에서는 변수의 값을 1씩 증가시키는데 다양한 방법이 있다. 1..
C 언어 | 문자열 ✔ 학습목표 C로 문자열 형식을 가진 변수를 선언하고 출력하는 프로그램을 만들 수 있다. 프로그램 생성 간단하게 'hello world'만 출력했던 지난 강의와 달리, 직접 문자열을 받고 출력하는 프로그램을 생성했다. 예제(string.c)는 다음과 같다. #include #include int main(void){ string answer = get_string("what's your name?\n"); printf("hello %s\n", answer); } 1) 변수 설정 사용자의 이름을 받아서 인사를 출력하는 프로그램이다. 변수명은 answer로 정했다. C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해주어야 한다. 본 예제에서는 문자열을 저장하고 싶기 때문에 st..
C 언어 | C 기초 ✔ 학습목표 C로 "hello, world"를 출력하는 프로그램을 만들 수 있다. C 언어 C는 아주 오래되고 전통적인 순수 텍스트 기반의 프로그래밍 언어다. C로 작성한 코드는 '파일이름.c'로 저장한다. 아래는 hello.c라는 이름으로 생성한 예제 프로그램이다. #include int main(void) { printf("hello, world\n"); } 1) int main(void)는 시작한다는 의미를 가진다. 2) printf("hello, world\n")은 말하는 역할을 한다. 글자나 단어, 문장을 적을 때에는 언제나 텍스트를 ""쌍따옴표로 감싼다. 그리고 문장의 끝에 마침표를 붙이는 것과 같이 C에서는 세미콜론(;)을 붙여 마무리한다. 3) #include 는 'stdio.h'라는 이름..