본문 바로가기

Programming/C - 학습노트

20180118. 연산자2. scanf문 .switch문



01. 연산자 (2)



논리 연산자 II.

  a && b  : AND연산자.  a도 참이고 b도 참이어야 True.
  a || b  : OR 연산자.  a 또는 b 둘중 하나가 참이거나 둘 다 참이면 True.
  a != b  : Not Equal연산자.  a와 b가 서로 다르면 True.
  a == b  : Equal연산자.  a와 b가 같으면 True.


논리 연산자들은 주로 반복문이나 분기문 등의 조건에 사용됩니다. 


01-a. 복수 연산자의 사용법


연산자는 조합하여 사용할 수 있습니다. 예를 들면

int a = (20+30) * (127 - 44)  : 20+30의 값과 127-44의 값을 곱한다
if ( (a>=b) || a<0)    :  a의 값이 b보다 같거나 클경우 또는 a값이 0보다 작을 경우
while ( a>0 && a<10)  : a의 값이 0보다 크고, 또한 10보다 작을 경우


주의점은, 연산자는 1개 항씩 적용해야 합니다. 예를들자면


while ( a>0 && a<10)


이것은 바른 사용법이지만, 이것을


while (0<a<10)


이렇게는 사용할 수 없습니다.


또한 연산의 우선순위를 설정하기 위해 괄호를 사용할 경우, 반드시 일반 괄호만 사용합니다. 수학책에선 괄호 다음 중괄호 ( {} ) 대괄호 ( [] ) 순으로 사용합니다만, C언어에서의 중괄호 대괄호는 사용처가 따로 정해져 있기 때문에, 괄호를 여러개 쓰더라도 소괄호만을 사용합니다.


int a=  (((20+12) * (40/2))*3)%5;    ::20+12값과 40/2값을 곱한후 이에 3을 곱하고 5로 나눈 나머지


괄호 중첩시 괄호 수에 실수가 없도록 체크를 잘 해야 합니다.




02.Scanf문


Scanf문은 사용자로부터 키보드 입력을 받는 구문입니다. 


우션 실행예입니다.
int value;   // value라는 정수 변수를 선언하고
Scanf_s ("%d",&value); //사용자에게 입력을 받아서 정수 형태로 value변수에 입력함




Scanf문은 다음과 같이 사용합니다.


Scanf_s     (        "%d"         ,         &value        )


명령어        입력받을 형식    ,   입력받은 데이터가 저장될 장소

위와 같이  scanf문은  

  • 어떤 형식의 입력을 받을 것인가
  • 입력받은 데이터를 어디에 저장할 것인가
를 지정해 주어야 합니다. 또한 주의할 점은 입력받을 변수를 지정할때 앞에 &를 붙여서 지정해야 합니다. 여기에 관해서는 아직 배우지 않았으므로 현 시점에서는 "그냥 입력을 받을땐 앞에 &를 붙이자"정도로 외워 두시는것이 좋습니다.






03. Switch문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
int trigger;
 
switch (trigger) {
 
            case 1 : 
                        printf("현재 변수값은 1입니다");
            break;
 
            case 17 :
                        printf("현재 변수값은 17입니다)";
            break;
 
            case 255 :
                        printf("현재 변수값은 255입니다)";
            break;
 
            default :
                        printf("현재 변수값을 알 수 없습니다 )";
            break;
 
}
cs



switch문은 분기문의 일종으로, 인수로 넣은 변수의 현재 값을 기준으로 분기를 나누게 됩니다. 앞에서 배웠던 if문의 경우 분기의 "조건"을 설정해준 반면, switch문은 분기의 기준이 "변수의 값 그자체"라는 점이 다릅니다.


switch문의 사용 방법은 다음과 같습니다.


switch (변수) {



case 변수값 :

분기 내용

break;


case 변수값 :

분기 내용

break;


default :    

분기 내용

break;



}




변수 내부의 값에 따라서 여러 개의 분기를 설정할 수 있습니다. 위의 예문을 기준으로 보자면,


  1. int형 변수 trigger를 switch문에 인수로 넣었습니다. 이제 switch문은 trigger변수의 값에 따라 분기를 실행시킬 것입니다.
  2. 만약 trigger의 값이 1이라면, case 1 의 분기가 실행되어 화면에 다음과 같이 표시될 것입니다.

현재 변수값은 1입니다


C. 만약 trigger값이 255라면, case 255의 분기가 실행되어 화면에 다음과 같이 표시될 것입니다.


현재 변수값은 255입니다


D. 만약 trigger값이 3이라면, default 분기가 실행됩니다. default분기는 if문의 else 분기와 같이 "어떤것도 해당사항이 없을 경우 기본으로 실행되는 분기"의 성격을 가집니다. 따라서 화면에 다음과 같이 표시될 것입니다.


현재 변수값을 알 수 없습니다



주의할 점은, 각 분기가 종료될 때 반드시 break 명령을 사용하여 끊어줘야 한다는 점입니다.


break명령은 현재 진행중인 함수를 종료하고 빠져나간다는 의미의 명령입니다. switch문에서 break명령을 사용해야 하는 이유는 다음과 같습니다.


컴퓨터가 코드를 읽을때, 함수는 함수의 시작지점에 있는 중괄호 { 에서 시작하여 별도의 조작이 없으면 함수의 종료지점에 있는 닫히는 중괄호 } 에서 종료하는것으로 판단합니다


if문과 달리 switch문은 하나의 중괄호 안에 여러개의 분기가 들어가게 됩니다. 따라서 break문으로 끊어 주지 않으면 다음과 같이 진행하게 됩니다.



IF문의 경우 

<색깔 범위가 각 분기문 진입시 실행되는 범위입니다>


Break를 안 쓴 Switch문의 경우



다음과 같이 중괄호가 닫힐때까지 내려갑니다. 즉 위 예시에서 value가 1이라면


  • case : 1 로 진입하여 "1"을 화면에 띄우고
  • 아래로 내려가 case  2 : 로 진입하여 "2"를 또 띄우고
  • 아래로 내려가 case 10 : 으로 진입하여 "10"을 또 띄우고
  • 아래로 내려가 case 255 : 로 진입하여 "255"를 또 띄우고
  • 아래로 내려가 default로 진입하여 "unknown Number"까지 화면에 띄워버립니다

분기를 제대로 구현하기 위해 break문을 각 분기의 끝까지 사용할 경우,

다음과 같이 원하는 결과가 나오게 됩니다.






04. 소스 파일


금일 진행된 수업에 대해 주석이 일부 포함된 소스코드파일입니다. 필요시 아래에서 다운로드하시기 바랍니다.

수업중에 부여되었던 과제 및 그에 대한 해답은 삭제된 후 제공됩니다