"/>

프로그래밍 기초-C언어 배우기(조건문).8

-처음부터 배우기-

if

if명령은 ‘만약’이라는 뜻으로 조건을 만족하면 특정 명령을 실행하고, 조건을 만족하지 않으면 아무 명령도 실행하지 않는 것과 같이 프로그램의 흐름을 제어하는 명령이다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  int main()
3  {
4  int a, b, book = 15000;
5  printf(“책의 가격은 15000원 입니다.\n”);
6  printf(“당신이 가지고 있는 돈은 얼마인가요?:”);
7  scanf(“%d”, &a);
8  if (a >= book)
9  {
10 b = a – book;
11 printf(“책을 성공적으로 구입했습니다. 이제 남은 돈은 %d입니다.\n”, b);
12 }
13 }

실행결과

위 프로그램을 실행아면 책의 가격이 15000원이라고 알려주며 금액을 입력하면 가격을 비교하여 출력한다.

  • 위의 프로그램을 직접 해석해 보자.

if문의 기본 형식

if (조건) // if 조건 뒤에는 ;(세미콜론을 붙이면 안 됨)
{
조건이 참일 경우 실행되는 명령문;
}

조건 설정

if는 조건에 따라 흐름을 제어하므로 조건 설정이 중요하다.
위의 프로그램에서는 ‘내가 책을 살만한 충분한 돈이 있다’라는 조건 표현이 중요하다.

즉 ‘내가 가진 돈 >= 책의 가격’ 으로 조건을 설정할 수 있다.

위의 프로그램의 9~12행은 오로지 8행의 조건이 참일 경우 실행되는 명령문이다. 실행한 내용은 책을 구입하였다는 문구 출력과 책을 사고 남은 돈의 출력이다. 15000원 이상의 금액을 입력하면 9~12행의 명령이 실행되고, 그 미만의 금액이 입력되면 아무것도 실행되지 않는다.

그럼 만약 15000원 보다 돈이 부족할 경우에는 어떻게 해야 될까?

if ~ else

if ~ else는 조건이 만족하는 경우(참) if 다음 부분이 실행되고, 만족하지 않을 경우(거짓) else 이후 부분이 실행된다. 조건이 복잡한 경우에는 if문을 중첩하여 사용할 수도 있다.

if ~ else를 사용하면 조건의 참이나 거짓에 따라 해당 명령이 실행된다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  int main()
3  {
4  int a,b,book=15000;
5  printf(“책의 가격은 15000원 입니다.\n”);
6  printf(“당신이 가지고 있는 돈은 얼마인가요?:”);
7  scanf(“%d”, &a);
8  if (a >= book)
9  {
10 b = a – book;
11 printf(“책을 성공적으로 구입했습니다. 이제 남은 돈은 %d입니다.\n”, b);
12 }
13 else
14 printf(“책을 구입하지 못합니다.”);
15 }

실행결과

위 프로그램을 실행하면 15000미만이면 “책을 구입하지 못합니다.”를 출력하고 15000이상이면 정상적으로 출력된다.

중첩 if문

아주 복잡한 조건을 처리해야 하는 경우, if문을 여러 번 중첩해서 사용할 수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  int main()
3  {
4  int score1, score2;
5  printf(“수학 점수를 입력하세요 :”);
6  scanf(“%d”, &score1);
7  printf(“영어 점수를 입력하세요 :”);
8  scanf(“%d”, &score2);
9  if (score1>=70)
10 {
11 if (score2>=70)
12 printf(“축하합니다. 합격입니다.”);
13 else
14 printf(“불합격”);
15 }
16 else
17 printf(“불합격”);
18 }

실행결과

위 프로그램을 실행하면 두 과목의 점수를 입력하고 비교하여 모두 70점 이상이면 합격, 한 과목이라도 70점 미만이면 불합격을 출력한다.

if안의 또다른 if는 조건 상황에 따라 필용한 만큼 만들어서 사용할수 있으며, else 안에서도 if의 사용이 가능하다.

조건 처리순서

9행의 if조건인 수학의 점수가 60점 이상이면 11행의 if를 실행하고 수학의 점수가 60점 미만이면 16행의 else를 실행하게 된다. 왜냐하면, 수학이 60미만이면 영어가 60점 이상이든 아니든 상관 없기 때문이다.

9행의 if 조건이 만족되면 수학의 점수가 60점 이상이라는 의미이므로 11~14행에서 나머지 과목의 점수를 확인한다.

11행에서 if 조건에 따라 영어의 점수가 60점 이상이면 두 과목 모두 60점 이상이므로 합격을 출력하고 조건을 만족하지 못하면 영어의 점수가 60점 미만이므로 13행이 실행되어 불합격이 출력된다.

논리 연산자나 다른 연산자 조건을 더 간단하게 만들 수 있다.

예시
if (score1 >= 60 && score2 >= 60)
printf(“축하합니다. 합격입니다.”);
else
printf(“불합격”);

if ~ else if ~ else

if ~ else는 하나의 조건만 참인지 거짓인지를 구별하는 2가지 결과를 나타내지만, if ~ else는 조건에 다른 결과가 3가지 이상 나타내는 경우에 사용한다.

한 과목의 점수를 입력받아 여러 개의 조건을 이용하여 ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ 와 같이 점수별로 결과를 출력할 수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int score;
5  printf(“수학 점수를 입력하세요 :”);
6  scanf(“%d”, &score);
7  if (score >= 90) printf(“A”);
8  else if (score >= 80) printf(“B”);
9  else if (score >= 70) printf(“C”);
10 else if (score >= 60) printf(“D”);
11 else if (score >= 50) printf(“E”);
12 else printf(“F”);
13 }

실행결과

위 프로그램을 실행하면 과목의 점수에 따라 결과를 출력한다.

  • 4행은 score 이라는 변수를 선언했다.
  • 5~6행에서 입력에 대한 안내 문구를 출력하고, score에 점수를 입력 받았다.
  • 7~11행은 if ~ else if ~ else문 으로 if 다음에 else if로 입력했다.

if ~ else if ~ else문의 형식

if (조건 1){
조건 1이 참일 경우 실행되는 명령
}
else if (조건 2){
조건 2가 참일경우 실행되는 명령
}
::
else{
위의 모든 조건이 맞지 않을 경우 실행되는 명령
}

조건 처리순서

7행에서 입력된 점수가 70점이라면 if 조건에 거짓이므로 8행의 else if 조건을 확인하고 8행의 조건도 거짓이면 9행의 조건을 확인하는 식으로 순차적으로 내려간다.
9행의 조건에서는 참이 되므로 해당 printf문을 실행하고 그아래의 else if는 실행하지 않고 전체 if문을 종료한다.

switch ~ case

switch ~ case는 if ~ else if ~ else와 비슷한 기능을 하는 구조로 지정된 변수의 값에 따라 다른 명령을 실행할 수 있게 한다.
아래의 코드를 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  char word;
5  printf(“영어 소문자를 입력하세요 :”);
6  scanf(“%c”, &word);
7  switch (word)
8  {
9  case ‘a’:printf(“모음”);break;
10 case ‘e’:printf(“모음”);break;
11 case ‘i’:printf(“모음”);break;
12 case ‘o’:printf(“모음”);break;
13 case ‘u’:printf(“모음”);break;
14 default:printf(“자음”);
15 }
16 }

실행 결과

위 프로그램을 실행하면 a,e,i,o,u 를 제외한 문자는 ‘자음’을 출력한다.

switch ~ case문의 형식

switch (조건식){
case 값 1: 조건식이 값 1일 때 실행되는 명령문; break;
case 값 2: 조건식이 값 2일 때 실행되는 명령문; break;
::
default:조건식의 값이 그외 모든 경우일 때 실행되는 명령문;
}

  • 7행의 switch(word)는 word의 변수값에 따라 결과를 나타내겠다는 뜻이다. 즉, word의 값에 따라 여러가지의 다른 결과를 출력한다.
  • 9~13행에서 case 다음에 오는 값이 7행의 word의 값과 같다면 해당 case의 명령이 실행되는데, 콜론( : )이후의 명령이 실행된다.
  • braek는 switch ~ case명령을 빠져나가는 종료 명령이다.

braek의 역활

break는 case를 처리하는 부분에서 위에서 아래로 실행하던 흐름을 멈추고 switch ~ case를 빠져나갈때 사용된다.
실제로 9~13행의 break명령을 제거하고 실행한 후, 모음’u’을 입력하면 아래와 같은 결과를 볼 수 있다.

이것은 13행의 case가 실행되면서 ‘모음’이 출력되고 switch를 종료하는 명령이 없어 연달아 14행의 default가 실행되므로 ‘자음’더 출력된 것이다.
break는 default 문장을 만나면 무조건 실행된다.

switch ~ case문의 변형

case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:printf(“모음”);break;
default:printf(“자음”);

위의 코드와 같이 같은 명령을 실행할 때 더 간단하게 만들 수 있다.

if와 switch의 차이점

if ~else와 switch ~ case는 같은 조건문으로서 개념이 비슷하지만 아래와 같은 차이가 있다.

  • if문은 모든 비교 연산이 가능하지만 switch문은 값에 의해서만 다른 처리가 가능하다.
  • if문은 블록( {} )으로 영역을 구분하지만 switch문은 case와 break로 영역을 구분한다.
  • if문은 else문으로 switch문은 default문으로 그 외 나머지 경우를 처리한다,
  • if문은 모든 변수형을 사용할 수 있지만, switch문은 실수형을 사용할수 없다.

-코드업 조건문 문제 풀기-

만약 다 풀었다면?

-이어서 반복문 공부하기-

 

댓글 남기기

Scroll Up