본문 바로가기
깨알 c언어

깨알 c언어 ch.6 ~ 10

by moca7 2024. 2. 21.

06. 연산자 우선순위

07. 관계/논리연산자, 조건문

08. 논리연산자, 증감연산

09. 산술연산자

10. 출력형식

 

 

 

06. 연산자 우선순위

 

ㅁ 연산자 우선순위(자바나 c나 같음)

 

- 괄호, 단항, 곱하기나누기, 더하기빼기, ~~~~, 논리연산자(&&, II), 대입연산자

 

ㅁ 연산자 우선순위 예시

- Int a=3, b=4, c=5, d=6;

 

(1) a*b+c >= d && d/a-b != 0 =

왼쪽: 17 >= 6 여기서 >= 비교연산자임. 17이 6이상이냐. 맞으므로 1이 됨. 

오른쪽: 2-4 != 0 여기서 -2와 0이 같지 않으니 참임. 1.

답은 1이 된다.

 

(2) d%b + ++a*c-- =

2 + 20이므로 22.

6 나누기 4는 몫은 1이고 나머지는 2다.

 

ㅁ 아래 c프로그램의 출력은?

#include<stdio.h>

int main(){

 int a=5, b=5;

 a *= 3 + b++;

 printf("%d %d", a, b);

 return 0;

}

 

 a *= 3 + b++; 여기서 연산자 우선순위가 제일 낮은건 *=이다.

고로 a *= 8++;이므로 a는 40, b는 6이됨. 

 

 

07. 관계/논리연산자, 조건문

 

ㅁ 모든 프로그램의 조건문은 if와 switch가 있다. 

 

ㅁ 관계연산자 종류

10 == 9   결과값 0

3 != 3      결과값 0

5 > 5       결과값 0

5 >= 5     결과값 1

7 < 7        결과값 0

7 <= 7      결과값 1

 

ㅁ 논리 연산자 종류

(논리부정) !9                              결과값 0 (!a는 a가 참이면 거짓, 거짓이면 참)

(논리곱) 3>=3 && 3>3               결과값 0

(논리합) 5>5 II 5>=5                  결과값 1

 

ㅁ 단순 if문

if(조건) {

 조건이 만족할때의 처리;

}

조건이 만족하면 수행하고 만족안하면 if문의 {}블럭 자체를 수행 안함.

 

ㅁ if ~ else문

if(조건) {

 조건이 만족할때의 처리

}

else{

 조건이 아닐때의 처리

}

 

ㅁ 다중 if문

if(조건1) {

 조건1이 만족할때의 처리

}

else if(조건2) {

 조건2가 만족할때의 처리

}

else{

 조건이 아닐때의 처리

}

 

조건1이 만족하면 else if와 else는 수행 안 함.

 

ㅁ 문제

 

if문의 && 왼쪽: 거짓. 그리고 i는 4, j는 3이된다.

if문의 && 오른쪽: 이미 왼쪽이 거짓이므로 아예 실행되지 않음

if문이 true일 때 실행할 블록: if문의 조건이 거짓이므로 아예 실행되지 않음

 

j = 4-- - --3; 이므로 j는 4-2=2. 

그리고 i는 3이되고 j는 2가 된다. 

 

ㅁ 참고

if 에서 다중 조건으로 식1, 식2 이런식으로 있을때, 식 1에서 대입이 있을경우, 식 2에서 변경된 값으로 처리가 됩니다. 

int i = 1;

if( i++ >= 1 && i++ >= 2 ) {

printf("1 : %d", i);

}

현재 and 조건이고, i >=1 은 참이 됩니다. 

그리고 i값을 2로 변경이 되지요. 그 이후에 i >= 2 이 비교를 수행한후 참이 나오고, i 값은 3이 됩니다. 

출력결과는 1 : 3 이됩니다. 

int i = 1; 

if( i++ >= 1 || i++ >= 2 ) { 

printf("1 : %d", i);

}

or 조건으로 변경해보겠습니다. 첫번째 i >= 1은 참이고, i 값은 2가 됩니다. 그 이후에 뒤에 조건은 참고를 하지 않습니다. 왜냐면 or 는 하나만 만족하면 되기 때문에 컴파일러가 더이상 자원을 소모하지 않기 때문입니다.

 

&&는 왼쪽이 거짓이면 오른쪽을 수행하지 않음.

II는 왼쪽이 참이면 오른쪽을 수행하지 않음.

 

ㅁ 참고2

int i=3, j=4;

if( (++i > j--) && (i++ < --j) II (++i > ++j) )

{ i = i-- + ++j; }

else

{ j = i-- - --j; }

printf("%d\n", i); 

 

이런 경우, 만약 &&왼쪽이 참이고 &&오른쪽이 참이면, II 오른쪽은 검사 안한다.

지금은 &&왼쪽이 거짓이므로 &&오른쪽은 실행 안함. II 오른쪽은 검사 한다. 

답 5아니고 10이다.

 

단항연산자는 대입의 의미까지 포함을 한다. 

 

 

08. 논리연산자, 증감연산

 

ㅁ 문제

 

9, 3, 0, 8, 2

 

 

09. 산술연산자

 

ㅁ 문제

 

x = 3, y = 9

 

ㅁ 문제

num = 6 + 14%5/2 - 2*2;

 

답. 4

순서대로 한다.

 

ㅁ 문제

int a = 10, b = 20;

num = (a++ == 11) && (b++ == 20);

 

답. 0

 

 

 

10. 출력형식

 

ㅁ 출력 변환기호

 

- %d는 정수와 문자를 출력함. 문자는 뭐냐. A의 아스키 코드는 65. %d에 A 넣으면 65가 나옴.

 

ㅁ 출력형식 예시

(1) printf("값1 : %d, 값2 : %d', 10, 5);

 

- printf. 출력함수는 인자값이 무조건 있어야 한다. 처섭ㄴ째 인자는 그대로 출력. %d는 출력 변환기호. 

그러니 그 뒤에 있는 인자들을 순서대로 매칭.

- 출력결과. 값1 : 10, 값2 : 5

 

(2) printf("값 : %c", 65);

- 출력결과. 값 : A

 

(3) printf("값 : %c", A);

- 출력결과. 값 : A

 

(4) printf("값 : %s", "안녕하세요.");

- 출력결과. 값 : 안녕하세요.

- 포인터값(주소값)을 받는 경우도 있음.

 

(5) printf("값 : %x", 34);

- 34를 16진수로 표현하라. 10진수를 16진수나 8진수로 변환하기 이전에 먼저 2진수로 변환함.

- 100010 (2진수)

- 16진수는 4개씩 자름.

 

8 4 2 1 8 4 2 1

0 0 1 0 0 0 1 0 = 22가 됨.

 

(6) printf("값 : %o", 34);

- 8진수는 3개씩 자름.

 

4 2 1 4 2 1

1 0 0 0 1 0 = 42가 됨.

 

ㅁ 정수형 자리수 지정

(1) printf("값 : %d", 13);

- 출력결과. 값 : 13 

 

(2) printf("값 : %5d", 13);

- 5개의 공간을 만들고 오른쪽부터 채우겠다는 것.

ㅁ ㅁ ㅁ ㅁ ㅁ

               1  3

 

(2) printf("값 : %05d", 13);

- 5개의 공간을 만들고 오른쪽부터 채우는데 빈곳은 0

ㅁ ㅁ ㅁ ㅁ ㅁ 

 0  0   0   1  3

 

ㅁ 실수형 자리수 지정

(1) printf("값 : %f", 3.26);

- 실수같은 경우는 소수점 아래로 6자리가 붙는다. 

- 출력결과. 값 : 3.260000

 

(2) printf("값 : %6.1f", 3.26);

- 6개의 공간을 만들고, 소수점 아래로는 1개만 표현하겠다(반올림함).

ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ

               3  .    3

 

(3) printf("값 : %-6.1f", 3.26);

- 마이너스는 왼쪽부터 출력하라는 것이다. 

ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ

 3   .   3

 

(3) printf("값 : %-6.3f", 3.26);

- 6개의 공간을 만들고, 마이너스니까 왼쪽부터 채우고, 소수점 아래로는 3자리를 표현한다.

ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ

 3   .   2   6  0   

 

ㅁ 문제

 

d_value = 6.15

정수형인 n에 실수형인 d_value를 그냥 집어넣을 수 없으니 int로 형태를 변환한다. 이 때 소수점 아래는 버린다

n = 6

출력결과. 6.2 , 6

 

'깨알 c언어' 카테고리의 다른 글

깨알 c언어 ch.26 ~ 30  (0) 2024.03.08
깨알 c언어 ch.21 ~ 25  (0) 2024.02.22
깨알 c언어 ch.16 ~ 20  (0) 2024.02.22
깨알 c언어 ch.11 ~ 15  (0) 2024.02.22
깨알 c언어 ch.1 ~ 5  (1) 2024.02.21