20140314 (for, if, 삼항연산자)
20일차
---------------
for 문
---------------
- 반복문이다.
for ( 초기식 ; 조건 ; 반복식 )
{
명령
}
이런 형태이고 재미있는 것은 초기식과 반복식에
다중으로, 생략으로 선언이 가능하다.
ex) 예제 소스
#include <stdio.h>
int main()
{
int iNum1;
int iNum2;
int iNum3;
// - 5 명령이 한 줄일 경우 중괄호 생략 가능
for(iNum1 = 0, iNum2 = 0 ; 5 > iNum1 ; iNum1 = iNum1 + 1, iNum2 = iNum2 + 2)
printf("iNum1 = %d\tiNum2 = %d \n", iNum1, iNum2);
// - 4
iNum1 = 0;
iNum2 = 0;
while( 5 > iNum1 )
{
printf("iNum1 = %d\tiNum2 = %d \n", iNum1, iNum2);
iNum1 = iNum1 + 1;
iNum2 = iNum2 + 2;
}
// - 3
iNum1 = 0;
iNum2 = 0;
for( ; 5 > iNum1 ; )
{
printf("iNum1 = %d\tiNum2 = %d \n", iNum1, iNum2);
iNum1 = iNum1 + 1;
iNum2 = iNum2 + 2;
}
// - 2
iNum2 = 0;
for(iNum1 = 0 ; 5 > iNum1 ; iNum1 = iNum1 + 1)
{
printf("iNum1 = %d\tiNum2 = %d \n", iNum1, iNum2);
iNum2 = iNum2 + 2;
}
// - 1
for(iNum1 = 0, iNum2 = 0 ; 5 > iNum1 ; iNum1 = iNum1 + 1, iNum2 = iNum2 + 2)
{
printf("iNum1 = %d\tiNum2 = %d \n", iNum1, iNum2);
}
return 0;
}
1, 2, 3, 4, 5번은 다 같은 식이다.
int main()
{
unsigned int uiCnt = 0;
// while(1)
for( ; ; ) // 조건을 생략하면 무한루프가 된다
{
printf("%u \n", uiCnt); // %u = unsigned int
++uiCnt;
}
return 0;
}
또 while문과 같이 프로그래머의 의도하에 위와 같이 무한루프도 가능하다.
--------------------
if문 (흐름의 분기)
--------------------
- 흐름을 분기하는 제어문
if ( 조건 )
{ A }
이런 형태이고 조건이 참이면 괄호의 A를 실행하고
거짓이면 그냥 넘어간다.
그리고 밑에 한 명령만 할 경우 괄호를 생략 가능한데
가독성에 도움을 주기 위해 왠만하면 붙여주자.
ex)예제 소스
#include <stdio.h>
int main()
{
int iOpt;
double dNum1;
double dNum2;
printf("1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 \n");
printf(" : ");
scanf("%d", &iOpt);
printf("연산하실 두 숫자 입력 \n : ");
scanf("%lf %lf", &dNum1, &dNum2);
if(1 == iOpt)
printf("%.3lf + %.3lf = %.3lf \n", dNum1, dNum2, dNum1 + dNum2);
if(2 == iOpt)
printf("%.3lf + %.3lf = %.3lf \n", dNum1, dNum2, dNum1 - dNum2);
if(3 == iOpt)
printf("%.3lf + %.3lf = %.3lf \n", dNum1, dNum2, dNum1 * dNum2);
if(4 == iOpt)
printf("%.3lf + %.3lf = %.3lf \n", dNum1, dNum2, dNum1 / dNum2);
return 0;
}
- if ( 조건)
{ A }
else
{ B }
이것은 앞서 배웠던 if문에 else가 붙었는데
조건이 참일 경우 A ,
조건이 거짓일 경우 B 를 실행한다.
ex) 예제 소스
#include <stdio.h>
int main()
{
int iNum;
printf("숫자를 입력하세요 : ");
scanf("%d", &iNum);
if(0 < iNum)
{
printf("%d 는 0보다 큽니다 \n", iNum);
}
else
{
printf("%d 는 0보다 작습니다 \n", iNum);
}
return 0;
}
- if ( 조건 )
{ A }
else if ( 조건 )
{ B }
else
{ C }
이건 조건이 여러개일 경우 위와 같이 갔다 붙이면 된다.
ex) 예제 소스
#include <stdio.h>
int main()
{
int iOpt;
double dNum1;
double dNum2;
printf("1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 \n : ");
scanf("%d", &iOpt);
printf("두 개의 실수 입력 : ");
scanf("%lf %lf", &dNum1, &dNum2);
if(1 == iOpt)
{
printf("%.3lf + %.3lf = %.3lf \n", dNum1, dNum2, dNum1 + dNum2);
}
else if(2 == iOpt)
{
printf("%.3lf - %.3lf = %.3lf \n", dNum1, dNum2, dNum1 - dNum2);
}
else if(3 == iOpt)
{
printf("%.3lf * %.3lf = %.3lf \n", dNum1, dNum2, dNum1 * dNum2);
}
else if(4 == iOpt)
{
printf("%.3lf / %.3lf = %.3lf \n", dNum1, dNum2, dNum1 / dNum2);
}
else
{
printf("Error!! \n");
}
return 0;
}
이것 같은 경우 처음 if문 예제소스와 같은 기능인데
처음 if문의 경우 일일이 if문 조건을 만날 때마다 다 확인하고
넘어가지만
else if문의 경우 참인 조건을 만나면 명령을 실행하고
한 방에 다 빠져나가버린다
그러니 if문을 여러개 쓰는 것 보다 효율이 좋다.
또한 조건을 넣을 때 가능하면 확률이 가장 높은 순서대로
위에서부터 나열해 오면 더 높은 효율을 볼 것이다.
--------------
삼항연산자
--------------
- 조건 ? A : B
if문과 똑같은 역할을 한다.
참이면 A
뻥이면 B
그냥 예제를 보자
ex) 예제 소스
#include <stdio.h>
int main()
{
int iNum;
printf("숫자를 입력하세요 \n :");
scanf("%d", &iNum);
/*
// if문을 쓴 경우
printf("입력하신 숫자는 100보다 ");
if(100 < iNum)
{
printf("큼");
}
else
{
printf("작습");
}
printf("니다. \n");
*/
// 삼항 연산자를 쓴 경우
printf("입력하신 숫자는 100보다 %s니다 \n", 100 < iNum ? "큼" : "작습" );
return 0;
}
if 문과 삼항연산자의 속도는 똑같다
다만 그 안에 들어가는 명령어에 따라
삼항연산자가 훨씬 좋은 효율을 낼 경우가 있다.
자주는 쓰지 말되 위와 같은 상황에만 쓸 것.....