210901, C언어 입문 - day 5

Min Hyeok·2021년 9월 1일
0

C언어 개념 익히기

목록 보기
5/19
post-thumbnail

죽지도 않고 또 왔다.

0831은 어디갔냐고? 묻지마라 아 ㅋㅋ 없던 일로 하자.

그래서 오늘은 0831 공부 몫까지 적을테니까, 걱정말라구-!
아 그런데 8장부터는 좀 실습? 실제로 코드를 짜보면서 해야하는 내용들이 좀 많아져서 막 이전처럼 텍스트로 요로케 요로케 설명하기 보다는 연습용 간략한 코드들을 짜보면서 복습을 진행할 것 같다.

8장, 조건문

조건문. 말 그대로 "조건"에 따라서 프로그램이 실행되는 흐름이 변경되도록 해준다. 이 조건문이란 것은 "제어문"에 속하는 친구인데,

욜케 나뉜다. 왜 굳이 img파일로 넣었냐고? 그냥 글만 넣으면 너무 허전하길래..

조건문은 if, switch 두개가 쓰인다. ~~물론 더 있을수도 있지만, 난 책 따라하는 일개 뉴비다. 아직까진 책이 나에겐 코딩 세계의 전부이므로.. ~~
쓰이는 예는..

#include <stdio.h>

int main() {
	int a=1;
    if (a == 1) {
    	printf("마즘 ㅋㅋ\n");
    } else {
    	printf("아님 ㅋㅋ\n");
    }
}

이렇게 썼다고 가정하면, 위에 int값인 a가 1이면 마즘 ㅋㅋ가 출력되는거고, 아니면[else] 아님 ㅋㅋ가 출력이 되는거시다. 쉽죠?

그리고 이 if를 굳이 이렇게만 쓸 수 있는건 아닌데, 다른 표현 방법을 "조건 수식 연산자"라고 한다.

int a = 10;
result = (a == 10) ? printf("안농") : printf("껒여");

이렇게 되면

int a = 10;
if (a == 10) {
	printf("안농");
} else {
	printf("껒여");
}

이거랑 똑같겠지? 물론 위에 조건 수식 연산자 방법으로 적은게 편한 사람도 있겠지만, 난 보기에 더 직관적이고 막 기호 여러개 이거저거 섞지 않은 아래것이 더 편하다.

그리고 다른 조건문 표현 방법으론 switch가 있다.

예를 들어서 설명하는게 편한데, 만약 내가 구닌이다. 우리 부대원들의 체력 점수를 매기려고 하는데, 90점 이상 = A / 80점 이상 = B / 70점 이상 = C / 70점 미만 = N 라고 하려면, if를 썼다 치면 뭐 90>=, else 80>= ... 뭐 어떠한 정해진 숫자랑 조건을 비교하는데 뭘 너무 많이 써야하잔ㅇ하? 이럴 때 써주는 것이다.

쉽게 말하면, "정해진 상수와 조건 비교를 하는 경우에" 이 switch를 쓰는게 더 효율적이란 거심.

예시

#include <stdio.h>

int main() {
	
    int score=87;
    char grade;
    switch (score) {
    	case 100:
        case 90:
     		grade = 'A';
            break;
        case 80:
        	grade = 'B';
            break;
      .
      .
      .
    }
}
    

뭐 요런식으로 써주면 된다.

"어? case 100에는 왜 break 안 붙이고 바로 case 90 가 나오나요?"

이럴 수도 있는데, 이게 case 100은 100점이란거시다. case 90은 90~99란것이고. 굳이 내가 100점일 때도 A! 90~99점일때도 A!라고 따로 써 줄 필요 없이, 90~100점 다 A!라고 해주면 편하잔ㅇ하?
그래서 저렇게 적어주면 알아서 콤푸타가 "어 90~100 다 A? OK"라고 인지를 하게 된다.
C부턴 왜 안했냐고? 귀찮잔ㅇ하. 알아서 완성해보자.
..근데 이거 누가 볼거라고 계속 질문 받는것처럼 적지?

9장, 반복문

아까 와따시가 제어문은 조건문과 반복문으로 나뉜댔다. 그 두개중 나머지 하나인 반복문이다!

반복문, 말 그대로다. 어떤 작업을 "반복"해서 수행한다.

우리가 어떤 운동을 일주일 주기의 루틴따라 한다고 하면, 일주일마다 리셋되서 반복하잔어? 그냥 그런거다. 그렇게 이해해라. 사실 어렵게 이해할 구석이 없다. 우리가 뉴턴 이런사람처럼 오지게 깊이 들어가서 공부할 것도 아니잔ㅇ하? (사실 그럴것도 없다 진짜)

뭔 개소리를 말해놨지

여튼. 그렇다.

이 반복문에는 for문, while문이 있다.

우선 for문,
형식은

for ( 시작 조건 ; 종결 조건 ; 조건 변화 수식) {
명령문;
}

이런 식으로 쓰인다.

예를 들자면

#include <stdio.h>

int main() {
	int a = 1;
    for (a = 1; a < 10 ; a++) {
    	printf("a의 값은 %d\n", a);
    }
}

이런 식으로 쓰이는데, 저렇게 하면
a의 값은 1
a의 값은 2
.
.
a의 값은 9

이렇게 출력이 된다. 먼 소린지 ah-ratji..?
근데 이건 상황 따라 저기 위에 시작 조건, 종결 조건, 조건 변화 수식이 생략이 될 수도 있다. 바로 위 예시 코드를 보면 이미 int a = 1;이라고 a값이 setting이 되어 있는데, 시작 조건에서 또 a = 1이라고 설정을 해줬잖아. 굳이 중복해서 a = 1이라고 말해줄 필요가 없다는거지. 이럴 땐 시작조건 a=1을 그냥 공백칸으로 만들어줘도 된다.

그리고 무한루프라는 기능도 있는데, 그냥 모든 칸(시작, 종결, 조건변화수식)을 공백으로 만들어 주면 된다.

for ( ; ; )

이렇게. 이 기능은 책에 의하면 사용자가 키보드를 이용하여 특정 키를 누르면 반복을 종료하게 한다거나 or 파일, 외부장치에서 들어오는 값을 체크하여 반복을 중단할때 등 쓰인다는데, 이런건 나중에 뒤에서 내가 만져보겠지? 그냥 인지만 해두자.

그 다음엔, while이 있다. 개인적으론 얘가 더 편함.

형식은

while(종결 조건) {
명령문;
}

이다. 앞에 있는 if보단 개인적으로 조금 더 깔끔해 보이고, if문과 큰 차이도 없는 듯 해서 앞으로 반복문을 쓰라면 이 while문을 쓸 것 같다.

이 while문의 무한루프 표현 방법은 while(1) 임. 쉽죠? 항상 종결 조건이 "참"이라는 거니까, 그냥 계속 뺑뺑이 돌린다는 뜻.

그리고 do ~ while문이 있다.

do {
명령문;
} while (종결 조건);

.. 이렇게 쓰는데, 무조건 처음 명령문을 한번 돌리고 이후부터 조건을 check한다는건데.. 굳이 왜 쓰는지 모르겠다...

그리고 반복문 구성 방법의 예시로 구구단이 있는데, 이건 내 replit 계정에 내가 쓴 코드를 참고하자.

break와 continue.

이 두개는 다 반복문을 종료시킨다는 공통점이 있는데, 작지만 큰 차이가 하나 있다.

break는 "반복문을 아예 종료 시킨다".

아래 코드를 예시로 들자면

#include <stdio.h>

int main() {
	
    int score=87;
    char grade;
    switch (score) {
    	case 100:
        case 90:
     		grade = 'A';
            break;
        case 80:
        	grade = 'B';
            break;
      .
      .
      .
    }
}
    

여기서 보면 case 90의 경우에는 grade가 A임을 넣어주고 break를 해주는데, 그럼 switch문이 아예 멈춰버리고 grade가 A라고 결정해버린다.

근데 만약 continue가 쓰인다면 "일회성 취소"가 된다.

예시 코드를 아래 써보겠다

int m;
for ( m=5 ; m<8 ; m++) {
	if ( m==6 ) continue;
    printf("%d\n",m);
}

여기서 만약 continue가 break였다면
m이 5라고만 출력해주고 바로 끝내버린다.

그런데 continue는 아까 설명했듯, 일회성취소다.

m=5, m=7. 이렇게 출력한다는거지.

알간? 쉽다.

오늘은, 여기까지

0개의 댓글