이번 장에서 학습할 내용
조건문
일상 생활에서의 조건문의 예
• 만약 비가 오지 않으면 테니스를 친다.
• 만약 결석이 1/3이상이면 F학점을 받는다.
• 만약 시간이 없는 경우에는 택시를 탄다.
• 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다.
• 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다.
if문
• 조건에 따라서 결정을 내리는 경우에 사용
if문
if문의 예
• if 문이 끝나면 if 문 다음 문장이 실행된다.
복합문
• 복합문(compound statement)
• 중괄호를 사용하여 문장들을 그룹핑하는 것,
• 블록(block)이라고도 한다.
• 단일문 대신 들어 갈 수 있다.
예제
예제
중간 점검
1. 중괄호로 묶은 여러 개의 문장을 무엇이라고 하는가?
2. C에서 참과 거짓은 어떤 정수로 표시되는가?
3. if 문안의 조건식으로 많이 사용되는 수식의 종류는 무엇인가?
4. if 문이 끝나면 어떤 문장이 실행되는가?
5. 조건에 따라서 실행되어야 하는 문장이 두개 이상이면 어떻게 하여야 하는가?
if-else 문
if-else 문
if-else 문
복잡한 조건식도 가능
• 학점 결정 코드
if( score >= 80 && score < 90 )
grade = 'B';
• 공백 문자들의 개수를 세는 코드
if( ch == ‘ ‘ || ch == ‘\n’ || ch == ‘\t’ )
white_space++;
예제 #1
예제 #2
예제 #3
중간 점검
1. 변수 n의 값이 100보다 크거나 같으면 “large", 100보다 작으면 ”small"을 출력하는 if-else 문을 작성하라.
중첩 if
• if 문에 다시 if 문이 포함
중첩 if
if와 else의 매칭 문제
중첩 if
연속적인 if
연속적인 if
학점 결정 예제
문자 분류 예제
실습: 이차 방정식 y=ax2+bx+c
실행 결과
알고리즘
사용자로부터 a, b, c를 읽는다.
if a == 0이면
일차 방정식의 근을 구한다.
실근을 출력한다.
else
판별식을 계산한다.
if 판별식 >= 0
근의 공식을 이용하여 실근을 구한다.
실근을 출력한다.
else
실근은 없다는 메시지 출력
소스
소스
실습: 산술 계산기
소스
소스
중간 점검
n의 값이 각각 -1, 0, 5인 경우에 다음의 코드에 의하여 생성되는 출력은 무엇인가?
2. 컵의 사이즈를 받아서 100ml미만은 small, 100ml이상 200ml미만은 medium, 200ml 이상은 large라고 출력하는 연속적인 if-else 문을 작성하시오.
switch 문
• 여러 가지 경우 중에서 하나를 선택하는데 사용
switch 문의 순서도
예제
int main(void)
{
int number;
printf("정수를 입력하시오:");
scanf("%d", &number);
switch(number) {
case 0:
printf("없음\n");
break ;
case 1:
printf("하나\n");
break ;
case 2:
printf("둘\n");
break ;
default:
printf("많음\n");
break;
}
}
사용자가 1을 입력하는 경우
break가 생략되는 경우
의도적인 break생략
switch(number)
{
case 0:
printf("없음\n");
break;
case 1:
printf("하나\n");
break;
case 2:
case 3:
printf("두서너개\n");
break;
default:
printf("많음\n");
break;
}
default 문
switch 문과 if-else 문
switch 문에서 주의할 점
switch(number)
{
case x: // 변수는 사용할 수 없다.
printf("x와 일치합니다. ");
break;
case (x+2): // 변수가 들어간 수식은 사용할 수 없다.
printf("수식과 일치합니다. ");
break;
case 0.001: // 실수는 사용할 수 없다.
printf("실수");
break;
case “001”: // 문자열은 사용할 수 없다.
printf("문자열");
break;
}
예제
// 달의 일수를 계산하는 프로그램
#include <stdio.h>
int main(void)
{
int month, days;
printf("달을 입력하시오: ");
scanf("%d", &month);
예제
switch(month)
{
case 2:
days = 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
printf("%d월의 일수는 %d입니다.\n", month, days);
return 0;
}
실습: 산술 계산기
#include <stdio.h>
int main(void)
{
char op;
int x, y, result;
printf("수식을 입력하시오");
printf("(예: 2 + 5) ");
printf(">>");
scanf("%d %c %d", &x, &op, &y);
실습: 산술 계산기
switch(op)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
…
default:
printf("지원되지 않는 연산자입니다. ");
break;
}
printf("%d %c %d = %d ", x, op, y, result);
return 0;
}
도전문제
• 위의 프로그램은 단순히 산술 연산자만을 처리한다. 비트 연산자(&, |, ^)을 추가하여 보자. 비트 연산자인 경우에는 16진수로 입력값과 결과값을 출력하여 보자.
• 복합연산자(+=,-=,*=,/=,%=,…)와 쉬프트 연산자(<<, >>)를 구현하여 보아라(op가 두 문자).
중간 점검
1. case 절에서 break 문을 생략하면 어떻게 되는가?
2. 변수 fruit의 값이 각각 1, 2, 5일 때, 다음의 코드의 출력을 쓰시오.
switch(fruit) {
case 1:
printf("사과“);
break;
case 2:
printf(“배“);
case 3:
printf("바나나“);
break;
default:
printf(“과일“);
break;
}
Goto문
• 조건없이 어떤 위치로 점프
• 사용하지 않는 것이 좋음
예제
// 구구단출력프로그램
#include <stdio.h>
int main(void)
{
int i = 1;
loop:
printf("%d * %d = %d \n", 3, i, 3 * i);
i++;
if( i == 10 ) goto end;
goto loop;
end:
return 0;
'myPPT' 카테고리의 다른 글
와인을 결정하는 요소 (0) | 2014.07.19 |
---|---|
선형대수학: 행렬, 벡터, 행렬식, 선형연립방정식 (5) | 2014.07.15 |
수치해석(Numerical Analysis) - 선형연립방정식 (0) | 2014.07.11 |
광물리학 (0) | 2014.07.09 |
재가 노인복지서비스 (0) | 2014.07.05 |