week 4-1
연산자의 개념
- 피연산자
-연산(operation)에 참여하는 변수나 값=> 피연산자(operand)
연산자(operator) || 10 + 20 \| |/ 피연산자(operand) |
연산자 분류
분류 | 연산자 |
산술 연산자 | + - * / % |
관계 연산자 | > < == != >= <= |
증감 연산자 | ++ -- |
논리 연산자 | && || ! |
조건 연산자 | (수식1)? 수식2 : 수식3 |
sizeof 연산자 | sizeof(데이터타입) |
대임 연산자 | = += -= /= %= |
대입 연산자(assignment operator)
- 변수의 저장 값을 대입하는 = 기호가 대입(할당) 연산자(assignment operator)
- = 연산자 오른쪽 수식을 먼저 계산하고 결과 값을 왼쪽 변수에 대입하는 기능
- 대입 연산자의 왼쪽 부분에는 반드시 변수만이 가능, 대입 연산자 왼쪽에 온 변수는 값이 변경
- 수식의 결과 값을 변수에 대입하지 않으면 프로그램에는 영향이 없음
10 + 20 |
(2) 30 (1) 30 / / \ sum = 10 +20 sum = add(a,b) |
관계 연산자(relational operator)
- 관계 연산자는 2개의 피연산자 관계(크기)를 비교하기 위한 연산자
- 관계 연산자가 포함된 수식의 결과는 1(참을 의미)이 아니면 0 (거짓을 의미)
- 수식에서 참 또는 거짓으로 계싼 결과가 나오는 경우 프로그래밍 언어에서는 편의 상 참(1), 거짓(0)으로 규정하였고 printf()를 사용하여 출력할 경우 결과가 참이면 정수 1, 거짓이면 0을 출력함
연산자 | 기호 | 결과(a=10, b=20) |
보다 크다 | a > b | 0 |
보다 작다 | a < b | 1 |
같다 | a == b | 0 |
같지 않다 | a != b | 1 |
크거나 같다 | a >= b | 0 |
작거나 같다 | a <= b | 1 |
논리 연산자(logical operator)
- &&(and), ||(or), !(not)
- 논리 연산자는 두 개 또는 하나의 논리값을 0이나 1의 논리값으로 평가하기 위한 연산자
연산자 기호 | 연산자 의미 |
AND(&&) | 둘 다 참이어야 참 |
OR( || ) | 둘 중 하나만 참이면 참 |
NOT( ! ) | 참이면 거짓, 거짓이면 참 |
x | y | x && y | x || y | !x |
0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 |
생각하기
- 여러 가지 문제를 해결하기 위해 문장 중에서 참과 거짓을 결정하여 수행 순서를 결정해야 하는 경우가 많은데, 관계 연산자와 논리 연산자처럼 결과가 참(1) 또는 거짓(0)으로 나오는 경우가 아닌 수식에서는 어떤 방법으로 참과 거짓을 구별할 수 있을까?
c 언어는 참과 거짓이라는 상수는 없으며, 0, 0.0, '\0'는 거짓으로, 0이 아닌 모든 값을 참으로 간주
( 3 && 4 ) => 1
생각하기 : 문제 풀이
수식 | 결과 | 설명 |
(3>2) && (1==2) | 0 | (1==2) 거짓 0 |
(3>2) || (1==2) | 1 | (3>2) 참 1 |
! (3==2) | 1 | |
3 && 4 | 1 | 3, 4 모두 참 0 |
0.0 && 5 | 0 | 0.0 거짓 0 |
0.1 || 0.0 | 1 | 0.1 참 1 |
1 && 1 | 1 | |
(3>5) || ! (2==1) | 1 | !(2==1) 참 1 |
0 || 0 | 0 |
연산자 우선순위
우선 순위 | 연산자 | 계산 방향 |
1 | () [] . -> a++ a-- | ->(좌에서 우) |
2 | ++a -a ! sizeof() _(단항) +(단항) &(주소) *(역참조) |
<-(우에서 좌) |
3 | * / % | ->(좌에서 우) |
4 | + - | ->(좌에서 우) |
5 | < > <= >= | ->(좌에서 우) |
6 | == != | ->(좌에서 우) |
7 | && | ->(좌에서 우) |
8 | | | | ->(좌에서 우) |
9 | ? : | <-(우에서 좌) |
10 | = += -= *= /= %= | <-(우에서 좌) |
11 | , | ->(좌에서 우) |
퀴즈
변수에 저장된 값을 비교할 때 사용하는 연산자가 아닌 것은?
=
다음 중 연산의 결과가 다른 하나는 (3 > 2) && (3 == 2)
week 4-2
연산자 연습
사칙연산 예제
#include <stdio.h>
int main(void)
{ int x, y, add, sub, mul, div, mod;
printf("정수1 입력하세요 : ");
scanf("%d", &x);
printf("정수2 입력하세요 : ");
scanf(%d, &y);
add = x + y;
sub = x - y;
mul = x * y;
div = x / y;
mod = x % y ; //x를 y로 나눈 나머지
printf(" %d + %d = %d 입니다\n", x, y, add);
printf(" %d - %d = %d 입니다\n", x, y, sub);
printf(" %d * %d = %d 입니다\n", x, y, mul);
printf(" %d / %d = %d 입니다\n", x, y, div);
printf(" %d %% %d = %d 입니다\n", x, y, mod);
return 0;
}
정수 1 입력하세요 : 80 정수 2 입력하세요 : 30 80 +30 = 110 입니다 80 - 30 = 50 입니다 80 * 30 = 2400 입니다 80 / 30 = 2 입니다 80 % 30 = 20 입니다 |
관계 연산 예제
#include <stdio.h>
int main(void)
{ int x, y;
char c;
printf("문자1개 입력하세요 : ");
scanf(%c, &c);
printf("입력한 문자 %c의 아스키10진수는 %d 입니다\n", c, c);
printf("입력한 문자 %c의 다음 문자는 %c 입니다\n", c, c+1);
printf("(%c < %c)는 %d 입니다\n", c, c+1, (c < c+1));
printf("정수 2개 입력하세요 : ");
scanf("%d%d", &x, &y);
printf(" (%d >= %d)는 %d 입니다\n", x, y, (x>=y));
printf(" (%d == %d)는 %d 입니다\n", x, y, (x==y));
printf(" (%d != %d)는 %d 입니다\n", x, y, (x!=y));
return 0;
}
문자1개 입력하세요 : a 입력한 문자 a의 아스키10진수는 97 입니다 입력한 문자 a의 다음 문자는 b 입니다 <a < b>는 1 입니다 정수 2개 입력하세요 : 10 50 <10 >= 50>는 0 입니다 <10 == 50>는 0 입니다 <10 != 50>는 1 입니다 |
논리 연산 예제
#include <stdio.h>
int main(void)
{
printf("(3>2) $$ (1==2)의 결과는 %d 입니다.\n", (3>2) && (1==2); // 0
printf("(3>2) || (1==2)의 결과는 %d 입니다.\n", (3>2) || (1==2); // 1
printf("0.0 && 5의 결과는 %d 입니다.\n", 0.0 && 5); // 0
printf("(5>2) != (1==2)의 결과는 %d 입니다.\n", (5>2) != (1==2); // 1
printf("(3>5) || !(2==1)의 결과는 %d 입니다.\n", (3>5) || !(2==1); // 1
printf("0.1 || 0.0의 결과는 %d 입니다.\n", 0.1 || 0.0); // 1
printf("('A'<'B') || 0.0의 결과는 %d 입니다.\n", ('A'<'B') || 0.0); // 1
return 0;
}
<3>2> && <1==2>의 결과는 0 입니다 <3>2> | | <1==2>의 결과는 1 입니다 0.0 && 5의 결과는 0 입니다 <5>2> != <1==2>의 결과는 1 입니다 <3>5> | | !<2==1>의 결과는 1 입니다 0.1 | | 0.0의 결과는 1 입니다 <'A'<'B'> | | 0.0의 결과는 1 입니다 |
퀴즈
다음 프로그램의 출력 결과는
int a = 1234;
int b;
b = (a / 100) % 10;
printf(“%d”, b);
2
다음 연산식의 결과는
'A'>=('B'-1)
1(참)
다음 프로그램의 출력 결과는
int a, b, c, d, result;
a = 4;
b = 12;
c = 37;
d = 51;
result = d % a * c + a % b + b;
printf("%d", result);
127