내장형 하드웨어/C언어

부가 연산자, 복합 부가 연산자, printf, scanf, 제어문

동화다아아 2011. 4. 4. 16:12

부가 연산자와 복합 부가 연산자.

- C 언어에서 단순히 변수에 값을 부가할 때는 부가 연산자(=)를 사용한다.

복합부가 연산

부가 연산

x += 5;

x = x + 5;

x -= 5;

x = x - 5;

x %= 5;

x = x % 5;

x *= 5;

x = x * 5;


캐스트(cast) 연산자 - 형 변환(type)

⇒  (자료형) 수식


// 명시적 형 변환이 필요한 산술식의 계산 프로그램

#include <stdio.h>

int main()

{

        int intA = 14, intB = 3;

        float floatC = 0;


        floatC = intA / intB; // 우선 int형으로 나눈 후 그 결과를 float 형으로 바꾸게 되므로 14/3의 결과인 4를 float 형으로 바꾼다. 따라서 결과는 4.000000가 된다.

        printf("%f\n", floatC);


        floatC = (float) intA / intB; // casting(float) 뒤에 오는 형(int A)를 float 형으로 바꾸어 준다. 따라서 14.0/3이 계산된다. 따라서 결과는 4.666667이 된다.

        printf("%f\n", floatC);  


        return 0;

}


- printf() 함수


형식지정자

%d

  출력 값을 부호가 있는 10진수 정수(decimal)로 바꾼다.

%f

  출력 값을 실수형(float)으로 바꾼다.

%c

  출력 값을 문자형(char)으로 바꾼다.

%s

  출력 값을 문자열형(string)으로 바꾼다.

%o

  출력 값을 8진수로 바꾼다.

%x

  출력 값을 16진수로 바꾼다.



- scanf() 함수

⇒ 키보드로 입력된 값을 형식지정자에 맞추어 주소연산자 다음에 오는 변수에 넣으라는 뜻을 가진다.

- 주소 연산자(& - ampersand), scanf 함수 내에 변수 앞에 붙인다.(문자열 입력일 경우 제외)

- scanf() 함수가 키보드로부터 입력 값을 받을 때는 사용자가 <엔터 키>를 누르기 전까지는 입력 값을 읽지 않는다. 이것은 프로그램과 키보드 사이에 일시적으로 입력 값을 저장하는 버퍼라고 부르는 임시 기억 공간이 있기 때문이다.

- scanf() 함수가 여러 개의 입력 값을 동시에 읽는 경우에는 입력 값 사이에 ‘단락문자’를 넣어서 분리한다. 단락문자로는 위에서 사용된 공백문자, 개행문자, 탭문자 등을 사용할 수 있다.

- scanf() 함수를 이용하면 읽는 문자의 개수를 정할 수 있다. 형식 지정자를 이용하여 %5s를 명시하면 scanf() 함수는 문자의 내용에 관계없이 5문자만 읽는다.


- scanf() 함수와 printf() 함수에서 사용되는 형식 지정자 비교

printf()

scanf()

형식

%c

%c

  단일 문자(1byte공간)

  (글자1개만 입력받는다.)

%s

%s

  문자

%d

%d

  부호 있는 정수

%i

 

  부호 있는 정수

 

%i

  10진수, 8진수, 16진수

%f

%f

  실수(십진표기)

%c

%e

  실수(과학적 표기법)

%g

 

  실수

%u

%u

  부호 없는 정수

%x

%x

  부호 없는 16진수

%o

%o

  부호 없는 8진수

%p

 

  16진수 메모리 주소

- printf("%p\n",255); //16진수 메모리 주소. (반드시 8자리로 나온다.) %08X와 같다.


#include <stdio.h>

int main()

{

        printf("%p\n",255); // 255의 16진수 메모리 주소 출력 (000000FF)

        printf("%08X\n",255); // 8자리로 255의 16진수 메모리 주소 출력 (000000FF)


        return 0;

}




제어문


#include<stdio.h>

int main()

{

        int a;

        int b;

        a= 15;

        {

                b=23;

                printf("a+b=%d and a-b=%d\n",a+b,a-b);

        }

        {

                int b=10; // 앞에 선언한 b와는 다른 변수이다. 해당 중괄호 안에서만 값이 선언되어 있다. 즉, 중괄호가 끝나면 사라진다.

                printf("%d\n",b); // b=10이 출력된다.

                printf("%d\n",a); // a=15의 값이 출력된다.

        }

                printf("%d\n",b); // b=23의 값이 출력된다.

        return 0;

}


- 중괄호 안에 여러 개의 중괄호를 사용할 수 있다.(그리고 영역이 확실히 구분된다.)

- 중괄호는 영역 표시가 확실하다. 세 번째 중괄호 범위 안에서 int b=10; 의 선언은 해당 중괄호 안에서만 값이 유지되며, 해당 중괄호가 닫힐 때 그 값이 사라진다. 반대로 두 번째 중괄호의 b=23; 의 경우는 최상위 중괄호에서 선언된 int b의 값을 불러와 사용했기에 b=23이란 값이 그대로 유지된다.

- 다시 말하면 세 번째 중괄호의 int b=10; 이라는 선언은 최상위의 int a;, int b; 와 다르게 int b가 한 번 더 생긴 것과 같다. 즉 변수가 잠시 3개가 된 것이다.(변수의 지역이 다르므로 같은 이름도 허용되었지만 두 int b는 다른 변수이다. - 이것을 최상위의 int a;, int b;를 전역변수, 중간에 잠시 나타난 int b;를 지역변수라 한다.)

- 만약, 3번째 중괄호 안에 변수 선언을 새로 하지 않았다면, 전역변수의 값이 그대로 출력 된다.