* 함수는 자기자신을 호출할수 있다.

* 자기자신을 호출함으로써 반복문을 흉내낼 수 있다.


p.243_1
#include <stdio.h>

int fact(int num);

int main(void)
{
 int num, sum;

 printf("enter number: ");
 scanf("%d", &num);

 sum = fact(num);
 printf("  %d  ", sum);

 return 0;
}

int fact(int num)
{
 int sub = 1, i;

 if(num>1) {
  printf("%d  ", num);
  for(i=0; i<num; i++) sub = sub * num;
  fact(num-1);
 }
 else if(num == 1) sub = sub *1;
 
 return sub;
}


* 값에 의한 호출

- 인수의 값이 서브루틴의 형식매개변수에 복사

- 매개변수에서 일어나는 변화가 인수에 영향을 미치지 않는다.


* 참조에 의한 호출

- 인수의 주소가 매개변수에 복사된다.

- 매개변수에서 일어나는 변화가 인수에 영향을 미친다.


#include <stdio.h>


void swap(int *i, int *j);


int main(void)
{
 int num1, num2;

 num1 = 100;
 num2 = 800;

 printf("num1: %d num2: %d\n", num1, num2);
 swap(&num1, &num2);
 printf("num1: %d num2: %d\n", num1, num2);

 return 0;
}


void swap(int *i, int *j)   //정수 포인터가 가리키는 값을 교환
{
 int temp;

 temp = *i;
 *i = *j;
 *j = temp;
}


두개의 정수포인터가 함수에 전달되어 인수가 가리키는 실제 값들이 교환된다.


* 배열을 사용하는 매개변수

1.함수의 호출시 사용되는 배열과 같은 형과 크기의 배열로 매개변수 선언

2. 매개변수의 크기가 정해지지 않은 배열로 선언

*3. 배열의 기본형에 대한 포인터로 매개변수를 선언


* 명령어 - 라인 인수

int main(int argc, char argv[])


int argc - 명령어의 수를 나타낸다. 공백으로 개수 분리
              공백을 포함하는 명령어-라인인수의 경우 큰 따옴표로 묶는다.


p.251_3
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 double pounds;

 if(argc != 2) {                   //argv[0], argv[1] 두개니까
  printf("usage: CONVERT <ounces>\n");
  printf("try afain ");
 }
 else {
  pounds = atof(argv[1]) /16.0;
  printf("%lf pounds", pounds);
 }

 return 0;
}


argv[0]-실행프로그램의 이름을 가리킨다.

argv[1]-첫번째 인수를 가리킨다.


p.253_2
#include <stdio.h>

int sum(int a, int b);

int main(void)
{
 int a, b;

 printf("first number: ");
 scanf("%d", &a);
 printf("second number: ");
 scanf("%d", &b);

 printf("sum : %d    ", sum(a, b));

 return 0;
}

int sum(int a, int b)
{
 return a + b;
}

p.235_3
#include <stdio.h>

int cul(int a, int b, int c);

int main(void)
{
 int a, b, i;

 printf("1: add, 2: subtract, 3: multiply, 4: divide \nchoice: ");
 scanf("%d", &i);

 printf("first number: ");
 scanf("%d", &a);
 printf("second number: ");
 scanf("%d", &b);

 printf("result : %d    ", cul(i, a, b));

 return 0;
}

int cul(int i, int a, int b)
{
 if(i == 1) return a + b;
 else if(i == 2) return a - b;
 else if(i == 3) return a * b;
 else if(i == 4 && b != 0) return a / b;
}

Posted by 청웨일