728x90

함수(function)

: 하나의 특별한 작업을 수행하기 위해 독립적으로 작성한 프로그램

  • 프로그램을 구성하는 기본적인 구성요소

함수의 특징

  • 함수는 서로 구별되는 이름을 가지고 있다.
  • 함수는 특정한 작업을 수행한다.
  • 함수는 입력을 받을 수 있고 수행 결과를 반환할 수 있다.

 

함수의 장점

  • 함수를 사용하면 코드가 중복되는 것을 막을 수 있다.
  • 한번 작성된 함수는 여러 번 재사용할 수 있다.
  • 체계적으로 모듈화가 가능하며 유지보수가 용이하다.

 

라이브러리 함수

  • 표준 함수 라이브러리 함수는 미리 정의가 된 함수이다.
  • 함수가 정의되어 있는 파일들을 코드 시작전에 미리 포함시켜주어야한다.
  • 보통 #include 를 이용해 헤더파일을 포함하는 형식으로 사용한다.

 

사용자 정의 함수

returnType functionName ([parameter, ...]) {
}
  • return Type
    • 함수를 호출해서 처리 후 그 결과를 외부에 넘겨줄 수 있다.
    • 외부로 제공되는 이 값을 반환 값이라고 하고 이의 데이터 타입을 return Type이라 한다.
    • 반환되는 값이 없으면 void를 사용한다.
  • functionName
    • 프로그래머가 지정한 함수의 이름을 말한다.
    • 보통 기능을 이름으로 표현한다.
    🌟 함수 명에 공백은 들어갈 수 없으며, 보통 단어 사이를 구분하고자 할때는 '_' 나 대문자를 사용해 구분한다.
  • parameter
    • 함수를 호출하여 작업을 수행할 때 제공되는 값을 이야기 한다.
    • 반드시 자료형과 변수명을 각각 기술해야한다.

main() 함수의 파라미터 이용하기

#include <stdio.h>

int main(int argc, char *argv[])
{
	printf("Main_Function\n");
	printf("매개변수의 개수 : argc = %d\n", argc);
	for (int i = 0; i < argc; i++)
	{
		printf("argv[%d] = %s\n", i, argv[i]);
	}
}

🌟 main()도 사용자 정의 함수이다!
다만 프로그램의 시작이 main()에서 시작되도록 설정된 것 뿐!

 

💡

  • argc : 파라미터의 개수
  • argv : 실질적인 파라미터 배열
    └ (argv[0]은 무조건 실행 프로그램의 경로명이 들어간다.)

 

💡 *argv[] 형태로 사용하는 이유
: 2차원 배열을 사용해서 파라미터로 받은 문자열에서 문자 각각을 이용할 수 있다.

EX.
argv[2] = "Hello World!";
argv[2][0] = 'H';
argv[2][1] = 'e';

 

함수 정의

함수헤더(function header)  함수몸체(function body 로 구성

[반환형] [함수명](매개변수) //함수헤더(function header)부분
{
	printf("Hello World!");
} // {} 중괄호로 묶인 부분 : 함수몸체(function body)부분

 

함수 선언

(함수 원형(function prototyping))

  • 함수 정의 이전에 함수를 호출해야할 때 이용
  • 컴파일러에게 함수에 대하여 미리 알리는 것
  • 함수 선언 시에는 매개변수의 자료형만 적고 매개변수의 명은 적지않아도 된다.
  • 함수를 많이 선언해야할 경우 헤더파일에 정의하여 헤더파일을 포함하여 사용하는 경우가 많다.

 

함수 호출

  • 반환값이 없는 경우 : 함수명(입력데이터)
  • 반환값이 있는 경우 : 변수명 = 함수명(입력데이터)
  • 입력데이터(매개변수)는 함수 선언시 변수의 개수와 동일해야하며 없을 수도 있다.
  • 함수 정의의 목적이다.

 

매개변수와 반환값

  • 매개변수(파라미터(parameter)) : 함수에서 작업을 처리하는데 필요한 데이터
  • 매개변수의 데이터 타입을 각각 설정해야한다.

 

  • 반환값이 있는 경우 함수명 앞에 데이터 타입을 지정한다.
  • 반환값은 하나만 지정할 수 있으며 return [값] 형식으로 선언
  • return 실행 수 함수호출 종료

💡 매개변수(parameter) = 인수(argument)

 

🌟함수의 반환값이 없는 경우 void 형을 사용한다.

  • void 의 의미는 '정해지지 않은' 자료형이다!
    └ 자료형이 없는 걸 의미하진 않는다.

 

 

  • 소수 판별 프로그램
#include <stdio.h>

int is_prime(int n)
{
	int divisors = 0, x;
	for (x = 1; x <= n; x++)
{
		if (n % x == 0)
			divisors++;
	}
	return (divisors == 2);
}
int main()
{
	int n, result;
	printf("정수를 입력하시오: ");
	scanf("%d", &n);
	result = is_prime(n);
	if (result == 1)
		printf("%d은 소수입니다.\n", n);
	else
		printf("%d은 소수가 아닙니다.\n", n);
	return 0;
}

 

 

  • 에라토스테네스의 체를 이용한 소수 개수 판별 프로그램
#include <stdio.h>
int Sieve_of_Eratosthenes(int n)
{
	for (int i = n - 1; i >= 2; i--){
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int count_prime = 0;
	for(int i = 2; i <= 12345; i++){
		Sieve_of_Eratosthenes(i) ? count_prime++ : count_prime;
	}
	printf("2 ~ 12345 사이에 소수는 %d개 있습니다.\n", count_prime);
	return 0;
}

 

💡 에라토스테네스의 체 : 에라토스테네스가 고안한 소수 판별법

 

에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전

수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서

ko.wikipedia.org

 

  • 팩토리얼 구현 프로그램
#include <stdio.h>

//최대 범위 표현을 위한 데이터 타입 unsigned long long
unsigned long long Pactorial(int n)
{
	if (n == 0) return 1;
	return n * Pactorial(n - 1);
}
int main()
{
	printf("25! = %lld\n", Pactorial(25));
	return 0;
}

 

 

  • 로또 번호 생성 프로그램
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX 45
int main(void)
{
	int i;

	srand((unsigned)time(NULL));
	for (i = 0; i < 6; i++)
		printf("%d ", 1 + rand() % MAX);
		//rand 함수 범위가 0부터 시작이므로 +1을 해주어 0 반환 방지
	return 0;
}

💡rand() 함수

  • <stdlib.h> 헤더 내에 포함
  • 0부터 RAND_MAX(32767) 사이 랜덤 숫자 반환
  • 컴파일 시, 값이 고정되므로 여러번 실행해도 동일한 값 반환

 

💡 scrand() 함수

  • <stdlib.h> 헤더 내에 포함
  • 매개변수로 seed 값을 전달 받아, 랜덤 숫자 반환
  • time() 함수를 사용하여 프로그램 실행시마다 랜덤 숫자 반환 가능

 

💡 time() 함수

  • <time.h> 헤더 내에 포함
  • UCT 기준 1970년 1월 1일 0시 0분 0초 부터 경과된 시간을 초(sec)로 반환
728x90
// time()함수 내부 구현 구조체 
struct tm { 
	int tm_sec;		// 초 
	int tm_min; 	// 분 
	int tm_hour; 	// 시
	int tm_mday; 	// 일 
	int tm_mon; 	// 월 
	int tm_year; 	// 년(1900년부터)
	int tm_wday; 	// 요일 
	int tm_yday; 	// 통산 일수 [0~365]
};

 

 

 

 


 

 

 

아래 노션 페이지에 C 공부 내용에 대해 업로드 합니다!

수정사항이나 질문사항의 경우 노션 댓글로 남겨주세요!(*•̀ᴗ•́*)و ̑̑

 

 

 

C 언어 이론 정리

조건문, 반복문 사용 시 중괄호로 명령문들 묶어주기 - 명령문 1개일 때 포함 (코드 수정 시 오류 방지)

www.notion.so

 


 

개발 환경

Visual Studio 2019
Visual Studio Code

작성 플랫폼

Notion

 

728x90

'🧑‍💻 Language > C·C++' 카테고리의 다른 글

[C 이론] 10. 배열  (0) 2021.05.26
[C 이론] 9. 함수와 변수  (0) 2021.05.13
[C 이론] 7. 반복문  (0) 2021.05.03
[C 이론] 6. 조건문  (0) 2021.05.03
[C 이론] 5. 수식과 연산자  (0) 2021.05.03