함수란 하나의 특별한 작업을 수행하기 위해 독립적으로 작성한 프로그램입니다.
동일한 작업이 필요할 때마다 동일한 코드를 반복해서 표기하는 것은 비효율적 이기 때문에 이를 해결하고자 함수란 개념을 사용하였습니다.
매개변수는 함수에서 처리될 때 호출된 인수에 대응되는 변수이며 인수는 호출 프로그램에 의하여 함수에 실제로 전달되는 값이다.
인수는 매개변수와 달리 자료형이 없어도 되고 변수명을 안적어도 된다.
데이터를 저장하기 위해 프로그램에 의해 이름을 할당받는 메모리 공간이다.
블록 안에서 선언되는 변수이다.
함수 외부에서 선언되는 변수이다.
지역변수는 자동으로 초기화 되지 않으므로 사용자가 초기화를 하여야 하며
전역변수는 컴파일러가 자동으로 초기화하기 때문에 사용자가 초기화를 하지 않아도 된다.
-> ex 소스코드
void calc(int x);
int main()
{
int x = 10;
calc(x);
printf("main 함수에서 x값은 %d", x); // 10
return 0;
}
void calc(int x)
{
x = x + 10;
printf("calc 함수에서 x의 값은 %d ", x); // 20
}
참조에 의한 호출
값을 넘기는 대신 값이 저장된 메모리 주소를 함수에 넘겨주는 방법이며, 함수 호출시 인수에 "&변수명"형식으로 변수의 주소값을 넘길 수 있다.
-> 장점 : 함수로 원본이 전달되는 형태기 때문에 반환하지 않아도 변수 는 저장된다.
-> 단점 : 주소값으로 넘겨야하기 때문에 문법이 어렵다.
-> ex 소스코드
void calc(int *p);
int main()
{
int x = 10;
calc(&x);
printf("x변수의 값은 %d",x); // 20
return 0;
}
void calc(int *p)
{
*p = *p + 10;
}
문제 : 임의의 값을 입력받아 소수(Prime Number) 인지를 판별하는 프로그램
소스코드
#include <stdio.h>
int sosu(int);
int getint(void);
int main()
{
int n, result;
printf("임의의 값을 입력받아 소수(Prime Number) 인지를 판별하는 프로그램을 작성하시오.\n");
printf("=======================\n");
n = getint();
result = sosu(n);
printf("=======================\n");
if (result == 1)
{
printf("소수입니다.\n");
}
else
{
printf("소수가 아닙니다.\n");
}
printf("=======================\n");
printf("작성자 : 2017E7043 최주영\n");
return 0;
}
int sosu(int n)
{
int gap = 0;
int x;
for (x = 1; x <= n; x++)
{
if (n % x == 0)
{
gap++;
}
}
return (gap == 2);
}
int getint()
{
int n;
printf("정수를 입력하세요 ");
scanf_s("%d", &n);
return n;
}
문제 : 에라토스테네스의 체(Sieve_of_Eratosthenes)를 이용하여 2~12345 사이에 소수가 몇 개인지 출력하는 프로그램과 순서도를 작성하시오.
소스코드
#include <stdio.h>
int sosu(int);
int main()
{
int n, result , cnt=0;
printf("문제 : 에라토스테네스의 체(Sieve_of_Eratosthenes)를 이용하여 2~12345 사이에 소수가 몇 개인지 출력하는 프로그램과 순서도를 작성하시오.\n");
printf("=====================================\n");
for (n = 2; n <=12345; n++)
{
result = sosu(n);
if (result == 1)
{
cnt++;
}
}
printf("2부터 12345까지 수 중 소수의 개수는 %d개입니다.\n",cnt);
printf("=====================================\n");
printf("작성자 : 2017E7043 최주영\n");
return 0;
}
int sosu(int n)
{
int gap = 0;
int x;
for (x = 1; x <= n; x++)
{
if (n % x == 0)
{
gap++;
}
}
return (gap == 2);
}
#include <stdio.h>
int sosu(int n)
{
int i;
if (n == 1 || n == 0)
{
return 1;
}
else
{
return n * sosu(n - 1);
}
}
int main()
{
printf("문제 : 재귀함수를 이용하여 100!을 구하는 프로그램을 작성하시오.\n");
printf("========================================\n");
printf("%lld\n", sosu(100));
printf("========================================\n");
printf("작성자 : 2017E7043 최주영");
return 0;
}