c

2. 변수와 연산자

it_jangyee 2020. 1. 5. 12:53

변수란 값을 담는 그릇

 

1. 변수 선언

 

타입 변수명;

 

2. 기본 타입

타입 값의 형태 크기(byte)
char 정수(문자-아스키코드) 1
short 정수 2
int 정수 4
long 정수 4
float 실수 4
double 실수 8
부호있음 부호없음
signed unsigned

3. 이름 명명 규칙 및 문법

1)명명규칙

알파벳(a-z, A-Z), 숫자(0-9), 특수문자(_)를 조합하여 만들 수 있고 숫자로 시작하면 안되고 키워드를 사용해도 안된다. 

 

2)문법

문장이 #으로 시작하면 컴파일 전에 처리된다 - 전처리
#include: 헤더파일을 현재 파일에 포함

 

<표준출력함수>
printf("문자열");
printf("출력서식", 변수나 값의 나열);

<출력서식>
%d : 정수 1개가 출력될 자리
%c : 문자 1개 출력할 자리를 잡는다. 
%f : float값 1개 출력할 자리
%lf : double값 1개 출력할 자리

#include <stdio.h>

void main(){
    int a;
    a=10;

  //변수 이름은 곧 값이다 
    printf("%d\n", a);
    printf("%d, %d\n", 10, 20);
    printf("a=%d\n", a);

}

#include <stdio.h>

void main(){

    char a = 10;
    char b = 'x';

    //char는 문자 1개도 담을 수 있다. 
    //문자 한개는 ''로 묶는다.

    printf("a=%d\n", a);
    printf("b=%c\n", b);
    printf("b(문자 x의 아스키 코드값)=%d\n", b);
}

#include <stdio.h>
void main(){
    //14 - int
    //3.1434 - double

    //f:타입을 float으로 바꿈 
    float a = 3.1434f;
    double b = 4.56757;

    printf("a=%f\n", a);
    printf("a=%.2f\n", a);
    printf("b=%lf\n", b);
}

4. 연산자

1)산술연산자

연산자 설명 사용 연산결과
+ 더하기 2+4 6
- 빼기 4-2 2
* 곱하기 5*6 30
/ 나누기(몫) 5/2 2
% 나누기(나머지) 5%2 1
#include <stdio.h>
void main(){
    int a=10, b=20, c;
    c = a + b;
    printf("%d + %d = %d \n", a, b, c);
    c = a - b;
    printf("%d - %d = %d \n", a, b, c);
    c = a * b;
    printf("%d * %d = %d \n", a, b, c);
    c = a / b;
    printf("%d / %d = %d \n", a, b, c);
    a = 5;
    b = 2;
    printf("%d / %d = %d\n", a, b, a/b);
    printf("%d mod %d = %d\n", a, b, a%b);
}

2)단항 증감 연산자

연산자 설명 예>
++ 1증가

int a=10;

a++   //a는 11

-- 1감소

int a=10;

a--   //a는 9

#include <stdio.h>
void main(){
    int a = 10;
    printf("%d", a+1);  //a의 값은 변함 없음
    a++;  //한 단위 증가: a=a+1;
    printf("a=%d\n", a);
    a++;
    printf("a=%d\n", a);
    a--;  //한 단위 감소: a=a-1;
    printf("a=%d\n", a);
    a--;
    printf("a=%d\n", a);
}
#include <stdio.h>
void main(){
    int a = 10, b;
    b = a++;
    printf("a=%d, b=%d\n", a, b);

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

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

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

3)비교 연산자

연산자

설명

==

 피연산자들의 값이 같은가를 비교하여 같으면 True, 다르면 False 반환한다.

a == b

!=

 피연산자들의 값이 같지 않은가를 비교하여 다르면 True, 같으면 False 반환한다.

a != b

> 

왼쪽 피연산자 값이 오른쪽 피연산자 값보다 큰가를 비교하여 맞으면 True, 아니면 False

a > b

>=

왼쪽 피연산자 값이 오른쪽 피연산자 값보다 크거나 같은가를 비교하여 맞으면 True, 아니면 False

a >= b

< 

왼쪽 피연산자 값이 오른쪽 피연산자 값보다 작은가를 비교하여 맞으면 True, 아니면 False

a < b

<=

왼쪽 피연산자 값이 오른쪽 피연산자 값보다 작거나 같은가를 비교하여 맞으면 True, 아니면 False

a <= b

#include
void main(){
    int a=10, b=5;
    printf("a==b:%d\n", a==b);
    printf("a!=b:%d\n", a!=b);
    printf("a>b:%d\n", a>b);
    printf("a>=b:%d\n", a>=b);
    printf("a<b:%d\n", a<b);
    printf("a<=b:%d\n", a<=b);

}

4) 논리 연산자

true, false를 기반으로 여러 조건을 따져 상황에 맞는 조건을 도출할  있다. c는 true, false를 1, 0으로 표현

연산자

설명

&&

 연산자 값들이 모두 true이면 true, 그렇지 않으면 false 반환한다.

int a=10, b=5;

a==10 && b<5

||

 연산자 값들  하나만 true이면 true, 모두 false 일때만 false 반환한다.

int a=10, b=5;

a==10 || b<5

!

 연산자는 하나이고  연산자 값의 반전 값이 반환된다.  연산자가 true이면 False False이면 frue 반환한다.

!(a==10)

#include
void main(){
    int a=4, b=6, c=4;

    printf("a==b && a==c:%d\n", a==b&&a==c);
    printf("a==b || a==c:%d\n", a==b||a==c);
    printf("!(a==b):%d\n", !(a==b));
}

 5)비트 연산자

연산자

설명

 피연산자의 동일한 위치의  비트마다 모두 1이면 1, 아니면 0 반환한다.

a & b

 피연산자의 동일한 위치의  비트마다 하나라도 1이면 1, 모두 0이면 0 반환한다.

a | b

 피연산자의 동일한 위치의  비트마다 같으면 0, 다르면 1 반환한다.

a ^ b

 연산자는 하나이고  비트를 반전한다.  1 0으로 0 1 변환한다.

~a

<< 

왼쪽  연산자의 모든 비트를 오른쪽  연산자(숫자) 만큼 모든 비트를 왼쪽으로 쉬프트한다.

a << 2

>> 

왼쪽  연산자의 모든 비트를 오른쪽  연산자(숫자) 만큼 모든 비트를 오른쪽으로 쉬프트한다.

a >> 3

6)삼항 연산자

연산자 문법 예>
? (조건)?실행문1:실행문2;

int x = 10;

(x==10)? printf("x는10"):printf("x는10아님");

#include
void main(){
    int x = 50;
    (x%2==0)?printf("짝수\n"):printf("홀수\n");
}

7)대입 연산자

연산자

사용 예

동일한 표현

=

a = 10

a = 10

+=

a += 10

a = a + 10

-=

a -= 10

a = a - 10

*=

a *= 10

a = a * 10

/=

a /= 10

a = a / 10

%=

a %= 10

a = a % 10

&=

a &= 10

a = a & 10

|=

a |= 10

a = a | 10

^=

a ^= 10

a = a ^ 10

>>=

a >>= 2

a = a >> 2

<<=

a <<= 2

a = a << 2

#include
void main(){
    int a=10;
    printf("a+=10후 a=%d\n", a+=10);
    a=10;
    printf("a-=10후 a=%d\n", a-=10);
    a=10;
    printf("a*=10후 a=%d\n", a*=10);
    a=10;
    printf("a/=10후 a=%d\n", a/=10);
    a=10;
    printf("a%%=10후 a=%d\n", a%=10);
}

5. 표준입력

  scanf("입력서식", 저장할 변수의 주소);

#include
void main(){
    int a;
    printf("정수를 입력하라\n");
    scanf("%d", &a);//표준입력함수 .키보드 입력
    printf("입력한 값은 %d\n", a);
    printf("a의 주소:%d\n", &a);
}
#include
void main(){
    char a;
    int b, d, e;
    float c;

    printf("문자 하나를 입력하라\n");
    scanf("%c", &a);
    printf("정수 하나를 입력하라\n");
    scanf("%d", &b);
    printf("실수 하나를 입력하라\n");
    scanf("%f", &c);

    printf("입력한 값은 %c, %d, %f\n", a, b, c);

    printf("정수 세개를 입력하라\n");
    scanf("%d%d%d", &b, &d, &e);
    printf("입력한 값은 %d, %d, %d\n", b, d, e);
}
#include
void main(){
    int score;
    printf("점수:");
    scanf("%d", &score);
    score>=60?printf("합격\n"):printf("불합격\n");
}

6. 형변환

변수나 값의 타입을 변환함


int+int(int 끼리 연산)  => int

예>   5/2의 결과는 2


float + float(float 끼리 연산) => float

1)자동형변환: 자동으로 이뤄진다.
    타입이 다른 값들을 연산할때 발생. 작은 타입이 큰 타입으로 변함

    char=>short=>int=>long=>float=>double
    signed=>unsigned

2)강제형변환

   강제로 형을 변환함. 캐스팅 연산자를 사용해야 함

   int a = 10;

   (float)a

 

//sizeof 연산자:메모리 크기를 계산
void main(){
    printf("char 크기:%d\n", sizeof(char));
    printf("short 크기:%d\n", sizeof(short));
    printf("int 크기:%d\n", sizeof(int));
    printf("long 크기:%d\n", sizeof(long));
    printf("float 크기:%d\n", sizeof(float));
    printf("double 크기:%d\n", sizeof(double));
/*
    signed(음/양)
    unsigned(양수)

    signed char a;
    unsigned char b;
    4-signed int
    3.14-double
    3.14f-float
*/
    //자동 형변환: 타입이 다른 값들을 연산할때 발생. 작은 타입이 큰 타입으로 변함

    //char=>short=>int=>long=>float=>double
    //signed=>unsigned

    if(sizeof(int)<-1){
        printf("true");
    }else{
        printf("false");
    }

    int s1=34, s2=56, s3=78;
    float avg = (float)(s1+s2+s3)/3; //강제형변환
}