코딩인카페 c&java 기초과정 c프로그래밍(2)

16
2016.08.18 1

Upload: chul-min-kim

Post on 15-Jan-2017

175 views

Category:

Software


5 download

TRANSCRIPT

Page 1: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

2016.08.181

Page 2: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

2

C 프로그래밍 (2)식과 연산자

식(expression) 구조 식의 값과 출력

C언어 식(expression) 구성

- 식(expression) : 컴퓨터에서 여러 가지처리를 ‘계산’으로 실행, 코드 안에서식의 계산으로 표현됨

- 연산자(operator) : 연산하는 방식- 피연산자(operand) : 연산의 대상

- 식의 평가 : 식의 결과 값 도출

연산자와 피연산자의 조합

int num1 = 2;

int num2 = 3;

int sum = num1+num2;

printf(“1+2는 %d입니다. \n”, 1+2);

printf(“3X4는 %d입니다. \n”, 3*4);

printf(“num1+num2의 값은 %d \n”, sum);

num1 = num1 + 1;

printf(“num1에 1을 더한 값은 %d \n”, num1);

1 2

3

+

평가

피연산자 피연산자연산자

1+2는 3입니다.3x4는 12입니다.num1+num2의 값은 5입니다.num1에 1을 더한 값은 3입니다.

다양한 연산

실행한 결과

Page 3: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

3

연산자의 종류

기호 이름 단항 기호 이름 단항

+ 덧셈 >= 이상

- 뺄셈 < 미만

* 곱셈 <= 이하

/ 나눗셈 == 등가% 나머지 != 비등가+X 단항 + 단항 ! 논리 부정 단항-X 단항 - 단항 && 논리곱

~ 보수 단항 || 논리합

& 비트 논리곱 * 간접 참조 단항

| 비트 논리합 , 순차

^ 비트 배타적 논리합 ( ) 함수 호출 단항

= 대입 ( ) 캐스트 단항<< 좌 시프트 [ ] 인덱스, 배열 첨자 단항>> 우 시프트 . 멤버 참조(dot)

++ 증가 단항 ->멤버 간접참조

(arrow)-- 감소 단항 ? : 조건> 보다 크다 sizeof 크기 단항

★ 단항 표시 이외의 모든 연산자는 이항 연산자임

C 프로그래밍 (2)

Page 4: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

4

C 프로그래밍 (2)증감 연산자

증가 연산자(++) 감소 연산자(--)

int a = 0, b = 0;

b = a++;

printf(“대입 후에 증가했기 때문에 b의값은 %d입니다. \n”, b);

b = ++a;

printf(“대입 전에 증가했기 때문에 b의값은 %d입니다. \n”, b);

대입 후에 증가했기 때문에b의 값은 0입니다.대입 전에 증가했기 때문에 b의 값은 2입니다.

실행한 결과

a++; ++a;

a = a+1;==

int a = 2, b = 0;

b = a--;

printf(“대입 후에 증가했기 때문에 b의값은 %d입니다. \n”, b);

b = --a;

printf(“대입 전에 증가했기 때문에 b의값은 %d입니다. \n”, b);

대입 후에 증가했기 때문에b의 값은 2입니다.대입 전에 증가했기 때문에 b의 값은 0입니다.

실행한 결과

a--; --a;

a = a-1;==

Page 5: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

5

C 프로그래밍 (2)대입 연산자

복합 대입 연산자 덧셈 대입 연산자 예시코드

int sum = 0, num = 0;

printf(“1번째 정수를 입력하세요. \n”);

scanf(“%d”, &num);

sum += num;

printf(“2번째 정수를 입력하세요. \n”);

scanf(“%d”, &num);

sum += num;

printf(“2가지 수의 합계는 %d입니다. \n”, sum);

1번째 정수를 입력하세요.1 [enter]2번째 정수를 입력하세요.3 [enter]2가지 수의 합계는 4입니다.

실행한 결과

기호 이름

+= 덧셈 대입

-= 뺄셈 대입

*= 곱셈 대입

/= 나눗셈 대입

%= 나머지 대입

&= 논리곱 대입

^= 배타적 논리합 대입

|= 논리합 대입

<<= 좌 시프트 대입

>>= 우 시프트 대입

a += b; a = a+b;==

Page 6: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

6

C 프로그래밍 (2)시프트(shift) 연산자

왼쪽 시프트 연산자(<<) 오른쪽 시프트 연산자(>>)

5<<2 의 연산(short int형 2byte=16bit)

5 0000000000000101

<< 2

-------------------------------

20 0000000000010100

좌변의 값이 5, 우변의 값이 2인 경우,5 << 2 => 5 x (2 ^ 2) => 5의 4배 => 20

연산의 의미

좌변의 값을 우변에서 지정한 자릿수만큼 왼쪽으로 이동시키고, 초과한자릿수 만큼 오른쪽 끝자리부터 0을채우는 연산

2자릿수 만큼 왼쪽 이동, 오른쪽끝자리 0을

채움

5>>2 의 연산(short int형 2byte=16bit)

5 0000000000000101

>> 2

-------------------------------

1 0000000000000001

좌변의 값이 5, 우변의 값이 2인 경우,5 >> 2 => 5 / (2 ^ 2) => 5의 1/4배 => 1

연산의 의미

좌변의 값을 우변에서 지정한 자릿수만큼 오른쪽으로 이동시키고, 초과한자릿수 만큼 왼쪽 끝자리부터 0을 채우는 연산

2자릿수 만큼 오른쪽이동, 왼쪽끝자리 0을

채움

★ 컴퓨터 내부에서는 2진수를 취급하기 때문에 일반적인 사칙연산보다 주로 시프트 연산을 사용

Page 7: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

7

C 프로그래밍 (2)

캐스트 연산자 형 변환 예시코드

double dnum;

int inum;

dnum = 160.5;

printf(“키는 %f cm입니다. \n”, dnum);

printf(“int형 변수에 대입합니다. \n”);

inum = (int) dnum;

printf(“키는 %d cm입니다. \n”, inum);

키는 160.500000 cm입니다.

int 형 변수에 대입합니다.

키는 160 cm 입니다.

실행한 결과

구문 : ( 데이터 형 ) 식지정한 식의 형을 ( ) 내에서지정한 형으로 변환, 형 변환을코드 내에 명시적으로 표기

int형

dnum

inum

double형int 형으로 변환

캐스트 연산자(명시적 형 변환)

inum = (int) dnum대입할 때 크기가작은 형으로 변환됨

Page 8: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

8

C 프로그래밍 (2)연산과 형 변환

서로 다른 형의 연산 동일한 형의 연산

int d = 2;

double pi = 3.14;

printf(“지름이 %d cm인 원의 \n“, d);

printf(“원둘레는 %f cm입니다. \n“, d*pi);

지름이 2 cm인 원의원둘레는 6.280000 cm입니다.

실행 결과

한쪽의 피연산자를 크기가 큰 쪽으로형 변환 후 연산을 처리

int num1=5, num2=4;double div;

div = num1/num2;printf(“5/4는 %f입니다. \n”, div);

div = (double)num1/(double)num2;printf(“5/4는 %f입니다. \n”, div);

5/4는 1.000000입니다.5/4는 1.250000입니다.

실행 결과

동일한 형의 피연산자들을 연산할 때결과 값이 피연산자와 동일한 형인경우와 다른 형인 경우를 고려하여피연산자를 변환하여 연산 필요함

int형 d의 값 ‘2’가 double형 값‘2.0’으로 변환된 후 곱셈 실행

5÷4 결과 int형 1값

5÷4의 예상 결과는1.25이었으므로피연사자들을double형으로캐스팅하여 계산함

Page 9: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

9

C 프로그래밍 (2)관계 연산자와 조건

조건의 개념과 표기

5 > 3 : 이 조건의 평가는 ‘참’이다.5 < 3 : 이 조건의 평가는 ‘거짓’이다.a == 6 : 이 조건은 변수 a 값에 따라 결정(a가 6이면 참, 6이외 다른 수면 거짓)※ ==와 = 다른 기호임, ‘=‘는 대입연산자

관계 연산자

< 조건의 식 >

3 > 1 : 3은 1보다 크기 때문에 이

부등식은 ‘맞다’ 또는 ‘참’이라고 평가

3 < 1 : 이 부등식 ‘틀리다’ 또는 ‘거짓'이라고 평가

참(true), 거짓(false)

두 가지 값 중에 하나로 표현한 것을C언에서는 ‘조건'이라고 합니다.

그 조건이 ‘맞다‘ 또는 ‘틀리다'라는것을 나타내는 것

3 1

>평가

3 1

거짓

<조건

연산자 식이 참인 경우

== 우변이 좌변과 같다

!= 우변이 좌변과 같지 않다

> 우변보다 좌변이 크다

>= 우변보다 좌변이 크거나 같다

< 우변보다 좌변이 작다

<= 우변보다 좌변이 작거나 같다

Page 10: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

10

C 프로그래밍 (2)

if문 구조 if문 예시코드

int res;

printf(“정수를 입력하세요. \n”);

scanf(“%d”, &res);

if(res == 1)

printf(“1이 입력되었습니다.\n”);

printf(“처리를 종료합니다. \n”);

정수를 입력하세요.

1 [enter]

1이 입력되었습니다.

처리를 종료합니다.

참인 경우

if 구문

if(조건)

문;

1이 입력되면 조건은 참이되고 아래의 문이 처리

조건 판단문(if문)

if

- ‘조건’의 값(참 또는 거짓)에 따라 처리가 이루어지는 구문

- 조건이 참이면 아래의지정한 문이 처리

조건

거짓 정수를 입력하세요.

10 [enter]

처리를 종료합니다.

거짓인 경우

Page 11: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

11

C 프로그래밍 (2)

if ~ else문 구조 if ~ else문 예시코드

int res;

printf(“정수를 입력하세요. \n”);

scanf(“%d”, &res);

if(res == 1) {

printf(“1이 입력되었습니다.\n”);

} else {

printf(“1 이외의 값이 입력되었습니다.\n”);

}

정수를 입력하세요.

1 [enter]

1이 입력되었습니다.

참인 경우

if(조건){문1; 문2;} else {문3; 문4;}

1이 입력되면 if 문 아래구문이 처리되고

그 외의 값이 들어오면else 아래 구문 처리

조건 판단문(if ~ else 문)

- 조건이 참이면 문1을처리하고, 거짓이면문2를 처리함

- 이 구문도 { }로 묶어서복수의 문 처리 가능

조건

문2

참거짓

정수를 입력하세요.

10 [enter]

1 이외의 값이 입력되었습니다.

거짓인 경우문1

문4

문3

Page 12: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

12

C 프로그래밍 (2)

if ~ else if ~ else문 구조 if ~ else if ~ else문 예시코드

int res;printf(“정수를 입력하세요. \n”);scanf(“%d”, &res);

if(res == 1) {printf(“1이 입력되었습니다.\n”);

} else if(res == 2){printf(“2가 입력되었습니다.\n”);

} else {printf(“1이나 2를 입력하세요.\n”);

}

정수를 입력하세요.1 [enter]1이 입력되었습니다.

1 입력 경우

if(조건1){문1; 문2;} else if(조건2){문3; 문4;} else {…

}

조건 판단문(if ~ else if ~ else 문)

- 두 가지 이상의 조건에따른 처리 가능

- 조건1 참이면 아래 구문처리, 거짓이면 다음 조건을 판단하고 모든 조건이 거짓이면 else 아래의 문이 처리

정수를 입력하세요.2 [enter]2가 입력되었습니다.

2 입력 경우

조건1참

거짓

거짓

조건2

정수를 입력하세요.3 [enter]1이나 2를 입력하세요.

1, 2 이외입력 경우

Page 13: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

13

C 프로그래밍 (2)

switch문 구조 switch문 순서도

switch(식){case 상수1:문1; …break;

case 상수2:문2; …break;

default:문D; …break;

}

조건 판단문(switch 문)

- switch문 안의 식이case 상수 값과 일치하면, 아래의 문부터 ‘break’까지 처리됨. 만약 어느case 상수 값과도일치하지 않는다면‘default’아래의 문이처리됨

- switch문을 이용하면 식과 case 상수를 비교하여 if~elseif~else 구문 보다간단하게 표기할 수있음

case1:

switch

default:

case2:

Page 14: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

14

논리 연산자

연산자 참이 되는 경우평가

좌 우 전체

&& 좌변과 우변이 모두 참일 때

거짓 거짓 거짓

거짓 참 거짓

참 거짓 거짓

참 참 참

|| 좌변과 우변 중 한쪽이 참일 때

거짓 거짓 거짓

거짓 참 참

참 거짓 참

참 참 참

! 우변이 거짓일 때거짓 참

참 거짓

C 프로그래밍 (2)

5>3 && 3==4

a==6 || a>=12

!(a==6)

5>3 식은 참이고 3==4 식은 거짓이며참 && 거짓 연산 결과는 거짓입니다.

변수 a의 값이 6 또는 12 이상일 때 참이 됩니다.

변수 a의 값이 6이 아닐 때 참이 됩니다.

Page 15: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

15

C 프로그래밍 (2)조건 연산자

ans = (res==1) ? ‘A’ : ‘B’

참일 경우 ans = ‘A’

거짓일 경우 ans = ‘B’

조건 연산자 조건 연산자 예시 코드

- 조건 연산자를 사용하면 간단한

조건에 따른 처리를 할 수 있다.

- 조건 연산자는 세 개의 피연산자를가진다.

- 전체 식의 값은 조건이 참일 때 식 1의 값, 거짓일 때 식 2의 값이 됩니다.

조건 ? 참이면 식1 : 거짓이면 식2int res;

char ans;

printf(“몇 번째를 선택할까요? \n”);

printf(“정수를 입력하세요. \n”);

scanf(“%d”, &res);

ans = (res==1) ? ‘A’ : ‘B’;

printf(“%c 코스를 선택했습니다. \n”, ans);

몇 번째를 선택할까요?정수를 입력하세요.1 [enter]

A코스를 선택했습니다.

‘1’ 입력 결과

몇 번째를 선택할까요?정수를 입력하세요.2 [enter]B코스를 선택했습니다.

‘2’ 입력 결과

Page 16: 코딩인카페 C&JAVA 기초과정 C프로그래밍(2)

YONSEI COMPUTER SCIENCE ACADEMY Coding in CAFÉ

16

본 자료는 코딩인카페 1기 C&JAVA 기초과정5회차 자료 중 일부를 발췌한 내용입니다.

< 참고자료 >- 그림으로 배우는 C프로그래밍, 마나 다카하시, 영진닷컴.