'IF'에 해당되는 글 2건

Programming/C C++
1. if

if는 지정한 조건에 따라 해당 조건에 맞는 지점으로 분기하여 처리되는 제어문 입니다.

#include <stdio.h>

main()
{
  int i = 1;
 
  if (i==1)
   printf("i값은 1입니다.\n");
}


i가 1이면 Message를 출력합니다. i가 1이라는 조건은 if에서 괄호 안에 지정된 것입니다.


#include <stdio.h>

main()
{
  int i = 1;
 
  if (i==1){
    printf("i값은 1입니다.\n");
    printf("i값 확인 %d\n", i);
  }
}


또는

#include <stdio.h>

main()
{
  int i = 1;
 
  if (i==1)
 {
    printf("i값은 1입니다.\n");
    printf("i값 확인 %d\n", i);
  }
}


C언어의 제어문은 기본적으로 단 하나의 문장만을 제어범위에 포함합니다. 이때 제어문에 의해 처리되는 범위가 여러줄에 해당한다면 위와 같이 {와 }로 제어범위를 묶어줄 수 있습니다.


#include <stdio.h>

main()
{
  int i = 2;
 
  if (i==1){
    printf("i값은 1입니다.\n");
  }
  else
    printf("i값은 1이 아닙니다.\n");
}


if문에 지정한 조건이 부정일 경우 다른 처리가 필요할때는 else를 사용합니다.


#include <stdio.h>

main()
{
  int i = 2;
 
  if (i==1){
    printf("i값은 1입니다.\n");
  }
  else if(i==2)
    printf("i값은 2입니다.\n");
  else
    printf("i값은 1도 2도 아닙니다.\n");
}


else if를 통해 실행되는 조건을 별도로 지정할 수도 있습니다.


2. switch

조건에 따라 분기하여 처리하는 제어문입니다. if문은 조건에 다양한 형식을 지정할 수 있지만 switch에서 조건의 판단은 정수형태만 가능합니다.

#include <stdio.h>

main()
{
  int i=2;
 
  switch(i){
    case 1:
      printf("i값은 1입니다.\n");
      break;
    case 2:
      printf("i값은 2입니다.\n");
      break;
  }
}


switch에 정수형 값을 넣어 그 값이 어떤 값이냐에 따라 case문으로 분기하여 해당 내용을 처리하게 됩니다. 조건에는 정수형만 가능하므로 case의 분기값에 <, >를 사용하여 지정할 수 없으며 문자열또한 사용이 불가능합니다.

case는 분기값 다음에 반드시 : 문자가 있어야 하며 그 하위에 처리내용을 지정하는데 이때 switch문은 그 자체가 여러행으로 구성되므로 {와 }가 반드시 필요하지만 case 하위에는 처리해야할 문장이 여러행이라 하더라도 {와 }를 사용하지 않습니다.


#include <stdio.h>

main()
{
  int i=2;
 
  switch(i){
    case 1:
      printf("i값은 1입니다.\n");
    case 2:
      printf("i값은 2입니다.\n");
    case 3:
      printf("i값은 3입니다.\n");
 }
}


case에서 Break문을 쓰지않으면 해당 값에 맞는 case문으로 분기한 이후 그 다음 case문까지 모두 실행하게 됩니다. 이는 switch에서 분기 후 해당 분기점의 처리문만 실행한다는 개념이 아니라 분기한 지점부터 순차적으로 실행한다는 개념이 적용되기 때문입니다.

따라서 값에 맞는 case문의 내용만 처리하고자 한다면 case처리문의 마지막에 반드시 break;을 추가해야 합니다.


break문을 쓰지않아 분기점이후의 모든 case문까지 실행되었습니다.

#include <stdio.h>

main()
{
  int i=4;
 
  switch(i){
    case 1:
      printf("i값은 1입니다.\n");
      break;
    case 2:
      printf("i값은 2입니다.\n");
      break;
    case 3:
      printf("i값은 3입니다.\n");
      break;
    default:
      printf("이도저도 아니네...\n");
}


default는 조건이 case문에 해당하는 분기값에 어떤것도 해당되지 않는 경우 실행되는 부분입니다.


#include <stdio.h>

main()
{
  int i=3;
 
  switch(i){
    case 1:
      printf("i값은 1입니다.\n");
      break;
    case 2:
    case 3:
    case 4:
      printf("i값은 2또는 3또는 4입니다.\n");
      break;
    case 5:
      printf("i값은 5입니다.\n");
      break;
    default:
      printf("이도저도 아니네...\n");
   }
}

case문을 중첩하여 분기값을 여러개 지정할 수도 있습니다.


3. for

for는 지정한 횟수만큼 반복처리를 수행합니다.

#include <stdio.h>

main()
{
  int i = 0;
 
  for (i=1;i<6;i++)
    printf("현재 i값은 %d\n", i);
}


for에서 반복되는 조건은 (초기값;반복조건;처리값) 형태로 지정합니다. 예제에서의 조건은 처음 i값을 1로 하고 i가 6이하이면(i가 6이하일때까지가 아닙니다.!) i를 1씩 증가하면서 반복하도록 하고 있습니다.


#include <stdio.h>

main()
{
  int i = 0;
 
  for (i=1;i<6;i++){
    printf("현재 i값은 %d\n", i);
    printf("i값을 1씩 증가합니다.\n");
 }
}


for문도 제어하고자 하는 문장이 여러행이면 {와 }로 제어범위를 묶어줄 수 있습니다.


#include <stdio.h>

main()
{
  int i = 0;
 
  for (i=1;i<6;i++){
    printf("현재 i값은 %d\n", i);
  }
 
  printf("-----------------------\n");
 
  for (i=5;i>0;i--){
    printf("현재 i값은 %d\n", i);
  }
}


for의 조건식에서 처리값은 증가뿐 아니라 감소도 지정할 수 있습니다.


#include <stdio.h>

main()
{
  for (;;){
  }
}


아무런 조건도 지정하지 않으면 무한대로 반복합니다.

4. while

while은 주어진 조건만 만족하면 계속적으로 반복하는 제어문 입니다.

#include <stdio.h>

main()
{
  int i = 0;
 
  while(i<5){
    printf("i가 5보다 작으면 반복합니다.\n");
   
    ++i;
  }
}


while은 조건이 부정이 될때까지 계속 반복합니다.(단, 동작하기전 주어진 조건이 참인가를 먼저 검사하게 되므로 조건이 처음부터 부정일경우에는 while문 자체가 단 한차례도 수행되지 않을 수 있습니다.)


#include <stdio.h>

main()
{
  while(1){
    }
}


조건을 위와같이 지정하면 while문은 무한대로 반복합니다.

5. do-while

while은 시작하기 처음부터 '참/거짓'을 판단하지만 do-while은 일단 실행한뒤 계속 반복할지에 대한 조건을 판단합니다.

#include <stdio.h>

main()
{
  int i=0;
 
  do{
    ++i;
   
    printf("i값 %d\n", i);
  }while(i<2);
}


do에 의해 처음 반복문을 실행한 후 while에서 괄호안의 조건을 확인하고 반복문을 수행할지 판단합니다.


주의:
C의 제어문과 반복문은 문장이 아니므로 끝에 ;문자를 추가하지 않지만 do-while문에서는 while끝에 반드시 ;가 있어야 합니다.

6. break

break는 반복문에서 처리를 중단하는 용도로 많이 쓰입니다.

#include <stdio.h>

main()
{
  int i=0;
 
  for(i=0;i<5;i++){
    printf("for i값 %d\n");
   
    if (i==2)
      break;
  }
 
  i = 0;
 
  while(i<5){
    printf("while i값 %d\n");
   
    i += 1;
   
    if (i==4)
      break;
  }
}


for문에서는 i가 2가되면 if 조건에 의해 break;가 실행되고 while문에서는 i가 4일때 break;가 실행되어 반복문의 실행을 중지하도록 하고 있습니다.


#include <stdio.h>

main()
{
  int i=0;
  int j=0;
 
  for(i=0;i<3;i++){
    printf("i값 %d\n", i);
   
    for(j=1;j<3;j++)
      if (j==2)
        break;
       
      printf("i값 %d과 j값 %d\n", i, j);
  }
}


만일 반복문이 중첩되어 사용되는 경우에는 break가 사용된 반복문만 중지됩니다.(모든 반복문에 영향을 주지는 않습니다.)


7. continue

break는 반복문 실행을 완전히 중단시키는 역활을 하지만 continue는 단 한번만 중단시키고 실행을 계속 진행하게 합니다.

#include <stdio.h>

main()
{
  int i=0;
 
  for(i=0;i<=10;i++){
    if (i==7)
      continue;
    
    printf("i값 %d\n", i);
  }
}


i가 7일때 continue로 인해 반복문 실행을 건너뜁니다.


8. goto

goto는 program실행(처리)흐름을 다른곳으로 jump하여 동작하도록 하는 제어문으로서 jump할 지역은 : 문자를 통해 label표시합니다.

#include <stdio.h>

main()
{
  int i=0;
 
  for(i=0;i<=10;i++){
    if (i==7)
      goto jump;
    
    printf("i값 %d\n", i);
  }
 
jump:
  printf("i는 7입니다.\n");
}


i값이 7이면 goto에 의해 Program실행이 jump: 이하 부분으로 이동합니다.


만일 Program이 단일 함수가 아닌 여러개의 함수로 구성될 경우 함수끼리 jump하려면 setjump()함수를 사용해야 합니다.

#include <stdio.h>
#include <setjmp.h>

jmp_buf jump;

func()
{
    longjmp(jump, 2);
}

main()
{
    int i;
    i = setjmp(jump);
   
    if (i == 0){
      printf("i값 : %d\n", i);
      func();
      return;
    }
    else{
      printf("i값 : %d\n", i);
    }
}


먼저 setjmp()에서는 현재 setjmp()가 선언된 위치의 정보를 jump라는 특수한 형태의 변수에 저장합니다.(여기서 사용되는 jump는 jmp_buf로 선언하며 이 정의는 setjmp.h header file안에 선언되어 있습니다.)

setjmp()가 호출되면 되돌아와야할 정보를 jump에 저장하는데 이때는 일반적으로 0값이 반환됩니다. 이때 if문에 의해 0인지를 판단하고 0이면 func()함수를 호출하는 것입니다.

func()함수안에서는 longjmp()함수가 사용되었는데 이 함수에 의해 jump에서 가리키고 있는 위치(main에서 setjmp()위치)로 jump하게 되며 이때 인수로 2라는 값을 넘겨주면서 결국 else이하 부분을 수행하게 되는 것입니다.

'Programming > C C++' 카테고리의 다른 글

[C, C++] 상수(숫자, 문자, 문자열, 열거형) 정의및 사용  (0) 2011.02.09
[C, C++] 연산자  (0) 2011.02.08
[C, C++] 제어문  (0) 2011.02.01
[C, C++] 공용체  (0) 2010.09.27
[C, C++] Volatile  (0) 2010.09.15
[C, C++] File 다루기  (0) 2010.08.13
0 0
Programming/Microsoft SQL Server
1. Begin/End

연관된 여러 Query를 그룹화 합니다. 이는 비슷하거나 같은 목적별로 작동하는 Query를 묶어 관리를 용이하게 합니다.

Begin
     Select * From HumanResources.Department;
     Select * From HumanResources.Employee;
End

2. While

조건에 따라 Query를 반복 실행합니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


정수형 변수  @i를 선언하고 초기값을 1로 해준 후 @i값이 5와 같거나 미만인 경우에만 Begin/End 사이의 Query를 수행하도록 합니다.


3. Continue

Continue를 While문에 포함시키면 해당 구문이 들어간 위치이하의 Query실행을 건너뛸 수 있습니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 If (@i = 4)
 Begin
  Set @i = @i + 1;
  Continue;
 End
 
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


정수형 변수 @i를 선언하고 초기값을 1로 하였습니다. 이때 @i값이 5와 같거나 미만인 경우에만 Begin/End 사이의 Query를 수행하도록 합니다.

단, If문을 통하여 @i가 4인 경우에는 Continue문으로 실행을 건너 뛰도록 합니다.


4. Break

Break를 While에 포함시키면 해당 구문이 들어간 위치이하의 Query실행을 취소할 수 있습니다.

Declare @i Int;
Set @i = 1

While(@i <= 5)
Begin
 If (@i = 4)
 Begin
  Set @i = @i + 1;
  Break;
 End
 
 Select *
 From HumanResources.Department
 Where DepartmentID = @i;
 
 Set @i = @i + 1;
End


If문에서 Continue대신 Break문을 삽입하였습니다. Break는 재실행 없이 While문 전체를 취소합니다.


5. Waitfor

지정한 특정시간에 또는 해당 시간만큼 대기한 후 Query를 실행합니다.

Waitfor Delay '00:00:05'
Begin
 Select * From HumanResources.Department;
End

약 5초간 대기한 후 Query를 실행합니다.


실행 결과를 보면 Query실행 시간이 00:00:05 라고 표시되어 있음을 확인할 수 있습니다.

Waitfor Time '19:15:00';
Begin
 Select * From HumanResources.Department;
End

오후 07시 15분이 되면 Query를 실행합니다.


6. Return

Query의 실행을 종료합니다. 숫자나 문자열을 인수로 지정하면 해당 값을 반환값으로 얻을 수 있습니다.

Select * From HumanResources.Department;
Return;
Select * From HumanResources.Employee;

Return이하 Query문은 실행하지 않고 종료합니다. (또 다른 종료 구문인 Break는 While등의 반복문 안에서만 유효합니다.)


7. IF

Query수행에 따른 조건을 지정할 수 있습니다.

Declare @i Int;
Set @i = 2;

If (@i = 1)
Begin
 Select * From HumanResources.Department;
End
Else If (@i = 2)
Begin
 Select * From HumanResources.Employee;
End
Else
Begin
 Select * From HumanResources.EmployeeDepartmentHistory;
End


변수 @i값에 따라 1이면 Select * From HumanResources.Department문을 2면 Select * From HumanResources.Employee문을 그외 다른 값이면 Select * From HumanResources.EmployeeDepartmentHistory문을 실행합니다.

▶ Set을 통해 2의 값을 넣었으므로 If문의 조건에 따라 Select * From HumanResources.Employee문이 수행되었습니다.

조건지정에서는 처음 If문과 그 다음 Else If문을 통하여 각기 다른 값에 따라 처리를 달리할 수 있습니다. 또한 If와 그 외 모든 Else If의 조건에 부합하지 않을 경우에는 Else문을 통하여 별도의 처리를 지정할 수도 있습니다.

8. Goto

Query수행에 대한 분기 명령으로 원하는 지점부터 Query수행을 지시할 수 있습니다.

Declare @i Int;
Set @i = 3;

If (@i = 1)
Begin
 Goto Squery_rtn1;
End
Else If (@i = 2)
Begin
 Goto Squery_rtn2;
End
Else
Begin
 Goto Squery_rtn3;
End

Squery_rtn1:
Begin
 Select * From HumanResources.Department;
End
Return;

Squery_rtn2:
Begin
 Select * From HumanResources.Employee;
End
Return;

Squery_rtn3:
Begin
 Select * From HumanResources.EmployeeDepartmentHistory;
End
Return;


변수 @i값에 따라 Query를 수행할 분기점이 달라지도록 하였습니다.(만일 @i값이 2이면 Squery_rtn2지점으로 jump하여 Return까지 모든 Query를 수행합니다.)

분기할 지점은 'Goto [분기할 이름]'의 형식으로, 실제 분기 지점은 '[분기할 이름]:'형식(반드시 이름 끝에 : 문자가 붙어야 합니다.!)으로 지정합니다.

주의: Goto문으로 실행 분기점을 지정한다는 것은 해당 지점부터 이하 모든 Query수행을 의미합니다.
즉, '해당 지점만'실행한다는 의미가 아니므로 원하는 분기지점만 수행을 원할경우 분기점마지막에 반드시 Return을 넣어 주도록 합니다.

Squery_rtn2:
Begin
 Select * From HumanResources.Employee;
End
Return;

Return문이 존재하지 않으면 실행분기점이 Squery_rtn2지점일때 Squery_rtn2뿐만 아니라 Squery_rtn3지점까지도 모두 실행하게 됩니다.

▶ @i변수에 3이 지정되어 Squery_rtn3: 으로 실행지점이 분기되었습니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] Table 조회시 합계 표시하기  (0) 2010.04.26
[SQL] 하위 Query(Sub Query)  (0) 2010.04.21
[SQL] 흐름제어 구문  (0) 2010.04.08
[SQL] 데이터(Data) 형식  (2) 2010.04.01
[SQL] Table Join  (3) 2010.03.31
Microsoft SQL Server 설치  (0) 2010.03.25
0 0
1
블로그 이미지

클리엘