본문 바로가기

컴퓨터/언어,프로그래밍

[C언어] C언어 변수

C 프로그래밍


                    <변수, 식 및 치환>

1. 변수의 선언

    변수와 상수는 프로그램이 다루는 객체로서 사용되기 전에 모든 변수는 선언되어야만 한다. 예를 들어 I, j, k를 정수형 변수로, length, height를 실수형 변수로, 그리고 c를 문자형 변수로 선언하고자 할 때는 다음과 같다.

     int   I, j, k;

     float length, height;

     char c;


   이러한 선언에 사용되는 기본 자료형에는 다음과 같은 형들이 있다.

char              short             int               long

  unsigned char     unsigned short   unsigned          unsigned long

  float              double                   

  이러한 자료형들은 모두 지정어이므로 사용이 정해져 있고 사용자가 변수명으로 사용할 수 없게 된다.

 

2. 식, 문장 및 치환

  식은 상수, 변수, 연산자, 그리고 함수호출의 조합이라고 할 수 있다. 다른 언어들과 마찬가지로 등호기호(=)를 기준으로 왼쪽은 변수가 위치하고 오른쪽은 상수, 변수, 식 등이 위치된다.

   우선 식의 예는 아래와 같다.

      a + b

      4.0 * x - 9.78889

      sin(17.456)

  

    또한 문장의 예는 아래와 같다.

      printf("hello! world");

  

     그리고 식의 예는 아래와 같다.

       I = 9;

       x = 6.5 + sin(35.5);


3. 증감 연산자의 사용

    증가연산자(++)와 감소연산자(--)는 단일 연산자로서 오른쪽에서 왼쪽으로의 결합법칙을 가진다. 이러한 연산자는 변수에는 적용될 수 있으나 상수나 식에는 적용될 수없다. 또한 ++i와 I++는 서로 다른 의미를 갖게 된다. 즉 ++i는 어떤 식에서 연산되기 전에 I의 값이 1 증가되는 반면 I++는 연산에 원래의 값으로 사용된 후에 1 증가된다.

   이러한 형태는 감소연산자의 경우도 마찬가지인데 증감연산자의 사용 예는 아래와 같다.


   /**** 증감연산자의 사용 예 ****/

   main()

   {

      int   a, b, c;

      a = b = c = 0;

      a = ++b + ++c;

      printf("\n %d %d %d", a, b, c);  /* 2 1 1 이 출력된다. */

      a = b++ + c++;

      printf("\n %d %d %d", a, b, c);  /* 2 2 2 가 출력된다. */

      a = ++b + c++;

      printf("\n %d %d %d", a, b, c);  /* 5 3 3 이 출력된다. */

      a = b-- + --c;

      printf("\n %d %d %d", a, b, c);  /* 5 2 2 가 출력된다. */

      a = ++c + c;

      printf("\n %d %d %d", a, b, c);  /* 기계 의존적이다. */

      printf("\n\n");

   }   

    위에서 a = ++c + c;의 경우 ++는  c앞에 있으므로  c가 사용되기 전에 c의 값을 증가시킨다. 그러나 c는 문장에서 두 번 나타나므로 c가 증가할 때 문장 내의 두 곳에서  c의 값이 변화되어 그 결과는 컴퓨터에 따라 다를 수 있다.

   

4. 식, 문장, 치환의 예  

  마일과 야드 단위의 마라톤 거리를 킬로미터 단위로 전환하는 프로그램을 작성해 보자. 영국의 단위로 마라톤 거리는 26마일 385야드로 규정되어 있다. 이 숫자는 정수이다. 마일을 킬로미터로 바꾸기 위해 실수인 변환 계수 1.609를 곱한다. 컴퓨터는 정수를 실수와 다르게 표현한다. 마일을 야드로 변환하기 위해 1760.0으로 나누는데, 보다시피 이 수는 정수가 아니 실수로 나타내야 한다. 이 변환 프로그램은 정수값과 실수값을 저장할 수 있는 변수를 이용할 것이다.

  C 언어에서 모든 변수는 프로그램의 서두에서 선언되고 명령되어야 한다. 식별자라고도 불리는 변수이름은 문자, 숫자, 그리고 밑줄문자의 열로 이루어진다. 단, 숫자로 시작되지는 않는다. 식별자는 프로그램에서 이용되는 바를 반영하여 선택한다. 이러한 방식으로 식별자는 문서의 역할도 하며, 프로그램을 보다 읽기 쉽게 해준다.

    /*** 킬로미터에 의한 마라톤 거리 변환 ***/

    main()

    {

    int   miles, yards;

    float kilometers;

    miles = 26;

    yards = 385;

    kilometers = 1.609 * (miles + yards / 1760.0);

    printf("\n마라톤 거리는 %f kilometers\n\n", kilometers);

    }

    이 프로그램의 출력결과는 다음과 같다.

     마라톤 거리는 42.185970 kilometers


프로그램 marathon의 분석

    /*** 킬로미터에 의한 마라톤 거리 변환 ***/

  /*와 */ 문자 사이의 모든 기술을 주석이며, 컴파일러는 이것을 번역하지 않는다.

        int      miles, yards;

  이것은 선언이다. int는 키워드이고, C 언어의 기본적인 형 중의 하나이다. 이것은 뒤따르는 변수가 int형이며, 정수값을 가질 수 있다는 것을 컴파일러에게 알려준다. 따라서 이 프로그램에서 변수 miles과 yards는 int형이다.

    float    kilometers;

  이것도 선언이다. float 역시 키워드이고, C 언어의 기본적인 형 중의 하나이다. 이것은 뒤따르는 변수가 float형이며, 실수값을 가질 수 있다는 것을 컴파일러에게 알려준다. 따라서 이 프로그램에서 변수 kilometers며 float형이다. double형 변수도 또한 실수값을 기억시키기 위해 사용되며, double형의 변수는 전형적으로 float형의 변수는 전형적으로 float형의 변수에 비해 두 배의 정확도를 갖는 수를 표현한다.

    miles = 26;

    yards = 385;

  이것들은 치환문이다. C 언어에서 문장은 세미콜론으로 끝나게 된다. 등호는 치환연산자이다. 이 프로그램에서 두 수 26과 385는 정수형 상수이다. 변수 miles에 값 26이 최환되고, 변수 yard에는 385가 치환된다.

    kilometers = 1.609 * (miles + yards /1760.0);

  이것도 최환문이다. 등호의 오른쪽에 있는 식의 값이 변수 kilometers에 치환된다. 곱셈, 덧셈, 그리고 나눗셈 각각에 대하여 연산자를 *, +, 그리고 /로 한다. 괄호 안의 연산자가 먼저 실행된다. 나눗셈은 덧셈에 비하여 우선순위가 높으므로 괄호 안의 식,

    yards/1760.0

  이 가장 먼저 계산된다(제 3 장 참조). 그 값은 변수 miles의 값에 더해지며, 그런 후에 그 값에  1.609가 곱해진다. 최종적으로 그 값은 변수 kilometers에 치환된다.

    printf("\n마라톤 거리는 %f kilometers\n\n", kilometers);      

  이것은 함수 printf()를 호출하는 문장이다. 함수 printf()는 다양한 수의 매개변수를 가질 수 있다. 첫 번째 매개변수는 항상 제어문자열이라 불리는 문자열이 된다. 이 예제에서 제어문자열은 아래와 같다.

    “\n마라톤 거리는 %f kilometers\n\n"

  이것은 함수 printf()의 첫 번째 매개변수이다. 이 문자열의 내부에는 변환형식 %f가 있다. 제어문자열에서 형식이 있다면 이 형식은 함수 printf()의 나머지 매개변수와 관련된다. 이것은 컴퓨터에게 변수 kilometers의 값을 부동 소숫점수로 인쇄열의 형식 %가 위치한 곳에 프린트할 것을 명령한다.

  키워드라 불리는 어떤 식별자들은 예약되어 있으며 프로그래머가 변수명으로 사용할 수 없다. 예를 들어 int, float 및 double은 키워드이다. 키워드에 대한 표는 제2장에 제시하였다. 다른 키워드들도 C 시스템이 인식하고 있으며, 프로그래머가 그것을 다시 정의할 수 없다. printf라는 이름을 예를 들 수 있다. printf는 표준 라이브러리에서 함수의 이름으로서 보통 변수의 이름으로는 사용하지 않는다.

  수에서 소숫점은 그 수가 정수가 아닌 부동 소숫점 상수라는 것을 나타낸다. 따라서 프로그램에서는 수 37과 37.0은 다르게 취급된다. 부동 소수형은 float과 double 두가지 형이 있고, 변수는 각각의 형으로 선언될 수 있지만 부동 소숫점 상수는 자동적으로 double형으로 선언된다.

  식은 전형적으로 치환연산자의 오른쪽에, 그리고 함수의 매개변수로서 나타난다. 가장 간단한 식은 지금까지 예시된 프로그램에서 385, 26, 1.609 및 1760.0 와 같은 상수이다. 단순히 변수의 이름도 식으로 간주된다. 변수 및 상수와 결합된 +나 * 등의 연산자들의 의미 있는 조합 또한 식이다. 식의 평가는 변환 규칙을 내포하는데, 이것은 상당히 주목해야 할 점이다. 두 정수의 나눗셈은 정수값의 결과를 내며 나머지는 버려진다. 따라서 7/3은 int값은 2를 갖는다. 그러나 식7.0/3은 double을 int형으로 나눈 것이다. 따라서 식이 평가될 때 3은 double형으로 변환되고, 7.0/3은 2.333...의 값을 갖는다. 이전의 프로그램에서 문장

    kilometers = 1.609 * (miles + yards/1760.0);

  이 다음과 같이 변경되었다고 하자.

       kilometers = 1.609 * (miles + yards/1760);

  변수 yards는 int형이며, 385의 값을 가지므로


    yards / 1760

은 int형의 값 0을 갖는다. 이것은 바라는 결과가 아니기 때문에 상수 1760.0으로 대체되어야 한다.


'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글

C언어 :: 매크로  (0) 2009.03.17
[C언어] C언어란?  (0) 2009.03.17
[C언어] C언어 선행처리기  (0) 2009.03.17
[C언어] C언어 자료의 입/출력  (0) 2009.03.17
[C언어] C언어 조건문  (0) 2009.03.17
제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...