NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C, C++ 2. C, C++ 기초 학습. (변수와 수식 표현)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 업무 자동화 솔루션을 만들 때 주로 사용하는 언어는 C++입니다. 윈도우 API를 이용하기 위해서죠. 그렇다고해서 자바나 C# 또는 파이썬과 같은 언어로 매크로를 만들지 못하는 것은 아닙니다. 윈도우 API를 호출하기 위한 라이브러리들이 존재하고, 인터페이스를 통해 win32나 user32에 접근할 수 있기 때문입니다. 요즘은 빠른 개발 생산성을 위해 C#과 파이썬을 많이 사용하고 있습니다^^; 오늘은 변수와 수식을 어떻게 표현하는지 간단하게 알아볼건데요. (0°F − 32) × 5/9 공식을 사용해서 화씨 온도를 섭씨 온도로 변환하여 출력하는 프로그램을 만들겁니다. 자~ 이전 예제에서 만든 프로젝트를 비주얼 스튜디오로 열어주세요.

    3pco1po.png

     

     

    아래와 같이 코드를 변경하세요.

    // MyCPP.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
    //
    
    #include <stdio.h>      온도 변환 프로그램
    
    /* 이 프로그램은 아래 공식을 이용하여 화씨 온도를 섭씨로 변환합니다.
       (0°F−32)×5/9 */
    
    int main()
    {
        int fahr, celsius = 0;
        int lower, upper, step;
    
        lower = 0;      /* 온도 하한 값 */
        upper = 300;    /* 온도 상한 값 */
        step = 20;      /* 증가 스텝 */
    
        fahr = lower;
        while (fahr <= upper) {
            celsius = (fahr - 32) * 5 / 9;
            printf("%d\t%d\n", fahr, celsius);
            fahr = fahr + step;
        }
    }
    
    // 프로그램 실행: <Ctrl+F5> 또는 [디버그] > [디버깅하지 않고 시작] 메뉴
    // 프로그램 디버그: <F5> 키 또는 [디버그] > [디버깅 시작] 메뉴
    
    // 시작을 위한 팁: 
    //   1. [솔루션 탐색기] 창을 사용하여 파일을 추가/관리합니다.
    //   2. [팀 탐색기] 창을 사용하여 소스 제어에 연결합니다.
    //   3. [출력] 창을 사용하여 빌드 출력 및 기타 메시지를 확인합니다.
    //   4. [오류 목록] 창을 사용하여 오류를 봅니다.
    //   5. [프로젝트] > [새 항목 추가]로 이동하여 새 코드 파일을 만들거나, [프로젝트] > [기존 항목 추가]로 이동하여 기존 코드 파일을 프로젝트에 추가합니다.
    //   6. 나중에 이 프로젝트를 다시 열려면 [파일] > [열기] > [프로젝트]로 이동하고 .sln 파일을 선택합니다.

     

    실행하면 아래와 같은 결과를 확인할 수 있습니다.

    5FmNCDx.png

     

     

    화씨 온도를 섭씨로 변환해주는 아주 간단한 프로그램을 하나 만들었습니다. 검증은 아래 사이트에서 확인할 수 있습니다.

    VxaU5Yk.png

     

     

    아래 코드와 같이 /* 로 시작하고 */ 로 끝나는 구문을 주석문 또는 설명문이라고 부릅니다. 멀티 라인을 주석으로 처리할 때 사용되고, 단일 라인은 // 를 이용합니다. 주석으로 처리된 모든 문자는 프로그램의 실행에 아무런 영향을 미치지 못합니다. 물론, 컴파일할 때 제외되기 때문에 아무리 길게 적더라도 프로그램 용량에 포함되지 않습니다. 배치나 BASIC의 REM과 같은 역할입니다. C#이나 Java는 주석 외에 도큐멘테이션(Documentation)도 지원합니다. 이 부분은 C#과 자바 학습 글을 참고하시면 될거 같아요^^;

    /* 이 프로그램은 아래 공식을 이용하여 화씨 온도를 섭씨로 변환합니다.
       (0°F−32)×5/9 */

     

    프로그램을 작성하다보면 중간 중간 이런 설명문을 넣어서 프로그램을 이해하기 쉽게 해주는게 좋습니다. 주석문은 한 행 또는 여러 행을 차지할수도 있고, 명령어 뒤에 쓸 수도 있습니다. 위 코드에서는 여러가지 방식으로 사용하는법을 보여줍니다. C나 C++을 비롯한 C#과 Java는 변수를 사용하기 전에 선언해주어야 합니다. 또는 선언과 동시에 값을 할당해야 합니다.

        int fahr, celsius = 0;
        int lower, upper, step;

     

    이 프로그램에서 변수는 int형입니다. int는 integer라는 정수형 변수임을 알 수 있는데요. C를 비롯한 대부분의 언어가 변수의 형식을 반드시 선언해야 합니다. 자바스크립트나 파이썬과 같은 인터프리터 언어들은 다이나믹 타입을 사용하고 있습니다. 요즘은 typescript와 같이 강력한 형식을 요구하는 언어로 변화하고 있습니다. 시대 흐름과도 관련이 있는데 이런 내용은 기회가 되면 컬럼 형식으로 자세하게 알아보면 좋겠네요. 아무튼, 컴파일 언어인 C#도 다이나믹 형식을 지원하게끔 변화하고 있으니, 서로 장점은 흡수하면서 발전하고 있습니다.

     

    fahr, lower은 변수의 이름입니다. 변수를 선언하지 않으면 당연히 에러가 발생합니다. 사용해야 할 변수를 선언해야 한다는게 귀찮고 불필요해 보일수도 있는데요. 이는 큰 이점을 가지고 있습니다. BASIC과 같은 언어는 프로그램 중간에 어떤 변수가 오타가 있어서 그 변수가 잘못 계산되어 의도하지 않은 동작을 경험한적이 있을겁니다. 하지만, 변수를 프로그램 상위에 미리 선언해두고, 사용한다면 이런 실수를 많이 줄일 수 있게됩니다. 요즘은 개발 도구(Visual Studio, Eclipse등등...)를 사용하기 때문에 이런 문제가 발생할일은 없습니다. 인텔리센스라는 막강한 기능으로 실수가 발생할 수 없기 때문이죠.

     

    변수에는 여러가지 형(Type)이 있습니다. 이 프로그램에서는 int(정수형)가 사용되었습니다. 실수형 변수는 floart인데 부동소수점 형의 변수를 말합니다. 이외에도 char, short, long, double와 같은 형이 존재합니다. 이런 자료형은 대부분의 언어가 동일하게 사용하므로, 나중에 배울 자료형에서 좀 더 자세하게 알아보도록 하겠습니다. 컴퓨터 운영체제에 따라 자료형의 정밀도가 다른데요. 예를 들어 PDP-11에서 int는 16비트 부호숫자로써 -32768~32767의 범위를 가집니다. float는 32비트 숫자로 7자리 유효숫자를 가지고 그 크기는 10의 38승~10의 -38승의 범위를 가집니다. 이외에도 배열이나 구조체, 유니온, 포인터등등이 있는데요. 따로 알아보도록 하고 넘어갈께요.

     

    아래와 같이 변수를 선언함과 동시에 초기화할 수 있습니다.

        int fahr, celsius = 0;

     

    또는 선언과 초기화를 분리할 수 있습니다.

        lower = 0;      /* 온도 하한 값 */
        upper = 300;    /* 온도 상한 값 */
        step = 20;      /* 증가 스텝 */

     

    각 문장은 세미콜론으로 끝나고 뒤에는 주석문이 붙어 있습니다. 온도 변화를 20 스텝으로 0부터 300까지 출력해야 하는데요. 이렇게 반복해서 동일한 로직을 수행할 때 while문을 사용할 수 있습니다. for, foreach, do~while, while과 같은 문을 반복기라고 부르고, 각각을 포문, 포이치문, 두와일문, 와일문이라고 합니다. 이 프로그램에서 사용된 와일문은 바로 뒤에 오는 괄호 속의 조건이 만족되는 동안 중괄호 속의 문장들이 계속 수행됩니다. 이는 반복기가 모두 동일합니다. fahr이 upper보다 작거나 같으면 온도를 높이면서 계속 수행되게 됩니다.

        while (fahr <= upper) {
            celsius = (fahr - 32) * 5 / 9;
            printf("%d\t%d\n", fahr, celsius);
            fahr = fahr + step;
        }

     

    처음에는 fahr 값이 lower와 같으며, 반복기 안에서 화씨를 섭씨로 변환 후 printf 함수를 통해 화면에 출력합니다. 그리고, 스텝만큼 화씨를 증가시킵니다.

            fahr = fahr + step;

     

    참고로, while문은 중괄호로 여러 문장을 하나의 루틴으로 처리할 수 있지만, 아래와 같이 단일 문장일 경우 중괄호는 생략해도 됩니다.

        while (fahr <= upper)
            fahr = fahr + step;

     

    이 예제에서 전체 코드를 보면 main문과 while문은 오른쪽으로 들여쓰기 되어 있는것을 알 수 있습니다. 이는 어떤 규칙이 있는건 아니고, 개발자가 코드를 분석하기 쉽게 하기 위한 용도로 사용된다고 이해하시면 됩니다. 들여쓰기 없이 코드를 작성해도 크게 문제는 없습니다만, 가독성이 떨어지므로 중괄호를 기준으로 들여쓰기를 하는게 좋습니다. 개발 도구를 사용한다면, 개발자가 특별히 신경쓸 필요 없이 자동으로 수행되는 부분이기에 그렇다는 정도만 알면 될거 같네요. 아무튼, 이렇게 가독성을 위해 들여쓰기 되는것을 Indentation(인덴테이션)이라고 부릅니다.

     

    printf 함수에 대한 사용 방법도 간략하게 설명하고 마치도록 하겠습니다. printf 함수는 문자를 출력해주는 기능을 담당하고 있는데요. 여기에서는 인용부호를 사용해서 변수를 치환하고 있습니다.

            printf("%d\t%d\n", fahr, celsius);

     

    출력 값은 fahr과 celsius입니다. 그 앞에 인용부호 속에서 출력 양식을 지정해주고 있습니다. %d는 정수형 출력을 의미하고, \t는 탭, \n은 줄바꿈을 나타냅니다. 그러므로, fahr이 정수형으로 4칸(탭)을 띄우고, 줄바꿈이 수행되는 복잡한 루틴을 printf 함수로 쉽게 처리할 수 있습니다. 나중에 자세하게 알아보겠지만, 참고로 미리 말씀드리면 %d는 10진 정수형이고, %o는 8진 정수형입니다. 16진 정수형은 %x이고, 문자는 %c입니다. 문자열은 %s입니다. 앞서 알아본바와 같이 %를 출력하려면 %%와 같이 표현합니다.

     

    앞에서도 설명했지만 printf함수는 C의 표준 입출력 라이브러리에 들어있는 함수이며 C언어 자체에 포함되어 있는 명령어가 아닙니다. C언어 자체에는 입출력 기능이 없습니다. 그렇지만 표준 입출력 라이브러리에 있으므로 명령어처럼 생각하고 사용해도 크게 다르지 않으니 사용법을 이해하는데 노력하는게 중요합니다. 출력창에 표시되는 숫자가 좌측 정렬이라 들쭉 날쭉하게 표시되고 있습니다. 좀 더 보기좋게 바꾸려면 아래와 같이 코드를 변경하면 됩니다.

            printf("%3d\t%6d\n", fahr, celsius);

     

    자리수를 왼쪽에 지정한 숫자만큼 채우므로 좀 더 보기 좋게 출력되는걸 확인할 수 있습니다.

    3BcMJ8q.png

     

     

    진짜 마지막으로 소숫점이 나오도록 코드를 변경해봅시다.

    int main()
    {
        float fahr, celsius = 0;
        int lower, upper, step;
    
        lower = 0;      /* 온도 하한 값 */
        upper = 300;    /* 온도 상한 값 */
        step = 20;      /* 증가 스텝 */
    
        fahr = lower;
        while (fahr <= upper) {
            celsius = (fahr - 32) * 5 / 9;
            printf("%3.0f\t%6.3f\n", fahr, celsius);
            fahr = fahr + step;
        }
    }

     

    결과는 아래와 같습니다. 이제 구글에서 제공하는 온도 변환 계산기와 동일하게 값이 출력되는걸 알 수 있죠^^

    WkEOKhn.png

     

     

    기존과 달라진점은 자료형이 int에서 float형으로 바뀌었다는겁니다. 그리고, printf 함수의 인용부호에 플로트를 출력할 수 있도록 해줬습니다. 기본적으로 실수를 다룰때는 모든 숫자를 실수로 표시해주는게 실수를 줄이는데 도움이 됩니다. 간혹, 정수와 실수를 연산하면 자동으로 정수로 변환되기 때문인데요. 이는 컴파일러가 자료형이 없는 연산에서 정수와 실수를 계산한 후 정수를 반환하기 때문에 발생되는 문제입니다. 항상 디버깅을 통해 값을 확인할수는 없으므로 이런 실수를 줄이기 위해서는 32.0과 같이 표현해줘야 합니다. 이렇게해서 간단한 온도변환 프로그램을 하나 작성해보고, 어떻게 프로그램을 만드는지 기본적인 내용을 알아봤습니다. 다음에는 C 또는 C++에서 제공하는 기본 기능에 대해 하나씩 알아가보도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.