티스토리 뷰



문제를 보니 올해 처음 참여한 아들이 C언어 공부를 좀더 열심히 했더라면 하는 아쉬움이 남습니다. C언어 기초만 잘 다졌어도 쉽게 맞출 수 있는 문제들이 꽤 있었는데 아쉬움이 있지만 C언어의 기초부터 잘 다져야 한다는 "교훈"을 마음에 새겼으면 하는 바램입니다. C언어 기초와 관련한 몇가지 문제를 풀어보면서 기초를 잘 다졌으면 합니다.

18. 다음 중 변수의 이름으로 사용할 수 없는 것은?

① thisway ② int_char star*star ④ that_way ⑤ _6_

C언어의 변수명은 다음과 같은 특성이 있습니다.

  • 영문과 숫자 그리고 밑줄(_ Underscore라 부릅니다)로 구성할 수 있습니다.
  • 영문 대문자와 소문자를 구별합니다(Case Sensitive라 합니다)
    C, C++, Java와 같은 프로그래밍 언어는 대소문자를 구별하고 VB와 같은 언어는 구별하지 않는 특성이 있습니다.
  • 변수명의 시작은 영문자나 밑줄이어야 합니다.
  • 예약어(Reserved word)는 변수명으로 사용할 수 없습니다.
위의 특성에 비추어 3번만 특성에 위배되고 나머지는 변수명으로 문제가 없습니다.

19. 다음 중 정수형 변수의 type에 해당되는 것은 어느 것인가?

① class long ③ double ④ float ⑤ struct

프로그래밍 언어의 기본 데이터형을 스칼라 데이터 타입(Scalar data type)이라 합니다. C언어에서는 크게 정수와 부동소숫점(Floating point) 수를 저장하는 데이터형으로 크게 나눌 수 있는데 문자를 저장하는 char 타입도 엄밀하게 따져보면 1바이트 정수 값을 저장하는 정수형 변수라 할 수 있습니다. 정보를 저장할 수 있는 크기에 따라 char, short, int, long 타입이 존재합니다. 통상 short은 2바이트, int는 4바이트에 정보를 저장하는데 프로세서나 운영체제에 따라 int나 long타입은 크기가 변동 될 수 있습니다. 그래서 C언어에서는 "long int", "long long" 로 타입을 지정해서 long int는 4바이트, long long은 8바이트 값으로 구분해서 사용할 수 있습니다. 각 정수형 변수는 unsigned를 앞에 붙여서 부호 없이 사용함을 명시할 수 있습니다. unsigned를 붙이지 않으면 부호를 사용하는 signed를 붙인것과 동일한 효과를 가져옵니다. 1바이트를 예로들면 부호를 사용하지 않으면 0~255값을 표현할 수 있고 부호를 사용하면 -128~127의 표현 범위를 가집니다. 끝으로 부동 소숫점수는 float과 double로 정의해서 사용할 수 있습니다. 아래의 그림은 C언어 타입 크기를 알아보는 프로그램의 실행 결과입니다.(tcc를 사용했으며 컴파일러 옵션과 프로세서에 따라 달라질 수 있음에 유의하세요)



20. 다음 중에서 C나 C++ 언어의 키워드에 속하는 것은?

① main ② function double ④ the ⑤ face

키워드(Keyword) 또는 예약어(Reserved word)는 언어의 정의 영역에 포함하는 것으로 변수명이나 함수명 등에 사용할 수 없습니다. 위의 문제에서 function은 VB에서는 예약어이지만 C언어에서는 예약어가 아닙니다. C언어에서의 함수 선언은 "함수 타입 함수명(파라미터 리스트) { 함수 내용 }"의 형식으로 간단히 기술할 수 있습니다. the나 face도 예약어가 아니지요. double은 부동소숫점 수를 정의하기 위한 데이터타입이니 예약어가 맞는데 main이 혼동 스러울 수 있습니다. C언어 프로그래밍을 하다보면 항상 main함수로 시작했는데 main도 예약어가 아닌가? 하는 의문이 있을 수 있습니다. 그렇지만 main은 함수명의 하나일뿐이고 여러 함수중에서 프로그램의 시작점을 지칭할 뿐입니다. 같은 C언어 프로그램이라 할지라도 라이브러리나 DLL등으로 사용할 소스 코드에는 main이 등장하지도 않고 컴파일러에 따라 main이 아니라 WinMAIN또는 tmain을 프로그램의 시작점으로 사용하기도 합니다. 고로 정답은 double입니다.


22. C나 C++ 언어로 작성된 프로그램에서 변수에 저장된 값을 비교할 때 사용하는 연산자가 아닌 것은?

① < ② <= = ④ == ⑤ >=

C언어를 사용하면서 가장 많이 실수하는 부분이 바로 "="과 "=="를 잘못사용하는 것입니다. VB의 경우에는 '=' 연산자가 비교에도 쓰이고 대입연산자로도 쓰이지만 C언어에서는 '='는 대입연산자 즉, 우측에 기술한 식의 결과를(r-value) 좌측으로(l-value) 대입시키는 연산자로 사용하고 '=='는 비교연산자로 연산자 좌우의 값이 같은지를 비교하여 같으면 True 다르면 False를 리턴하는 연산자 입니다. 참고로 C언어에서는 0이 False, 0이 아닌값(일반적으로 1)을 True로 간주합니다.  


23. 다음 중 scanf 함수에서 정수 값을 입력 받기 위해 사용하는 입력 형식은?

"%d" ② "\r" ③ "%f" ④ "\n" ⑤ "%%"

값을 출력하는 printf와 더불어 C언어의 기본을 다룰때 많이 사용하는 입력함수가 scanf입니다. scanf는 표준 입력(키보드)으로 부터 값을 입력받는데 printf와 마찬가지로 형식 문자열을 첫번째 인수로 하고 전달 받을 변수의 위치(포인터)를 차례로 전달하면 됩니다. 형식 문자열은 printf처럼 사용하는데 정수는 %d, 실수는 %f, 문자열은 %s로 사용하고 자주사용하는 함수 이므로 길이를 지정하거나 소숫점을 지정하는 형식에 대해서도 자세히 살펴보는 것이 좋습니다.

올해 문제들은 프로그래밍의 관점에서 문제를 많이 출제한 것으로 보아 제자리를 찾은 것으로 보입니다. 프로그래밍을 겨루는 대회이니 당연히 예선도 그런 관점에서 출제하는 것이 당연한 것이겠지요, 열심히 준비한 친구들이 본선에서도 좋은 결과를 얻기를 바랩봅니다. 



댓글
댓글쓰기 폼