티스토리 뷰
2021.10.16 - [코딩 공부/C 언어] - [C언어 기초] 조건문 switch
지난 시간까지 C언어의 조건문에 대해 알아봤습니다.
오늘부턴 반복문에 대해 알아볼 것입니다.
1. 반복문이란?
반복문이란 이름에서 유추할 수 있듯이 반복문을 사용해서 컴퓨터에게 어떤 명령을 계속해서 수행하라고 시킬 수 있어요.
지금까지는 오로지 한 번만 시킬 수 있었기 때문에 만약 같은 일을 여러번 시키고 싶으면 같은 코드를 여러번 적어줘야 했어요...
2021년에 뭐 하는?
하지만 반복문을 배우고 나면 손 아프게 같은 코드를 여러번 적을 필요가 없어집니다.
반복문을 실행하는 키워드를 사용해서 한 문장을 계속해서 반복하도록 시킬 수가 있게 되죠.
반복문을 사용하는 키워드에는 크게 두 가지가 있는데
그 중에서도 while문 먼저 배워볼게요!
2. 반복문 while
조건식을 평가하여 그 결과가 참일 경우 종속문장(반복시키고 싶은 명령)을 반복해서 실행합니다.
while (조건식)
{
종속문장;
}
다음문장;
.
.
.
기본적인 형태는 위와 같습니다.
#include<stdio.h>
void main()
{
int Num = 1;
while (5 >= Num)
{
printf("Hello~~\n");
Num++;
}
}
그럼 비주얼 스튜디오를 켜서 위와 같이 적어봅시다.
실행시키면 위와 같이 Hello~~가 5번 출력되는 것을 볼 수 있습니다.
while (5 >= Num)
{
printf("Hello~~\n");
Num++;
}
5 >= Num 이라는 조건을 통해
Num이 5보다 작거나 같을 동안에 중괄호 안의 종속문장을 실행해라는 명령을 내린 것입니다.
5번동안 Num이 1씩 증가되면서 6이 되는 순간 while의 조건을 만족하지 못 하게 되고 반복문이 종료됩니다.
* 여기서 숫자를 앞에 적는 이유는 비교 조건식을 적을 때 실수를 조금이나마 줄이고자 함입니다.
대소관계 비교에서는 실수가 적지만
== 같은지 아닌지를 비교하는 연산자를 쓸 때엔 가끔 실수로 = 하나만 쓰는 경우가 있습니다.
만약 if (num == 5) 라는 조건을 확인하고 싶은데,
실수로 if (num = 5) 라고 적으면 이 조건은 실행되지 않습니다.
num = 5 자체는 조건이 아니니깐요...
하지만 그냥 코드를 썼을 때엔 빨간 줄이 뜨질 않아요.
컴파일러가 봤을 때 문제는 없는 문장이거든요.
그래서 만약 코드가 몇백줄씩 되는데 저런 식으로 조건을 잘못 적었다면 문제가 없어뵈는데 왜 원하는대로 동작이 안 되지? 하는 상황이 생기고...
저 때부터 코드 처음부터 끝까지 뒤져야 됩니다...ㅎ 저런건 잘 보이지도 않아요.
하지만 if (5 = num) 이라 적었다면
수정할 수 없는 상수에 값을 넣는다는 것은 말이 안 되기 때문에
컴파일러가 바로 오류 표시를 해 줍니다.
그러면 뭘 잘못 적었는지 한 번에 알 수 있습니다.
이를 통해 실수를 줄일 수 있죠.
저기서 =를 하나 더 추가해주면 정상적으로 동작하는 것을 볼 수 있습니다.
이런 이유로 조건식을 적을 때엔 숫자가 앞에 오도록 하는 것이 좋습니다.
다시 본론으로 돌아와서
while문을 쓸 때에 주의사항이 있습니다.
#include<stdio.h>
void main()
{
int Num = 1;
while (5 >= Num)
{
printf("Hello~~\n");
}
}
만약 위의 코드처럼 Num을 증가시키라는 문장을 삭제해서 Num을 증가 시켜주지 않는다면 Num은 영원히 1일 것입니다.
그러면 Num은 영원히 5가 되지 않을테니 반복문도 영원히 반복될 것입니다.
그 말은 무한루프에 빠져버린다는 뜻이죠...
컴퓨터를 하다 보면 프로그램 응답 없음을 종종 겪어보셨을 것입니다.
엄밀히 말하면 그 때의 응답 없음과는 좀 다른 상황이긴 하지만
위와 같이 코드를 잘못 작성해서 while문이 종료되지 않는다면
프로그램은 해당 종속문장을 영원히 실행하면서 다른 행동을 하지 못 하는 것이죠.
그렇기 때문에 반복문을 사용할 때엔 종료 조건을 정확하게 설정해줘야 합니다.
반복문을 사용할 땐 이것만 기억하시면 됩니다.
3. define
while에 대한 기본적인 내용은 끝났지만 토막 상식으로 define이라는 것에 대해서 알아볼게요.
#include<stdio.h>
#include<conio.h> //콘솔입출력 헤더파일(getch(),putch())
#define ESC 27
void main()
{
char ch;
while (1) //참(1)일 동안 계속 반복하라는 뜻
{
ch = getch();//콘솔 입력함수
if (ESC == ch)
break;
else if ('a' <= ch && 'z' >= ch)
ch -= 32;
putch(ch);//콘솔 출력함수
printf("\n");
}
}
위와 같이 쓰고 실행해보면 ESC가 아닌 키들을 누르면 대문자가 출력되다가 ESC를 누르면 프로그램이 종료되는 것을 보실 수 있을 것입니다.
키보드의 각 키는 아스키 코드의 숫자로 대응되어 있습니다.
(궁금하시면 아스키 코드 검색)
세번째 줄에서 볼 수 있는 것처럼 #define ESC 27 이라고 쓰면
이제부터 ESC라는 글자는 27로 바꿔서 적용해라 라는 뜻이 됩니다.
이렇게 쓰는 이유는 27 == ch 라 쓰면 27이 뭐길래 조건을 걸었을까?
한 눈에 알아보기가 힘들어요.
그렇지만 ESC == ch 라 적으면 입력받은 키가 ESC면 종속문장을 실행하라는 거구나~
보다 쉽게 알 수 있습니다.
성능에 영향을 주는 것은 없고 좀 더 좋은 가독성을 위해서 많이 씁니다.
하지만 #define도 약간 옛날 스타일이라 요즘 스타일로 쓰면
const int ESC = 27;
이렇게 const 키워드를 붙여 쓰는 것도 좋습니다.
const 키워드를 쓰면 이 변수는 더 이상 변수가 아닌 상수로 정의되면서 수정할 수 없는 값이 됩니다.
ch = getch();
putch(ch);
그리고 중간에 보이는 getch와 putch가 뭔가 싶으실 텐데,
scanf와 printf와 비슷한 기능을 하는데 scanf는 입력받은 뒤 꼭 엔터를 쳐야 변수에 값이 들어갔다면
getch는 엔터를 안 쳐도 값이 바로 변수에 들어가는 함수라고 보시면 됩니다.
자세한 것은 따로 구글링 해 보시거나 버퍼에 대해 배우고 나면 이해하실 수 있는데
지금은 버퍼에 대한 것까지는 넘 복잡하니까 그냥 엔터 필요없는 scanf구나 정도로 알고 계시면 됩니다.
putch는 printf처럼 콘솔창에 () 안의 char 변수 값을 출력해주는 함수입니다.
이건 잘 쓰지를 않아서 그냥 printf 말고도 이런 함수도 있구나 정도로 알고 넘어가셔도 됩니다.
왜냐면 printf로도 다 되서... putch까지 굳이 쓸 이유가 없었어요...
#include<stdio.h>
#define TRUE 1
void main()
{
int i = 0, j = 0, sum = 0;
while (TRUE)
{
printf("1 ~ 100 사이 수 입력 : ");
scanf("%d", &i);
if (1 <= i && 100 >= i)
break;
printf("잘못 다시 입력");
}
while (j <= i)
{
sum += j;
j++;
}
printf("1 ~ %d 누적합계 : %d", i, sum);
}
마지막으로 위 코드를 쓰고 실행해보면
이렇게 입력한 값 까지의 누적 합계를 구해주는 것을 볼 수 있습니다.
이렇게 반복되는 계산을 할 때 반복문을 쓰면 정말 유용합니다.
사실 코딩의 절반 이상은 반복문이라고 봐도 되는...
앞으로 계속 코딩 공부를 하시다 보면 반복문을 쓸 일이 정말 많을 거에요.
10 ~ 20 사이의 숫자만 입력 받아 1 부터 입력 받은 수까지의 누적합계를 구하시오
While 을 사용하여 “Hello”를 5번 출력하시오
정수를 반복하여 입력 받아 누적 합계를 구하시오
(입력 받은 정수가 0 일 경우 while문을 종료 후 최종 합계 출력)
입력된 수가 소수인지 판별하는 코드를 작성하시오
입력된 수를 거꾸로 출력 하시오 ( 123 -> 321 )
입력된 수의 각 자리 수 의 총 합계를 구하시오 ( 123 -> 6 )
그럼 오늘 공부를 마무리하면서 간단한 문제를 풀어봅시다.
지금까지 배운 것들과 오늘 배운 while문을 이용해서 충분히 풀 수 있는 문제들입니다.
최대한 구글링 없이 풀어보시면서 그동안 배운 것을 복습하는 시간을 가지시길 바랍니다.
피드백이 필요하시면 언제든지 댓글로 남겨주세요.
그럼 예습복습 열심히 하시고 다음에 또 만나요~~
'코딩 공부 > C 언어' 카테고리의 다른 글
[C언어 기초] 반복문 do ~ while (0) | 2021.10.31 |
---|---|
[C언어 기초] 조건 연산자 ? a : b (0) | 2021.10.29 |
[C언어 기초] 조건문 switch (0) | 2021.10.16 |
[C언어 기초] if ~ else와 else if (0) | 2021.10.10 |
[C언어 기초] 조건문 if (0) | 2021.10.05 |
- Total
- Today
- Yesterday
- 알고리즘
- 프로그래밍
- 그리디
- 문제풀이
- 다이나믹프로그래밍
- BFS
- 백준
- 아이패드
- DFS
- dp
- 캐나다생활
- 컴퓨터사이언스
- hackerrank
- 기초
- 영어공부
- 스위프트플레이그라운드
- c++
- greedy
- 컴퓨터공부
- 애플
- 깊이우선탐색
- 코딩공부
- 컴퓨터
- 너비우선탐색
- 해커랭크
- C언어기초
- 캐나다
- 하드웨어
- 프로그래머스
- c언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |