티스토리 뷰


본 강좌는 아래 동영상 강좌와 같이 진행됩니다. 되도록이면 동영상과 같이 보시는 것을 추천합니다.

 

 

유튜브 채널 가기

 

강좌 7편 동영상 보기

 

 


  

 

 이번시간에는 조건에 따라 다른 동작을 할 수 있게 하는 '조건문'에 대해 알아보도록 하겠씁니다.

 

 

 

 1. 조건문

 

 지금까지는 단순히 위에서 아래로 순차적으로 프로그램이 실행되었고, 그렇게 프로그래밍을 하였습니다. 여기에 조건문이 더해지면 중간을 건너 뛰거나, 어떤 조건에 따라 특정 동작을 하도록 프로그래밍 할 수 있게 됩니다.

 

 ◆ if문

 if문은 다음과 같이 사용합니다.

 

if (조건)

}

// 조건이 만족할때 실행할 코드

}

 

 if문 뒤의 조건이 '참' 일 경우, 바로 아래의 {}로 묶인 블럭 안의 내용을 실행하며, 조건이 '거짓' 일 경우 {} 로 묶인 블럭은 무시하고 다음 줄의 코드를 실행합니다. 예를 들어보면

 

int a; 

 ...

if (a == 0)

{

a = 100;

 

 변수 a의 값이 0이라면 조건을 만족하는 '참'이므로 바로 아래 블럭의 코드가 실행이 돼서 a에 100을 대입하게 되고, 만약 a가 0이 아니라면 a의 값을 대입하지 않고 넘어가게 됩니다. 만약 지금의 예처럼 블럭안의 코드가 한줄이라면 {}를 다음처럼 생략할 수 있습니다.

 

if (a == 0)

a = 100;

 

 또한, 조건이 '거짓'일때 특정한 코드를 실행하게 하고 싶다면 다음과 같이

 

if (조건)

{

// 조건이 만족할때 실행할 코드

}

else

{

// 조건이 만족하지 않을때 실행할 코드

 

 'else'문을 사용할 수 있습니다. if문의 조건이 만족하지 않을 경우, else문 아래의 {}로 묶인 블럭의 코드가 실행됩니다. 예를 들어봅시다.

 

int a;

...

if (a == 0)

{

a = 100;

else

{

a = 0;

}

 

 a가 0이라면 '참' 이므로 a에 100을 대입하고, a가 0이 아니라면 a에 0을 대입하게 됩니다. 이번경우처럼 {} 안의 코드가 단 한줄씩이라면 역시 다음처럼 생략할 수 있습니다.

 

if (a == 0)

a = 100;

else

a = 0;

 

 또 조건이 만족하지 않을때 if문을 중첩하여 사용할 수 있습니다.

 

if (조건1)

// 조건1이 만족할때 실행할 코드

}

else if (조건2)

{

// 조건2가 만족할때 실행할 코드

}

else

{

// 조건2가 만족하지 않을때 실행할 코드

}

 

 아래 예를 봅시다.

 

char a;

 

if (a == 'A')

printf("A 입니다.");

else if (a == 'B')

printf("B 입니다.");

else if (a == 'C')

printf("C 입니다.");

else

printf("A, B, C는 아닙니다.");

 

 다음의 예처럼 조건을 여러가지로 체크하여 프로그래밍할 수 있습니다.

 

 이렇게 if문을 사용하면 다양한 조건에 따라 각기 다른 코드를 실행하게 할 수가 있습니다. 거의 모든 프로그램에 쓰인다고 해도 될 정도로 매우 빈번하게 사용되기 때문에 매우 중요한 부분입니다. 또한 if문을 사용할때는 되도록이면 주석문을 넣어서, 체크하려고 하는 조건이 어떤 내용인지 적어두는게 애러 예방에 도움이 됩니다.

 

 ◆ switch문

 변수의 값에 따라 다른 동작을 하려면 때에 따라 if문 보다는 switch문이 더 유용할 수도 있씁니다.

 

switch(변수)

{

case 값1:

{

// 값1일때 실행할 코드

}

break;

 

case 값2:

{

// 값2일때 실행할 코드

}

break;

 

default:

{

// 위의 조건을 만족하지 않을때 실행할 코드

}

}

 

 변수의 값에 따라 case에 만족되는 코드를 실행합니다. 다음의 예를 봅시다.

 

char a;

...

switch(a)

{

case 'A':

{

printf("A 입니다.");

}

break;

 

case 'B':

{

printf("B 입니다.");

}

break;

 

case 'C':

{

printf("C 입니다.");

}

break;

 

default:

{

printf("A, B, C는 아닙니다.");

}

}

 

 위의 if문 마지막 예제를 switch문으로 바꾸어 보았습니다. switch문에 넣은 변수의 값에 따라 case문 아래의 블럭이 실행되고, break문을 만나면 switch문을 빠져나가게 됩니다. 만약 모든 case를 만족하지 못한다면 default 아래의 블럭을 실행합니다. 만약 default 부분이 필요가 없는 경우는 생략도 가능합니다.

 

 여기서 'break'라는 것이 나오는데, 블럭을 빠져나가는 역할을 하는 제어문입니다. 이 '제어문'에 대해서는 다음에 자세히 알아보도록 합시다.

 

 

 

 2. 조건문의 적용

 

 위에서 두가지 조건문에 대해 알아보았습니다. 이번에도 성적관리 프로그램에 조건문을 추가해보도록 하겠습니다. 지난시간에 입력받지 않았던 '등급'에 관한 변수 grade를 평균값을 이용해 자동으로 넣도록 하고 출력해봅시다. 아래의 코드를 평균값을 구하는 식 바로 아래에 넣어봅시다.

 

// 평균값에 대응하는 grade값 구하기

if (scoreAverage >= 90)

grade = 'A';

else if (scoreAverage >= 80)

grade = 'B';

else if (scoreAverage >= 70)

grade = 'C';

else if (scoreAverage >= 60)

grade = 'D';

else

grade = 'F';

 

 처음 if문에서 평균값이 90 이상이면 등급을 A로 주고, 그것을 만족하지 못하면 80점 이상인지를 판단하여 조건에 맞으면 B를 넣습니다. 그런식으로 조건을 검사하다가 모두 만족하지 않을 경우 평가 변수에 F를 넣습니다.

 

 출력문도 아래와 같이 빨간부분을 추가해줍니다.

 

// 화면 출력

printf("%s의 성적\n", name);

printf("등급 : %c\n", grade);

printf("국어 점수 : %d\n", scoreKOR);

printf("수학 점수 : %d\n", scoreMAT);

printf("영어 점수 : %d\n", scoreENG);

printf("과학 점수 : %d\n", scoreSCI);

printf("총점 : %d\n평균 : %.1f\n", scoreTotal, scoreAverage);

printf("평가 : %s\n", comment);

 

 작동을 잘 하는지 실행을 해 봅시다.

  


 평균값이 80점 이상이므로 등급에 B가 들어간 것을 볼 수 있습니다. 다시한번 점수를 낮게 입력해봅시다.

 


 평균값이 60점 미만이므로 등급에 F가 들어간 것을 볼 수 있습니다.

 

 다음은 이번시간에 수정한 최종 소스코드입니다.

 

#include <stdio.h> 

 

void main()

{

char name[20] = "홍길동";   // 이름

char grade = 'B';                 // 등급

int scoreKOR = 80;              // 국어점수

int scoreMAT = 75;              // 수학점수

int scoreENG = 86;              // 영어점수

int scoreSCI = 92;               // 과학점수

char comment[200];        // 평가

 

int scoreTotal = 0;            // 총점

float scoreAverage = 0.0F;       // 평균

 

scanf_s("%s", name, sizeof(name));

printf("국어점수를 입력하세요 : ");

scanf_s("%d", &scoreKOR);

printf("수학점수를 입력하세요 : ");

scanf_s("%d", &scoreMAT);

printf("영어점수를 입력하세요 : ");

scanf_s("%d", &scoreENG);

printf("과학점수를 입력하세요 : ");

scanf_s("%d", &scoreSCI);

 

getchar();

printf("평가를 입력하세요 : ");

gets_s(comment, sizeof(comment));

 

// 총점 계산

scoreTotal = scoreKOR + scoreMAT + scoreENG + scoreSCI;

// 평균 계산

scoreAverage = (float) scoreTotal / 4;

 

// 평균값에 대응하는 등급 구하기

if (scoreAverage >= 90)

grade = 'A';

else if (scoreAverage >= 80)

grade = 'B';

else if (scoreAverage >= 70)

grade = 'C';

else if (scoreAverage >= 60)

grade = 'D';

else

grade = 'F';

 

// 화면 출력

printf("%s의 성적\n", name);

printf("등급 : %c\n", grade);

printf("국어 점수 : %d\n", scoreKOR);

printf("수학 점수 : %d\n", scoreMAT);

printf("영어 점수 : %d\n", scoreENG);

printf("과학 점수 : %d\n", scoreSCI);

printf("총점 : %d\n평균 : %.1f\n", scoreTotal, scoreAverage);

printf("평가 : %s\n", comment);

}

 

 이처럼 조건문을 사용하면 프로그램의 흐름을 바꿀 수 있습니다. 다음 시간에는 반복된 작업을 수행하는 '반복문'에 대해 알아보도록 하겠습니다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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