d라이브러리









C언어는 다양한 연산자를 사용할 수 있으며 연산의 압축표현도 가능하다. C언어에서 사용하는 연산자를 확실하게 이해하여야만 프로그램의 이해가 빠를 것이다.
 

또 연산자의 처리순서가 정해져 있기때문에 연산의 우선순위를 주의깊게 알아야 한다.
 

C언어는 구조적 프로그램이 가능하도록 기본적인 구조적 문장을 사용한다. 이번호에서는 구조적문장을 예를 통해 살펴보기로 하자.

 

(프로그램1)


C언어의 연산자
 

C언어의 연산자는 연산에 필요한 데이타의 개수에 따라 단항 연산자(unary operator)와 이항 연산자(binary operator)로 나뉜다. 이러한 연산자는 변수나 상수에 적용되어 원하는 연산결과를 얻게 해준다. 변수에 적용되는 단항연산자의 예는 다음과 같다.
 

+i  i와 같은 값을 계산한다.

- i  i의 부호를 바꾼다(+→ - , - →+)

++i  i를 1증가 시킨다.

- - i  i를 1감소시킨다.

i++  i를 1증가시킨다.

i - -  i를 1감소시킨다.

~i  i의 1의 보수를 계산한다.

! i   i≠0이면 0, i=0이면 1값을 갖는다.
 

(프로그램2)


C언어의 이항연산자에는 다음과 같은 것이 있다.
 

i * j  i와 j를 곱한다.

i / j   i를 j로 나눈 몫을 구한다.

i % j  i를 j로 나눈 나머지를 구한다.

i + j   i와 j를 더한다.

i - j   i에서 j를 뺀 값을 계산한다.

i<;<;j  i를 j 비트만큼 왼쪽으로 자리이동한다.

i>;>;j  i를 j비트만큼 오른쪽으로 자리이동한다.
 

i<;=j   }  i와 j의 값을 비교한다. 관계가 성립하면 1이고 아니면 0이다.

i>;j

i>;=j

i==j
i ! =j
 

i & j  } i와 j의 값을 비트단위로 논리연산을 한다.

i ∧ j

i ! j
 

i && j  } i, j의 논리값에 대한 논리연산을 한다.

i ! ! j
 

t ? i : j t가 평가된 후 성립하면 i가, 그렇지않으면 j가 평가된다.

i=j  j의 값이 i에 기억된다.

i*=j  i=i * j와 같다.

i/ =j  i=i / j와 같다.

i+=j  i=i+j와 같다.

i - =j  i=i-j와 같다.

i<;<;=j  i=i<;<; j와 같다.

i>;>;=j  i=i>;>;j와 같다.

i&=j  i=i&j와 같다.

i∧=j  i=i∧j와 같다.

i ! =j  i=i!j와 같다.
 

(프로그램3)


C언어에서는 위와 같은 많은 연산자를 갖고 있으며 그 표현을 압축시킬 수 있는데 어셈블리어 수준에 가까운 비트조작도 간단하게 처리할 수 있다.
 

(프로그램4)


(프로그램1)~(프로그램5)는 연산자의 사용예를 보인 프로그램이고 각프로그램에 대한 실행결과를 보면서 연산자의 처리순서를 이해하기 바란다.
 

(프로그램5)

 

C언어의 제어 구조
 

키보드(Keyboard)로 부터 입력된 데이타를 모두 더해서 키보드에서 0이 입력되면 그때까지 더한 값을 출력하는 프로그램을 작성해보자. C언어에서는 출력양식지정을 할 수 있는 출력함수 printf와 같이 입력에 대해서도 scanf가 있다. 이 scanf 함수의 입력양식지정 기능은 printf와 완전히 똑같다. 즉 %f, f, %5d 등으로 입력되는 데이타의 형을 선택지정할 수 있는 것이다.
 

scanf함수는 printf함수와 같이 인수의 개수가 변할수 있으며, 단한가지 주의할 점은 인수에 &연산자가 사용되어 값이 정해진다는 것이다.
 

(프로그램6)에서 사용된 무조건 goto문은 예제프로그램에 나타난 것처럼 goto cnt;에서 주어진 테이블 cnt를 goto에 의해서 실행된 문장의 앞에 cnt: 를 삽입하여야 한다.
 

(프로그램6)


이런한 goto문은 C언어에서는 자주 사용하지 않는 것이 바람직하나 특수하게 적용되는 경우는 괜찮다.
 

(프로그램6)에서 사용된 조건부 if(conditional if)문은 다음과 같은 일반형을 갖는다.
 

 if(조건식)

  문 ;
 

조건식 if문은 만약 조건이 만족되는 경우 문을 실행하는 것이며 그 이외의 경우는 if문 다음의 문을 실행한다.

(프로그램6)의 예제에서는 t!=0이면 printf문을 실행하고 그 이외의 경우에는 프로그램을 종료시킨다.

여기서 조건 f!=0은 f가 0일때 0이 되고 f가 0이 아닐때 1이 된다. 이렇게 조건식의 값은 0,1을 선택적으로 갖게 되는데 1일때가 값이 만족되었다로 판정되는 것이다. 따라서 ()안의 조건은 보다 간단하게 if(f)로 쓸수 있다.
 

(프로그램7)


(프로그램6)을 (프로그램7)로 압축시킬 수 있는데 if문안에 순차연산자인 ,를 이용하여 본 것이다. if문안에서 scanf함수가 먼저실행되며 scanf에 의해 입력된 데이타 f의 값이 조건 판정의 값으로 이용되는 것이다. 결국 if문의 조건식의 값은 f의 값에 의해 결정되는 것이다.
 

if문에서 조건이 만족되지 않는 경우를 처리하기위해 else문을 추가하여 if문을 확장 응용할 수 있는데 그 구조는 다음과 같다.
 

if(조건식)

   문 1

 else

   문 2 ;
 

또한 위 구조를 반복적으로 이용하여 다음과 같이 다중분기가 가능한 구조로 변형시킬수 있다.
 

if(조건식1)

   문1

 else if(조건식2)

   문2

 else if(조건식3)

   문3

 else

   문4;
 

C언어에서는 특이하게 조건연산자로서 3항 연산자를 제공하고 있다. 이것을 사용하면 변수 x와 y의 값중에서 큰 값을 z에 기억시킨다. 다음문을
 

if(x>;y) z=x else z=y ;

  ↓

x=x>;y?  x : y ; 로 바꿀수 있다.


C언어의 for문은 다음형식을 갖는다.


 for(초기값설정;실행조건;재설정)

   문 ;


예를들어 100번 반복하는 것에 대한 프로그램표현은 다음과 같이 하면 된다.


 for(i=0 ; i<;100 ; i++)
 

이 문에서는 i의 초기값으로 0을 주고 i가 100보다 작을 동안 i를 1씩 증가해서 for에 닫혀진 문을 계속하다가 i가 100이상이 되면 실행을 중지하게 된다. 이 for문은 다른 언어의 구조와 비교할 때 상당히 자유로와 초기값 설정이나 재설정에 있어서
 

for(i=j=0 ; i<;100 ; i++, j - - )와 같은 식에서 볼 수 있듯이 사용이 다양하다. for문의 ( )속의 분리된 식은 생략가능하며 for(;;);와 같이 써도 실행된다. 이 경우는 아무조건없이 무한루프(loop)에 들어가게 되는 경우이다.
 

(프로그램8)


(프로그램8)은 for문의 실행예를 보이기 위한 예제프로그램이다.

(프로그램8)에서는 초기값 설정을

i=0×20 ;

j=0 ; 으로 하여

i<;=0×7f ; 라는 조건이 만족될때까지

i++ ; i를 1씩 증가시켜가면서 다음 문을 실행하도록 되어 있다.

반복되는 문은 if(printf("%c", i), !(++j%32))printf("In") ; 하나이므로 실제로 문의 앞뒤에 삽입된 {와}를 빼버리는데 사용한 이유는 for루프가 반복 실행하는 문을 나타내주기 위해서이다.
 

(프로그램9)


또한 C에서는 한문자만 출력하는 함수 putchar를 가지고 있으므로 (프로그램9)와 같이 바꾸어 사용할 수 있다. C언어에서는 printf, scanf, putchar, getchar함수를 가지고 입출력을 자유롭게 처리할 수 있다.
 

(프로그램10)


(프로그램10)은 C언어의 while문의 사용예를 보이기 위한 것으로 "the C programming language"라는 문자열을 역순으로 배열하는 것이다.

while문은 주어진 조건이 만족되고 있는 동안 while문에 주어진 문을 실행하는 것이다. 그 일반형은
 

 while(조건식)

   문 ;    이다.


이 while문은 for문의 조기값설정과 재설정을 생략한 것으로 간주할 수 있다.

또다른 while문으로 처음에 조건을 판정하고 나서 실행하는 데 비해 우선 실행하고 나서 조건을 판정하는 do~while문이 있다.

do-while문의 일반형은


 do

  문

 while(조건식) ; 이다.
 

(프로그램11)


(프로그램11)은 C언어의 다중분기를 위한 제어구조인 switch문의 사용 예를 보인 것이다. 문자열에 포함된 모음이나 빈칸을 제외시키고 출력하도록 되어있다.
 

switch문은 ( )안의 식이 평가되어 상수값이 일치하는 case문을 실행한다. switch문의 형식은 다음과 같다.
 

switch(식) {

  case 상수 : 문 ;

  ⋮

 default : 문 ;
 

default는 앞에 쓰여진 case문의 어떠한 경우에도 해당되지 않을 때 실행되며 경우에 따라서는 이를 생락할 수 있다.
 

C언어에서 주의하지 않으면 모든 case문 및 default문이 실행된다는 것이다. 이것을 피하기 위해서는 case문 마지막에 break;를 필히 넣어둔다. 또한 이 break문은 if문, switch문등의 블럭으로부터 빠져나가기 위해서도 사용한다.
 

break문과 같이 블럭내에서 자주 사용되는 제어문으로서 continue문이 있다. break문이 블럭 탈출용으로 사용되는데 비해 continue문은 반복순환문에 대해서만 유효하며 이것은 반복되는 블럭의 처음 문으로 제어를 옮기는 것이다.

(프로그램12)는 0에서 9까지 수자를 출력하는 for루프에 break와 continue를 삽입해 놓은 것이다. 실행결과로부터 break와 continue의 의미를 곧바로 알수 있을 것이다.
 

(프로그램12)

 

1987년 12월 과학동아 정보

  • 동아일보사 편집부
  • 조동섭 교수

🎓️ 진로 추천

  • 컴퓨터공학
  • 정보·통신공학
  • 소프트웨어공학
이 기사를 읽은 분이 본
다른 인기기사는?