[C] 씹어먹는 C 언어 - <13 - 1. function >

Kim Dongil·2022년 10월 20일
0

C

목록 보기
17/28

1. 이 강좌 최상단에서 이야기 했던 마술 상자를 함수로 제작해보세요

(난이도 : 못한다면 강좌를 다시 읽어보아야 할 것입니다)

#include <stdio.h>

int MagicBox(int x)
{
	x += 4;
	return x;
}

int main()
{
	int x;

	printf("마술 상자에 넣을 수를 입력 : ");
	scanf_s("%d", &x);

	printf("마술 상자에서 나온 값 : %d \n", MagicBox(x));

	return 0;
}

	

2. 어느날 귀족이 돈벌이가 시원치 않아져서 이전에는 일정하게 10000 달러씩 챙겼지만 이제 일정치 않은 수입을 얻게 되었습니다. 여러분은 slave 함수를 인자를 2 개를 가져서, 하나는 현재 귀족의 재산, 다른 하나는 오늘 귀족의 수입을 인자로 전달받는 새로운 함수를 만들어 보세요

(난이도 : 下)

#include <stdio.h>

int slave(int master_money, int today_incom)
{
	master_money += today_incom;
	return master_money;
}

int main(void)
{
	int master_money = 100000;
	int today_incom = 0;

	printf("귀족이 오늘 벌어들인 돈 : ");
	scanf_s("%d", &today_incom);

	printf("귀족의 재산과 당일 수입을 합친 값 : %d", slave(master_money, today_incom));

	return 0;
}

	

3. 1 부터 n 까지의 합을 구하는 함수를 작성해보세요. 수학적인 공식을 써도 되지만 for 문으로 작성하는 것이 연습 하는데에는 도움이 될듯 합니다.

(난이도 : 下)

#include <stdio.h>

int total(int n)
{
	int i, sum = 0;
	for (i = 1; i <= n; i++)
	{
		sum += i;
	}

	return sum;
}

int main(void)
{
	int n;
	printf("1부터 n까지 합에서 n 값 : ");
	scanf_s("%d", &n);
	
	printf("1부터 n까지의 합 : %d \n", total(n));

	return 0;
}

4. N 값을 입력 받아서 1 부터 N 까지의 소수의 개수를 출력하는 함수를 제작해보세요.

(난이도 : 下)

#include <stdio.h>

int PrimeNumber(int n)
{
	int i, j; // for문 돌리기
	int prime = 0; // 소수 개수 
	int totalprime = 0; // 총 소수 개수

	for (i = 2; i <= n; i++)
	{
		for (j = 2; j <= i; j++)
		{
			if (i % j == 0)
			{
				prime++;
			}
		}

		if (prime == 1)
		{
			totalprime++;
		}

		prime = 0;
	}
	return totalprime;
}

int main(void)
{
	int n;

	printf("1 부터 n 까지의 소수의 개수를 알려드립니다 \n");
	printf("n 값 입력 : ");
	scanf_s("%d", &n);

	printf("1 부터 %d 까지의 소수의 개수는 : %d \n", n, PrimeNumber(n));


	return 0;
}

5. 특정한 수 N 을 입력받아서 N 을 소인수분해한 결과가 출력되게 해보세요

(난이도 : 中)

예) factorize(10); 출력결과 : 2 × 5

factorize(180); 출력결과 : 2 × 2 × 3 × 3 × 5

#include <stdio.h>

int PrimeFactorization(int n)
{
	int i, j;

	for (i = 2; i <= n; i++)
	{
		if (n % i == 0)
		{
			n /= i;
			printf("%d", i);

			if (n != 1)
			{
				printf("*");
			}

			i = 1;
		}
		
	}

	return 0;
}

int main(void)
{
	int n;
	
	printf("소인수분해를 시킬 n 값 입력 : ");
	scanf_s("%d", &n);

	printf("n = %d  %d =  ", n, n);
	PrimeFactorization(n);
	
	return 0;
}

6. int function(int *arg) 와 같은 함수가 무엇을 뜻하는지 생각해보세요

  • arg였다면 값을 복사해왔을텐데
    *arg라는걸로 봐선 값이 아닌 주소를 복사해와 그 주소로 직접 찾아가 값을 변경한다고 생각한다.
    즉 *arg의 값에 변화를 줄 경우 그 변화가 *arg뿐만이 아니라 연결될 변수의 값에까지 영향이 미치는 것이라 생각한다.

  • int function(int *arg)와 같은 함수는 들어올 인자를 가르키는 포인터를 가진 함수를 뜻한다
    지역변수로 선언된 변수를 인자로 넘겨주면 접근이 가능하다.

  • 포인터 변수 무엇인가를 *arg 라는 인자를통해서 받는 것이다
    예를들어서
    int arr=0;
    int *ptr = &arr;
    이라면 function 함수를 만들어서 function(*ptr) 를 입력한다면 arr의 값(0) 이 *arg라는 인자를 통해서 전달되는것이다

씹어먹는 C 언어 - <13 - 1. 마술 상자 함수(function)>

0개의 댓글