myPutstr 함수를 만들어보자. putchat()함수를 활용하여서.

#include<stdio.h>

int	myPutstr(char *str)
{  
  while(*str)
    putchar(*str++);
  return 0;
}
int main(void){
  char str[50];
  scanf("%s",str); 
  myPutstr(str);
  return 0;
}

포인터를 활용하여 만들 수 있다. 여기서 중요한 구문은 myPutstr()함수에서 putchar(*str++) ; 구문이다. 한 자리를 출력하고 출력 후 ++ 연산으로 다음 주소로 이동한다. 이렇게 이동하다가 '\0'을 만나면 while 반복문이 False 라서 반복을 끝마친다. 공백으로 구분하기 때문에 단어만 출력할 수 있다. 1

간단하고 명확한 코드라고 할 수 있다. 

 

Posted by 뭔가느낌이
,

제급근을 구하기 위해 함수를 만들자. mySqrt()함수로 명명.

#include<stdio.h>

int	mySqrt(int num)
{ 
  int root=1;
  if(num<=1 ) return 0; 

  while (root < num/root && root * root !=num  )
    root++;
  if(root * root == num) return root ;
  return 0;
}
int main(void){
  int num,result ;
  scanf("%d",&num);
  result = mySqrt(num);
  printf("\nmySqrt(%d) : %d",num,result);
}

mySqrt() 함수를 만들어 봤다.  위에서 중요한 구문은 while(root<num/root && root *root !=num) 입니다. root는 하나씩 값이 올라가면서 제곱근인지 확인해야 합니다. 확인하는 방법이 독특합니다. root로 num을 나누었을 때 그 값은 root 보다 커야 합니다. 크다는 것은 한 번 더 나눌 수 있다는 의미입니다. 그렇다면 아직 root를 제곱해서 num을 만들 수 없는 수라는 의미입니다. 그래서 root를 한 번 더 +1 하여야 하는 근거가 됩니다.

그리고 root * root 를 해서 num보다 작으면 한 번 더 root를 ++ 합니다.  제곱근을 어떻게 구할 수 있을까 고민했지만 드디어 알아냈습니다. 많은 분들이 이제 점점 수학을 컴퓨터 언어로 변환하는 것을 잘할 수 있으면 좋겠어요.

 

구할 수 없으면 0을 출력
25의 제곱근 5

 

Posted by 뭔가느낌이
,

재귀 함수를 만들고 팩토리얼을 구해보자.

#include<stdio.h>

int	factorial(int num)
{ 
  if(num<=0 ) return 0;
  if(num==1) return 1;
  return num*factorial(num-1);
}
int main(void){
  int num,result ;
  scanf("%d",&num);
  result = factorial(num);
  printf("factorial(%d) : %d",num,result);
}

결과 값은 다음 그림과 같다.. 재귀 함수는 함수가 결과를 반환하기 전에 자기 자신을 다시 실행하는 방식이다. 스택함수에서 반복하기 때문에 반드시 종료 조건을 넣어야 한다. 스택 함수는 한계가 명확하기 때문이다. 용량이 1mb 라서 넉넉한 공간이 아니다. 스택함수는 이해하기가 어려울 수 있다. 한 번에 실행하는 방식이 아니고 스택 함수에 차곡 차곡 쌓아 둔 자료를 이후에 꺼내서 활용한다. 그래서 느리다. 

재귀 함수는 트리구조에서 사용한다. 폴더 구조를 보면 폴더 안에 다시 폴더가 있다. 이런 구조에 재귀 함수를 사용한다. 정확하게는 폴더를 직접 구현해 본 적이 없어서 이론적으로만 알고 있다. 

장점 : 코드를 줄일 수 있다. 

단점 : 용량이 작다. 느리다. 이해하기 어려울 수 있다. 

 

팩토리얼 함수 결과, 10팩토리얼 결과값 출력 

 

Posted by 뭔가느낌이
,