3.1 구조적 프로그래밍과 함수
구조적 프로그래밍의 특징은 네 가지가 있다.
1) 프로그래밍의 흐름이 순차적이다. 즉 진행 순서가 위에서 아래로 흘러가면서 순서대로 실행된다.
2) 조건에 따른 분기를 통해 흐름을 제어할 수 있어야 한다. 즉 순차적으로 진행하다가 조건을 만나면 흐름이 바뀌기도 하고, 다시 합쳐지기도 하는 프로그래밍이 가능해야한다.
3) 반복문을 사용해서 프로그래밍의 흐름을 반복하여 수행할 수 있다는 것이다.
4) 기능을 모듈화 할 수 있어야 한다. 이는 별도의 기능을 함수로 구현한다는 의미이다.
3.2 함수를 사용하는 이유
매번 수행 방법은 같지만 입력은 다른 일을할 때 함수를 사용하면 입력이 달라지더라도 쉽게 모듈을 재사용할 수 있다.
3.3 함수의 선언
함수의 선언 형식으로는 '출력 데이터형 함수이름(입력 자료형과 변수, 입력 자료형과 변수, ...);'의 형식으로 작성한다. 참고로 출력 또는 입력 자료형이 없을 때는 void라고 쓰거나 아무 것도 적지 않는다.
3.5 함수의 결과값 돌려주기
만약 내가 만든 함수에서 어딘가의 입력으로 사용하고 싶다면 반환하는 값이 필요하고, 단순히 출력만 한다면 void 자료형으로 마무리해도 된다.
함수는 1)함수 선언 2)main에서 호출 3) 함수의 몸체 순서대로 작성하는 것이 가독성에 좋다.
함수의 몸체에는 함수 선언 부분 코드에서 세미콜론을 뺀 나머지를 그대로 적고, 중괄호 안에 함수가 수행할 일(소스코드)를 작성한다. 이를 함수를 정의한다라고 한다. 결과 값에 따라 자료형을 정해주면 된다.
return은 함수를 호출한 프로그램에 호출된 함수의 실행 결과 값을 돌려줄 때 사용한다.
Tip) 함수에서 값을 돌려주지 않고, 함수를 호출한 곳으로 바로 제어가 넘어갈 때는 결과 값을 입력하지 않는다. 그냥 return;이라고만 작성한다.
위 코드에서 main 함수에 앞서 sum을 int 자료형으로 선언했는데 이유가 sum 함수에 가기 전에 main 함수에서 sum을 한 번 읽기 때문이고, sum으로 받는 결과 값이 4바이트로 충분히 계산 가능한 정수 값이라 그렇다. 여기서 먼저 선언해주지 않으면 컴파일 과정에서 오류가 발생하게 된다. 여기서 아래와 같이 코드를 작성해도 같은 결과값이 나오는데 한 번 확인해보자
sum 함수를 main 함수 이전에 따로 선언을 하지 않고, 컴파일에서 오류를 내지 않기 위해 아래에 있던 sum 함수를 그대로 위에 가져와도 같은 결과가 나온다. 하지만 이렇게 작성했을 때 문제점이 있다. 바로 함수가 많아지면 가독성이 상대적으로 안 좋아진다는 것이다. 예를 들어 sum 이외에 많은 함수들을 따로 선언해주지 않고, 이렇게 main 함수 위에 정의하게 되면 main 함수는 끝없이 아래로 내려가 찾기 힘들어질 것이다. 그렇기 때문에 좋은 프로그래머라면 main 함수를 가장 위에 위치시키는 것이 바람직할 것이다.
Tip) scanf() 함수
이는 입력을 받는 함수로 주로 키보드 입력을 받는다. C 언어 코드 수행 중 scanf() 함수를 만나면 수행을 멈추고 화면에는 입력을 받기 위해 커서가 깜빡거린다. 사용자가 입력을 해주기 전까지 대기하게 된다.
이 함수의 기본적인 형식은 scanf("%d", &a);와 같이 되는데 &는 주소 연산자이다. 이는 함수를 통해 입력 받은 값을 변수에 저장하기 위해 사용된다.
scanf() 함수를 사용할 때 오류가 나온다면
1) 가장 위인 #include <stdio.h> 위에 #define _CRT_SECURE_NO_WARNINGS를 적어주거나
2) scanf_s()라고 적어주면 오류가 없어진다.
'C언어' 카테고리의 다른 글
[모두의 C언어] <2장> 3주 동안 C언어 부시기 요약(7월 1일~7월 21일) (0) | 2021.07.16 |
---|---|
[모두의 C언어] <1장> 3주 동안 C언어 부시기 요약(7월 1일~7월 21일) (0) | 2021.07.16 |
[모두의 C언어] 프로그래머로서의 메모리에 대한 자세 (0) | 2021.07.02 |
[모두의 C언어] 2.9 변수 사용 시 주의점 (0) | 2021.07.01 |
[모두의 C언어] 2.7 문자 상자 만들기: 문자 자료형과 아스키 코드 (0) | 2021.07.01 |