10장 함수의 기본문법 이해

JongseokLee·2021년 7월 31일
0

C 프로그래밍 기초

목록 보기
10/15
post-thumbnail

10장 함수의 기본문법 이해

1. 함수 이해하기

1) 함수란?

  • 반복되어 실행될 명령문들을 모아 놓은 모듈
  • 소스코드의 중복 회피를 통한 단순화

2) 라이브러리(Library) 함수 : C언어 컴파일러에서 제공하는 함수

  • include 문으로 라이브러리 지정함
  • 라이브러리에 정의된 함수를 호출하여 사용

3) 사용자 정의(User defined)함수 : 프로그래머가 만들어서 사용하는 함수

  • 반환값 규칙
    • 반환값이 있는 경우 : return문에서 반환하는 값의 자료형과 일치해야 함
    • 반환값이 없는 경우 : void로 정의하고, return문을 생략할 수 있음

4) 입력 매개 변수

  • 입력 매개 변수 지정하지 않아도 됨
  • 입력 매개 변수의 개수는 원하는 만큼 정의하여 사용

5) 사용자 정의 함수 호출

  • 인수 : 함수를 호출할 때 전달하는 값
  • 매개변수 : 함수를 호출할 때 전달되는 인수의 값을 저장하는 변수
  • 인수와 매개변수는 나열한 순서대로 1:1매칭
  • 인수와 매개변수는 자료형이 일치하여야 함

6) 인수 전달 방법

  • 값에 의한 호출(call by value) : 인수의 값이 전달됨
  • 참조에 의한 호출(call by reference) : 인수의 포인터(메모리 주소값)가 전달됨

7) 함수의 원형(prototype)

  • 함수를 정의하기 전에 함수가 존재한다는 것을 선언하는 것
  • 함수의 머리부분을 동일하게 선언하고, 세미콜론(;)을 마지막에 붙혀줌

2. 함수 활용하기

1) 지역 변수

  • 코드 블록(중괄호({})) 내에서만 사용 가능
  • 함수의 매개변수는 지역 변수임
  • 지역 변수 선언 후 초기화하여 사용해야 함

2) 전역 변수

  • 소스 파일 전체에서 사용 가능
  • 전역 변수와 지역 변수 이름 중복 : 지역 변수가 우선됨

3) 외부 변수와 외부 함수

  • 하나의 프로젝트 내부에 두 개 이상의 소스 파일에서 공유하는 변수 또는 함수
    • exterm 키워드를 사용하여 변수 선언

4) 레지스터(register) 변수

  • CPU의 레지스터 저장 공간을 사용하는 변수

5) 정적(static) 변수

  • 정적 지역 변수
    • 지역 변수 선언 시 static 키워드 지정
  • 정적 전역 변수
    • 전역 변수 선언 시 static 키워드 지정

6) main() 함수의 매개변수

  • 첫 번째 매개변수 : 두 번째 매개변수 배열 요소의 개수
  • 두 번째 매개변수 : 문자열 포인터 배열

7) 함수 포인터란?

  • 함수를 가리키는 포인터 변수
  • 가리키고자 하는 함수의 반환 자료형과 매개변수 자료형을 동일하게 선언

3. 단원 실습

1) 버블 정렬(bubble sort) 알고리즘을 구현하시오
2) 함수를 2개 이상 작성하시오

#include <stdio.h>
#define SIZE 5
void input_data();
void output_data();
extern void sorting();
int data[SIZE];

int main() {
	input_data();    // 키보드로 5개의 데이터를 입력받아 배열에 입력
	output_data();  // 배열을 화면에 출력
	sorting();         // 버블정렬
	output_data();  // 배열을 화면에 출력
}
void input_data() {
	for (int i = 0; i < SIZE; i++) {
		printf("Input data[%d]=", i);
		scanf_s("%d", &data[i]);
	}
}
void output_data() {
	for (int i = 0; i < SIZE; i++) {
		printf("%4d", data[i]);
	}
	printf("\n");
}

===================================================================================

#include <stdio.h>
#define SIZE 5
extern int data[SIZE];

void swap(int* one, int* two) {
	int temp = *one;
	*one = *two;
	*two = temp;
}
void sorting() {
	for (int i = 0; i < SIZE - 1; i++) {
		for (int j = i+1; j < SIZE; j++) {
			if (data[i] > data[j]) {
				swap(&data[i], &data[j]);
			}
		}
	}
}

<Result>


Input data[0]=10
Input data[1]=6
Input data[2]=74
Input data[3]=64
Input data[4]=52
  10   6  74  64  52
   6  10  52  64  74
profile
DataEngineer Lee.

0개의 댓글

관련 채용 정보