06 세상을 변화시키는 연산자

Similar documents
OCW_C언어 기초

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - chap04-연산자.pptx

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap06-2pointer.ppt

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

Microsoft PowerPoint - chap-05.pptx

KNK_C03_Expr_kor

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - KNK_C03_Expr_kor

Microsoft PowerPoint - ch07 - 포인터 pm0415

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

C++ Programming

Microsoft PowerPoint - chap-03.pptx

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Lesson2.pptx

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A635C0E520BCF6BDC4B0FABFACBBEAC0DA>

Microsoft PowerPoint - Chapter_04.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

금오공대 컴퓨터공학전공 강의자료

1.1.1 컴퓨터의 구성 p.19

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

11장 포인터

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - Chapter_02.pptx

Microsoft PowerPoint - 제11장 포인터

C 프로그래밊 개요

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - gnu-w10-c-chap11

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap05-제어문.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

금오공대 컴퓨터공학전공 강의자료

untitled

Microsoft PowerPoint - 제11장 포인터(강의)

컴파일러

중간고사

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - c2.ppt

03 상수, 변수, 자료형

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - Java7.pptx

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Data Structure

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

OCW_C언어 기초

Microsoft PowerPoint - lec3.ppt

Microsoft PowerPoint - Chapter8.pptx

들어가면서 본 식생활가이드 는 여러분께서 받으신 식생활 평가지의 내용을 쉽게 이해하실 수 있도록 구성되었습니다. 식생활 평가지는 식품섭취조사에서 응답하신 내용을 기반으로 분석하여 체중평가, 에너지 섭취평가, 식품 섭취 평가, 영양소 섭취 평가 등의 내용을 포함하고 있습

PowerPoint 프레젠테이션

슬라이드 1

ABC 2장

KNK_C_05_Pointers_Arrays_structures_summary_v02

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint Presentation

1.4.3 증감연산자 후치증가 a++: 프로그램의한명령줄이끝나고 1을증가시킨값을다시 a에저장. 후치감소 a--: 프로그램의한명령줄이끝나고 1을감소시킨값을다시 a에저장. 전치증가 ++a: 1을증가시킨값을미리 a에저장하고프로그램을수행. 전치감소 --a: 1을감소시킨값을미리

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - additional01.ppt [호환 모드]

Infinity(∞) Strategy

프로그래밍 및 연습 1

Microsoft PowerPoint - chap-06.pptx

본 강의에 들어가기 전

윈도우즈프로그래밍(1)

ABC 3장

PowerPoint Presentation

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - chap03.ppt

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint Predicates and Quantifiers.ppt

Java ...

Microsoft PowerPoint - CP_02_Convert_To_C_02_Step.pptx

PowerPoint Presentation

ch15

PowerPoint Presentation

쉽게

02장.배열과 클래스

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

<4D F736F F F696E74202D2032C1D6C2F72D32C2F7BDC32028B0ADC0C7C0DAB7E D20BAAFBCF6BFCD20BFACBBEAC0DA>

Transcription:

Part 06 세상을변화시키는연산자 1

이장의내용 대입문도사실은수식이다 대입연산자의변형 증감연산자 조건연산자 괄호도연산자인가? 우선순위와결합순서정리 2

6.1 대입문도사실은수식이다 3

대입문 변수에값을대입시키는문장 a = a + 1; "a 와 a+1 이같다 " 는뜻이아니라 "a+1 값을변수 a 에저장하라 " 는뜻 대입문동작과정 대입문수행전에변수 a 에 20 이저장되어있었다면 부수효과 (side effect) + 연산자나함수가값을리턴 (return) 하는것외에도 변수값을변경시키는등 부수적으로발생시키는효과 = 4

대입수식 대입연산자 = 대입연산자 (assignment operator) = 도엄연한연산자이므로값을돌려준다. 대입연산의결과값은해당변수에저장된값이다. 연속대입 대입연산결과를이용하면연속대입 (cascading assignment) 연산을수행할수있다. = b = a = 2; // b = (a = 2); 와같은의미 = 5

assignment.c 실행결과 : 초기의 a 와 b 값입니다. a = 0, b = 0 a = a + 1; 을수행했습니다. a = 1, b = 0 b = a = 2; 를수행했습니다. a = 2, b = 2 6

6.2 대입연산자의변형 7

누적대입연산자 누적대입연산자형태 C 의철학 변수 = 수식 여기서 는이항연산자이며 위수식의의미는다음수식과같은의미임변수 = 변수 ( 수식 ) 누적대입연산자가꼭필요한가? 꼭필요하지는않음 그럼왜? 간결하기때문 ' 변수 ' 에해당하는좌변이복잡할경우유리함 yyval[yypv[p3+p4]+yypv[p1+p2]] += 2; 누적대입연산자의 로사용할수없는연산자 크기비교연산자 < 와 > 왜그럴까요? C 언어의설계철학은간결성이다. 8

assignment2.c 실행결과 : 초기의 a 값입니다. a = 0 a += 1; 을수행했습니다. a = 1 a += a + 1; 을수행했습니다. a = 3 a *= a * a; 를수행했습니다. a = 27 9

6.3 증감연산자 10

증감연산자 증가연산자 피연산자의값을하나증가시킴 a++; 는 a += 1; 과같은의미 감소연산자 피연산자의값을하나감소시킴 a--; 는 a -= 1; 과같은의미 전치와후치 증감연산자는전치, 후치에따라돌려주는값이달라진다. 후치일경우 (a++ 혹은 a--) 에는증감이전변수값이돌려주는값이다. 전치일경우 (++a 혹은 --a) 에는증감이후변수값이돌려주는값이다. 11

증가연산자전치와후치비교 초기 a, b 값이 5 일때, 후치와전치비교 후치 단계 수행연산 수식 a 값 b 값 0 N/A b = 2 * a++ 5 5 1 ++ b = 2 * 5 6 5 2 * b = 10 6 5 3 = 10 6 10 전치 단계수행연산수식 a 값 b 값 0 N/A b = 2 * ++a 5 5 1 ++ b = 2 * 6 6 5 2 * b = 12 6 5 3 = 12 6 12 12

incr.c 실행결과 : 초기의 a 와 b 값입니다. a = 5, b = 5 b = 2 * a++; 를수행했습니다. a = 6, b = 10 13

김소연산자전치와후치비교 초기 a, b 값이 5 일때, 후치와전치비교 후치 단계 수행연산 수식 a 값 b 값 0 N/A b = 2 * a-- 5 5 1 -- b = 2 * 5 4 5 2 * b = 10 4 5 3 = 10 4 10 전치 단계수행연산수식 a 값 b 값 0 N/A b = 2 * --a 5 5 1 -- b = 2 * 4 4 5 2 * b = 8 4 5 3 = 8 4 8 14

decr.c 실행결과 : 초기의 a 와 b 값입니다. a = 5, b = 5 b = 2 * --a; 를수행했습니다. a = 4, b = 8 15

증감연산자에관한조언 증감연산자사용이유 증감연산자를사용하는단하나의목적은 " 간결하기때문 " 간결성때문에정확성을무너뜨린다면어리석은짓 증감연산자에관한조언 하나의수식에여러번사용되는변수에는증감연산자를사용하지말라 오용예 : a 에 5 가저장되어있을때다음수식의값은? ++ a * a ++ 16

6.4 조건연산자 17

조건연산자 유일한 3 항연산자 형식 : 조건? 수식 1 : 수식 2 의미 : ' 조건 ' 이참이면 ' 수식 1' 값을, 거짓이면 ' 수식 2' 값을돌려줌 사용예 max = a > b? a : b; a > b 이면 max = a; 그렇지않으면 max = b; 조언 조건을괄호로감싸면더이해하기쉬움 max = (a > b)? a: b; 18

조건연산자에서단락회로계산 단락회로계산 조건연산자의피연산자는필요할때만계산된다. 이를단락회로계산 (short-circuit evaluation; 지름길계산 ) 이라고한다. 단락회로계산예 (n!= 0) sum / n: 1 위수식에서조건연산자의피연산자는다음세가지 n!= 0 sum / n 1 n 이 0 이면 sum / n 은계산되지않으므로오류가아님 (n!= 0) 1: sum / n 으로작성했다면 '0 으로나눔 ' 오류 19

조건연산자의조건 결과값수식자료형일치 a? b: c 에서 b 와 c 의자료형이같아야함 자료형이다를경우자동형변환이수행됨 자료형불일치예 c? 1: 3.14; 결과값은 1 또는 3.14 중하나임 1 은 int 형, 3.14 는 double 형이므로자료형이일치하지않는다. int 형 1 을 double 형 1.0 으로형증진 (type promotion) 수행 따라서 c 가참일경우의값은 int 형 1 이아니라 double 형 1.0 이다. 20

6.5 괄호도연산자인가? 21

괄호도연산자인가? 연산자가아닌괄호 ( ) 연산자피연산자의관계를나타내기위한괄호는연산자가아님 (n!= 0)? sum / n: 1 괄호로묶은수식을가장먼저계산한다? 꼭그런것은아님 n!= 0? (sum / n): 1 연산자로사용되는괄호 ( ) 함수호출연산에사용된괄호 printf("%d", n); 형변환연산에사용된괄호 avr = sum / (double) n; avr = sum / ((double) n); 22

6.6 우선순위와결합순서정리 23

우선순위와결합순서정리함수호출연산자 형변환연산자 24

우선순위와결합순서기억요령 일반법칙 곱은합보다우선한다. 단항연산자와대입연산자의결합순서는우측에서좌측이다. 최고우선순위와최저우선순위는기억하자 최고우선순위 : () [] ->. 최저우선순위 : 콤마연산자, 나머지는 " 계산하여비교한뒤, 판단하여저장한다 " 25

계산순서에관한주의사항 우선순위 / 결합순서와계산순서는다르다 우선순위 / 결합방향은먼저계산한다는의미가아님 괄호로묶었다고해서먼저계산된다는의미도아님 피연산자의계산순서는정의되지않은경우가많음 예외 : 단락회로계산연산자 &&?:, + 의계산순서 x = f() + g(); f 가먼저호출된다는보장이없음 함수인수계산순서 printf("%d %d\n", ++n, power(2, n)); ++n 이먼저수행된다는보장이없음 26

여러의미로사용되는연산기호 +, -, *, & 등은단항일때, 이항일때의미가다름 27

Key Point 28

Key Point 1 연산자의부수효과란연산자가값을돌려주는것외에부수적으로발생시키는효과다. 대입연산자는변수에값을저장하는부수효과를발생시킬뿐만아니라변수에저장된값을돌려준다. 누적대입연산자 =( 여기서 는이항연산자 ) 를이용한수식 a = b 는 a = a (b) 와같은의미다. 누적대입연산자는좌변이매우복잡할경우에특히유용하다. 증감연산자는변수의값을 1 만큼증가시키거나감소시킬때사용한다. 변수 a 의값을 1 증가시키려면 a++ 나 ++a 를사용하고 1 감소시키려면 a-- 나 --a 를사용한다. 증감연산자는전치로사용했을경우와후치로사용했을경우에결과값이다르다. 전치로사용하면증감된후의값이결과값이되며후치로사용하면증감되기전의값이결과값이된다. 29

Key Point 2 조건연산자?: 는피연산자를세개받는삼항연산자이다. 조건연산자를사용한수식 a?b:c 의값은 a 가참 (a 0) 일때 b 가되고 a 가거짓 (a=0) 일때 c 가된다. 조건연산자도단락회로계산을이용한다. 즉조건연산자의두번째피연산자와세번째피연산자중하나는계산되지않는다. 연산자의적용범위를명시하기위한괄호는연산자가아니다. 괄호가연산자로사용되는경우는형변환연산자나함수호출연산자의경우뿐이다. 함수호출연산자와멤버추출연산자 ([],., ->) 가가장우선순위가높다. 나머지연산자중에서는단항연산자가이항연산자보다우선순위가높다. 같은부류의이항연산자들사이에서는곱에해당하는연산 (*, /, &, &&) 이합에해당하는연산 (+, -, ^,, ) 보다우선순위가높다. C 연산자중에서단항연산자는모두우측에서좌측으로결합 ( 우측결합 ) 한다. 이항연산자들중에서우측결합인연산자는대입연산자 ( 누적대입연산자포함 ) 뿐이다. 삼항연산자인?: 도우측결합이다. 나머지연산자들은모두좌측에서우측으로결합 ( 좌측결합 ) 한다. 30

요약 (1/2) 부수효과 값을돌려주는것외에부수적으로다른것을변경시키는효과 대입연산자, 증감연산자들은부수효과를발생시킨다. 대입연산자 변수에값을대입함 변수에값을저장함 누적대입연산자 (a = a ( 식 )) 인특수한경우에는 (a = 식 ) 으로사용할수있음 증감연산자 ++, -- 변수의값을 1 증가시키거나 ( 증가연산 ), 1 감소시킴 ( 감소연산 ) 전치, 후치여부에따라돌려주는값이다름 31

요약 (2/2) 조건연산자?: C 의유일한 3 항연산자 조건의참, 거짓에따라돌려주는값이다름 단락회로계산을수행함 괄호를포함하는연산자 함수호출, 형변환연산자의경우에만괄호가연산자로사용됨 다른경우에는구두점 (punctuation symbol) 우선순위와결합순서 " 계산하여비교한뒤, 판단하여저장한다 " 단항, 대입, 조건연산자는우측에서좌측으로결합 계산순서주의사항 괄호, 우선순위, 결합순서등은연산자와피연산자의관계를명시할뿐, 계산순서를명시하는것은아님 (&&,,?: 는예외 ) 32

프로그래밍실습 33

프로그래밍실습 1 체질량지수 (BMI: body mass index) 를계산하여이에따라비만여부를판별하는프로그램을작성하라. 체질량지수는다음공식 ( 단위 : kg, cm) 에의해계산한다. 몸무게와키를입력으로받아 BMI 를출력하고비만도를판정하는프로그램을작성하라. 34

프로그래밍실습 2 근의공식에따라이차방정식의두근의근사값을구하는프로그램을작성하라. 이차방정식 ax 2 +bx+c = 0 을입력받기위해이차방정식의계수 a, b, c 를입력받는다. 이차방정식의계수는 float 타입으로주어지며 a 는 0 이아니라고가정한다. 이차방정식의근의공식은다음식으로주어진다. 근의공식에서제곱근을구하기위해서는라이브러리함수 sqrt 를이용하라. 예를들어, 2 의제곱근은 sqrt(2.0) 으로구할수있다. 라이브러리함수 sqrt 를사용하기위해서는헤더파일 <math.h> 를 #include 해야한다. 실근이하나인경우에는하나만출력하고실근이두개인경우에는두근중작은근을먼저출력해야하며실근이없는경우에는 근이없음 이라고출력해야한다. 35