1) 함수란?
- 반복되어 실행될 명령문들을 모아 놓은 모듈
- 소스코드의 중복 회피를 통한 단순화
2) 라이브러리(Library) 함수 : C언어 컴파일러에서 제공하는 함수
- include 문으로 라이브러리 지정함
- 라이브러리에 정의된 함수를 호출하여 사용
3) 사용자 정의(User defined)함수 : 프로그래머가 만들어서 사용하는 함수
- 반환값 규칙
- 반환값이 있는 경우 : return문에서 반환하는 값의 자료형과 일치해야 함
- 반환값이 없는 경우 : void로 정의하고, return문을 생략할 수 있음
4) 입력 매개 변수
- 입력 매개 변수 지정하지 않아도 됨
- 입력 매개 변수의 개수는 원하는 만큼 정의하여 사용
5) 사용자 정의 함수 호출
- 인수 : 함수를 호출할 때 전달하는 값
- 매개변수 : 함수를 호출할 때 전달되는 인수의 값을 저장하는 변수
- 인수와 매개변수는 나열한 순서대로 1:1매칭
- 인수와 매개변수는 자료형이 일치하여야 함
6) 인수 전달 방법
- 값에 의한 호출(call by value) : 인수의 값이 전달됨
- 참조에 의한 호출(call by reference) : 인수의 포인터(메모리 주소값)가 전달됨
7) 함수의 원형(prototype)
- 함수를 정의하기 전에 함수가 존재한다는 것을 선언하는 것
- 함수의 머리부분을 동일하게 선언하고, 세미콜론(;)을 마지막에 붙혀줌
1) 지역 변수
- 코드 블록(중괄호({})) 내에서만 사용 가능
- 함수의 매개변수는 지역 변수임
- 지역 변수 선언 후 초기화하여 사용해야 함
2) 전역 변수
- 소스 파일 전체에서 사용 가능
- 전역 변수와 지역 변수 이름 중복 : 지역 변수가 우선됨
3) 외부 변수와 외부 함수
- 하나의 프로젝트 내부에 두 개 이상의 소스 파일에서 공유하는 변수 또는 함수
- exterm 키워드를 사용하여 변수 선언
4) 레지스터(register) 변수
- CPU의 레지스터 저장 공간을 사용하는 변수
5) 정적(static) 변수
- 정적 지역 변수
- 지역 변수 선언 시 static 키워드 지정
- 정적 전역 변수
- 전역 변수 선언 시 static 키워드 지정
6) main() 함수의 매개변수
- 첫 번째 매개변수 : 두 번째 매개변수 배열 요소의 개수
- 두 번째 매개변수 : 문자열 포인터 배열
7) 함수 포인터란?
- 함수를 가리키는 포인터 변수
- 가리키고자 하는 함수의 반환 자료형과 매개변수 자료형을 동일하게 선언
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