프로그램구조
2 - 1 C 언어 구조
목차
- C언어 역사
- 일반적인 프로그램 구조
- C 프로그램 구조
- C 프로그램 실행 순서
C언어 역사
- 1969년 유닉스(Unix)를 개발하였던 AT&T 벨 연구소의 켄 톰슨(Ken Tompson)은 B언어를 개발
- 1972년경에 켄 톰슨과 같이 근무하던 데니스 리치(Dennis Ritchie)는 유닉스의 호환성을 높이기 위해 재개발하면서 C언어를 개발
- C언어라는 이름은 B언어를 계승한다는 의미
- 1983년 미국표준협회(ANSI : American National Standard Institue)에서 ANSI C라는 표준안을 발표(문법의 통일성을 위해서. 지금 우리가 쓰는 컴파일러는 이때 만들어진 ANSI C의 표준안을 가지고 만들어진 것)
- C++, Java, Python등 많은 프로그래밍 언어의 기초 문법 포함
일반적인 문제 해결 과정
- 일반적으로 어떤 문제가 입력되면 우리는 그러한 문제를 해결하기 위해 방법을 찾고 그 절차(순서)를 알아내어 이를 해결하기 위해 알고리즘을 만들어 해결한다.
일반적인 프로그램 구조
- 우리가 처리하고자하는 데이터를 보면 단독으로 값을 가지는 데이터들이 있을 수 있으며, 그 데이터들이 연속된 특성을 가지고 저장된 자료(배열)도 있다.
- 그리고 2차원형태로 행열로 된 자료도 있으며, 파일로 된 데이터를 입력해서 우리가 원하는 형태대로 처리해서 출력하고싶기도 하다.
- 알고리즘이라하는 것은 처리할 수 있는 방법과 절차이다.
- 첫번째 데이터가 입력되면 이를 처리하고 출력한다. 이것이 반복되는 현상을 볼 수 있다.
- 가령 n1과 n2를 더한 값을 sum에 넣으라면 sum의 결과값은 30을 가지고 출력한다.
- 각각의 배열의 합을 구하라고하면 이러한 알고리즘단계를 거쳐서 출력되게 된다. 파일이라고 하면 파일을 입력받아 처리하는 것이 있다. 우리는 이 안의 알고리즘을 잘 만들고싶은 것이다.
일반적인 프로그램 구조(모듈화)
- 여러개 반복되는 부분은 컴퓨터를 활용해서 묶어서 처리하면 좋지 않을까? 라는 아이디어들이 생겨나기 시작한다. 이를 모듈(module)이라고 한다.
- 입력이라는 기능이 반복되기 때문에 입력을 묶어서 반복할때 불러다 쓰는 형태로 했으면 하는 마음에서 모듈이라는 개념이 생겨난다.
- 데이터 입력, 처리, 출력.. 반복되는 현상들이 나타날 수 있다.
- 모듈... 큰 문제를 기능별 작은 단위로 나눈 것. 또 독립적으로 수행할 수 있는 프로그램 단위이다. 프로그램을 만들다보면 어떤 단위를 함수화, 모듈화할까 고민하는 경우가 있다. 그래서 어떤 형태로 나누면 좋을지 생각하게 될때 독립적으로 수행할 수 있느냐? 가령 입력하는 기능, 출력하는 기능은 독립적으로 나뉘어져있는 기능이기에 이는 모듈화시키는 것이 일반적이다.
C언어 구조 : C프로그램은 여러 개의 함수로 구성
- C프로그램은 여러개의 함수.
- 함수란? 앞에서의 모듈이라는 개념이 C프로그램에서는 함수라는 이름으로 불린다. 그래서 프로그램을 짤때 여러개의 함수가 필요한데 하나를 짜면 반복되는 것들 때문에 프로그램이 복잡해져서 함수라하는 것을 이용하여 불러다 쓰고, 불러다 쓰고 하는 형태로 C언어 구조를 만들게 된 것.
- C프로그램은 함수가 있으며 함수 밖의 명령이 있고, 가장 처음 시작하는 main함수가 있으며 그 뒤에 사용자가 정의해서 쓸 수 있는 함수들이 있다.
- 이 main함수가 오기 전에 함수 밖의 명령이라 하여 우리가 프로그램을 실행하기 전에 좀더 만들어줘야하는 내용들을 이곳에 나열하게 되어있다.
Hello world!
/* The traditional first program in honor of Dennis Ritchie who invented C at Bell Labs in 1972 */
#include <stdio.h>
int main(void)
{
printf("Hello, world! ¥n");
return 0;
}
/* */
는 C언어의 주석(comment)를 의미한다. 이는 컴파일러에게 기계어로 바꿀 필요가 없는 부분임을 알려준다.#include
는 전처리 지시자라고 한다. 컴퓨터 프로그래밍 언어로 만든 소스를 기계어로 바꿔주는 것을 컴파일러라고 하였는데, 그 컴파일러가 기계어로 바꾸기 전에 처리하라는 기호이다.<stdio.h>
이는 기계어로 바꾸기 전에 stdio.h라는 헤더파일을 내 소스코드에 포함시켜달라는 말. 그래서 이는 표준입출력에 관련된 함수들이 모여있는 헤더파일이다. stdio.h안에는 hello world를 찍어주는.. 출력기능을 하는 printf의 기능이 들어있다.int main(void)
에서 main은 하나의 함수를 의미한다. 독립적으로 수행할 수 있는 프로그램 단위라는 것. 그래서 이 함수의 머리 부분과 중괄호{ }의 몸체로 이뤄져있다.
함수의 이름, 함수의 패러미터 타입들을 () 안에 넣는데 여기에는 없다는 의미로 void를 써준 것.{}
안에 printf라는 이름의 함수가 있다. 이 함수의 쌍따옴표를 통해 문자열을 적는다.\n
이라 하면 new line이라 하여 다음 줄로 넘어가게끔 해준다. 그리고 하나의 문장이 끝나면 ; 이 있어야 한다. 컴파일러는 ; 을 하나의 단위로 인식하기 때문이다.- return 0; 여기서 return은 나를 호출했던 쪽으로 이 값을 넣어서 돌아가달라는 의미의 명령어이다. return 0은 .. 나를 호출했던 쪽으로 돌아갈때는 0을 가지고 돌아가달라는 것. int는 데이터타입. 0에 대한 데이터타입을 적어주는 것. 0은 나 성공적으로 프로그램 끝났다는 의미를 말함.
C언어 구조 : C프로그램은 여러 개의 함수로 구성
- 이 예제는 사용자로부터 a, b 라는 두개의 변수값을 입력받아 더한 값을 출력하는 프로그램이다.
- 이를 보면.. 가장 위의 main이라는 함수가 있다. 이는 위에서부터 내려와 #include 다음에 가장 처음으로.. 프로그램이 시작되는 부분에서 나온다. 소문자로 main이라 되어있는 이 함수를 컴파일러는 가장먼저 컴파일한다. main이라는 함수부터 컴파일시작이 약속되어 있다.
- scanf는 입력을 받아주는 함수이다. 출력하는 함수가 printf이다. stdio.h에는 standard inputoput에 해당하는 함수에 프로토타입이 함수의 원형이 들어있어서 stdio.h에 포함하면 printf, scanf를 쓸 수 있다는 의미가 된다.
- 구조를 살펴보면 메인함수 위의
int add(int x, int y)
는 함수의 원형을 의미한다. 밑에
에서 사용자 정의 함수가 있는데 return x + y;가 #include<stdio.h> 밑에 함수의 원형으로 돌아감을 의미한다. 이는 함수 밖의 명령을 의미한다.int add(int x, int y) { return x + y; }
- main은 주함수라 하여 꼭 하나는 있어야 하는 것. hello world를 찍은 그런 함수에서는 main함수 하나만으로도 충분히 가능하다고 함.
- 그런데 문제가 복잡해지면서 여러개의 함수를 나누는 것이 필요해지는 것.
- add라는 함수를 따로 만들어서 불러다 쓰는 형태로 하겠다 하는 것을 사용자 정의 함수라고 얘기한다.
함수 내용 정리
C언어 구조는 C프로그램은 여러개의 함수로 구성되어있다. 함수는 앞에서 말한 모듈이라는 용어를 C에서는 함수라고 표현한다. 이 함수는 독립적으로 수행할 수 있는 프로그램 단위를 의미한다. 그래서 C는 printf, scanf처럼 시스템에서 제공하는 라이브러리 함수, main함수, 사용자 정의함수로 나눌 수 있다.
C프로그램 실행 순서
- C프로그램은 여러 함수들의 집합으로 이뤄져 있다.
- 실행 순서는 #include<stdio.h>에서 밑으로 내려간다. 실행순서는 밑에서 아래, 왼쪽에서 오른쪽이다.
- 처음 찾아가는 곳은 main이다. main이 먼저 실행된 후 변수 선언, 읽어들이기, 함수 호출. 함수호출이 일어나면 그 상태에서 다른 함수로 가게 되며, 다른 함수에서 우리가 처리해야할 부분의 데이터를 처리한 후 더한 값을 가지고 돌아오게 된다. 돌아오면 add(a, b)의 값이 들어와 sum이라는 변수에 들어가게 된다. **
요약
- 일반적인 프로그램 구조 : 모듈
- C프로그램 구조 : 함수
- C프로그램 실행 순서
반응형
'컴퓨터공학입문' 카테고리의 다른 글
2 - 3 데이터 타입(data types) (0) | 2019.08.25 |
---|---|
2 - 2 변수와 상수 (0) | 2019.08.25 |
1 - 4 프로그래밍 개발 환경 (0) | 2019.08.25 |
1 - 3 컴퓨터개요_프로그래밍 언어 종류 (0) | 2019.08.23 |
1 - 2 컴퓨터개요_컴퓨터와 자료표현 (0) | 2019.08.23 |