티스토리 뷰
0.
안녕하세요 해당 블로그에 올라오는 모든 C언어 강의는 처음으로 프로그래밍을 접하는 초심자들을 위해 작성된 글입니다. 모르시는 내용은 마음껏 질문해주시고 얼마든지 답변해드리겠습니다. 잘못된 정보에 대해서는 따끔하게 비판해주시고 반영하도록 하겠습니다. 그럼 지난 글 자료형과 형변환에 이어서 조건문과 반복문 시작하겠습니다.
1. 조건문
우선 조건문은 C언어뿐만 아니라 대부분의 프로그래밍 언어에서 공통적으로 쓰이는 언어입니다. 그래서 이번에 알아두시면 다음 언어를 습득할때 문법적인 부분 말고는 공부하실 필요가 없죠.
조건문은 '조건'의 '만족'의 따라 내부 블록을 실행할지 말지를 결정하는 것을 말합니다. 코딩을 하다보면 어떤 경우에는 실행을 하고싶고 반대의 경우에는 실행을 하고 싶지 않은 연산이 있습니다. 이럴때 사용하는 것이 조건문입니다.
조건문의 사용은 if와 else 이 두가지를 통해 사용할 수 있습니다. 그리고 조건을 만들때는 수학에서 사용하는 등호, 부등호 기호를 사용합니다. 기호의 종류는 == , > , < , >= , <= 이렇게 다섯가지의 조건식을 만들기위한 기호가 있습니다.
그런데 첫번째 등호의 사용이 수학에서 쓰던거랑 다르고 이상합니다. 그 이유는 이전의 자료형과 변수에 대한 내용을 다룰 때 변수에 값을 할당하는 방법으로
my_first_int = 3;
이런식으로 등호를 사용하였습니다. 프로그래밍 코드에서는 애모모호한 코드가 단 하나도 존재해서는 안됩니다. 컴퓨터는 기계이기 때문에 항상 정해진 법칙만을 따르기 때문이죠. 그래서 조건문의 조건에서는 등호를 사용할 수 없고 등호를 2개 이어붙인 기호를 사용합니다.
다음 네개의 기호는 순서대로 크다, 작다, 크거나같다, 작거나 같다에 해당하는 기호입니다.
그럼 실제 조건문의 코드 작성법을 예시를 통해 알아보겠습니다.
if(조건){
조건이 만족할 때 실행될 코드
}
else if(조건){
조건이 만족할 때 실행될 코드
}
else{
조건이 만족할 때 실행될 코드
}
기본적으로 다음과 같이 사용합니다. 이때 if문 안에 있는 조건이 true라면 내부블럭의 코드를 수행하고 false라면 쌍을 이루는 else로 넘어갑니다. 두번쨰 else if에서 두번째 조건이 true라면 2번쨰 블럭의 코드를 수행하고 여기서도 false의 값을 가진다면 마지막 else문을 조건없이 반드시 실행합니다.
그럼 int형 변수 a,b가 있고 이 중에 더 큰 값을 c에 할당하기 위한 코드를 작성해보겠습니다.
코드를 분석해보겠습니다.
8 : int형 변수 3개를 선언하였습니다.
9,10 : a와b에 각각 값을 할당하였습니다. 지금은 임의로 값을 정해줘서 당연히 a가 크다는것을 알 수 있지만 값을 예측할 수 없는 변수라 생각하면 이러한 조건문이 반드시 필요합니다.
12 : a가 b보다 크면 조건을 만족하게 되어 13줄에 해당하는 c=a가 실행됩니다.
15 : else는 하나의 if와 짝지어서 쓰이는 문구로서 if문이 만족하지 않으면 13줄이 실행되지않고 else문으로 넘어와 else안에 있는 16줄 c = b가 실행됩니다.
그리고 c를 콘솔에 출력해보면 정상적으로 a의 값인 3이 출력됩니다.
2. 반복문
이제 반복문에 대해 알아보겠습니다. 반복문은 내부 블럭에 있는 코드를 반복적으로 수행하고 싶을 때 사용합니다. 이 때 무한대로 반복하는것을 방지하기 위해 조건문을 만들어 해당 조건이 true일 경우 반복문을 수행하게 됩니다.
반복문의 종류는 for, while이렇게 2가지가 있습니다. do+while이라는 형식의 반복문도 있지만 굳이 사용하지 않기 때문에 알 필요는 없을 것 같습니다. 저조차도 단한번도 사용한 기억이 없는 반복문이니까요.
두 반복문의 가장큰 차이는 끝이 명확한가 명확하지 않은가에 있습니다.
보통 반복의 횟수가 정해져 있을 때는 for문을 사용하고 정해져 있지 않을 때는 while을 사용합니다.
for문의 사용법은
for(int i = 0; i < n; i++){
반복할 코드 블록
}
와 같이 사용합니다. for문 괄호안에 총 세개의 식을 작성합니다
처음의 int i = 0; 은 반복문이 제일 처음 시작될때 한번만 수행할 코드입니다.
두번째의 i < n;은 반복문이 수행될 조건입니다. 해당 반복문은 i가 n보다 작을경우 코드를 반복합니다.
세번쨰의 i++는 한번의 반복이 끝날때마다 실행될 코드입니다. 여기서 ++연산자는 후위 연산자라고 하는데 이는 이후 연산자에 관한 글에서 자세한 설명을 해드리겠습니다. 여기서는 i = i + 1;과 같은 i의 값을 1증가시키는 의미를 갖고 있다는 것만 아시면 되겠습니다.
정리를 해보면 위의 반복문은 i의 값이 0부터 시작되어 i가 n보다 같아질때까지 반복수행하고 매 반복이 끝날때마다 i의값을 1증가시킵니다. 즉 i가 0부터 n-1까지 증가하게 되고 총 n번의 반복을 수행하게 됩니다.
이처럼 for문은 변하지 않는 n같은 값을 가진 변수나 숫자를 넣어 정해진 횟수만큼 반복하고 싶을 떄 사용합니다.
만약 n의 값이 i처럼 따라서 증가하게 코드를 작성한다면 반복문은 끝나지 않고 무한히 수행되어 프로그램이 멈춘것처럼 보이게 됩니다.
그렇다면 예시로 1부터 10까지 출력하는 프로그램을 작성해보겠습니다.
8, 9 : int형 변수 n을 선언하고 10의 값을 할당합니다.
11 : 반복문을 작성합니다. i는 1부터 시작하여 i가 n보다 작거나 같을 경우 반복문을 수행하며 i는 매 반복마다 1씩증가합니다. 따라서 printf문이 i를 출력하면 1부터 10까지 출력하는 프로그램을 반복문을 통해 아주 간단하게 작성할 수 있습니다.
이제 while문의 사용법을 보도록 하겠습니다.
while(조건){
반복수행할 코드;
}
for문보다는 비교적 간단하게 코드를 작성할 수 있습니다. 괄호안의 조건이 만족하면 반복문이 수행됩니다.
위에서 while문은 반복횟수가 명확하지 않을 떄 사용한다고 하였는데요. 그러한 경우가 어떤 경우인지 예시와 함께 코드도 보도록 하겠습니다.
사용자로부터 숫자를 입력받아 해당 숫자가 2보다 작아질때까지 절반으로 나눠 출력하는 프로그램을 작성해보겠습니다.
이때 사용자가 어느 숫자를 입력할지 모르기 때문에 우리는 반복문을 얼만큼 수행해야할지 알 수 없으므로 while문을 사용해야 합니다.
9 : 처음 보는 scanf함수를 호출하였습니다. scanf는 콘솔창에서 값을 입력받기 위한 함수입니다. 다음에 scanf와 printf에대해 자세히 다뤄보는 시간을 가져보겠습니다.
11 : n 이 2보다 크거나 같으면 반복문을 계속 수행합니다.
12 : n의 값으 출력합니다.
13 : n을 2로나눈 값을 n에 다시 할당하여 n의 값을 업데이트 합니다.
사용자가 n의 값으로 십만, 백만, 천만을 입력하든 해당 프로그램은 n이 2보다 작아질때까지 n의 값을 출랙해줍니다.
이처럼 반복하는 횟수가 명확하지 않을 때는 while문을 사용합니다.
4.실습
콘솔을 통해 a와 b의 값을 입력받고 a와 b모두 10보다 크다면 "big"을 출력하고 아닐 경우 "small"을 출력하는 프로그램을 작성해보세요. (*콘솔을 통해 값을 입력 받을 때는 while문의 설명에서 나온 scanf를 사용하시면 됩니다.)
30보다 작은 모든 홀 수를 출력하는 프로그램을 for문을 사용하여 작성해보세요.
콘솔을 통해 숫자를 입력받고 해당 숫자보다 작은 모든 짝수를 출력하는 프로그램을 작성해보세요.
+02.17 - 숫자를 입력받아 * 문자를 이용하여 역삼각형 모양으로 출력하는 프로그램을 작성해보세요.
ex) 입력 : 5
*****
****
***
**
*
백준 알고리즘 홈페이지에서 for문과 while문 파트에 있는 문제를 풀어보시면 실력향상에 아주 큰 도움이 됩니다.
*SCANF사용을 할 때 오류가 나시는 분들이 있다면 이를 해결하기 위한 방법을 포스팅한 글 링크를 남기겠습니다.
어렵지 않으니 그대로 따라하시면 될 거 같습니다.
https://bymakers.tistory.com/6
'C언어' 카테고리의 다른 글
C 제9강 - 함수 활용하기 (0) | 2020.02.19 |
---|---|
C 제8강 - 배열 활용하기 (0) | 2020.02.17 |
C 제6강 - 연산자 (0) | 2020.01.30 |
C 기초 - printf 와 scanf (0) | 2020.01.19 |
C 제5강 - 자료형과 형변환 (0) | 2020.01.11 |
- Total
- Today
- Yesterday
- C++
- 언리얼
- 깃 용량문제
- UHT
- Jenkins
- 젠킨스
- 안드로이드
- 유니티
- 알고리즘기초
- 빌드 주기
- 깃 허브 오류 해결
- 유니티 직소퍼즐 구현
- Add Node
- Connecting Jenkins Agent
- 백준
- c언어강의
- Unreal Header Tool
- 안드로이드 구글맵
- 언리얼 빌드
- c언어 기초
- Jenkins Build Periodically
- refusing to run with root privileges
- 언리얼 사용자 정의 구조체
- Connecting Jenkins
- 알고리즘
- 젠킨스 에이전트 연결
- C언어기초
- 구글맵
- dfs
- 언리얼 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |