제3장 연산자(Operators) 문봉근
제3장 연산자 3.1 산술연산자 3.2 증가/감소 연산자 3.3 대입 연산자(할당 연산자) 3.4 관계 연산자 3.5 논리 연산자 3.6 조건 연산자 3.7 비트 연산자 YES C 제 3 장 연산자
연산자(Operators) 정의 및 종류 연산자(operator)란? 연산자 종류 특수한 산술 또는 논리 연산을 수행하도록 지시하는 기호 연산자 종류 피연산자(operand) 수에 따라 단항/이항연산자 연산자의 기능에 따라 산술/관계/논리연산자 YES C 제 3 장 연산자
3.1 산술 연산자 각종 산술 연산에서 쓰이는 연산자 산술 단항 연산자 산술 이항 연산자 산술 이항 연산자의 종류와 기능 산술 연산자의 종류 산술 단항 연산자 부호 연산자, 증감/감소 연산자 산술 이항 연산자 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 등의 사칙연산자 나머지 값을 구하는 잉여 연산자(%) 산술 이항 연산자의 종류와 기능 YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.1 3+7, 3-7, 3*7, 3/7을 계산한 결과를 프로그램으로 구하시오. 프로그램 결과 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int A, B, C, D; /* 변수 선언 */ A=3+7; B=3-7; C=3*7; D=3/7; printf(" 3+7=%d\n 3-7=%d\n 3*7=%d\n 3/7=%d\n\n",A,B,C,D); /* 출력함수 */ } 3+7=10 3-7=-4 3*7=21 3/7=0 YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.2 3과 8을 곱셈, 나눗셈, 나머지 셈한 결과를 프로그램으로 구하시오. 프로그램 결과 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a,b,c,d; /* 변수 선언 */ b=3,a=8; c=a*b; d=a/b; printf("a*b=%d, a/b=%d\n",c,d); /* 출력함수 */ } a*b=24, a/b=2 YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.3 365를 31로 나눌 경우 나머지를 프로그램으로 구하시오. 프로그램 결과 프로그램 결과 #include<stdio.h> main() { int a,b,c; a=365, b=31; c=a%b; printf("나머지 = %d\n",c); } 나머지 = 24 YES C 제 3 장 연산자
연산자 우선 순위 단항 연산자 : `-' , + , ++, -- -> 우에서 좌 이항 연산에서의 우선 순위 단항 연산자 : `-' , + , ++, -- -> 우에서 좌 이항 연산자 : `*', `/', `%‘ -> 좌에서 우 이항 연산자 : `+', `-' 예 : int a = 3, b = 8, c = -4, d = -10; YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.4 b * -c /a 계산식에서 a = -2, b = 20, c = 3 일 경우 연산 결과를 표 3.3과 같이 손으로 직접 구한 후, 프로그램을 작성하여 결과를 확인하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a=-2, b=20, c=3, d; /* 변수 선언 */ d = b*-c/a; printf(" b * -c / a = %d\n ",d); /* 출력함수 */ } b * -c / a = 30 YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.5 a = 5, b = 7, c = -8, d = -12 일 때 b * -c /a - b / -c + -a / d와 d - a * (b + c) 계산식의 결과를 구하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a = 5, b = 7, c = -8, d = -12 ; int e, k; /* 변수 선언 */ e = b*-c/a-b/-c+-a/d; printf(" b*-c/a-b/-c+-a/d = %d\n ",e); k = d-a*(b+c); printf("d-a*(b+c)=%d\n",k); /* 출력함수 */ } b*-c/a-b/-c+-a/d = 11 d-a*(b+c)=-7 YES C 제 3 장 연산자
형 변환 기능 표 3.4 형 변환의 종류 및 방법 YES C 제 3 장 연산자 형 변환 종류 방법 의미 정수->실수 (float) 정수변수( 또는 상수) 정수를 실수로 변환됨. 실수->정수 (int) 실수변수( 또는 상수) 실수가 정수로 변환됨. YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.6 두 실수 값을 입력받아 더한 결과를 정수형으로 변환하는 프로그램과 두 실수 값을 정수형으로 변환한 후 더하여 결과를 출력하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { float a, b; /* 실수 변수 선언 */ int sum1, sum2; /* 정수 변수 선언 */ float sum3; /* 실수 변수 선언 */ printf("a="); scanf("%f",&a); /* 입력 함수 */ printf("b="); scanf("%f",&b); sum1 = (int)(a + b); sum2 = (int)a + (int)b; sum3 = a + b; printf("sum1 : %d\n", sum1); /* 출력함수 */ printf("sum2 : %d\n", sum2); printf("sum3 : %f\n", sum3); } a=25.5 b=32.6 sum1 : 58 sum2 : 57 sum3 : 58.099998 YES C 제 3 장 연산자
3.1 산술 연산자(계속) 예제 3.7 두 정수 값을 입력받아 나눈 결과를 실수형으로 변환하는 프로그램과 두 정수 값을 실수형으로 변환한 후 더하여 결과를 출력하는 프로그램을 작성하라. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a, b; /* 정수 변수 선언 */ float sum4, sum5; /* 실수 변수 선언 */ printf("a = "); scanf("%d",&a); /* 입력 함수 */ printf("b = "); scanf("%d",&b); sum4 = (float)(a / b); sum5 = (float)a / (float)b; printf("sum4 : %f\n", sum4); /* 출력함수 */ printf("sum5 : %f\n", sum5); } a = 30 b = 21 sum4 : 1.000000 sum5 : 1.428571 YES C 제 3 장 연산자
3.2 증가/감소 연산자 증가 연산자(increment operator) 감소 연산자(decrement operator) ++변수, 변수 ++ 감소 연산자(decrement operator) --변수, 변수 – Ex) a=10 YES C 제 3 장 연산자
3.2 증가/감소 연산자(계속) 예제 3.8 a가 10인 경우 b = ++a, b = a++, b = --a, b = a-- 순으로 연산식을 수행할 경우 a와 b의 연산 결과를 출력하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a=10, b; /* 변수 선언 */ b = ++a; printf(" b(%d) = ++a(%d)\n",b,a); b = a++; printf(" b(%d) = a(%d)++\n",b,a); b = --a; printf(" b(%d) = --a(%d)\n",b,a); b = a--; printf(" b(%d) = a(%d)--\n",b,a); /* 출력함수 */ } b(11) = ++a(11) b(11) = a(12)++ b(11) = --a(11) b(11) = a(10)-- YES C 제 3 장 연산자
3.2 증가/감소 연산자(계속) 예제 3.9 a가 10인 경우 ++a, a++, --a, a-- 연산식에 대해 결과를 구하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a = 10, b, c, d, e; /* 변수 선언 */ b = ++a; a=10; c = a++; a=10; d = --a; a=10; e = a--; printf("++a = %d\n",b); /* 출력함수 */ printf("a++ = %d\n",c); printf("--a = %d\n",d); printf("a-- = %d\n",e); } ++a = 11 a++ = 10 --a = 9 a-- = 10 YES C 제 3 장 연산자
3.3 대입 연산자(할당연산자) 연산자 우측의 값을 좌측의 변수에 대입한다는 의미 형식 : 변수 = 식 Ex) c = a + b YES C 제 3 장 연산자
할당 연산자의 예 a += 3 b -= 5 C *= 2 D /= 1.5 a 변수 값을 3만큼 증가 a = a + 3 b 변수 값을 5만큼 감소 b = b -5 C *= 2 c변수 값을 두배로 지정 c = c * 2 D /= 1.5 d변수 값을 1.5 나눔지정 d = d / 1.5 YES C 제 3 장 연산자
3.3 대입 연산자(계속) 예제 3.10 a가 5인 경우 a += 3과 a =a+3, a*= 3과 a=3*a 연산식에 대해 결과를 구하고 상호 비교하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a = 5; /* 변수 선언 */ a += 3; printf("a += 3 -> %d\n",a); a=5; a =a+3; printf("a =a+3 -> %d\n",a); a=5; a*= 3; printf("a *= 3 -> %d\n",a); a=5; a = 3*a; printf("a = 3*a -> %d\n",a); /* 출력함수 */ } a += 3 -> 8 a =a+3 -> 8 a *= 3 -> 15 a = 3*a -> 15 YES C 제 3 장 연산자
3.3 대입 연산자(계속) 예제 3.1 a가 10인 경우 a += 3, a -= 4, a*= 2, a /= 2 연산식에 대해 결과를 구하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a = 10; /* 변수 선언 */ a += 3; printf("a += 3 -> %d\n",a); a=10; a -= 4; printf("a -= 4 -> %d\n",a); a=10; a*= 2; printf("a *= 2 -> %d\n",a); a=10; a /= 2; printf("a /= 2 -> %d\n",a); /* 출력함수 */ } a += 3 -> 13 a -= 4 -> 6 a *= 2 -> 20 a /= 2 -> 5 YES C 제 3 장 연산자
3.3 대입 연산자(계속) 예제 3.12 a가 30인 경우 a += 3, b -= 3, c*= 3, d /= 3, e%=3 연산식의 결과를 구하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> /* 헤드파일 */ main() { int a, b, c, d, e; /* 변수 선언 */ a=b=c=d=e=30; /* a b c d e에 값을 30으로 모 두 초기화시킴 */ printf("a + 3 = %d\n", a+=3); /* 변수 a에 3을 증가 */ printf("b - 3 = %d\n", b-=3); /* 변수 b에 3을 감소 */ printf("c * 3 = %d\n", c*=3); printf("d / 3 = %d\n", d/=3); printf("e / 3 나머지 = %d\n", e%=3); /* 출력함수 */ } a + 3 = 33 b - 3 = 27 c * 3 = 90 d / 3 = 10 e / 3 나머지 = 0 YES C 제 3 장 연산자
3.4 관계 연산자 YES C 제 3 장 연산자 두 데이터간의 대소 및 상등을 판별하는 연산자 결과값은 연산자에 따라 참이면 1, 거짓이면 0으로 관계 연산자의 종류와 기능 YES C 제 3 장 연산자
3.4 관계 연산자(계속) 예제 3.13 키보드로 입력되는 수가 10보다 크면 1을, 그렇지 않으면 0을 출력하는 프로그램을 작성하시오. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int i, j; /* 변수 선언 */ printf("숫자를 입력하시오.\n"); scanf("%d", &i); j=(10<i); printf("Result is %d\n",j); /* 출력함수 */ } 숫자를 입력하시오. 5 Result is 0 12 Result is 1 YES C 제 3 장 연산자
3.4 관계 연산자(계속) 예제 3.14 식 1 < 0 < 2의 결과가 참인지 거짓인지를 확인하는 프로그램을 작성하시오. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int j; /* 변수 선언 */ j=(1<0<2); printf("Result is %d\n",j); /* 출력함수 */ } Result is 1 YES C 제 3 장 연산자
3.4 관계 연산자(계속) 예제 3.15 자판으로 입력되는 숫자가 11보다 크거나 같은 경우는 참(1)이고, 그 외 경우를 거짓(1)으로 하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> main() { int i, j; /* 변수 선언 */ printf("숫자를 입력하시오.\n"); scanf("%d", &i); /* 입력 함수 */ j = (11 <= i); printf("Result is %d\n",j); /* 출력 함수 */ } 숫자를 입력하시오. 5 Result is 0 11 Result is 1 YES C 제 3 장 연산자
3.4 관계 연산자(계속) 예제 3.16 식 1<0==3<5의 결과가 참인지 거짓인지를 확인하는 프로그램을 작성하시오. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int j; /* 변수 선언 */ j=1<0==3<5; printf("Result is %d\n",j); /* 출력함수 */ } Result is 0 YES C 제 3 장 연산자
3.5 논리 연산자 AND(&&), OR(||), NOT(!)등의 논리 연산을 수행 YES C 제 3 장 연산자
3.5 논리 연산자(계속) AND(&&), OR(||), NOT(!)등의 논리 연산을 수행 논리 연산자의 종류와 기능 YES C 제 3 장 연산자
3.5 논리 연산자(계속) 예제 3.17 년도를 입력받아 그 해의 2월 달이 윤달인지를 판별하여 몇일까지인지를 출력하는 프로그램을 작성하라. 프로그램 결과 #include <stdio.h> main() { int year, leap=28; printf("년도를 입력하시오 : "); scanf("%d", &year); leap += (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)); printf("%d년은 2월 달이 &d일까지 있습니다. \n”, year, leap); /* 출력 함수 */ } 입력 년도를 입력하시오 : 2004 실행결과 2004년은 2월 달이 29일까지 있습니다. YES C 제 3 장 연산자
3.5 논리 연산자(계속) 예제 3.19 0과 10에 대하여 논리곱과 논리합을 연산한 결과를 구하는 프로그램을 작성하라. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a=0, b=10; /* 변수 선언, 초기값 할당 */ int i, j; i=a&&b; j=a||b; printf(" 0 && 10 = %d \n",i); /* 출력함수 */ printf(" 0 || 10 = %d \n",j); } 0 && 10 = 0 0 || 10 = 1 YES C 제 3 장 연산자
3.5 논리 연산자(계속) 예제 3.20 a는 5, b는 12, c는 0인 경우 !a, b&&c, b||c, (i==j&&!j-i)을 연산하여 결과를 구하는 프로그램을 작성하라. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a=5,b=12,c=0; /* 변수 선언, 초기값 할당 */ int i,j,k,p; i=(!a); j=b&&c; k=b||c; p=(i==j&&!j-i); printf("!a=%d\n",i); /* 출력함수 */ printf("b&&c=%d\n",j); printf("b||c=%d\n",k); printf("i==j&&!j-i=%d\n",p); } !a= 0 b&&c= 0 b||c= 1 i==j&&!j-i= 1 YES C 제 3 장 연산자
3.5 논리 연산자(계속) 예제 3.21 입력하는 영문자가 소문자인지를 확인하는 프로그램을 작성하시오.(단 소문자이면 1, 그렇지 않으면 0이 출력되도록 한다.) 프로그램 결과 #include <stdio.h> main() { char ch; int j; /* 변수 선언 */ printf("문자를 입력하시오.\n"); scanf("%c", &ch); /* 입력 함수 */ j = (ch >= 'a' && ch <= 'z'); printf("Result is %d\n",j); /* 출력 함수 */ } 문자를 입력하시오. k Result is 1 A Result is 0 YES C 제 3 장 연산자
3.6 조건연산자 조건 연산자 : `?'와 `:' 조건 연산의 형식 조건식 ? 연산식 1 : 연산식 2 조건 연산자 : `?'와 `:' 조건 연산의 형식 조건식 ? 연산식 1 : 연산식 2 조건식의 값이 참(1)이면 연산식 1을 수행하여 결과값을 구하고, 조건식의 값이 거짓(0)이면 연산식 2를 수행하여 결과값을 구한다. 예) 다음의 연산식은 k와 j를 비교하여 k가 크면 j를 i에 대입, 크지 않으면 k를 i에 대입하는 연산 i = j < k ? j : k; 조건문. if (j < k) i = j; else i = k; YES C 제 3 장 연산자
3.6 조건연산자(계속) 예제 3.22 a(100)와 b(5)를 비교하여 a가 크면 a*b를 c에 대입하고, 크지 않으면 a/b를 c에 대입하는 연산을 수행하는 프로그램을 작성하시오. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a=100, b=50; /* 변수 선언, 초기값 할당 */ int c; c=((a>b) ? a*b : a/b); printf("결과 : %d\n", c); /* 출력함수 */ } 결과 : 5000 YES C 제 3 장 연산자
3.6 조건연산자(계속) 예제 3.23 키보드로부터 두 정수 값을 입력받아 큰 수가 출력하는 프로그램을 조건연산자를 이용하여 작성하라. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a, b, c; /* 변수 선언 */ printf("첫 번째 숫자를 입력하시오.\n"); scanf("%d",&a); /* 입력 함수 */ printf("두 번째 숫자를 입력하시오.\n"); scanf("%d",&b); c=((a<b)?b:a); printf("%d\n",c); /* 출력함수 */ } 첫 번째 숫자를 입력하시오 15 두 번째 숫자를 입력하시오. 11 YES C 제 3 장 연산자
3.7 비트연산자 비트 연산자는 주어진 데이터를 비트 단위에서 인식하여 연산을 수행하는 연산자 비트 연산자의 종류와 기능 YES C 제 3 장 연산자
3.7 비트연산자(계속) 예제 3.25 255와 173을 2진수에 대한 논리곱, 논리합, 배타적 논리합 연산을 수행하는 프로그램을 작성하라. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a=255,b=173; /* 변수 선언, 초기값 할당 */ int i,j,k; i=a&b; j=a|b; k=a^b; printf(" 255 & 173 = %d \n",i); /* 출력함수 */ printf(" 255 | 173 = %d \n",j); printf(" 255 ^ 173 = %d \n",k); } 255 & 173 = 173 255 | 173 = 255 255 ^ 173 = 82 YES C 제 3 장 연산자
3.7 비트연산자(계속) 예제 3.26 11을 비트 단위에서 1만큼 오른쪽으로 이동한 결과와, 3을 비트 단위에서 3만큼 왼쪽으로 이동하는 연산을 수행하는 프로그램을 작성하라. 프로그램 결과 #include<stdio.h> /* 헤드파일 */ main() { int a=3,b=11; /* 변수 선언, 초기값 할당 */ int f, g; f= b>>1; g=a<<3; printf("a=%d, b=%d, f=%d, g=%d\n", a, b, f, g); /* 출력함수 */ } a=3, b=11, f=5, g=24 YES C 제 3 장 연산자
3.7 비트연산자(계속) 예제 3.27 두 정수를 임시변수를 쓰지 않고 교환하는 프로그램을 XOR(^)를 사용하여 작성하라. 프로그램 결과 #include <stdio.h> void main(void) { int i = 100, j = 200; i ^= j; j ^= i; printf("%d, %d\n", i, j); } 200, 100 YES C 제 3 장 연산자
표 3.15 연산자의 우선순위 YES C 제 3 장 연산자
연산 우선 순위 예제 연산 우선 순위 예 char c = 'd'; int i = 10, j = 10, k = 20; float x = 3.4; YES C 제 3 장 연산자
실습 문제 1 두수를 입력받아 사칙연산 및 나머지 연산을 수행하는 프로그램을 작성하시오. 프로그램 결과 프로그램 결과 #include <stdio.h> main() { int a,b; printf(" input(a)==>"); scanf("%d",&a); printf("\n input(b)==>"); scanf("%d",&b); printf("%4d + %4d = %4d\n",a, b, a+b); printf("%4d - %4d = %4d\n",a, b, a-b); printf("%4d * %4d = %4d\n",a ,b, a*b); printf("%4d / %4d = %4.2f\n",a, b, (float)a/(float)b); printf("%4d mod %4d = %4d\n",a, b, a%b); } input(a)==>12 input(b)==>4 12 + 4 = 16 12 - 4 = 8 12 * 4 = 48 12 / 4 = 3 12 mod 4 = 0 YES C 제 3 장 연산자
실습 문제 2 프로그램 결과 키보드에서 3개의 정수를 입력받아 가장 큰 수를 출력하는 프로그램을 작성하시오. 프로그램 결과 #include <stdio.h> void main() { int a,b,c,max,min; printf("input(a,b,c) ==>"); scanf("%d %d %d",&a,&b,&c); max = (a>b) ? a:b; max = (max > c)? max:c; printf("Max(%d,%d,%d) = %d\n",a,b,c,max); } input(a,b,c) ==>10 20 30 Max(10,20,30) = 30 Min(10,20,30) = 10 YES C 제 3 장 연산자
연습 문제 I 1. a가 8이고, b가 0일 경우 a AND(&&) b, a OR(||) b를 구하는 프로그램을 작성하라. 2. a를 99, b를 55로 하여 a<b이면 b2를, a<b가 아닌 경우에는 a2를 c에 대입하는 프로그램을 작성하라. 3. 아래의 실행 결과와 같은 결과를 얻을 수 있도록 프로그램을 수정하라. #include <stdio.h> void main() { int a=3,b=11; int f, g; f= b>>2; g=a<<5; printf("f=%d, g=%d\n", f, g); } 실행결과 f=1, g=96 YES C 제 3 장 연산자
연습 문제 II 4. a가 10, b가 12인 경우 a == b, a != b, ++a==--b의 값을 구하는 프로그램을 작성하라. 5. a가 50인 경우 차례로 ++a, a++, --a, a--를 수행하는 프로그램을 작성하라. 6. 15와 7의 비트 연산 AND, OR, XOR를 구하는 프로그램을 작성하라. 7. 두 수 x, y를 입력받아 비교하여 큰 수를 작은 수로 나눈 몫과 나머지를 출력하는 프로그램을 작성하라. 8. 세 수를 입력받아 삼각형인지 아닌지를 판별하라. 9. 날짜(1998년 2월 14일)를 입력받아 총 몇 일인지를 출력하는 프로그램을 작성하라. 10. 키보드에서 3개의 정수를 입력받아 가장 작은 수를 출력하는 프로그램을 작성하라. YES C 제 3 장 연산자
연습 문제 III 11. 4개의 정수를 입력받아 오림차순으로 정렬하여 출력하는 프로그램을 작성하라. (단 " ? "의 연산자만을 사용하여라.) 12. scanf()를 이용하여 10쌍(a, b)의 수를 입력받아 큰 수들의 합과 작은 수들의 합을 구하는 프로그램을 작성하라. 13. 다음 변수들을 선언하여 초기화를 시킨 후 이들의 계산을 한 결과를 출력하는 프로그램을 작성하고 그 결과가 어떻게 나왔는지를 조사하라. a= ---i; b= j- --i; c= j ---i; d= -j -- -k; e= k ++=i; f= m++ /++i * --j; g= ++i /m++ * ++n; 14. 4개의 정수를 입력받아 내림차순으로 정렬하여 출력하는 프로그램을 작성하시오. 단 " ? "의 연산자만을 사용하여라. 15. 정수(초, sec)를 입력받아 몇 시, 몇 분, 몇 초인지를 나타내는 프로그램을 작성하라. (단 음수일 경우 에러 메시지 출력) YES C 제 3 장 연산자