2. 변수와 연산자
변수란 값을 담는 그릇
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> //변수 이름은 곧 값이다 |
#include <stdio.h> //char는 문자 1개도 담을 수 있다. |
#include <stdio.h> //f:타입을 float으로 바꿈 |
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; //강제형변환 } |