햄깅이의 C언어

[햄깅이의 C언어] Chapter 6 / 조건

chohaeminn 2024. 7. 16. 23:27

본 포스팅은 Perfect C, C언어로 배우는 프로그래밍 기초 책을 기반으로 공부한 자료입니다.
다른 포스팅을 참고한 자료는 모두 출처를 남겨놓았습니다

6.1 제어문의 종류

 

제어문의 종류

 

비순차적 실행의 제어문

 

지금까지 배워 온 프로그램 실행 순서의 원칙은 순차적 실행이다. 즉 프로그램은 main 함수 내부에서 배치된 문장이 순차적으로 실행되는 흐름이었다. 그러나 이러한 순차적 실행만으로 프로그램을 모두 작성한다면 매우 비효율적이다. 

 

프로그램의 실행 흐름에서도 순차적인 실행뿐만 아니라 선택과 반복 등 순차적인 실행을 변형하여
프로그램의 실행 순서를 제어하는 제어문이 제공된다. 

 


제어문의 종류

 

C언어에서 제공하는 제어문은 조건 선택과 반복, 분기 처리로 나눌 수 있다.

 

1. 조건 선택: 두 개 또는 여러 개 중의 하나를 선택하는 구조
2. 반복: 반복 몸체인 여러 문장을 여러번 반복하는 구조
3. 분기 처리: 정해진 장소로 이동하는 구조

 

 

1. 조건선택 구문이란 두 개 또는 여러 개 중에서 한 개를 선택하도록 지원하는 구문이다.

우리의 인생도 중요한 선택의 기로에서 여러 길 중에서 하나를 선택하듯이 문제를 해결하는 프로그램에서 여러 개의 사할 중에 하나를 선택하는 조건 선택이 자주 활용된다.

 

2. 반복 또는 순환 구문이란 정해진 횟수 또는 조건을 만족하면 정해진 몇 개의 문장을 여러 번 실행하는 구문이다.

우리 삶도 어떻게 보면 동일한 일을 반복하는 경우가 많듯이 실제 프로그램에서도 반복 문장의 비중은 상당히 높아 매우 중요한 구문이다.

3. 분기 구문은 작업을 수행하는 도중 조건에 따라 반복이나 선택을 빠져나가거나, 일정 구문을 실행하지 않고 다음 반복을 실행하거나, 지정된 위치로 이동하거나 또는 작업 수행을 마치고 이전 위치로 돌아가는 구문이다. 


6.2 조건에 따른 선택 개요

 

조건에 따른 결정

 

일상생활에서 조건에 따라 해야 할 내용이 결정되는 사례는 매우 많다,

예를 들어 이번 학기에도 여러분은 성적에 따라 장학금을 받을 수도 있고, 못 받을 수도 있다.

프로그램에서도 조건에 따라 처리해야 할 문장이 다른 경우가 자주 발생한다. 

 


if 문장

 

조건에 따른 선택 if 문장

 

문장 if는 위에서 살펴본 조건에 따른 선택을 지원하는 구문이다.

문장 if의 조건식은 반드시 괄호가 필요하며, 참이며 실행되는 문장은 반드시 들여쓰기를 해야한다. 

다음은 표준입력으로 받은 온도가 30도 이상이면 "폭염주의보를 발령합니다"와 "건강에 유의하세요"를 출력하며, 온도와 상관없이 항상 현재 온도를 출력하는 프로그램이다.

 


if else 문장

 

조건 만족 여부에 대한 선택 if else

 

if 문은 조건이 만족되면 특정한 문장을 실행하는 구문이다.

반대로 조건이 만족되지 않은 경우에 실행할 문장이 있다면  else를 사용한다. 

조건문 if else에서 주의해야 할 점을 다시 살펴보면 다음과 같다.

1. 조건식은 괄호가 필요하다.
2. 조건식에서 등호를 대읍으로 잘못 쓰는 것에 주의가 필요하다. 즉, (n==100)을 (n=100)으로 쓰면 항상 참으로 인식한다.
3. if (조건식);이나 else; 와 같이 필요없는 곳에 세미클론을 넣지 않는다.
3. 조건식이 참이면 실행되는 stmt1이나 거짓이면 실행되는 stmt2 부분이 여러 문장이면 {여러 문장들}의 블록으로 구성한다. 

 

다음은 표준입력으로 받은 정수가 짝수인지 홀수인지를 판별하는 프로그램이다.

 

다음은 평균평점의 점수에 따라 다음과 같이 출력이 달라지는 실습예제이다.

 


중첩된 if

 

if문 내부의 if 

 

if문 내부에 if문이 존재하면 중첩된 if문이라고 한다.

 

우리나라의 1종 면허 필기시험 최저합격 점수는 70점이며, 2종 면허 필기시험 최저 합격점수는 60점이라고 한다. 운전면허 종류와 획득 점수로 합격여부를 판단하려면 다음과 같은 중첩된 if문이 효과적이다. 즉 다음과 같이 외부 if에서 면허 종류를 먼저 분류하면 획득점수로 합격여부를 판단하기는 매우 간단하다. 

 

 

다음은 중첩 if else 문으로 자동차 면허 합격 여부 판정 예제이다.

 


블록 표시와 else

 

다음 소스에서 외부 if문의 블록표시는 생략할 수 있다. 그러나 블록이 없는 경우 else 문장이 어느 if문의 소속인지 정확히 판단해야 한다.

 

else는 문법적으로 같은 문법 내에서 else가 없는 가장 근접한 상위의 if문에 소속된 else로 해석한다.

 

그러므로 이러한 else의 혼란을 방지하려면 블록을 이용하는 것이 바람직하다.

 

 

다음은 else와 if를 적절히 조합하여 나이에 따른 선택을 하는 예제이다.

 


다양한 if문의 이용과 조건연산자

 

다양한 if문

 


if와 조건연산자

 

 

다음은 표준입력으로 받은 세 정수의 최대값을 출력하는 예제이다.

 


6.3 다양한 선택  switch문

 

 switch 문장 개요

 

정수 또는 문자 선택

 

switch문은 연산식의 결과에 따라 여러 경로 중에서 하나를 선택하는 구문이다.
switch문은 문장 if else가 여러 번 계속 반복되는 구문을 좀 더 간략하게 구현할 수 있다. 

switch문은 주어진 연산식이 문자형 또는 정수형이라면 그 값에 따라
case의 상수 값과 일치하는 부분의 문장들을 수행하는 선택구문이다. 

 

switch (exp) {...}문은 표현식 exp 결과값 중에서 case의 값과 일치하는 항목의 문장 stmti를 실행한 후 break를 만나 종료한다. switch문에서 switch, case, break, default는 키워드이며 연산식 exp의 결과값은 반드시 문자 또는 정수여야한다.

 

또한 case다음의 value값은 변수가 올 수 없으며, 상수식으로 그 결과가 정수 또는 문자 상수여야 하고 중복될 수 없다. 

default는 선택적이므로 사용하지 않을 수 있다. 

 

다음은 switch문으로 두 실수의 사칙연산을 수행하는 예제이다.

 


break문의 적절한 사용

 

switch문에서 주의할 것 중 하나는 case 이후 정수 상수를 콤마로 구분하여 여러 개 나열할 수 없다.

 

case 문 내부에 break문이 없다면 일치하는 case문을 실행하고,

break문을 만나기 전까지 다음 case 내부 문장을 실행한다.

 

 

다음은 월에 따른 사계절 출력의 예시이다.


연산식 활용과 default 위치

 

switch 연산식의 활용

 

성적을 switch 문장으로 처리하는 프로그램을 작성해보자. 표준 입력된 성적에 따라 성적 'A'에서 'F'까지 부여하는데, 각 학점의 구간은 다음 표와 같아. 정수로 입력된 점수를 switch에서 그대로 사용할 수 없으며, 구간으로 사용할 수도 없으니

 

점수를 10으로 나눈 연산식 (score/10)을 사용하면 switch 문이 가능하다.

 

다음은 점수에 따른 성적부여의 예제이다.

 

 


default의 위치

 

일반적으로 switch문에서 default는 생략될 수 있으며, 그 위치도 제한이 없다.

다만 다음과 같이 default를 위치시킨 이후에 다른 case가 있다면 break를 반드시 입력하도록 한다. 

 

다음은 표준입력으로 받은 정수에 대응하는 열거 상수로 switch문 활용하는 LAB이다.

이렇게 하면 된다. 

 

이렇게 조건도 끝이 났다!!!!!!!!!!!

 

 

내일은 반복으로 찾아오겠다!!

 

그러면 모두 앙뇽!!!