// 사용자로부터 두 정수를 입력받아 x의 y승이 몇인지 계산하여 알려주는 프로그램

#include <stdio.h>

int get_integer(void);
int power(int x, int y);

int main (void)
{
	int a,b;
	a = get_integer();
	b = get_integer();
	printf("%d의 %d승은 %d입니다.", a, b, power(a,b));
	return 0;
}

int get_integer(void)
{
	int n;
	printf("정수를 입력하세요.:");
	scanf("%d", &n);
	return n;
}

int power(int x, int y)
{
	int result=1;
	int i;
	for (i=1;i<=y;i++)
	{
		result *= x;
	}
	return result;
}

추가팁 : n의 0승은 1인데, 해당 프로그램은 이 부분에 대한 결과값을 올바르게 1로 출력한다. 이 부분에서 이상하게 생각할 수 있으나 power 함수의 for문이 작동하지 않아 초기에 넣은 result 1 값이 그대로 나오기 때문에 따로 예외처리를 해주지 않아도 된다.

 

 

 

함수 내에서의 선언으로 전역 변수 생성하기

 

static int num01=1;

1. 위 내용을 함수 내에 입력할 경우 num01 이 전역 변수로 선언됨

2. 해당 함수를 처음 실행시켰을때 num01 이 전역 변수로 선언되며, 해당 함수를 재실행시킬 경우 선언할때 넣어준 static 줄은 적용되지 않으므로 만약 선언 이후 num01 += 1 과 같은 작업이 있었을 경우 다시 1로 바뀌는 것이 아니라 증가된 2를 가지고 있음

3. 해당 파일 안에서만 사용할 수 있는 변수임

 

register int i;

1. CPU 안의 레지스터에 변수가 저장됨

 

extern int for_all_files_test;

1. 전역 변수를 extern을 이용하여 서로 연결

2. 해당 for_all_files_test 변수가 선언된 파일 외의 다른 파일에서 해당 변수를 가져다가 사용할 수 있음

 

 

< 저장 유형 정리 >

1. 일반적인 경우 자동 저장 유형 사용을 권장함 (auto)

2. 자주 사용되는 변수는 레지스터 유형으로 선언할 것을 권장함 (register)

3. 변수의 값이 함수 호출이 끝나도 그 값을 유지라여야 할 필요가 있다면 지역 정적으로 선언할 것을 권장 (static)

4. 만약 많은 함수에서 공유되어야 하는 변수라면 외부 참조 변수로 선언할 것을 권장

 

 

 

 

함수 안에 함수를 넣기

 

#include <stdio.h>

// 함수 안에 함수를 넣는 형태로 팩토리얼 프로그램 생성하기

int factorial(int x);

int main(void)
{
	int i;
	scanf("%d", &i);
	printf("%d", factorial(i));
}

int factorial(int x)
{
	if(x<=1)
	{
		return(1);
	}
	else
	{
		return (x*factorial(x-1));
	}
}

+ Recent posts