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;

  while5 > 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 문과 삼항연산자의 속도는 똑같다

다만 그 안에 들어가는 명령어에 따라

삼항연산자가 훨씬 좋은 효율을 낼 경우가 있다.

자주는 쓰지 말되 위와 같은 상황에만 쓸 것.....

 

 

 

 

 

 

 

 

설정

트랙백

댓글