본문 바로가기
Drill/프로그래밍언어

[프로그래밍언어]쉽게 풀어쓴 C언어 Express 1장 프로그램의 개념 Exercise

by wintercamo3482 2024. 11. 8.

01 컴퓨터가 사용하는 진법은 무엇인가?

①2진법

 

컴퓨터를 구성하는 트랜지스터는 전기가 통하는 상태(True)와 안 통하는 상태(False)로 나뉜다.

이러한 두 가지 상태만 나타내는 것을 디지털 신호라고 하는데, 기존의 연속적인 신호(아날로그)에 비해 잡음에 강하기 때문에 전기적인 신호를 처리하는 데에 있어서 안정성이 더 높다.

02 고급 언어로 작성된 프로그램을 기계어로 바꾸어주는 도구는 무엇인가?

②컴파일러

 

프로그래밍 언어로 작성된 코드를 기계가 이해할 수 있는 Low Level 언어로 변환해주는 번역 프로그램이다.

기계어로 변역하는 과정을 중에 CPU가 직접 실행할 수 있도록 불필요한 연산 제거하거나 오류를 검출하는 작업을 수행한다.​

03 문제를 해결하는 절차를 시각적으로 표현한 것은 무엇인가?

②순서도

 

다양한 도형과 화살표를 사용하여 문제 해결 과정을 시각적으로 나타낸다. 이를 통해 논리적 흐름과 처리 과정을 표현할 수 있다.​

04 다음 중 C언어의 특징으로 적합하지 않은 것은?

②객체지향 프로그래밍이 가능하다.

 

C언어는 절차지향 프로그래밍 언어이다.

객체지향 프로그래밍은 클래스와 객체를 사용하는데, C++이나 Java가 여기에 해당된다.​

05 컴퓨터를 이용하여 문제를 해결하기 위한 절차를 무엇이라고 하는가?

①알고리즘

 

주어진 문제를 해결하기 위해 단계별로 수행해야할 명령 혹은 절차라는 의미를 가지고 있다.​

06 알고리즘을 기술할 수 있는 방법을 모두 고르라.

①순서도

 

순서도는 알고리즘을 시각적으로 표현하는 방법.

②의사 코드

 

자연어와 프로그래밍 언어의 중간 형태. 알고리즘의 논리를 명확하게 표현할 수 있다.

③자연어

 

일상적인 언어이기 때문에 알고리즘을 이해할 수 있게 설명할 수 있다.​

07 순서도(flowchart)에서 처리를 나타내는 기호는?

②사각형

 

변수 초기화 및 두 수의 사칙연산 등 프로세스, 연산, 데이터 처리와 같은 작업이 이루어지는 단계를 의미한다.​

08 다음 중에서 C언어를 개발한 사람은 누구인가?

①Dennis Ritchie

09 컴퓨터에서 이미지와 음악이 어떻게 표현되는지를 인터넷에서 조사하여 보라.

공통적으로 둘 다 Binary Data로 표현된다. 즉, 이미지나 음악이나 둘 다 0이나 1로 이루어진 bit로 구성되어있다.

먼저 이미지는 Width와 Height, 즉, 2차원 배열로 구성되있다. 이 배열을 구성하는 것은 Pixel인데, 한 픽셀은 색상을 표현하기 위해 Red, Green, Blue 모델을 주로 사용하고, 각 색 채널은 0~255 사이의 값으로 표현된다.

음악의 경우 시간과 그 시간에 따른 소리의 변화를 디지털 신호로 변환하여 표현한다. 소리는 연속적인 값, 즉, 아날로그 값인데, 컴퓨터가 이를 저장하거나 표현할 수 있게 디지털로 변환해야한다.

 

먼저 Sampling을 통해 소리의 파형을 일정 간격으로 측정한다. 그 후, Quantization를 통해 이 Sample을 이진수로 변환한다. 그리고 음악을 재생할 때는 이 디지털 신호를 다시 아날로그 신호로 변환하여 재생한다.​

10 컴퓨터에서 10진법이 아닌 2진법이 사용되는 이유를 설명하라.

1번 풀이 과정 참고.

11 인텔의 CPU에서 사용되는 명령어 중에서 3가지를 선택하여 무슨 일을 하는 명령어인지를 조사하여 보라.

ADD : CPU 레지스터에 저장된 두 값 혹은 메모리에 있는 값을 더하고, 결과를 저장.

MOV : 한 곳에 있는 데이터를 다른 위치로 이동하는 데 사용하는 명령어. 뿐만 아니라 레지스터 간에 데이터를 복사할 때 역시 사용.

JMP : 무조건적인 점프를 수행하는 명령어. 루프 및 조건문 등 프로그램의 특정 영역을 반복하거나 건너뛸 때 사용.

12 주판, 계산자, 계산판 등의 고대 계산하는 기계들하고 현대의 컴퓨터와 결정적인 차이점은 무엇인가?

고대 계산기 컴퓨터
수동 조작 프로그램에 따라 수동/자동 가능
단순한 산술 수학/논리 연산, 알고리즘에 따른 다양한 작업 수행
설계된 목적의 기능만 수행 프로그램에 따른 다양한 기능 수행

13 컴퓨터 부품을 판매하는 인터넷 쇼핑몰을 방문하여서 컴퓨터의 부품에는 어떤 것들이 있고 어떻게 분류할 수 있는지를 조사하라.

입력 장치 : 키보드, 마우스 등

처리 장치 : CPU, RAM 등

저장 장치 : HDD, SSD 등

출력 장치 : 모니터, 스피커 등

통신 장치 : NIC, 라우터 등

14 컴퓨터를 이용하여 문제를 해결할 때, 문제를 해결하는 방법을 인간이 구체적으로 고안하여 알려주어야 한다면 왜 컴퓨터를 사용하는 것인가? 인간이 직접 하는 편이 낫지 않을까? 컴퓨터를 사용하는 경우의 장점을 들어 보라.

단순 반복 작업을 자동화함으로써 시간을 아끼고 정확성을 높이며 휴먼 에러를 줄일 수 있다.

 

또한, 처리해야할 데이터가 많을 경우, 이를 신속하고 정확하게 할 수 있기 때문에 컴퓨터를 사용하는 것이다.​

15 기계어, 어셈블리어, 고급 언어의 차이점을 정리하여 보라.

기계어 : 컴퓨터가 바로 이해할 수 있는 이진수로 표시된 언어이다.

어셈블리어 : 0과 1로만 구성된 기계어를 사용하는 것은 불편하기 때문에 개발된 언어이다. CPU가 직접적으로 알아들을 수 있는 0과 1 대신, CPU의 명령어를 Symbolic name으로 표기한 것이다.

고급 언어 : 어셈블리 언어가 기계어보단 편리하지만 여전히 사람이 사용하기엔 복잡하다. 그래서 개발된 언어가 바로 고급 언어인데, 대표적인 예시로는 C/C++, Python, Java 등이 있다.

 

위 두 가지 언어에 비하면 사람이 이해하기 더 쉽다. 즉, 그만큼 CPU가 이해하는 것은 불가능에 가깝게 되었다는 뜻인데, 이를 위해 Complier라는 프로그램을 통해 고급 언어를 기계어로 번역하여 CPU가 이해할 수 있도록 한다.​

16 C++와 Java는 C에다 어떤 개념을 추가한 것인가? 인터넷에서 검색하여 정리하여 보라.

객체지향 프로그래밍(Object-Oriented Programming) 개념이 추가 되었다.

 

클래스를 사용하여 데이터와 메소드를 하나의 객체로 묶어 관리하기 때문에 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있는 장점이 있다.

 

또한, 상속, 다형성, 캡슐화, 은닉성 같은 객체지향의 핵심 개념들이 도입되었다.​

17 임베디드 시스템이란 어떤 것인가? 인터넷에서 자료를 찾아서 정리하여 보라.

프로그램에 따라 다양한 기능을 수행할 수 있는 데스크탑 PC와 달리 임베디드 시스템은 특정 작업을 수행하기 위해 최적화된 HW와 SW로만 구성되어있다.

 

가전제품, 차량, 스마트폰 등 특정 작업에 최적화된 기기들이기 때문에 작업 목적에 따라 크기가 다양하고, 상대적으로 저렴하며, 저전력으로 동작한다.​

18 아이폰과 안드로이드폰에서는 어떤 언어를 사용하여서 애플리케이션을 개발하는지 조사하여 보라.

아이폰 : Objective-C, Swift

안드로이드 : Java, Kotlin

19 다음과 같은 일상적인 행위에 대한 알고리즘을 작성하여 보라.

(a) 프린터를 이용하여 인쇄를 한다.

 

1. PC와 프린터를 연결한다.

2. PC에서 인쇄하려는 파일을 open 한다.

3. 인쇄 버튼을 클릭한다.

4. 프린터 선택, 매수, 페이지 설정, 컬러 여부 등을 설정.

5. 인쇄를 시작한다.

6. 인쇄가 정상적으로 진행되는지 확인한다.

7. 정상적으로 인쇄가 끝나면 프린터 및 PC의 어플리케이션 및 전원을 끈다.

 

(b) 인터넷 쇼핑몰에서 상품을 구입한다.

 

1. 인터넷 브라우저를 열고, 쇼핑몰 사이트에 접속.

2. 회원가입 및 로그인.

3. 원하는 상품을 타이핑 후 검색.

4. 원하는 상품을 선택한 다음, 색상 및 수량 등을 선택.

5. 장바구니 및 구매 버튼을 클릭.

6. 배송지와 결제 방법을 선택한 다음 최종 주문 버튼을 클릭.

7. 배송 정보를 토대로 주문한 상품을 추적.

8. 상품을 제대로 받았는지 확인.

20 주어진 두 수의 평균을 구하는 알고리즘을 순서도로 작성하여 보라.

 

21 사용자로부터 원의 반지름을 입력받고 반지름에 2를 곱하여 지름을 구하고 여기에 3.14를 곱하여 원의 둘레를 계산하는 알고리즘을 순서도를 이용하여 기술하라.

22 두개의 숫자 중에서 큰 수를 반환하는 연산만 지원되는 컴퓨터가 있다. 이 컴퓨터에서 3개의 숫자 중에서 제일 큰 수를 찾으려고 하면 어떤 알고리즘을 사용해야 하는가? 순서도로 그려보자.

23 두개의 컵에 우유와 주스가 각각 담겨있다. 우유와 주스를 교환하기 위한 알고리즘을 고안하라. 사용가능한 세 번째 컵이 있다고 가정한다.

  1. 세 번째 컵을 준비한다.
  2. 우유를 세 번째 컵에 붓는다.
  3. 주스를 우유가 들어있던 컵에 붓는다.
  4. 세 번째 컵에 옮겨놓았던 우유를 주스가 원래 들어있던 컵에 붓는다.

24 다음 알고리즘을 구상하여 보라.

(a) 만약 숫자들의 리스트가 주어지고 이중에서 특정한 숫자를 찾는 알고리즘을 구상하여 보시오. 숫자들은 정렬되어 있지 않다고 가정하라.

 

1. 리스트의 요소를 첫번째부터 차례대로 확인한다.

2. 현재 찾고자 하는 숫자와 확인한 리스트의 요소가 같은지 확인한다.

3. 일치할 경우 해당 리스트의 순서를 리턴한다.

4. 일치하지 않으면 다음 요소를 확인한다.

5. 리스트의 마지막 요소까지 확인했는데 없다면, 해당 숫자가 리스트에 없다는 결론을 리턴한다.

(b) 만약 숫자들이 크기순으로 정렬되어 있다면 특정한 숫자를 찾는 알고리즘을 어떻게 개선시킬 수 있는가?

 

1.리스트의 시작점(start)와 끝점(end) 사이의 중간(mid) 인덱스를 구한다.

mid = ( start + end ) / 2

2. 중간 인덱스와 찾으려는 숫자를 비교하고, 일치하면 중간 인덱스를 리턴.

3. 중간 인덱스와 찾으려는 숫자를 비교했을 때,

중간 인덱스보다 찾으려는 숫자가 클 경우, 중간 인덱스를 시작점으로 설정.

중간 인덱스보다 찾으려는 숫자가 작을 경우, 중간 인덱스를 끝점으로 설정.

4.위 과정을 반복하여 중간 인덱스가 찾으려는 숫자와 일치하면 값을 리턴.

5. 시작점이 끝점보다 커지게 될 경우, 숫자가 없다는 결론을 리턴.

25 1부터 100 사이의 정수 중에서 소수(prime number)를 찾는 알고리즘을 생각할 수 있는가?

  1. 1은 소수가 아니다.
  2. n = 2를 대입하고, n을 1부터 n까지 나눴을 때, 나누어 떨어지는 수가 1과 자기자신인 경우엔 소수로 판단하여 리스트에 대입.
  3. n까지 완료하면, n = n + 1을 대입. 즉, 현재 2라면 3을 대입. 3이라면 4를 대입하는 식으로 반복.
  4. n = 100까지 2~3번을 반복.