본문 바로가기

여러가지

기말고사 대비 프기실 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. 홀수 짝수를 구분하는 함수를 만들어보자. 사실 이 함수는 아주 여러가지 방법으로 만들 수 있다.

  먼저 자기만의 홀수 짝수 구분 함수를 만든 후 다음 정답과 비교해보자. 그리고 안보고 정답처럼 다시 짜보자.

그리고 코드의 첫번째 줄은 왜 썼는지 생각해보자. 모르겠으면 지워보면 안다.