기말고사 대비 프기실 1강. Function
우리는 숫자를 출력할 때 printf("%d",value); 라는 코드를 쓴다.
하지만 숫자를 100번 출력하게 되면 printf("%d",value); 라는 코드를 100번 적어야 한다.
이건 엄청나게 귀찮은 일이다.
그래서 함수를 만들어서 쓴다.
void pr (int a)
{
printf ("%d",a);
}
라고 함수를 만든 후, 이제 printf("%d",value); 를 써야할때 마다 pr (value); 라고 써주면 된다.
함수가 정말로 필요할 때는 더 복잡한 코드를 짤때이다.
값을 입력받고 그 값의 제곱을 출력하는 함수를 만들어보자.
void square ()
{
int a;
printf ("please input number\n");
scanf ("%d",&a);
printf ("square is %d",a*a);
}
라고 함수를 만들고 쓸때는 square ();만 치면 위의 코드와 똑같은 기능을 한다.
함수를 만들때는 main함수 위에 만들어져야 한다.
컴퓨터는 명령어를 순서대로 읽는데 square라는 함수를 못찾아서 에러를 낼 것이다.
만약에 main함수 뒤에 만들고 싶다 그러면
void square ();
이라고 main 함수 앞에 쳐줘야 한다.
더하기 함수를 배워보자
int add (int a,int b)
{
return a+b;
}
그리고 메인 함수 안에서
int x = 2;
int y = 3;
int sum = add(x,y);
printf ("%d",add(x,y));
이렇게 써줄 수 있다.
여기서부터 변태적인 부분인데, 함수 안에 함수를 넣을 수 있다.
숫자를 적으면 그 숫자까지 더하는 함수를 만들어보자.
예를 들어 5를 입력하면 5+4+3+2+1 인 15가 나오는 함수이다.
int allplus (int a)
{
if (a == 0)
return 0;
else
return a+allplus(a-1);
}
이런 함수를 만들때 쉽게 생각하는 법은 가장 쉬운 부분부터 생각하는것이다.
예를 들어 0은 0이다. 따라서 일단 0을 출력한다고 적는다.
1은 어떤가? 1은 1+0 이라 적어도 된다. 따라서 a+allplus(a-1)이라는게 생각이 난것이다.
더 알아보기
함수앞에 붙이는 void나 int는 무엇인가?
void는 return값이 없을때 붙인다. int 값을 return할때는 int를 붙이고
float값을 출력할때는 float를 붙인다.
Function은 값을 바꿀 수 없다.
그저 return a;로 값을 내뱉을뿐, main안에 있는 보통 변수는 바뀌지 않는다.
문제 해결하기
1. 팩토리얼 함수를 만들어 보자. 단, 순환하게 만들어야한다.
예를 들어 4를 입력하면 4*3*2*1 값인 24가 return되야 한다.
2. 피보나치 수열 함수를 만들어보자. 1,1,2,3,5,8.... 이 피보나치 수열이므로
4를 입력하면 3, 6을 입력하면 8과 같이 피보나치 수를 return하는 함수를 만들자.
당연하게도 순환하게 만들어야한다.
3. 홀수 짝수를 구분하는 함수를 만들어보자. 사실 이 함수는 아주 여러가지 방법으로 만들 수 있다.
먼저 자기만의 홀수 짝수 구분 함수를 만든 후 다음 정답과 비교해보자. 그리고 안보고 정답처럼 다시 짜보자.
그리고 코드의 첫번째 줄은 왜 썼는지 생각해보자. 모르겠으면 지워보면 안다.