아직까지 잘들 따라오고계신가요? (제발요!!)
오늘할 것도 조건문이랑 같이 굉장히 많이 쓰이는 문법입니다.
0. 반복문 for
우리가 코드를 짤 때, 동일한 노동을 반복수행해야할 때가 있을겁니다.
예를 들어서, 여러분들이 선생님이라 하고 학생들을 출석체크한다 합시다.
학생이 1명이 아닌 이상, 출석을 1번부터 ~ N번까지 부르게 될텐데요.
printf("1번\n");
printf("2번\n");
printf("3번\n");
printf("4번\n");
printf("5번\n");
.
.
printf("N번\n");
이런 식으로 하면 코드도 지저분해보이고 효율성이 많이 떨어집니다.
앞으로 현업에서 코드를 짜게되면 적게든 몇백줄에서 많게는 수천줄이 될텐데,
코드의 가독성을 높이기 위해서는 반복문이 반드시 필요합니다.
for (초기값; 조건식; 증감식)
이게 for문의 원형입니다. 하나씩 살펴보겠습니다.
그러면 초기값을 for문 안에 어떻게 넣어주면 되느냐?
IDE마다 다른데 Dev C++의 경우는 변수를 먼저 for문 밖에다 선언을 해줘야 에러가 뜨지 않습니다.
#include <stdio.h>
int main()
{
int i;
for (i=1; i<=10; i++)
{
printf("%d\n",i);
}
return 0;
}
이런 식으로요. 어쩌다보니 초기값뿐만 아니라 다른 식들도 넣었네요.
하지만, 딱보면 직관적으로 이해는 갑니다.
A. 변수 i가 밖에서 선언되었고... 1부터 시작하는구나!
B. 변수 i는 10보다 작거나 같을 때 반복을 수행하는구나.
- 아! 그러면 10까지만 출력되고 그 위로는 조건식에 맞지않으니 프로그램이 종료되겠구나!
여기까지는 이해가되는데 i++가 뭐지..??
제 강의용 PPT자료에서 가져온건데, 이걸 토대로 설명드리겠습니다.
C언어에서는 변수 = 변수값; 이라는 말은 변수값을 '변수'에 집어넣는다는 말입니다.
상자그림처럼요. 상자의 이름은 우리가 'number'라고 정해줬고, 그 상자의 자료형 타입은 정수형(int)입니다. 변수 number가 현재 갖고 있는 값은 5입니다.
따라서, 5가 number상자에 들어가있다는 것입니다.
여기까지 이해되었다면 i++을 이해할 수 있습니다. C언어에서 i++는
i = i+1 라는 뜻입니다.
수학이였다면 i = i+1? 은 결국 0 = 1이 아닌가요? 하겠지만!
프로그래밍에서는 '오른쪽'에 있는 값을 '왼쪽'에 있는 변수상자에 넣겠다는 말입니다. 따라서 이 식을 반복문에 넣는다면 변수 i는 1씩 증가하게 되겠죠?
훌륭하게 출력되네요.
Tip! i++가 있다면 i--도 있습니다. 이는 1씩 감소한다는 뜻이 되겠죠?
2씩 증가시키고 싶다면 i = i+2로 하면 되고 2씩 나누고 싶으면 i = i/2 등등
우리 입맛대로 마음껏 코드를 쓸 수 있습니다.
1. 반복문 while
반복문 2번째 문법입니다. while도 for문처럼 기능은 동일해요. 단지,
양식이 조금 다를뿐입니다. 먼저 코드부터 보여드리면서 설명하겠습니다.
#include <stdio.h>
int main()
{
int i = 0;
while(i<10)
{
printf("%d\n",i);
i++;
}
return 0;
}
얼추 비슷하죠? 코드보면 초기값, 조건식, 증감식이 다 보이긴 합니다.
다만 for문은 한 곳에 다 모아두었고, while문은 다 분산시켰다는 것.
차이는 이거 하나 뿐입니다.
코드를 실행해보니 for문을 쓸 때와 똑같이 나옵니다.
기억할 것은 while문에서 1. 초기값은 while문 위에 / 2. 조건식은 while문 옆에 / 3. 증감식은 while문 안에
이것 뿐입니다. 앞에서 for문을 잘 이해했으면 while문까지도 함께 이해가 됩니다.
2. 반복문 do while
마지막 반복문입니다. do while인데요. 이거는 알고리즘에서 꽤 쓰입니다.
#include <stdio.h>
int main()
{
int i;
do
{
printf("%d\n",i);
i++;
}
while(i<10);
return 0;
}
결과만 보면 while문이랑 차이가 없어보입니다. 근데 왜 따로 do while로 구분을 해둔 것일까요?
변수 i를 초기값 3으로 잡아두었습니다.
그리고 조건식으론 i가 3보다 작을 때, 해당 코드를 반복하도록 했습니다.
조건과 초기값이 성립이 안하므로 실행했을 때 아무것도 뜨지 않습니다.
코드를 천천히 보면 왜 이렇게 수행되는지 직관적으로 이해가 갑니다.
여러분 do가 뭔가요? 해라! 라는 뜻이죠? 일단 조건이 뭐든간에 한번은 해라! 그 다음 while을 검토해! 라는 것입니다.
3. 삼항연산자
마지막으로 삼항연산자를 한번 알아봅시다. 자주 쓰이는 문법은 아닌데, 알아두면 괜찮은 스킬이라 추가로 글을 씁니다.
코드의 원형은 아래와 같습니다.
#include <stdio.h>
int main()
{
int a,b,result;
scanf("%d %d",&a,&b);
result = a>b ? a : b;
printf("%d",result);
return 0;
}
자, 이게 대체 뭔말인가? 꼭 외우지 않아도 됩니다. 자주 안쓰고, 쓸 일이 생기면 찾아보고 해도 되니까요!
A. 음.. 일단 변수 a,b,result를 정수형 타입으로 선언했고...
B. 그리고 변수 a,b를 입력받고...
C. result..?
천천히 봅시다.
result = (조건식) ? (참) : (거짓);
지금 저는 조건식을 변수 a가 변수 b보다 클 경우로 잡았습니다.
a > b ? 이렇게요.
만약 이 조건식이 참이라면 a를 출력하고, 거짓이라면 b를 출력하라는 것입니다.
코드를 보면 저는 a를 3, b를 5로 입력했기 때문에 a>b은 거짓입니다.
그래서 b를 출력한 것입니다.