제 9장 흐름의 분기 - 2
● 조건 연산자(3(삼)항 연산자)
- if ~ else 문을 간결히 표현하는데 사용 될 수 있음.
※ tip: 간단하고 실용적이라 그냥 외우는 편이 좋습니다.
(조건) ? A : B
→ 조건이 '참'인 경우 A를 반환
→ 조건이 '거짓'인 경우 B를 반환
ex_1) int a = 3;
c = (a>0) ? 10 : 20;
// 만약에 a>0가 참인경우 c = 10 이다
// 만약에 a>0가 거짓이면 c = 20 이다.
// 결과적으로 3은 0보다 크므로 참이다,
// c 에는 10이 반환된다.
ex_2) c = (a>0) ? a*3+1 : a/3;
해석해보세요
예제)===============================================
#include <stdio.h>
int main()
{
int num;
char ch;
printf("정수 입력 : ");
scanf("%d", &num);
ch = (num < 0) ? '-': '+'; // num 값이 0보다 작으면 ch = '-'가되고
// num 값이 0보다 크면 ch = '+'가 되다.
(ch == '-')? printf("음수 \n"):printf("양수 \n");
// ch 가 '-'면 printf("음수\n")를 실행하고 그게 아니라면 printf("양수\n")가 실행된다.
printf("절대 값 : %d \n", (num<0) ? (-1)*num : num);
// num값이 음수(0보다 작으면)면 num*(-1)을 %d에 대입하고,
// 아니라면 그대로 num값이 %d에 대입된다.
return 0;
}
====================================================
● break 문(탈출문안에서 사용된다)
- 반복문을 나올때 사용(빠져나올때)
while(1)
{
if(num < 0)
break;
}
● continue : 나머지 부분을 건너뛰고 다시 루프반복
다시 조건검사를 하러 바로 간다.
whie(1)
{
if(x<100)
continue;
}
예제-break문)===============================================
#include <stdio.h>
int main()
{
int sum = 0;
int val = 0;
while(1) // for(;;)
{
sum = sum + val;// sum+=val;
if(sum>100) // sum값이 100보다 클때
break; // while(반복)문을 빠져나오겠다
val++; // val값이 1씩 증가.
}
printf("sum = %d \n", sum);
printf("val = %d \n", val);
return 0;
}
예제-continuek문)===============================================
#include <stdio.h>
int main(void)
{
int val;
puts("시작 ! ");
for(val=0; val < 10; val++) // val값이 0부터 1씩 증가하면서 9까지..(10번반복)
{ // tip : OR연산자(||) ; 두 조건중 하나만 '참'이어도 실행
if(val%2==0 || val%3 ==0) // val값이 2로 나누어 떨어지거나, 3으로 나누어떨어지면
continue; // 다시 반복설정 바로 점프한다. 즉, 밑에 printf 함수로 안내려감
printf("%d \n", val);
}
// 즉, 0~9까지 2, 3으로 나눠 떨어지는 수를 제외한 수를 출력한다.
// 2와 3의 배수
printf("끝 !");
return 0;
}
● switch~case문
- 수식(정수값)과 일치하는case문을 찾아서 실행
- if문과 달리 실행문이 여러개 있더라도 '{ }'으로 묶지 않음
- case뒤에는 break를 사용해 탈출조건을 만들어준다
- 만일 break문이 없으면 다음 case문이 실행된다
- 반드시, 정수값만 수식으로 입력받아 처리한다..
- 비교연산을 인자로 받을수가 없다.
- default : case에 만족된 값이 없을때 실행하는 수식문

- 우리가 레스토랑에 갔을때, 메뉴판을 보고 골라 선택하여
주문을 하게 됩니다.(즉, 메뉴번호를 선택하여, 그 메뉴를 정한다)
- 예제로 바로 들어가서 주석으로 설명 드릴게요
예제- switch-case 문)===============================================
#include <stdio.h>
int main()
{
int grade;
puts("학점판별프로그램입니다");
printf("점수를 입력하세요(0~100): ");
scanf("%d", &grade);
grade /= 10; // grade = grade % 10;
// grade 값은 0~10까지의 값이 들어간다.
switch(grade) // 정수 grade을 기준으로
{
case 10 : // 정수값이 10이면
// break문이 없으면 다음 case문이 실행된다
case 9 : // 정수값이 9이면
puts("학점은 A입니다"); // 실행
break; // break 문으로 switch문 전체를 빠져나온다
case 8 : // 정수값이 8이면
puts("학점은 B입니다");
break;
case 7 : //...
puts("학점은 C입니다");
break;
case 6 :
puts("학점은 D입니다");
break;
default :
puts("학점은 F입니다");
break; // default 에서는 break 생략가능
}
return 0;
}
예제- switch-case 문)===============================================
#include <stdio.h>
int main()
{
char ch;
printf("인사를 해볼까요? \n");
printf("다음 글자를 입력하세요 \n");
printf("아침(M), 점심(A), 저녁(E), 종료(Q) : ");
scanf("%c", &ch); // %c = 문자 하나를 입력받을때
switch(ch)
{
case 'M': // 하나의 문자이기에 ''를 해준다.
case 'm':
printf("Good Mornig~!\n");
break;
case 'A':
case 'a':
printf("Good Afternoon~!\n");
break;
case 'E':
case 'e':
printf("Good Evening~! \n");
break;
case 'Q':
case 'q':
printf("Quit Program! switch_case \n");
break;
default :
printf("input wrong word! \n");
}
return 0;
}
// 다음프로그램은 사용자의 입력방식에 따라서
// 프로그램을 유연성있게 하기위해서 break문의
// 적절한 사용을 예로 나타낸것입니다.
// 대/소문자 구분없이 프로그램이 영향을 받지 않게 만든것
if~else 문은 가독성을 떨어뜨리기때문에
필요에 따라서 적절히 구분해서 쓴다.
사실, 객관적으로도 구분하기가 switch문이 사용이 편하다
if~else문을 써도 상관은 없지만, 객관적인 입장을 추구해서
보기편하게, 즉, 가독성을 위해서 구분해서 쓰도록 한다.

● goto 문- 점프문
프로그램의 흐름을 복잡하게 한다.
되도록 사용마세요(스파게티코드가 되기쉽다)
goto AA;(이동할 위치)
...
...
...
AA;(이동할 위치로 돌아가게 한다)
왠만하면사용을 사용을 아예 하지마시요,
'프로그래밍 > C' 카테고리의 다른 글
제 12장 C언어의 핵심 함수 - 2 (0) | 2010.07.10 |
---|---|
제 11장 C언어의 핵심 함수 - 1 (0) | 2010.07.10 |
제 9장 조건에 따른 흐름의 분기 - 1 (0) | 2010.07.08 |
제 8장 여러형태의 반복문 (0) | 2010.07.08 |
제 7장 비트단위 연산과 상수, 기본자료형 (0) | 2010.07.08 |