조건 기호

 

1. 조건 (Condition)

 

주어진 조건에 따라 흐름을 나눌 때 사용하는 기호입니다. 여러 개의 조건 기호를 사용하는 경우, 가능한 '예'와 '아니오'의 흐름 방향을 통일 하는 것이 알고리즘을 이해하는데 유리합니다. 하지만 흐름을 항상 동일한 방향으로 나누면 연결선이 길어지거나 엉킬 수도 있고, 흐름도를 이해하기 어려울 수 있으므로 상황에 맞게 사용해야 합니다.

 

 

서브 루틴 기호(함수)

 

2. 함수 (Function)

 

함수나 서브루티(subroutine)을 표현하기 위해 사용하는 기호입니다. 함수와 서브루틴은 거의 동일한 의미로 사용되지만, C 언어에서는 서브루틴이라는 용어를 사용하지 않습니다. 함수를 시작할 때는 다른 기호와 구별되는 기호를 사용하지만, 함수의 끝에 해당하는 반환(return) 기호는 단말(terminal) 기호를 사용합니다. 함수의 시작뿐만 아니라 함수를 호출하기 위해서는 함수 기호를 사용합니다. 아래의 예제 점선은 실행의 흐름을 나타내기 위해 사용된 것이며, 실제 흐름도에서는 존재하지 않습니다.

 

 

연결자 기호

 

3. 연결자 (Connector)

 

큰 흐름도를 여러 개의 흐름도로 나누어 표시하는 경우, 흐름도를 연결하기 위해 사용하는 기호입니다. 화살표로 연결하면 흐름도가 너무 복잡해지는 경우나 복잡한 흐름도를 여러 페이지에 걸쳐서 작성하는 경우에 사용합니다.

 

 

 

 

 

주석 기호

 

4. 주석 (Comment)

 

알고리즘과는 무관하게 흐름도 기호에 대한 설명을 추가하기 위해 사용하는 기호입니다.

 

 

준비 기호

 

5. 준비

 

기억 장소의 할당, 초깃값 설정 등의 초기화 과정을 나타내기 위해 사용하는 기호입니다.

 

 

반복 기호

 

6. 반복

 

특정 문장을 반복하여 수행하기 위해 사용하는 기호로, 표준 기호는 아닙니다. 반복 수행은 처리 기호와 조건 기호의 조합으로 나타낼 수도 있지만, 이 경우 반복 과정을 간단하게 나타낼 수 없는 경우가 많습니다. 반복 기호는 특히 C언어의 for 문장을 표시하기 위해 많이 사용됩니다.

또 다른 반복 문장인 while 문장이나 do-while문장의 경우에는 처리 기호와 조건 기호의 조합을 사용하는 것이 일반적입니다. 반복 기호의 위쪽 사각형에는 반복을 위한 조건을 기록하고, 아래쪽 사각형에는 반복적으로 수행할 문장을 기록합니다. 아래의 예제는 1부터 100까지의 정수를 더하는 알고리즘을 반복 기호를 사용하여 나타낸 예입니다.

 

 


 

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어 #공대공부 #알고리즘이해 #흐름도 #flowchart #순서도 #의사코드

 

 

 


 

'흐름도'는 작업의 흐름을 의미합니다. 즉, 알고리즘을 표현하기 위한 다이어그램의 일종으로, 여러 가지 종류의 기호들을 화살표로 연결하여 나타냅니다. 흐름도는 알고리즘이 그러하듯이 프로그램을 위해 만들어진 것은 아닙니다.

 


 

프랭크 길브레스(Frank Gilbreth)

 

프로세스(Process) 또는 작업의 흐름을 구조적으로 표현하기 위한 방법인 흐름도는 1921년 프랭크 

길브레스(Frank Gilbreth)에 의해 소개되었습니다. 소개될 당시에는 '프로세스 흐름도(Process Flow Chart)라는 이름로 불렸습니다. 이후 흐름도는 1940년대에 이루어 허먼 골드스틴(Herman Goldstine)과 존 폰 노이만(John Von Neumann)에 의해 컴퓨터 프로그램 개발을 위한 도구로 사용되기 시작하였습니다.

프로그램을 위한 흐름도가 처음 사용되기 시작할 때는 어셈블리 언어로 프로그램을 작성하기 위한 전단계로 알고리즘을 기술하기 위해 사용되었습니다. 하지만 흐름도는 C언어와 같은 구조적 프로그래밍 언어가 등장하기 이전에 만들어졌기 때문에 문장의 실행 순서가 뒤얽혀있는 스파게티 코드(Spaghetti code)를 만들어 내는 문제점이 있었습니다.

 



 

flowchart symbol / 흐름도 기호

 



흐름도에서는 다양한 기호를 사용합니다. 마이크로소프트 사의 파워포인트를 비롯하여 흐름도 작성을 지원하는 프로그램에서는 흐름도의 표준 기호들을 제공하고 있습니다. 



단말 기호(가장 자리가 둥글다)

단말 기호


1. 단말 (Terminal)

알고리즘의 시작과 끝을 나타내기 위해 사용하는 기호입니다. 흐름도에서 시작과 끝은 반드시 존재하는 것이 좋으며, 가능한 시작과 끝은 하나만 사용하는 것이 알고리즘의 흐름을 파악하는데 용이합니다.

또한, "시작과 끝이 없는 프로그램도 존재할까?" 생각이 들 수도 있습니다. 

 

프로그램의 시작은 반드시 존재합니다. 하지만 끝이 존재하지 않는 프로그램, 동일한 동작을 무한히 되풀이하는 프로그램은 어렵지 않게 찾아볼 수 있습니다. 예를 들면 백화점의 자동문 시스템에는 전원을 내리기 전까지 사람의 접근을 검사하고 문을 여는 동작을 반복하는, 끝나지 않는 프로그램이 설치되어있습니다.

 

 

처리 기호


※ 처리 기호

2. 처리 (Process)

알고리즘의 특정 처리 단계를 나타내기 위해 사용하는 기호입니다. 기호의 내부에는 처리 과정을 기술합니다. 기술되는 내용은 흐름도의 상세 정도에 따라 '100보다 큰 첫 번째 홀수를 구한다.'와 같이 작은 단위의 작업을 표시할 수도 있습니다. 전화로 약속시간을 정하는 경우, 전화번호를 누르는 동작이나 약속시간을 정하기 위해 통화하는 과정 역시 처리 기호로 나타낼 수 있습니다.

데이터 기호



※ 데이터 기호

3. 데이터 (input / output)

입출력이라고도 불리며, 데이터 입출력을 나타내기 위해 사용하는 기호입니다. 현금 인출을 위한 알고리즘에서 비밀번호를 입력하는 과정이나 명세표가 출력되는 과정이 이에 해당합니다.



※ 오늘은 C언어 프로그래밍에서 '흐름도=알고리즘을 표현하는 도구'에 대하여 알아보았습니다.


이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.


#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어 #공대공부 #알고리즘이해 #흐름도 #flowchart #흐름도기호

 

 

알고리즘을 이해하기 어려운 이유는 컴퓨터가 이해하는 명령을 표현하기 위한 특별한 표기법을 사용하기 때문입니다. 알고리즘은 프로그래밍 언어와 독립적이므로 알고리즘을 구성하는 문장들을 표현하기 위해서는 별도의 표기법이 필요합니다.

혼자만 이해할 수 있는 방법으로 알고리즘을 나타내는 것도 방법 중 하나이지만, 기록해두었던 내용을 시간이 흐른 후 다시 보면 기억이 나지 않는 불상사가 일어날 수도 있습니다. 프로그래밍 경험이 쌓이면 알고리즘을 생각하면서 생각한 내용을 바로 프로그래밍 언어로 나타낼 수 있습니다. 하지만 프로그램을 처음 배울 때는 바로 효과가 나타나지 않습니다. 따라서 먼저 알고리즘을 표준화하는 방법을 이용하여 기술하고, 이를 프로그래밍 언어를 사용하여 구현하는 하향식으로 프로그램을 작성하는 것이 바람직합니다.

알고리즘을 나타내는 표준화된 방법에는 여러 가지가 있지만, 알고리즘은 궁극적으로 프로그래밍 언어로 표현되어야 하므로 알고리즘 표현 방법과 프로그래밍 언어는 떼려야 뗄 수 없는 관계에 있습니다. 일상적인 언어를 사용한 문장의 나열로 나타내는 방법도 알고리즘을 기술하는 방법 중 한 가지이며, 이를 '의사 코드(pseudo code)'라고 합니다. 하지만 프로그램을 염두에 둔 의사 코드는 일상적인 언어가 아니라 프로그래밍 언어에서 사용되는 간단한 영어 단어와 기호를 사용하여 컴퓨터가 이해할 수 있는 문장으로 알고리즘을 표현합니다.

 

 


 

 

현금 인출 흐름도

 

 

A와 B의 통화를 위한 흐름도

 

 

알고리즘을 표현하는 또 다른 방법은 문제 해결의 순서와 흐름을 약속된 기호로 이용하여 그림으로 나타내는 방법으로, 이를 흐름도(flowchart, 또는 순서도)라고 부릅니다. 흐름도는 영어 단어 대신 시각적인 기호를 사용하므로 알고리즘을 직관적으로 이해할 수 있다는 장점이 있습니다. 하지만 복잡한 알고리즘의 경우, 한 페이지 내에 알고리즘을 모두 표현할 수 없고, 그림으로 나타내기가 번거로운 단점도 있습니다. 이러한 단점으로 인해 최근 흐름도를 많이 사용하지는 않지만 프로그래밍을 처음 접하는 경우에는 흐름도가 의사 코드에 비해 알고리즘을 이해하고 작성하기에는 더 쉬운 방법입니다.

 


※ 오늘은 C언어 프로그래밍에서 '알고리즘을 이해하는 법'에 대하여 알아보았습니다.

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어 #공대공부 #알고리즘이해 #흐름도 #flowchart #순서도 #의사코드

 

 

 

알고리즘은 컴퓨터 프로그램에만 관련된 것은 아니며, 일상적인 사람의 행동 역시 알고리즘으로 표현할 수 있습니다. 즉, 컴퓨터가 문제를 해결하는 방식뿐만 아니라 사람이 문제를 해결하는 방식 역시 알고리즘으로 표현할 수 있습니다. 알고리즘은 '간단하고도 엄밀히 정의된 방식'으로 표현되어야 합니다. 현금 인출기에서 5만 원을 인출하는 경우로 예를 들겠습니다.


 

 

[현금 인출 알고리즘]

1. 카드를 넣는다

2. 비밀번호 4자리를 입력한다

3. 만약 비밀번호가 틀렸다면 카드를 받고 1번부터 다시 시작한다

4. 서비스 항목 중에서 현금 지급을 선택한다

5. 5만 원을 입력한다

6. 현금과 카드, 그리고 명세표를 받는다.

한 번도 현금 인출기를 이용해지 보지 않은 사람에게 5만 원을 찾아오라고 하였을 때 현금 인출 알고리즘을

만들었다고 생각해봅시다. 간단하고 명확하게 현금을 인출하는 과정을 알려 주어야 실수 없이 현금 인출이라는 목적을 완수하고 되돌아올 수 있습니다.

 


 

[통화 알고리즘]

1. B에게 전화를 건다

2. 통화 중이면 전화를 끊고 [1단계로 돌아간다 / 다시 전화를 건다]

3. 전화가 연결되면 B를 찾는다

4. B가 전화를 받으면 장소를 말하고 [6단계로 넘어간다]

5. B가 전화를 받지 않으면 약속 장소를 메모로 남긴다.

6. 전화를 끊는다.

상황은 A가 B에게 약속을 정하기 위해 전화를 거는 것을 알고리즘화하였습니다. B와의 통화 알고리즘에서 첫 번째 단계인 'B에게 전화를 거는 부분'을 살펴보겠습니다. B에게 전화를 거는 방법은 쉽습니다.

전화기를 들고 B에게 바로 번호를 누르면 됩니다. 하지만 컴퓨터는 'B에게 전화를 거는 문장을 알아듣지 못합니다. 따라서 '전화기를 들고', 'B의 전화번호를 누르는' 단순한 문장의 나열로 명령을 내려야 합니다. 어쩌면 '전화기를 드는' 명령 자체도 컴퓨터에게 복잡한 명령일 수도 있습니다. '손을 전화기로 가져가서', '수화기를 잡고', '수화기를 들어 올리는' 여러 개의 문장들로 나누어 명령을 내려야 전화기를 들라는 명령을 이해할 수 있을지 모르며, 이보다도 단순한 명령으로 다시 나누어야 할지도 모릅니다.

 


※ 오늘은 C언어 프로그래밍에서 '일상생활에서 알고리즘 적용'에 대하여 알아보았습니다.

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어 #공대공부 #일상생활에서의알고리즘 #알고리즘화

 

 

 

최초의 알고리즘으로 가장 오래된 알고리즘으로 자주 언급되는 것은 기원전 300년경에 만들어진 유클리드의 '최대공약수를 찾는 알고리즘'입니다. 최대 공약수는 2개 이상의 자연수의 공약수 중에서 가장 큰 수를 말합니다.

 

유클리드는 2개 자연수의 최대 공약수는 큰 수에서 작은 수를 뺀 수와 작은 수와의 최대 공약수와 같다는 성질을 이용하여 최대 공약수를 찾는 알고리즘을 만들었습니다.

예를 들어 24와 14의 최대 공약수는 큰 수에서 작은 수를 뺀 10(=24-14)과 14와의 최대공약수와 동일합니다. 단, 0과 어떤 수 n의 최대공약수는 n이 됩니다.

 

최대공약수 (24,14)

= 최대공약수 (24, -14, 14) = 최대공약수(10, 14)

= 최대공약수 (14, -10, 10) = 최대공약수(4, 10)

= 최대공약수 (10 - 4, 4) = 최대공약수(6, 4)

= 최대공약수 (6 - 4, 4) = 최대공약수(2, 4)

= 최대공약수 (4 - 2, 2) = 최대공약수(2, 2)

= 최대공약수 (2 - 2, 2) = 최대공약수(0, 2)

= 2


 

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어 #공대공부 #유클리드알고리즘 #최대공약수찾는알고리즘

 

 

 

※ 프로그램 = 알고리즘 + 프로그래밍 언어

 

 

프로그램은 시스템에서 디지털 데이터 처리를 담당하는 부분으로, 컴퓨터를 사용하면 인간이 상상할 수 있는 모든 작업을 할 수 있습니다.

프로그램은 C와 같은 프로그래밍 언어로, 작성된 코드를 직접 타이핑하여 만드는 것이 아닙니다.

 

프로그래밍 언어는 수행하고자 하는 작업을 구체화시키는 도구일 뿐입니다.

 

여기서 중요한 점은 문제를 푸는 것은 결국 컴퓨터가 아니라 사람입니다. 사람이 해결할 수 없는 문제는 컴퓨터 또한 해결하기 어렵습니다.


 

프로그램을 만들기 위해서는 '알고리즘'과 '프로그래밍 언어'가 필요합니다.

 

프로그램= 주어진 문제를 해결하기 위해 컴퓨터에서 주어지는 일련의 명령어 집합

컴퓨터는 사람의 말을 이해하지 못하므로 컴퓨터에게 명령을 내리기 위해서는 컴퓨터가 알아들을 수 있는 말이 필요합니다. 컴퓨터에게 명령(복잡한 것)을 내리기 위해서는, 여러 개의 문장이 필요하며, 문장들은 주어진 문제를 해결할 수 있도록 논리적으로 배열되어야 합니다.

'알고리즘'은 문장을 배열하여 내용을 조리 있게 표현하는 방법과 관련되어 있고, '프로그래밍 언어'는 사용할 수 있는

단어와 단어를 사용하여 문장을 구성하는 방법과 관련되어 있습니다. C 언어를 이용하여 두 숫자를 더하고 그 합을 출력하는 코드에서 단어와 문장 그리고 알고리즘을 나타내는 과정을 아래에서 확인할 수 있습니다.

 

 

 

 

 

프로그램은 알고리즘프로그래밍 언어로 이루어져 있습니다. 프로그램을 만드는 법을 배우기 위한 효과적인 학습방법은 하향식으로 배우는 것입니다.

'하향식'이란 큰 문제를 여러 개의 작은 문제로 나눈 후 작은 문제들을 해결함으로써 결국에 큰 문제로 해결하는 방식을 뜻합니다.

프로그램을 작성하는 과정에서는 문장들을 조합하여 주어진 문제를 해결할 수 있는 알고리즘 작성 방법을 먼저 배우고, 개별 문장을 프로그래밍 언어를 사용하여 나타내는 방법을 나중에 배우는 것이 하향식에 해당됩니다. 알고리즘이 프로그래밍을 먼저 무조건 하는 것보다 중요합니다.

우리는 흔히 프로그래밍 언어를 배우는 것만으로도 컴퓨터에 명령을 내리고 주어진 문제를 해결할 수 있다고 생각합니다. 프로그래밍 언어를 배우면 컴퓨터가 이해할 수 있는 몇 종류의 문장을 만드는 방법을 배울 수 있지만, 프로그램은 수십 혹은 수백 개의 문장으로 구성되며, 매우 복잡한 프로그램은 수만 개의 문장으로도 구성이 됩니다.

예를 들어 드론을 설계, 조립 사용 설명서를 만든다고 가정을 합니다. 한글만을 배워서 간단한 문장을 쓰는 중학생이 이 설명서를 말로 설명하거나 작성을 할 수 있을까요? 이와 마찬가지로 컴퓨터가 알아들을 수 있는 문장 작성 방법을 배우고, 문장들을 논리적으로 나열하기 위해서는 컴퓨터에 관련된 지식이 필요합니다. 더불어 컴퓨터에게 주어진 문제를 해결하도록 명령을 내리고 싶다면, 먼저 컴퓨터가 문제를 해결하는 방식에 맞는 알고리즘을 만들어야 하고, 알고리즘을 실제로 구현하기 위해 프로그래밍 언어가 필요합니다.

프로그래밍 언어는 문제를 해결해 주지 않으며, 알고리즘을 구현하는 도구일 뿐입니다. 실제로 문제를 해결하는 것은 알고리즘입니다. 알고리즘을 만든 후 이를 구현할 때는 어떤 프로그래밍 언어를 사용해도 괜찮습니다.


 

알고리즘은 프로그래밍 언어와 독립적이며, 컴퓨터가 문제를 풀어 나가는 방식에 맞게 문제 해결 방식을 기술한 것을 말합니다. 사람이 문제를 해결하는 방식과 컴퓨터가 문제를 해결하는 방식은 달라 보이고, 실제로도 다릅니다. 하지만 컴퓨터를 만드는 것은 사람이기 때문에 컴퓨터가 문제를 해결하는 방식이 사람이 문제를 해결하는 방식과 전혀 다르지 않습니다. 다만, 컴퓨터는 생각보다 단순하기 때문에 이해할 수 있는 내용이 그리 많지 않으므로 사람이 생각하는 방식 중 가장 간단한 방식으로만 문제를 풀어나갈 수 있습니다. 또한 컴퓨터는 융통성이 없기 때문에 문제를 풀어 나갈 때 모호한 점이 있어서는 안 됩니다.

 

 

컴퓨터의 문제 해결 방식과 절차를 배우는 것이 바로 알고리즘 학습 방식입니다.

 

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

#컴퓨터공학 #C언어 #C언어프로그래밍 #프로그램 #알고리즘 #컴퓨터의문제해결 #프로그래밍언어

#공대공부 #하향식문제해결

다양한 프로그래밍 언어

 

 

사람이 가장 잘 이해할 수 있는 프로그래밍 언어(Python, Java, C++, C#, C, Ruby, Go)언어로 작성한 프로그램이라도 컴파일러가 이해할 수 있는 컴퓨터를 위한 기계어로 번역할 수 있습니다. 따라서 사용자는 번역기가 제공하는 프로그래밍 언어의 문법에 맞게 프로그램을 작성해야 합니다.

프로그래밍 언어가 요구하는 문법을 나열하는 것을 서술(Statement)형식이라고 합니다. C 언어도 몇 가지 서술 형식을 가지고 있습니다.

 


 

◎ C 언어의 기본 서술 형식

 

1) 단일 서술문

 

단일 서술문(Single Statement)은 논리적인 최소 명령 실행 단위입니다. 즉 한 개의 서술문 단위로 작업이 진행됩니다. C 언어는 ; (세미콜론)으로 문장을 구분하며 Java, Python등의 프로그래밍 언어또한 논리는 똑같습니다. ; (세미콜론)으로 문장을 구분하기 때문에 한 줄에 여러 개의 서술문은 쓸수도 있습니다.

ex)

a = a + 30; /* 한 줄로 이루어진 단일 서술문 */ 

a = a + 30; /* 두 줄로 이루어진 단일 서술문 */

a = a + 30; b = b + 50; /* 한 줄에 두 개의 단일 서술문을 사용합니다. */

 

 

위의 예와 같은 표현법은 모두 가능하며 총 4가지의 서술문을 사용한 것입니다.

※ 주의: C 언어 및 다른 프로그래밍 언어에서 코드를 작성할시에 문장을 마무리 할 때 반드시 ; (세미콜론)을 사용해야 합니다. ; 을 사용하지 않으면 프로그램이 제대로 실행되지 않고 오류가 발생하게 됩니다

 

2) 복합 서술문

 

복합 서술문(Compound Statement)은 여러 단일 서술문을 { } 중괄호를 사용해 하나로 묶은 형태입니다. 중괄호의 안의 단일 서술문이 모두 수행되면 이 복합 서술문이 수행된 것으로 처리가 됩니다. 예를 들어 아래의 사진과 같이 적으면 단일 서술문 2개를 사용한 것이 아니라 복합 서술문 1개를 사용한 것입니다.

 

{ a = a + 30; /* 주의 단일 서술문 뒤에는 항상 ;(세미콜론)을 찍어주어야 함 */ 

b = b + 50; } /* bracket { }뒤에는 찍어줄 필요가 없음 */ 

 

 

복합 서술문은 { } 중괄호를 사용하기 때문에 자신의 영역이 구분이 됩니다. 따라서 ; (세미콜론)을 사용할 필요가 없습니다. 하지만 다음과 같이 } (닫는 중괄호) 뒤에는 ; (세미콜론)을 사용해도 오류가 나지 않는데, 이것은 복합 서술문을 사용한 후 의미 없이 단일 서술문 1개를 적은 것으로 간주되기 때문에 정상적인 사용방식은 아닙니다.

{ a = a + 30; }; /* 의미 없는 단일 서술문

 

 


 

 

◎ 역할에 따른 서술 형식

 

1) 수식 서술문

 

수식 서술문(Expression Statement)은 계산 수식을 표현한 단일 서술문입니다. 앞에서 단일 서술문 설명을 위해 예로 든 내용도 수식 서술문에 해당합니다. 두 값을 평균을 내는 수식을 구성해 보면 아래의 예제와 같습니다.

 

average = (a + b) / 2;   /* 프로그래밍에서는 나눗셈 기호를 계산기와 같이 / 로 사용합니다.

 

 

2) 조건 서술문

 

조건 서술문(Selection Statement)은 조건을 만족하면 지정한 서술문을 수행하도록 작성한 서술문입니다. 어떤 값이 5보다 크면 해당 값을 0으로 변경하는 조건문을 구성해 보면 아래의 예제와 같습니다.

 

if(a > 5) a = 0;

 

 

3) 반복 서술문

 

반복 서술문(Iteration Statement)은 단일 서술문 또는 복합 서술문을 반복해서 수행하도록 작성한 서술문입니다. 이 소스 코드는 0에서 4까지 더하는 기능을 반복문을 사용해 구성한 것입니다.

 

int sum = 0, i; for(i = 0; i < 5; i++) sum = sum + i;

 

4) 라벨 서술문

 

라벨 서술문(Labeled Statement)은 소스 파일의 특정 위치에 라벨을 지정하고 goto문을 사용해 그 위치로 이동할 수 있도록 작성한 서술문입니다. C 언어가 만들어진 초창기에 기존 프로그래밍 언어를 사용하던 프로그래머들이 쉽게 C 언어로 유입될 수 있도록 제공한 서술문입니다. 그러나 원칙 없이 프로그래머가 원하는 위치로 실행 지점을 이동하는 것은 구조화된 언어인 C 언어의 소스 코드 구성을 파괴할 수 있는 문법이기 때문에 되도록 사용하지 않는 것이 좋습니다.

if(a > 0) goto EXIT; /* 이동(라벨이 표기된 곳으로) */ a = a - 1; EXIT; /* 라벨 */

 

 

5) 분기 서술문

 

분기 서술문(Jump Statement)은 자신이 소속된 서술문을 벗어나거나 흐름을 바꾸어 놓을 때 사용합니다.

break, continue와 같은 문법들이 분기 서술문에 해당하는데 return문, goto문처럼 실행 흐름을 마음대로

조정(서술문의 범위를 마음대로 벗어날 수 있음) 하는 것이 아니라 특정 조건 서술문이나 반복 서술문 안

에서만 적용되기 때문에 잘 활용하는 것이 좋습니다.

while(1) { if(i > 5) break;  /* if문의 로직에 의해 i가 5보다 크면 반복문을 빠져나갑니다. */ i++ }

 

 

6) 주석문

 

프로그래밍을 하다 보면 상황을 설명하거나 작업 내용을 기억하기 위해 소스 파일에 메모를 남겨야 하는 경우가 있습니다. 이럴 때 주석문(Comment)를 사용하면 됩니다.

주석문은 /* 기호로 시작해서 */ 기호로 끝나고, 여러 줄에 걸쳐서 사용할 수 있습니다. 또 이 기호가 표시된 부분은 컴파일러가 번역을 하지 않으므로 어떤 내용을 적어도 상관없습니다. 다음과 같이 소스코드에 주석문을 적절히 사용하면 코드의 가독성이 좋아집니다.

average = (a + b) / 2;

/* a , b의 평균값을 계산하여 average에 저장합니다 */ 

 


 

 

※ 오늘은 C언어 프로그래밍에서 'C언어의 서술형식'에 대하여 알아보았습니다.

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

C언어는 4가지 특징을 가지고 있습니다. 이 4가지 특징은 구조화된 언어, 이식성, 확장성, 생산성 등이 있습니다.

1) C언어는 구조화된 언어이다

 

C 언어 이전의 프로그래밍 언어들은 작업 단위가 구분되지 않고 단순히 나열된 형식이었습니다. 자신이 이전에 작성한 프로그램과 비슷한 기능의 새로운 프로그램을 만들 때에도 기존에 작업한 내용을 재사용하기 힘들었습니다. 그리하여 프로그램을 유지, 보수를 하는데 많은 어려움이 있었습니다.

하지만 C언어는 일정한 단위로 명령들을 그룹으로 묶는 방법을 제공하며, C 언어로 만든 프로그램은 작업 단위가 명확하게 구분되어 유지 보수가 편리하고, 기존 프로그램에서 자신이 원하는 작업을 분리하기도 쉬워서 새로운 프로그램을 개발할 때 재사용하기에도 좋습니다.

2) C언어는 이식성이 높다

 

C 언어 이식성(Portability)이 높다는 말은 C 언어로 만든 프로그램을 거의 수정하지 않고 다른 하드웨어 또는 운영체제로가져갔을 때도 잘 동작한다는 뜻입니다. 이를 위해 하드웨어에 종속적일 수 있는 부분은 C 언어에서 분리해 런타임 라이브러리(Runtime Library)라는 개념으로 제공하고 있습니다.

그리고 이렇게 외부에서 구현한 것들을 C 언어가 가져다 사용할 수 있게 만들었습니다. 이 런타임 라이브러리는 각 하드웨어 또는 운영체제별로 만들어졌기 때문에 사용자가 작성한 C 언어 프로그램에는 영향을 미치지 않습니다. 즉 하드웨어에 변화가 생기더라도 C 언어 문법이 영향을 받지 않도록 C 언어를 디자인한 것입니다.

4) C언어는 확장성이 좋고, 표현법이 다양해서  자기만의 표현법으로 개발이 가능하다

 

C 언어는 사용할 확률이 높은 문법만 최소한으로 유지하고 사용 빈도가 낮은 문법은 사용자들이 스스로 구현하기 때문에 언어의 기능을 확장할 수 있습니다. 따라서 C언어는 다른 언어에 비해 표현법이 더 많고, 개발자가 개발 상황에 따라 선택할 수 있는 문법구조나 표현법이 다양하여 자율성이 높습니다. 그래서 상대적으로 더 어렵게 느껴질 수도 있습니다. 하지만 반대로 다양한 표현법을 익히고 나면 다른 언어에서 사용할 수 없는 강력한 표현을 사용할 수 있습니다.

4) C언어는 생산성이 높다

 

일부 초보 프로그래머들은 다른 고급 언어에 비해 C 언어의 생산성이 떨어진다고 말합니다. 하지만 초보자 입장에서 봤을 때 제품을 쉽게 개발할 수 있는 언어가 생산성이 높다고 판단할 수 있을 것입니다. 하지만 이는 생산성에 대해 오해하고 있는 것입니다. 생산성의 높고 낮음은 단순히 제품 개발 시간만 계산하여 따질 것이 아니라, 제품을 완성한 후 고객이 만족하고 문제가 없는 상태가 되었을 때까지의 시간도 계산에 넣어야 합니다.

C언어를 사용하는 프로그래머들은 스스로 개발 인프라(명령 그룹, 함수)를 구축하기 때문에 경력이 쌓일수록 인프라가 다양해져서 프로그램 개발 속도가 빨라집니다. 그뿐만이 아니라 사용자의 여러 가지 요구에 대해 스스로 대처할 수 있어서 프로그램의 완성도와 만족도가 더 높을 수밖에 없습니다.

 


※ 오늘은 C언어 프로그래밍에서 'C언어의 특징'에 대하여 알아보았습니다.

 

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

 

C언어는 저학년 때 컴퓨터공학 수업에서 꼭 듣고 가는 수업입니다. 대부분의 학생들이 왜 C언어를 배우는지도 잘 모를 뿐만 아니라 보통 포인터 챕터에 들어가면 머리를 싸매고 어려워서 대부분 포기합니다.

앞으로 C언어를 보다 쉽게 공부를 정리하며 풀어가면서 조금 더 흥미를 가질 수 있는 기회를 만들고자 포스팅을 시작하였습니다.

 

이번 포스트에서는 C언어의 탄생 및 간단한 소개를 하려고 합니다.

벌써부터 노잼주의보 및 지루함이 느껴질 수도 있지만 아는 것과 모른 것의 차이는 격차가 나중에 커질 수도 있습니다. 그리고 역사 및 간단한 개요를 배우시면 나중에 다른 사람들 앞에서도 당당하게 소개할 수 있을 것 같습니다.

 

C 언어가 만들어진 과정과 특징을 알면 C 언어의 문법 구조를 이해하는 데 있어서 도움이 됩니다. C언어의 문법을 배우기 전에 간략하게 C언어의 역사에 대하여 간단히 알아보겠습니다.

 


C언어의 탄생

데니스 리치와 켄 톰슨

 

1960년대 개발되었던 운영체제들은 하드웨어 종속적인 언어를 사용하여서 개발되었습니다. 따라서 하드웨어가 바뀌면 운영체제의 많은 부분을 디시 개발해야 했습니다. 벨 연구소의 데니스 리치(Dennis Ritchie)와 켄 톰슨(Ken Thompson)은 이런 불편함을 없애고자 하드웨어가 변경되어도 프로그램을 다시 작성하지 않아도 되는 운영체제를 만들기 위해 노력하였습니다. 1970년에 켄 톰슨은 B 언어를 만들었지만, 이 언어도 하드웨어로부터 독립된 운영체제를 만드는 데 있어 적합하지 않았습니다. 1972년, 켄 톰슨은 데니스 리치와 함께 새로운 언어를 개발하였고, 이것이 바로 C언어입니다.

C언어는 하드웨어의 세밀한 부분까지 제어할 수 있으며, 특정 하드웨어를 직접 표현하지 않도록 문법을 구성하였기 때문에 하드웨어에 독립된 형태로 프로그램을 개발할 수 있었습니다. 데니스 리치와 켄 톰슨은 C 언어를 90% 이상 사용하여 유닉스(UNIX)라는 운영체제를 만들었고, 유닉스는 다양한 하드웨어에서 동작할 수 있는 운영체제로 자리를 잡게 되었습니다.


 

※ 오늘은 C언어 프로그래밍의 기초인 'C언어의 소개 및 개요'에 대하여 알아보았습니다.

이 포스트는 학부에서 제공하는 기본적인 컴퓨터 공학 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 C 언어 프로그래밍 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.

 

+ Recent posts