PDF 다운로드 PDF 다운로드

C는 오래 된 프로그래밍 언어들 중 하나이다. 1970년대에 개발되었지만, 저수준의 조작이 가능하기 때문에 기계의 성능을 최대한 끌어낼 수 있어서 요즘에도 많이 쓰인다. C를 배우면서 컴퓨터의 복잡한 부분에 대한 공부를 하게 되기 때문에 여기서 배운 지식들이 다른 언어를 배우는 데에도 도움이 된다. 이 글을 읽고 C 언어로 개발하는 법을 배워 보자.

방법 1
방법 1 의 6:

시작하기

PDF 다운로드
  1. C 코드를 실행하기 위해서는 컴파일러가 코드의 내용을 해석한 후, 기계가 이해할 수 있는 코드로 변환해야 한다. 사서 써야 하는 컴파일러도 있지만, 많은 컴파일러들이 무료로 제공된다.
    • 윈도우를 사용 중이라면, Microsoft Visual Studio Express 또는 MinGW 사용해보자.
    • 맥에서는 XCode를 사용하면 된다.
    • 리눅스에서는 GCC가 많이 사용된다.
  2. C는 오래 된 프로그래밍 언어들 중 하나이며 무척 강력하다. Unix 운영체제를 개발하기 위해 만들어졌지만 거의 모든 운영체제에서 사용할 수 있도록 포팅 및 확장되었다. 또한 C의 기능을 더욱 확장해 C++이라는 언어까지 만들어졌다.
    • C 코드는 함수들로 이루어져 있으며, 함수들에는 변수, 조건문, 반복문 등을 사용해 데이터를 저장하고 변형할 수 있다.
  3. 아래와 같은 (매우) 기본적인 코드를 읽어 보면서 언어의 여러 가지 부분이 어떻게 상호작용하는지, 프로그램은 어떻게 작동하는지 관찰해 보자.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     printf 
     ( 
     "Hello, World! 
     \n 
     " 
     ); 
     getchar 
     (); 
     return 
     0 
     ; 
     } 
    
    [1]
    • #include 는 파일이 시작되는 부분에 포함되며, 필요한 함수들을 불러 들인다. 이 예제에서는 stdio.h 파일을 통해 printf() getchar() 라는 함수를 사용할 수 있게 된다.
    • int main() 은 정수를 반환하며 main이라는 이름을 가진 함수를 정의하는 부분이다. 컴파일러에게 "여기에서부터 프로그램이 시작합니다"라고 알려 주는 역할을 한다. 모든 C 프로그램에 존재하는 함수이다.
    • { }는 중괄호 안에 있는 모든 코드가 함수에 소속되어 있다는 것을 의미한다. 중괄호 안에 있는 세 줄의 코드는 전부 main 함수 안에 소속되어 있다.
    • printf() 함수는 함수의 내용을 사용자의 모니터 화면에 표시해 주는 역할을 한다. 따옴표는 따옴표 안에 있는 문자열이 코드가 아니라 문장이라는 것을 명시해 준다. \n 은 컴파일러에게 커서를 다음 줄로 내리라고 명령하는 문자이다.
    • ; 는 한 줄이 끝났다는 것을 의미한다. 거의 모든 C 언어 문장들은 세미콜론(;)으로 끝난다.
    • getchar() 함수는 사용자의 입력이 들어올 때까지 기다리라는 의미이다. 이 명령이 유용한 이유는 대개의 컴파일러가 프로그램을 실행한 후 바로 창을 닫아 버리기 때문이다. 이 함수를 입력해 놓으면 아무 키나 입력될 때까지 프로그램을 실행시켜 놓는다.
    • return 0 명령은 함수가 끝났다는 것을 의미한다. main 함수는 int (정수) 함수이다. 따라서 함수가 끝났을 때에는 정수를 반환해야 한다. 여기에서 "0"는 프로그램이 정상적으로 실행되었다는 의미이다. 0 이외의 숫자를 반환하면 뭔가 문제가 있었다는 의미이다.
  4. 코드를 편집기에 입력한 후, "first.c"로 저장해 보자. 그리고 컴파일러로 컴파일한다. 대개 Build나 Run 버튼을 클릭하면 된다.
  5. 코드를 컴파일할 때 주석은 컴파일되지 않는다. 하지만 이 코드에서 무슨 일이 벌어지고 있는지 설명하는 데에는 도움이 된다. 또한 코드의 목적이 무엇인지 기억하거나 다른 개발자들이 코드를 이해하는데 도움이 된다.
    • C 언어에서 코드를 작성하기 위해서는 주석 시작 부분에 /* 를 추가하고 끝에 */ 로 마무리 짓는다.
    • 기본적인 부분만 제외하고 모든 부분에 주석을 추가해 준다.
    • 주석은 코드의 일부를 삭제하지 않고 컴파일에서 제외하는 데에도 사용된다. 컴파일에서 제외하고 싶은 부분을 주석으로 묶어 준 후에 컴파일을 하자. 그 부분을 다시 코드에 추가시켜 주고 싶다면, 주석을 제거하자.
    광고
방법 2
방법 2 의 6:

변수 사용하기

PDF 다운로드
  1. 변수에는 프로그램에서 계산을 하면서 생긴 값들을 저장해 놓거나, 사용자의 입력을 저장하는데 사용된다. 변수는 사용하기 전에 정의되어야 하며, 몇 가지 타입들 중에 하나를 골라서 사용해야 한다.
    • 가장 많이 사용되는 타입들은 int , char , float 이다. 이들은 각각 다른 형식의 데이터를 저장한다.
  2. 변수는 사용하기 전에 우선 선언되어야 한다. 변수의 이름 앞에 데이터 타입을 표시해 주면 된다. 예를 들면, 아래 있는 코드는 다 올바른 변수 선언이다.
     float 
     x 
     ; 
     char 
     name 
     ; 
     int 
     a 
     , 
     b 
     , 
     c 
     , 
     d 
     ; 
    
    • 여러 개의 변수가 같은 타입이기만 하면, 한 줄에 작성할 수 있다. 쉼표로 변수들을 구분해 주기만 하면 된다.
    • C 코드를 작성할 때 자주 사용하는 것처럼, 각 줄은 세미 콜론으로 마무리된다.
  3. 변수는 각 블록이 시작할 때 선언되어야 한다. (다시 말해, { 다음에 선언이 추가되어야 한다는 것이다.) 블록 뒤에서 선언할 경우 프로그램은 정상적으로 작동되지 않는다.
  4. 이제 변수를 어떻게 사용하는지 배웠으니, 사용자의 입력을 저장하는 간단한 프로그램을 작성할 수 있을 것이다. 이 프로그램에서는 scanf 라는 새로운 함수를 사용할 것이다. 이 함수는 사용자의 입력을 받아 저장하는 역할을 한다.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     int 
     x 
     ; 
     printf 
     ( 
     "숫자를 입력하세요: " 
     ); 
     scanf 
     ( 
     "%d" 
     , 
     & 
     x 
     ); 
     printf 
     ( 
     "%d를 입력하셨습니다." 
     , 
     x 
     ); 
     getchar 
     (); 
     return 
     0 
     ; 
     } 
    
    • "%d" 라는 코드는 사용자의 입력을 정수 형태로 해석할 것이라는 것을 의미한다.
    • 변수 x 앞에 있는 & 라는 글자를 추가한 이유는 scanf 에게 x 라는 변수가 메모리 상에 어디에 저장되어 있는지 찾아 변경할 수 있도록 알려 주기 위함이다.
    • 맨 마지막에 있는 printf 함수는 사용자에게서 받아 들인 입력값을 사용자에게 보여 준다.
  5. 수식을 이용해 변수에 저장된 값을 변경할 수 있다. 이 때 알아 두어야 할 것은 = 이 한 개만 있을 때에는 오른쪽에 있는 값을 대입하지만, == 처럼 두 개가 있을 때에는 오른쪽과 왼쪽에 있는 값들이 동일한지 비교해 본다는 것이다.
     x 
     = 
     3 
     * 
     4 
     ; 
     /* x에 3 * 4를 대입한다. 결국 x는 12가 된다. */ 
     x 
     = 
     x 
     + 
     3 
     ; 
     /* 원래 있던 x의 값에 3을 더한 후, 그 값을 x에 대입한다. */ 
     x 
     == 
     15 
     ; 
     /* x가 15가 맞는지 확인해 본다. */ 
     x 
     < 
     10 
     ; 
     /* x가 10보다 작은지 확인한다.  */ 
    
    광고
방법 3
방법 3 의 6:

조건문 활용하기

PDF 다운로드
  1. 세상 모든 프로그램은 결국 조건문에 의해 작동한다고 해도 과언이 아니다. 조건문의 결과 값은 TRUE(참) 또는 FALSE(거짓)밖에 없으며, 그 결과값에 따라 프로그램의 진행 방식이 결정된다. 가장 기본적인 조건문은 if 문이다.
    • C 언어에서의 TRUE와 FALSE는 지금까지 공부해 온 것과는 조금 다르다. C 언어에서 TRUE는 0이 아닌 숫자를 의미한다. 따라서 어떤 비교를 수행했을 때, 그 비교의 결과가 TRUE라면 1을 반환되며, 결과가 FALSE라면 0이 반환된다. 이것을 이해한다면 if문이 어떻게 작동하는지 이해할 수 있을 것이다.
  2. 조건문을 작성할 때에는 수학 연산자들을 사용해 값을 비교한다. 다음 목록에는 가장 흔하게 사용되는 조건 연산자들을 모아 보았다.
     > 
     /* 크다 */ 
     < 
     /* 작다 */ 
     >= 
     /* 크거나 같다 */ 
     <= 
     /* 작거나 같다 */ 
     == 
     /* 같다 */ 
     != 
     /* 다르다 */ 
    


     10 
     > 
     5 
     TRUE 
     6 
     < 
     15 
     TRUE 
     8 
     >= 
     8 
     TRUE 
     4 
     <= 
     8 
     TRUE 
     3 
     == 
     3 
     TRUE 
     4 
     != 
     5 
     TRUE 
    
  3. if문을 작성해 조건문이 실행된 뒤에 어떤 내용이 실행되어야 할지 결정할 수 있다. 다른 조건문들을 결합해 좀 더 강력한 조건문을 작성할 수도 있지만, 우선은 간단하게 작성해 보면서 if문에 익숙해져 보자.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     if 
     ( 
     3 
     < 
     5 
     ) 
     printf 
     ( 
     "3은 5보다 작다" 
     ); 
     getchar 
     (); 
     } 
    
  4. else나 else if문을 이용해 if문을 확장할 수 있다. else문은 if문이 FALSE일 때 실행된다. else if문을 이용하면 여러 가지 경우를 처리하기 위해 if문을 나열해 줄 수 있다. 다음 예제를 보면서 else와 else if문이 어떻게 사용되는지 알아 보자.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     int 
     age 
     ; 
     printf 
     ( 
     "현재 나이를 입력하세요: " 
     ); 
     scanf 
     ( 
     "%d" 
     , 
     & 
     age 
     ); 
     if 
     ( 
     age 
     <= 
     12 
     ) 
     { 
     printf 
     ( 
     "아직 어린이시군요! 
     \n 
     " 
     ); 
     } 
     else 
     if 
     ( 
     age 
     < 
     20 
     ) 
     { 
     printf 
     ( 
     "10대는 행복할 때이죠! 
     \n 
     " 
     ); 
     } 
     else 
     if 
     ( 
     age 
     < 
     40 
     ) 
     { 
     printf 
     ( 
     "마음만은 아직 젊을 때예요! 
     \n 
     " 
     ); 
     } 
     else 
     { 
     printf 
     ( 
     "나이를 먹으면 지혜로워진대요. 
     \n 
     " 
     ); 
     } 
     return 
     0 
     ; 
     } 
    
    [2]
    • 위 프로그램은 사용자의 입력을 받은 후 그 값을 age에 저장한 뒤 if문들을 통과시키고 있다. 숫자가 첫 번째 if문을 만족시킨다면, 첫 번째 printf 가 실행된다. 첫 번째 if문을 만족시키지 못하면 다음 문장으로 넘어가게 되며, 어떤 문장도 만족시키지 못하면 마지막 else 문 다음에 있는 printf 가 실행된다.
    광고
방법 4
방법 4 의 6:

반복문

PDF 다운로드
  1. 반복문란 프로그램에서 가장 중요한 부분 중 하나라고 할 수 있다. 어떤 조건이 만족할 때까지 계속 실행되기 때문이다. 반복문을 통해 어떤 작업을 쉽게 반복할 수 있으며, 똑같은 조건문을 여러 번 작성해야 하는 상황을 피할 수 있게 해 준다.
    • 조건문에는 세 종류가 있다. for, while, do...while이다.
  2. 가장 흔하게 사용되며 유용한 반복문이다. for문에 기록한 조건에 맞을 때까지 블록 안에 들어 있는 코드가 반복된다. for루프에는 세 가지 내용이 들어간다. 제어변수 초기화, 종료 조건, 블록이 한 번 실행된 후에 제어 변수 변경이다. 이 세 가지 중에 필요 없는 것이 있다면, 그냥 빈 칸으로 남겨 둬도 된다. 하지만 그렇게 하면 루프가 무한 반복될 수 있기 때문에 따로 종료 조건을 설정해 주어야 한다. [3]
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     int 
     y 
     ; 
     for 
     ( 
     y 
     = 
     0 
     ; 
     y 
     < 
     15 
     ; 
     y 
     ++ 
     ){ 
     printf 
     ( 
     "%d 
     \n 
     " 
     , 
     y 
     ); 
     } 
     getchar 
     (); 
     } 
    
    • 위 프로그램의 for 반복문에서 y 는 0으로 초기화되며, y 이 15보다 작을 때에는 코드가 반복 실행된다. y 의 값이 화면에 표시된 후에 y 는 1이 증가하며 코드가 한 번 더 실행된다. y 가 15가 되는 순간, 반복문은 정지한다.
  3. while 반복문은 for 반복문에 비해 단순하다. 조건이 하나밖에 존재하지 않으며, 그 조건을 만족시키기만 한다면 코드는 계속 실행된다. 반복문을 정의할 때 변수의 값을 초기화하거나 변경해야 할 필요는 없다. 하지만 대개의 경우 while문 아래 코드 블록에서 관련된 처리를 하게 된다.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     int 
     y 
     = 
     1 
     ; 
     while 
     ( 
     y 
     <= 
     15 
     ){ 
     printf 
     ( 
     "%d 
     \n 
     " 
     , 
     y 
     ); 
     y 
     ++ 
     ; 
     } 
     getchar 
     (); 
     } 
    
    • y++ 라는 문장은 y 값을 1 증가시키라는 의미이다. 따라서 반복문이 한 번 실행될 때마다 y 은 1씩 증가한다. 그리고 y 이 16이 되면 반복문은 실행이 중지된다. 실행 조건이 y <= 15이므로 y 가 15와 작거나 "같을" 때 반복문이 실행되어야 하기 때문이다.
  4. .while 반복문을 사용해 보자 . 이 반복문은 최소한 한 번은 실행되어야 하는 반복문을 작성할 때 유용하다. for이나 while 반복문의 경우에는 반복문을 시작할 때 조건을 확인하지만, do...while의 경우에는 반복문을 마칠 때 조건을 확인한다. 따라서 반복문 내부의 코드가 반드시 한 번은 실행된다.
     #include 
     <stdio.h> 
      
     int 
     main 
     () 
     { 
     int 
     y 
     ; 
     y 
     = 
     5 
     ; 
     do 
     { 
     printf 
     ( 
     "반복 중! 
     \n 
     " 
     ); 
     } 
     while 
     ( 
     y 
     != 
     5 
     ); 
     getchar 
     (); 
     } 
    
    • 이 반복문은 조건이 FALSE에 해당하지만 한 번 실행된다. y 의 값이 5이고, 조건은 “5가 아니어야 한다”이기 때문에 딱 한 번만 실행되고 반복문이 종료된다. 다시 말해, "반복 중!"이라는 문구가 출력이 된 후에 조건을 확인하고 반복문이 종료된다.
    • do...while문을 작성할 때 while문을 작성한 후 세미콜론을 찍어 주어야 한다. 이 경우가 유일하게 반복문 마지막에 세미콜론이 필요한 경우이다.
    광고
방법 5
방법 5 의 6:

함수를 알아 보자

PDF 다운로드
  1. 함수란 프로그램의 다른 부분에서 호출할 수 있는 완성된 코드 블록이라고 할 수 있다. 함수를 사용하면 코드에서 반복되는 부분을 제거할 수 있으며, 코드를 작성하거나 읽는 것이 쉬워진다. 함수에는 지금까지 배운 모든 기술을 사용할 수 있으며, 함수 안에 다른 함수를 추가할 수도 있다.
    • 지금까지 봐 온 예제들에서 main() 이라는 부분은 main() 이라는 함수를 시작한다는 의미이다. getchar() 역시 stdio.h라는 파일에 선언된 함수이다.
    • 효율적이고 읽기 쉬운 코드를 작성하려면 함수는 필수적이다. 프로그램을 깔끔하게 작성하기 위해 함수를 잘 사용해 보자.
  2. 함수를 만들고 싶다면, 계획을 세우고 시작해야 한다. 함수를 선언하려면, "반환_타입 함수_이름(매개변수1, 매개변수2, ...);"처럼 작성해야 한다. 예를 들어 숫자 2개를 더하는 함수는 다음과 같이 선언한다.
     int 
     add 
     ( 
     int 
     x 
     , 
     int 
     y 
     ); 
    
    • 이 함수는 정수 2개( x and y )를 더한 뒤, 결과값을 정수형으로 반환한다.
  3. 위에서 선언한 함수를 정의해 주자. 이 함수는 정수 두 개를 받아들인 뒤 더해서 반환할 것이다.
     #include 
     <stdio.h> 
      
     int 
     add 
     ( 
     int 
     x 
     , 
     int 
     y 
     ); 
     int 
     main 
     () 
     { 
     int 
     x 
     ; 
     int 
     y 
     ; 
     printf 
     ( 
     "더하고 싶은 숫자 두 개를 입력하세요: " 
     ); 
     scanf 
     ( 
     "%d" 
     , 
     & 
     x 
     ); 
     scanf 
     ( 
     "%d" 
     , 
     & 
     y 
     ); 
     printf 
     ( 
     "두 숫자의 합은 %d입니다. 
     \n 
     " 
     , 
     add 
     ( 
     x 
     , 
     y 
     ) 
     ); 
     getchar 
     (); 
     } 
     int 
     add 
     ( 
     int 
     x 
     , 
     int 
     y 
     ) 
     { 
     return 
     x 
     + 
     y 
     ; 
     } 
    
    • 함수 선언이 main 함수 위에 있는 것을 볼 수 있을 것이다. 이 부분은 컴파일러에게 add라는 함수가 있으니 나중에 불릴 수도 있다는 것을 예상하고 있으라고 이야기해 주기 위해 필요하다. 이 부분은 함수를 나중에 정의할 경우에만 필요하다. add() 함수를 main() 보다 위에 정의할 수도 있으며, 이 경우에도 결과는 동일하다.
    • 함수가 어떻게 작동하는지 정의한 부분은 코드의 아랫부분에 위치한다. main() 함수에서는 두 개의 정수값을 add() 함수로 보내 처리한다. 그러면 add() 함수는 결과값을 main() 에 반환한다.
    • add() 함수가 정의되었으니 어디서든 add() 함수를 호출할 수 있다.
    광고
방법 6
방법 6 의 6:

좀 더 공부해 보기

PDF 다운로드
  1. 이 글에서 기본적인 내용을 다루고 있기는 하지만, 정말 기본적인 부분들만 다루고 있을 뿐이다. 좋은 책을 구하게 되면 문제를 어떻게 해결하는지 배울 수 있기 때문에 프로그래밍을 하다가 생기는 난감한 상황들을 극복하는데 많은 도움이 될 것이다.
  2. 인터넷 상이든 현실 세계든 프로그래밍과 관련된 커뮤니티들은 많이 존재한다. C 프로그래머들과 코드와 아이디어를 교환해 보면, 여러 가지를 배울 수 있을 것이다.
    • 해커톤이나 대회 같은 곳에도 나가 보자. 팀이나 개인 자격으로 참여해 시간 내에 창의적인 방식으로 프로그램을 작성하거나 해결책을 찾아 내는 행사들이 있다. 이런 행사를 통해 좋은 개발자들을 많이 만날 수 있다. 해커톤은 여기저기에서 자주 열리니 조사해 보자.
  3. 컴퓨터 공학 학위를 따기 위해 대학에 들어갈 필요는 없지만, 강의를 듣는 것이 많이 도움이 된다. 프로그래밍에 대해 잘 아는 사람으로부터 강의를 듣는 것만큼 도움이 되는 경험은 없다. 지역 문화 센터나 대학들에서 수강 신청 없이 컴퓨터 프로그래밍 강의를 해 주는 경우가 있으니 찾아서 들어 보자.
  4. C에 대해 공부했다면, C++을 공부해 보는 것도 좋다. C++은 C를 확장한 언어이며, 여러 가지 기능이 추가되었다. 또한 C++은 대다수의 현대 프로그래밍 언어에서 사용되는 객체를 다루기 때문에 배워 두면 다른 언어를 배우는 데에도 많은 도움이 된다.
    광고

  • 항상 프로그램에 주석을 추가한다. 그러면 그 코드를 읽게 될 다른 사람들에게 도움이 될 뿐만 아니라, 왜 그 코드를 그렇게 작성해야만 하는지 생각해 보는데에도 도움이 된다. 코드를 작성할 때에는 왜 그렇게 했는지 기억할 수 있지만, 2, 3개월만 지나도 많이 생각이 나지 않을 것이다.
  • 문장이 마무리되는 경우 세미콜론(;)을 추가하지만, 'if', 'while', 'for' 같은 제어문을 처리할 때에는 추가하지 않는다.
  • 컴파일을 진행하다 문법 오류를 만나서 막히는 경우가 있다. 이 경우에는 구글이나 다른 검색 엔진을 사용해 문제를 검색해 보자. 비슷한 문제를 겪었던 사람들이 해결책을 적어 놓았을 것이다.
  • 소스 코드 파일은 .c 확장자를 가져야 한다. 그래야 컴파일러에서 C 언어 파일이라는 것을 인식하게 된다.
  • 실력 향상을 위해서는 연습이 필요하다는 것을 잊지 말자. 프로그래밍 연습을 많이 할수록 더 잘하게 될 것이다. 따라서 실력이 늘 때까지 작고 간단한 프로그램부터 시작해 보자. 실력이 늘었다면 좀 더 복잡한 것을 만들어 보자.
  • 논리에 대해 공부해 보자. 프로그래밍을 하다 만나게 되는 여러 문제들을 해결하는데 도움이 된다.
광고

이 위키하우에 대하여

이 문서는 19,580 번 조회 되었습니다.

이 글이 도움이 되었나요?

광고