함수 2
배열을 함수의 인자로 전달
int SumArray(int Array[4], ...)
{
...
}
- 일반적으로 배열 명에는 빈 대괄호 []를 사용한다.
- 지금 같은 경우는 크기 4짜리로 고정
int main()
{
int Sum, a[] = {....};
Sum = SumArray(a,5); // 함수 호출
...
return 0;
}
- 함수 호출 시에는 배열명만 적으면 된다.
Problem 1
#include <stdio.h>
int SumArray(int Array[], int Size);
int main() {
int a[] = {10, 5, 15, 25, 7};
int Sum;
Sum = SumArray(a,5);
printf("배열 원소의 합 : %d\n", Sum);
return 0;
}
int SumArray(int Array[], int Size)
{
int result = 0;
for (int i = 0; i < Size; i++)
result += Array[i];
return result;
}
// 프로세스가 시작되었습니다..
> 배열 원소의 합 : 62
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
double SelectSum(double Array[], int size);
int main() {
double a[] = {20, 10, 5, 8, 28};
int size = 0;
size = sizeof(a)/sizeof(a[0]);
printf("10보다 큰 배열 원소의 합 : %.2f\n",SelectSum(a, size));
return 0;
}
double SelectSum(double Array[], int size)
{
double Sum = 0;
for (int i = 0; i <= size; i++){
Sum = (Array[i] > 10) ? (Sum + Array[i]) : (Sum + 0);
}
return Sum;
}
// 프로세스가 시작되었습니다..
> 10보다 큰 배열 원소의 합 : 48.00
// 프로세스가 종료되었습니다.
재귀함수
재귀 호출
- 함수에서 그 함수를 다시 호출하는 것
재귀함수
- 재귀호출을 구현한 함수
Problem 1
#include <stdio.h>
int factorial(int n);
int main() {
int fact_num;
fact_num = factorial(10);
printf("10 팩토리얼 : %d\n", fact_num);
return 0;
}
int factorial(int n)
{
if (n <= 1)
return (1);
else
return (n * factorial(n-1));
}
// 프로세스가 시작되었습니다..
> 10 팩토리얼 : 3628800
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int sum(int a);
int main() {
int input, s = 0;
printf("양의 정수를 입력하세요 : ");
scanf("%d", &input);
s = sum(input);
printf("재귀함수를 이용한 1부터 %d까지 합 : %d\n", input, s);
return 0;
}
int sum(int a)
{
if (a <= 1)
return 1;
else
return a + sum(a-1);
}
// 프로세스가 시작되었습니다..
> 양의 정수를 입력하세요 : 4
재귀함수를 이용한 1부터 4까지 합 : 10
// 프로세스가 종료되었습니다.
표준 함수
절댓값 1 (abs)
int abs(int a)
절댓값 2(fabs)
double fabs(double a)
절댓값 3(labs)
long labs(long a)
제곱(pow)
double pow(double x, double y) //x^y
제곱근(sqrt)
double sqrt(double x);
- x > 0 실수만 가능
Example
#include <stdio.h>
#include <math.h> // 수학 관련 헤더파일
int main() {
printf(" i i제곱 i 세제곱 제곱근(sqrt)\n");
printf("-----------------------\n");
for (int i = 1; i < 10; i++){
printf("%3d %7.1f %9.1f %9.1f\n",i,pow(i,2),pow(i,3),sqrt(i));
}
printf("\n");
printf("pow(2.72, 1.0) == %5.2f, ", pow(2.72,1.0));
printf("sqrt(64) == %5.2f\n", sqrt(64));
printf("abs(-20) == %5d, ", abs(-20));
printf("ceil(5.1) == %5.2f, ", ceil(5.1));
printf("floor(3.9) == %5.2f\n", floor(3.9));
return 0;
}
// 프로세스가 시작되었습니다..
> i i제곱 i 세제곱 제곱근(sqrt)
-----------------------
1 1.0 1.0 1.0
2 4.0 8.0 1.4
3 9.0 27.0 1.7
4 16.0 64.0 2.0
5 25.0 125.0 2.2
6 36.0 216.0 2.4
7 49.0 343.0 2.6
8 64.0 512.0 2.8
9 81.0 729.0 3.0
pow(2.72, 1.0) == 2.72, sqrt(64) == 8.00
abs(-20) == 20, ceil(5.1) == 6.00, floor(3.9) == 3.00
// 프로세스가 종료되었습니다.
랜덤 기준 함수
void srand( unsigned int seed)
- 부호가 없는 값을 기준(시작값)으로 설정할 수 있다.
랜덤 함수
int rand( void)
Example 1
#include <stdio.h>
#include <stdlib.h> // rand(), srand()를 위한 헤더파일 포함
#include <time.h> // time()을 위한 헤더파일 포함
int main() {
srand((unsigned) time(NULL));
printf("1~100 사이의 난수 5개 : \n");
for (int i = 0; i < 5; i++){
printf("%5d ", rand()%100 + 1); // + 1 안하면 0이 나올 가능성이 존재
}
printf("\t");
return 0;
}
// 프로세스가 시작되었습니다..
> 1~100 사이의 난수 5개 :
59 59 11 94 86
// 프로세스가 종료되었습니다.
Example 2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 45
int getnumber(int n);
int main() {
int n1, n2, n3, n4, n5;
srand((unsigned)time(NULL));
n1 = getnumber(MAX);
do{
n2 = getnumber(MAX);
}while(n2 == n1);
do{
n3 = getnumber(MAX);
}while(n3 == n1 || n3 == n2); //둘 중 하나라도 같으면 1 -> 돌아감
do{
n4 = getnumber(MAX);
}while(n4 == n1 || n4 == n2 || n4 == n3);
do{
n5 = getnumber(MAX);
}while(n5 == n1 || n5 == n2 || n5 == n3 || n5 == n4);
printf("로또 당첨 번호는 %d, %d, %d, %d, %d 입니다.\n", n1, n2, n3, n4, n5);
return 0;
}
int getnumber(int n)
{
return rand() % n + 1;
}
// 프로세스가 시작되었습니다..
> 로또 당첨 번호는 37, 9, 3, 31, 41 입니다.
// 프로세스가 종료되었습니다.
Problem
#include <stdio.h>
int main() {
int pascal[10][10] = {0};
for (int i = 0; i < 10; i++){
for (int j = 0; j <= i; j++){
if (i < 2 && (j == 0 || j == i)){
pascal[i][j] = 1;
}else{
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j];
}
}
}
for (int i = 0; i < 10; i++){
for (int j = 0; j <= i; j++){
printf("%d " , pascal[i][j]);
}
printf("\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
> 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
// 프로세스가 종료되었습니다.