C | C++

C언어 - 연산자와 제어문

pushpush 2020. 8. 20. 04:04

이렇게 c언어에서는 저런 문자를 쓸 수 있다!

여기서도

a = a + 3은 수학적으로 말이 안되는 식이다

하지만 저기서 '='는 대입이라는 의미이므로 a + 3이 a에 대입되어 5 + 3 =8이 a에 저장된다고 보면 된다!

따라서 실행시켜보면

이렇게 나오게 된다~

이번엔

+= -= *= /= %=

에 대해 알아보도록 하자.

a = a + 6

a = a * 7 이런 식을 여러번 써야될 때

다 입력하기 귀찮으니까

a = a + 6 => a += 6

a = a * 7 => a *= 7

a = a - 8 => a -= 8

a = a / 9 => a /= 9

a = a%10 => a %= 10

이런식으로 된다!

이렇게 실행을 해보면 5더하기6은 11

11곱하기 7은 77

77나누기 8의 몫은 9

9나누기9의 나머지는 0이므로

결과값이 0이 나와야 된다

나왔다!

이번엔 ++ --를 알아보자!

이제 빌드에서 제외도 귀찮아서 단축키를 써야겠다...!ㅋㅋㅋㅋ

이렇게 a++이란 a = a + 1, a += 1 과 같은 표현이고

a--란 a = a -1, a -= 1 과 같은 표현이다

이렇게 한번 실행을 시켜보면!

이렇게 나오게 된다~

a++과 ++a의 차이도 알아보자!

일단 전치증가연산인 ++a를 알아보기 위해 식을 세워보자!

이렇게 나오게 되는데 이게 왜 이렇게 나오냐!

b = ++a의 경우 a에 10 + 1을 해주고, 그 결과값인 11을 b에 저장해주는 것이다

그래서 a도 11이 되고, b도 11이 되는 것이다!

이번엔 후치 증가 연산인 a++을 알아보도록 하자

++a대신 a++을 넣어보도록 하자

그럼 이렇게 나오게 되는데

이건 또 왜 이렇게 나오냐!

b에 먼저 a를 저장한다!

그다음 a에 1을 더한다 그럼 a는 11이 되고, b는 10이 되어

a =11, b = 10이라는 결과가 나오게 되는 것이다!

이걸

b = a;

a++;

라고 적어도 되고,

b = a++;

라고 적어도 된다!


비교/논리 연산자

비교 연산자에는 >, <, == 가 있다.

원래 'a =3' 이란 뜻은 c언어에서 a에 3을 저장하는 의미인데 'a == 3'은 a가 3이라는 뜻이다!

그리고 연산의 결과가 참일땐 결과값이 1, 거짓일땐 0으로 출력된다.

실행시켜보면 까만 콘솔창이 뜨는데 '3 5'를 입력시켜보도록 하자

'3 > 5'는 거짓이므로 결과값이 0

'3 < 5'는 참이므로 결과값이 1

'3 = 5'는 거짓이므로 결과값이 0

따라서

0

1

0

이라고 출력이 되는 것이다

참고로 'bool'이란 진리값을 저장하는 저장용 변수(1바이트)인데 여기서 p, q, r의 int대신 bool을 넣어도 된다고 한다!

이렇게 똑같이 나오게 된다~!

참고로

a >= b : a는 b보다 크거나 같다.

a <= b : a는 b보다 작거나 같다.

a != : a는 b가 아니다.

라고 쓴다

이번엔 논리 연산자에 대해 알아보자

그리고 = &&

또는 = ||(shift + \ 두번)

~가 아니다(부정) = !

p 는 a가 1이상 10이하를 나타내는 것이고

q는 a = 3 or a = 7

r은 3과 7이 아니다

를 나타낸다

실행시키고 9를 입력해보자

p, q, r 순서대로1, 0, 1이 나왔다

9는 1이상 10이하이기 때문에 참 -> 1

9는 3 or 7이 아니기 때문에 거짓 -> 0

9는 3과 7을 제외한 숫자이기 때문에 참 -> 1

이다.


if

if 절은 형광펜 부분이 참(1)이면 {printf()}가 출력이 되고 거짓(0)이면 출력이 안 된다!

if(n)에서 n이 0이 아닌 수라면 if절은 출력된다고 한다!

실행을 시켜보자

 

8을 입력했을 땐 8%2 == 0이기때문에 참이되어 printf()가 출력이 되지만 3을 입력했을땐 3%2 == 1이므로 거짓이 되어 printf()가 출력이 안 되는 것을 볼 수 있다!

이때

형광펜부분의 else부분을 추가해보자

else 는 if절이 실행이 안 되었을 때 else의 중괄호 안의 printf()가 출력되는 원리이다~

그럼 한번 실행을 해보자

 

이렇게 6을 입력했을 땐 6%2 == 0이므로 참이 되어 if절이 실행되어 'n은 짝수'가 출력되고

7을 입력했을 땐 7%2 == 1이므로 거짓이 되어 else절이 실행되어 'n은 홀수'가 출력됨을 알 수 있다~!

이번엔 else if도 써보자

else if 뒤에도 ( )가 오고 { }가 온다!

식을 만들어보면

n > 0 일땐 if절이 실행되고

n == 0 일땐 else if절,

n < 0 일땐 else절이 실행된다!

그럼 한번 실행시켜보면

 

 

이렇게 잘 실행 된다~!

이때 else if( )는 계속 추가할 수 있다!


중첩 if문

중첩 if문은 if문 안에 if문이 있는 것인데 if의 중괄호가 실행될 경우 그 안의 if문이 또 if문의 원리에 의해 실행되거나 되지않는다!

저 프로그램은 a, b, c중 최댓값을 출력하는 프로그램인데

a > b 일 경우

i) a > c 인 경우 -> a가 최댓값이므로 a가 출력

ii) c > a 인 경우 -> c가 최댓값이므로 c가 출력

b > a 일 경우

i) b > c 인 경우 -> b가 최댓값이므로 b가 출력

ii) c > b 안 경우 -> c가 최댓값이므로 c가 출력

이러한 원리이다!

이렇게 최댓값이 나오게 된다!

 

참고로 if의 중괄호 안에 ';'이 하나만 있다면(문장이 하나)

중괄호는 없앨 수 있다!

 

그리고 여기선 else { if(){ } }를 else if( ) { }로 바꿀 수 있어 더 간단하게 표현이 가능하다.


switch

앞에서 배운 if문을 활용하여 이렇게 만들 수 있다

하지만 switch를 이용하면 더욱 간단히 만들 수 있다.

여기서 주의할 점은 break를 꼭 써줘야 된다는 것이다!

만약 'case 2'일경우 '게임을 불러오는 중입니다...'가 출력되는데 break가 없을경우 'case 3'도 출력이 되어

이렇게 다 나오게 된다! 그러므로 case는 쓰고 꼭 뒤에 break를 해줘야 된다~


while문

while( ) { }은 소괄호의 내용이 거짓이 아니면 소괄호의 내용이 거짓이 될 때까지 중괄호 안의 내용을 실행시킨다.

이렇게 'i <=10'을 만족하는 숫자인 1~10이 출력되게 된다.

이렇게 i = 15인경우

이렇게 소괄호 안의 내용을 만족시키지 못하기 때문에 중괄호로 들어가지 않아 중괄호의 내용이 출력되지 않는 것을 볼 수 있다!

do whlie

do while은 while문과같이 소괄호의 내용이 거짓일때까지 대괄호 안의 내용을 실행시키는 것은 공통되지만,

소괄호의 내용이 거짓이라도 처음 그 한번은 출력되야 된다는 차이점이 있다.

이때 i = 18은 'i <= 10'을 만족시키지 않지만

이렇게 처음 한번은 출력되어야 한다.

이렇게 while문은 소괄호의 내용이 거짓이 될 때까지 중괄호안의 내용이 실행되는데

while (true) { }가 되면 항상 참이 되기 때문에 숫자가 시작점부터 쭈우우우ㅜㅇ우ㅜ우우ㅜㅇ우우우ㅜ우웅ㅇ우우우우우우우우웅우우ㅜ우우우우우웅우ㅜ우욱!! 나타나게 된다!


for

 

'while'대신 'for'을 이용하면 이렇게 더 간단히 만들 수 있다~

for은 이러한 경우에 쓴다

1. 일정하게 증가/감소되는 변수가 필요할 때

2. 배열의 모든 원소에 순차적으로 접근하고 싶을 때

3. 특정 횟수만큼 작업을 반복하고 싶을 때

한번 응용을 해보도록 하자.

1. 입력을 했을 때 1, 2, 4, 8, 16, 32, ... 가 나오게 해보자.

이렇게 해주고 실행을 시켜보면

이렇게 124보다 작은 수 중에서 2^n꼴인 수들이 나오게 된다!

참고로 for문의 소괄호와 중괄호안에서 정의한 문자는 괄호를 나가게 되면 정의되지 않는다!

2. 1 ~ n 까지 다 더해보는 프로그램을 만들어 보자.(공식이용 X)

sum = 0부터

i = 1일때 sum은 sum에 1을 더한 값이 저장이 되고,

i = 2일때 sum엔 1 + 2를 한 값이 저장이 되고,

...

i = n일때 sum엔 1 + 2 + ,,, + n을 한 값이 저장이 되어

printf("%d\n", sum);을 해주면 1부터 n까지의 합이 나오게 된다!

이렇게 5를 입력하면 1부터 5까지 더한 수인 15가 나오게 된다

3. '*' n개를 출력해보자.

i가 n보다 작을때마다 printf("*")가 실행되어 i = n이될 때까지 '*'은 n개가 출력되어 n을 입력하면 '*'이 n개가 나오게 된다.

이렇게 6을 입력하면 '*'이 6개가 나오게 된다


1.시험 점수 입력

 

내가 쓴 식(좌)과 정답(우)

아쉬운 점 : '또는(||)'을 활욜하지 못했고, 0 이하의 수를 생각하지 못했다.

2.

자연수 입력 :

(자연수의 약수 출력)(마지막 ',' 포함)

정답과 똑같다!!!!!

예외로 마지막 ,를 없애는 법은

n/2까지만 돌리고

마지막n은 따로 printf("%d", n);을 넣어주면

 

이렇게 깔끔하게 정리가 된다~

3. 일의 자리 수가 3의 배수인 경우 '*'만 출력

 

내 답

처음엔 '(n - 3) % 10 == 0'이라고 했다가 계에에에속 ****만 나온다거나 별은 안 나오고 숫자만 나오길래

에타에 물어봤더니 사람들이 n을 i로 바꾸라고 알려주셔서 바꿨더니 그제서야 나왔다!!!ㅋㅋㅋㅋㅋ

강의 답

4.

ex)

n = 4인경우

1

1 3

1 3 5

1 3 5 7

로 끝나는 프로그램 만들기.

여기까지 하다가 도저히 못하겠어서 결국 강의를 봤다,,,ㅠㅠㅠㅠㅠㅠㅠㅠ

 

5. n = 7일때

1

1 2 3

1 2 3 4 5

1 2 3 4 5 6 7

처럼 나오게 하기

 

이건 바로 했다ㅏ!!!


연산자 : +, -, /, *, %, +=, -=, ++, --, &&, ||, !

조건문 : if(), switch()

반복문 : while(), for()