* 함수는 자기자신을 호출할수 있다.
* 자기자신을 호출함으로써 반복문을 흉내낼 수 있다.
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;
}