프로그래밍/C

1.2 변수와 수식 표현(Variables and Arithmetic Expressions)

피노리코 2014. 10. 26. 17:21

C=(5/9)(F-32)라는 공식을 사용해서 화씨온도를 섭씨 온도로 바꾸어 다음과 같이 출력하는 프로그램이다

  0    -17

20     -6

40      4

...

300  148

이 프로그램에서 설명문,변수,수식 표현,루프 그리고 형식화된 풀력 등을 배울수 있다.

#include <stdio.h>


int main(void)

{

    /* print Fahrenheit-Celsius table

        for fahr = 0,20,...,300 */


    int fahr,celsius;

    int lower, upper, step;

    

    lower = 0;    /* lower limit of temperature table */

    upper = 300/* upper limit */

    step  = 20;   /*step size */

    

    fahr=lower;

    while (fahr<=upper) {

        celsius= 5 * (fahr-32) / 9;

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

        fahr = fahr + step;

    }

}


  /* print Fahrenheit-Celsius table

        for fahr = 0,20,...,300 */ 


이 부분은 설명문으로 이 프로그램에 대한 간략한 설명이 나와있다. /* */ 사이에는 프로그램에 아무런 영향을 미치지 못한다. 프로그램에 이것을 통해서 간략한 설명을 해두면 좋다 설명문은 한행 또는 여러행을 차지할수도 있고 명령어 뒤에 쓸수도 있다. 위 프로그램은 두가지를 모두 보여준다

학교에서 배울때는 주석이라고 배웠는데 이 책에서는 설명문이라고 하는군요 :)


    int fahr,celsius;

    int lower, upper, step;


C에서는 모든 변수는 사용되기 전에 선언해 주어야 한다. 위의 프로그램에서 선언된 int는 변수의 형이 정수형(integer)이라는 것을 알려주며 fahr,celsius는 변수 이름이다 변수를 선언해 주지 않으면 에러가 생긴다 변수는 여려가지 형이 있는데 위의 프로그램에서는 int 가 사용되었다 실수형 변수는 float 인데 부동소수점형 변수를 말한다 int ,float 이외에도 다음과 같은 변수가 있다


char   문자형 1바이트

short  단정도 정수형

long   배정도 정수형

double 배정도 부동소수점형


이런 변수형 이웨이도 array,structure,union,pointer,function 도 선언해야할 여러가지 형이있는데 이것은 뒤에서 설명 하겠다


위 프로그램의 실제 계산은 변수의 초기값을 지정하는 일부터 시작한다.


  lower = 0;   

  upper = 300

  step  = 20;  

  fahr  = lower;

  

온도 변환표의 각행은 동일한 방법으로 계산 할 수 있는데 이럴때 사용하는 것이 while문 이다


while (fahr<=upper) {


...

}


while 문 뒤에 있는 괄호속에 조건이 만족되는 동안 중괄호속의 문장들을 계속 수행한다 저위의 프로그램의 경우 fahr의 처음값은 lower값인 0이다 두번째 행을 계산하고 그다음에 fahr은 step값이 20을 더하고 두번째 행을 계산하고... fahr이 upper인 300이 될때 까지 계속 해서 더한다

while 문은 중괄호가 있을수도 있지만


while(i<j)

        i = 2 * i;


이렇게도 사용할수 있다.

예제프로그램을 보면 main 몸체부분은 main보다 조금 오른쪽으로 들어가있고 while 의 반복 부분은 while보다 조금 오르쪽 부분에 있다 이것은 프로그램의 논리적 구조를 알기 쉽게 하기 위한 것이며 몇칸을 넣는가는 전혀 상관이 없다 이런식으로 프로그램의 구조를 알기 쉽게 쓰는것을 들여쓰기(indentation)이라고 한다.

온도프로그램의 대부분 작업은 루프의 몸체에서 행해진다. 섭씨온다는 다음 식에 의해 계산된다.


C=(5/9)(F-32) 이공식은


celsius= 5 * (fahr-32) / 9;


celsius = (5/9) * (fahr-32); 


이런식으로 쓸수 있다.

하지만 정수계산이브로 5/9는 항상 0이 되기때문에 섭씨 온도는 항상 0이된다.


위프로그램에서는 printf의 사용법에 대해서도 보여준다.


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


출력하는 값은 fahr와 celsius 이다. 그앞에 인용부호속에 출력양식을 지정해준다 %d는 정수형 출력\t는 tap을 \n 은 개행을 의미한다 즉 fahr를 정수형으로 출력하고 조금 띄어서 celsius를 정수형으로 출력하고 다음행으로 넘어가게 된다.


%d 10진 정수

%o  8진 정수

%x 16진 정수

%c 문자

%s 문자열 


을 나타낸다 또 %를 출력하고 싶을때 %%로 써야 한다


printf 함순는 C의 표준 입출력 라이브러리에 들어있는 함수이며 C언어 자체에 있는 명령어가 아니다 C언어 자체에는 표준입출력 기능이 없다.하지만 표준 입출력 라이브러리에 있으므로 명령어처럼 생각해도 무리가 없다 이렇게 많은 기능을 넣은것은 모든기종에 상관없이 동일한 동작을 하도록 해주기 위해서이다.

(printf 는 ANCI 표준에 정의하고 있다)


위의 코드는 자리수가 맞지 않아서 숫자들이 들쑥 날쑥한데 이 자리수를 맞추어 보자


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


실행해보기!


이번에는 온도 변환표를 소수점 이하 자리까지 나오게 해 보자. 프로그램은 다음과 같이 바꿔 주면 된다.


#include <stdio.h>


int main(void)

{

    /* print Fahrenheit-Celsius table

        for fahr = 0,20,...,300; floating-point version */

    float fahr,celsius;

    int lower, upper, step;

    

    

    lower = 0;    /* lower limit of temperature table */

    upper = 300/* upper limit */

    step  = 20;   /*step size */

    

    

    fahr=lower;

    while (fahr<=upper) {

        celsius = (5.0/9.0) * (fahr-32.0);

        printf("%3.0f %6.0f\n", fahr, celsius);

        fahr = fahr + step;

    }

}


달라진 점은 fahr,celsius가 float형으로 바뀌었다는 것과 celsius를 계산 하는 식이 바뀌었다는 것 그리고 출력 양식이 바뀐 것이다. 앞에서 5/9는 0이 되므로 계산이 실수형이라는 것을 알려주기 위해서 (5.0/9.0)이라고 썻다 정수형의 숫자(또는 변수)에 어떤 연산을 하면 정수연산이 행해진다 정수형과 실수형에 연산을 하면 정수형은 실수형으로 바뀌어 연산이된다 위의 프로그램에서 fahr-32.0은 fahr-32로 써도 같은 결고가 나온다 그렇지만 좀더 확실히 하고 프로그램을 알아보기 쉽게 하기 위해 32.0 이라고 쓰는 것이 좋다 정수형이 실수형으로 변환되는 또 한가지 예는 프로그램 다음 두 행에서 볼수있다.


fahr = lower;


while (fahr<=upper)


다음으로 출력 양식에 대해서 알아보자 %3.0f 는 소수점 이하 자리수가 0이라는 것을 나타낸다 %6.0f는 celsius 가 전체 6자리 소수점 이하 한자리의 부동소수점 형식으로 출력되도록 지정해 준다. 그래서 출력은 다음과 같이 된다.


 0  -17.8

20   -6.7

40    4.4


출력양식은 여러가지로 쓸수 있는데 몇가지 대표적인 예를 다음에 정리했다.


%d       10진 정수

%6d      6자리 10진 정수

%f       부동소수점 실수, 길이는 지정하지 않고 있다

%6f      부동소수점 실수, 전체 길이는 6자리로 지정한다

%.2f     부동소수점 실수, 소수점 이하 2자리로 지정한다

%6.2f    부동소수점 실수, 전체 6자리 소수점 이하 2자리

%o       8진 정수

%x       16진 정수

%c       문자

%s       문자열 


예제 1-3 온도변환표의 위에 항복의 제목이 붙도록 프로그램을 바꾸어 보라


예제 1-4 위 프로그램은 화씨를 섭씨로 바꾸는 프로그램이었다. 섭씨를 화씨로 바꾸는 프로그램을 작성해 보라.