λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
C μ–Έμ–΄/Basics

[Cμ–Έμ–΄] ν”„λ‘œκ·Έλž¨κ΅¬μ„±μš”μ†Œ : ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μ‚¬μš©λ²•

by IworldT 2021. 9. 16.
λ°˜μ‘ν˜•

ν•¨μˆ˜ Function

νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 처리 단계듀을 κ΄„ν˜Έλ‘œ λ¬Άμ–΄μ„œ 이름을 뢙인 κ²ƒμœΌλ‘œ. ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„κ°€ λœλ‹€.

μš°λ¦¬κ°€ μˆ˜ν–‰ν•˜κ³ μž ν•˜λŠ” κΈ°λŠ₯을 길게 ν’€μ–΄ μ“Έ μˆ˜λ„ μžˆμ§€λ§Œ, 그것을 λ¬Άμ–΄ ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ” 것이 ν”„λ‘œκ·Έλž˜λ°μ˜ 기초라고 λ³Ό 수 μžˆλ‹€.

ν•¨μˆ˜μ˜ λ‹¨μœ„λŠ” λ‹€μ–‘ν•˜λ‹€. ν•¨μˆ˜ν™” ν•  λ²”μœ„λ₯Ό μ§€μ •ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ§œλŠ” 것이 κ°€μž₯ κΈ°λ³Έμ μ΄λ©΄μ„œλ„ μ–΄λ ΅λ‹€. μ΄λŠ” 곧 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ— 직결되기 λ•Œλ¬Έμ΄λ‹€.

 

ν•¨μˆ˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κΈ° 전에, 일단 ν•¨μˆ˜λ₯Ό μ™œ μ‚¬μš©ν•˜λŠ”μ§€ λΆ€ν„° μ•Œμ•„λ³΄μž.

 

 ν•¨μˆ˜κ°€ ν•„μš”ν•œ 이유 

λ‹€μŒκ³Ό 같은 예제 μ½”λ“œλ₯Ό 보자.

int main(void){
    int x, y, sum, avg;
    prinft("두 개 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€ : ");
    scanf("%d %d", &x, &y);				//두 개의 μ •μˆ˜λ₯Ό μž…λ ₯ λ°›λŠ” λΆ€λΆ„, x와 y에 μ €μž₯λœλ‹€.
    
    //두 개 μ •μˆ˜μ˜ ν•©
    sum=x+y;
    printf("두 μ •μˆ˜μ˜ ν•© : %d", sum);
    
    //λ‘κ°œ μ •μˆ˜μ˜ 평균
    avg=(x+y)/2;
    printf("두 μ •μˆ˜μ˜ 평균 : %d", avg);
}

x와 y 두 개의 μ •μˆ˜ 값을 μž…λ ₯을 λ°›μœΌλ©΄ ν•©κ³Ό 평균을 κ΅¬ν•΄μ£ΌλŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μ΄λ‹€.

그런데 μ½”λ“œλ₯Ό 보면, 두 μ •μˆ˜μ˜ 합을 κ³„μ‚°ν•˜λŠ” 뢀뢄인 x+yκ°€ 평ꡰ을 κ³„μ‚°ν•˜λŠ” 뢀뢄에도 ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

μ΄λ ‡κ²Œ μ€‘λ³΅λ˜λŠ” 뢀뢄을 ν•¨μˆ˜λ‘œ ν‘œν˜„ν•˜κ³€ ν•œλ‹€. λ¬Όλ‘  μ΄λŠ” 무척 κ°„λ‹¨ν•œ μ½”λ“œμ΄λ―€λ‘œ μœ„μ™€κ°™μ΄ μž‘μ—…ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.

 

또 λ‹€λ₯Έ 예제λ₯Ό ν™•μΈν•΄λ³΄μž.

int main(void){

    int x, y, sum, avg;
    prinft("두 개 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€ : ");
    scanf("%d %d", &x, &y);				//두 개의 μ •μˆ˜λ₯Ό μž…λ ₯ λ°›λŠ” λΆ€λΆ„, x와 y에 μ €μž₯λœλ‹€.
    
    //두 개 μ •μˆ˜μ˜ ν•©
    sum=x+y;
    printf("두 μ •μˆ˜μ˜ ν•© : %d", sum);
    
    //λ‘κ°œ μ •μˆ˜μ˜ 평균
    avg=(x+y)/2;
    printf("두 μ •μˆ˜μ˜ 평균 : %d", avg);
    
    //μ„Έ 개 μ •μˆ˜μ˜ 볡합연산
    int a, b, c;
    printf("μ„Έ 개 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ‹œμ˜€ : ");
    scanf("%d %d %d", &a, &b, &c);		//μ„Έ 개의 μ •μˆ˜λ₯Ό μž…λ ₯ λ°›λŠ” λΆ€λΆ„, a와 b, c에 μ €μž₯λœλ‹€.
    printf("a+b-c = %d", a+b-c);
    
    printf("λλ‚¬μŠ΅λ‹ˆλ‹€");
    
}

이 ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ€ 두 개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›κ³ , ν•©κ³Ό 평균을 κ΅¬ν•˜κ³ , μ„Έ 개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ 볡합연산을 ν•˜λŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  μžˆλ‹€. 그런데 κ·Έ κΈ°λŠ₯을 ν•œ ν”„λ‘œκ·Έλž¨ μ•ˆμ— λͺ¨λ‘ ν’€μ–΄μ“°κ³  μžˆμœΌλ‹ˆ, 보기에도 λΆˆνŽΈν•œ μ½”λ“œκ°€ λœλ‹€.

μœ„μ—μ„œ ν•¨μˆ˜λ‘œ μ„€μ •ν•΄μ•Ό ν•˜λŠ” 뢀뢄은

두 μ •μˆ˜μ˜ 합을 κ΅¬ν•˜λŠ” ν•¨μˆ˜, 두 μ •μˆ˜μ˜ 평균을 κ΅¬ν•˜λŠ” ν•¨μˆ˜, μ„Έ μ •μˆ˜μ˜ 평균을 κ΅¬ν•˜λŠ” ν•¨μˆ˜ 정도가 λ˜κ² λ‹€. 그럼 λ‹€μŒκ³Ό 같은 ꡬ쑰가 λœλ‹€.

 

 

Main의 μ™ΈλΆ€μ—μ„œ ν•„μš”ν•œ ν•¨μˆ˜λ“€μ„ μ •μ˜ν•˜κ³ , Main은 κ·Έ ν•¨μˆ˜λ“€μ„ κ°„λ‹¨νžˆ κ°–λ‹€ μ“°λ©΄ λœλ‹€. 이λ₯Ό  ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€  라고 ν•œλ‹€.

μ΄κ²ƒμ˜ μž₯점은 λ³΅ν•©μ—°μ‚°ν•¨μˆ˜μΈ compκ°€ μ§€κΈˆμ€ x+y-zμ΄μ§€λ§Œ, x*y/z둜 λ°”λ€Œμ–΄λ„ Main의 μ½”λ“œμ—λŠ” 변함이 μ—†λ‹€λŠ” 것이닀. μ΄λŠ” 큰 ν”„λ‘œμ νŠΈμ—μ„œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ 높이고 μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬μ€€λ‹€.

 

 

 ν•¨μˆ˜ λ§Œλ“€κΈ° 

ν•¨μˆ˜λŠ” λ³€μˆ˜λ₯Ό λ°›μ•„ κ·Έ λ³€μˆ˜λ‘œ μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 역할을 ν•œλ‹€. 이 λ•Œ, κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©΄μ„œ 생긴 값을 λ°˜ν™˜ν•΄μ€„ 수 μžˆλ‹€. λ°›λŠ” λ³€μˆ˜λŠ” ν•¨μˆ˜ 이름 μ˜†μ˜ κ΄„ν˜Έ μ•ˆμ— λͺ…μ‹œν•΄μ€€λ‹€.

이 λ•Œ return 문을 μ‚¬μš©ν•˜μ—¬ 값을 λ°˜ν™˜ν•΄μ£Όλ©°, 이 λ°˜ν™˜ν•˜λŠ” λ°μ΄ν„°μ˜ νƒ€μž…μ— 따라 ν•¨μˆ˜μ˜ νƒ€μž…μ΄ 정해진닀. λ˜λŠ” λ‹¨μˆœνžˆ 좜λ ₯μ΄λ‚˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•  λΏμ΄μ–΄μ„œ 값을 λ°˜ν™˜ν•  ν•„μš”κ°€ 없을 수 μžˆλ‹€. 이 λ•Œ ν•¨μˆ˜μ˜ νƒ€μž…μ€ void이닀.

그럼 ν•¨μˆ˜μ˜ νƒ€μž…μ„ μ§€μ •ν•˜κΈ° μœ„ν•΄ μžλ£Œν˜•μ— λŒ€ν•΄ κ°„λ‹¨νžˆ μ•Œμ•„λ³΄μž.


 μžλ£Œν˜• ( = νƒ€μž… ) 

 μžλ£Œν˜•μ€ μ •μˆ˜ν˜•(숫자, μ†Œμˆ˜X), μ‹€μˆ˜ν˜•(숫자, μ†Œμˆ˜O), λ¬Έμžν˜•(κΈ€μž)둜 이루어져 μžˆλ‹€.

 μ •μˆ˜ν˜• 

  int , long, short λ“±

 μ‹€μˆ˜ν˜•

  float, double λ“±

 λ¬Έμžν˜•

  char λ“±


 

그럼 λ‚΄κ°€ λ°˜ν™˜ν•˜κ³ μž ν•˜λŠ” 값이 숫자라면 intλ‚˜ float νƒ€μž…μ˜ ν•¨μˆ˜λ₯Ό, λ°˜ν™˜ν•˜κ³ μž ν•˜λŠ” 것이 문자라면 char νƒ€μž…μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ μ£Όλ©΄ λœλ‹€.

 

예제 μ½”λ“œλ₯Ό 보자.

int plus(int x, int y)
{
	return x+y;		//x와 yλ₯Ό λ”ν•œ 값을 λ°˜ν™˜
}

float avg(int x, int y)
{
	return (x+y)/2;	//x와 y의 평균값을 λ°˜ν™˜
}

char msg()
{
	return "계산이 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€!"	//계산 μ™„λ£Œ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜
}

void getStart()
{
	printf("계산을 μ‹œμž‘ν•˜κ² μŠ΅λ‹ˆλ‹€...");	//화면에 μ‹œμž‘ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œ
}


//μ‹€μ œ ν”„λ‘œκ·Έλž¨ λΆ€λΆ„
int main(void){
	
    int x, y;
    
	printf("두 개의 μ •μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
    scanf("%d %d", &x, &y);				//μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ x와 y에 μ €μž₯
    
    getStart();							//getStartν•¨μˆ˜ 호좜
    
    printf("ν•© : %d", plus(x,y));		//plusν˜ΈμΆœν•˜μ—¬ 화면에 ν‘œμ‹œ
    
    printf("평균 : %f", avg(x,y));		//avg ν˜ΈμΆœν•˜μ—¬ 화면에 ν‘œμ‹œ
    
    printf("%c", msg());				//msg ν˜ΈμΆœν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό 화면에 ν‘œμ‹œ
    
}

 

getStart()λŠ” λ°˜ν™˜ν˜• 없이 직접 printf둜 화면에 ν‘œμ‹œν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ―€λ‘œ void νƒ€μž…μ„ μ‚¬μš©ν–ˆλ‹€.

μ •μˆ˜μ˜ λ”ν•˜κΈ° λΉΌκΈ°λŠ” μ •μˆ˜λ°–μ— μ•ˆλ‚˜μ˜€λ―€λ‘œ λ°˜ν™˜ν˜•μ΄ int여도 λ˜μ§€λ§Œ, λ‚˜λˆ„κΈ°λ‚˜ κ³±ν•˜κΈ°λ₯Ό μˆ˜ν–‰ν•  경우 μ†Œμˆ«μ μ΄ μžˆλŠ” μ‹€μˆ˜ν˜•μ΄ λ‚˜μ˜¬ 수 μžˆμœΌλ―€λ‘œ λ°˜ν™˜ν˜•μ„ float λ˜λŠ” double둜 지정해주어야 ν•œλ‹€.

 

 

ν•¨μˆ˜λž€? ν•¨μˆ˜, function, Cμ–Έμ–΄ , C , μžλ£Œν˜• , return , νƒ€μž… , data type , ν•¨μˆ˜ μž‘μ„±ν•˜κΈ° , ν•¨μˆ˜ λ§Œλ“€κΈ° , ν•¨μˆ˜ 예제 , μ—°μ‚°

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€