프로그래밍 기본지식 6탄

최주영·2022년 12월 3일
0

C언어

목록 보기
7/15
post-thumbnail

✅함수는 무엇이며, 왜 사용하는가 ?

함수란 하나의 특별한 작업을 수행하기 위해 독립적으로 작성한 프로그램입니다.
동일한 작업이 필요할 때마다 동일한 코드를 반복해서 표기하는 것은 비효율적 이기 때문에 이를 해결하고자 함수란 개념을 사용하였습니다.


✅인수(argument)와 매개변수(parameter)의 차이는 무엇인가 ?

매개변수는 함수에서 처리될 때 호출된 인수에 대응되는 변수이며 인수는 호출 프로그램에 의하여 함수에 실제로 전달되는 값이다.
인수매개변수와 달리 자료형이 없어도 되고 변수명을 안적어도 된다.


✅변수란 무엇인가 ?

데이터를 저장하기 위해 프로그램에 의해 이름을 할당받는 메모리 공간이다.


✅지역변수란 무엇인가 ?

블록 안에서 선언되는 변수이다.


✅전역변수란 무엇인가 ?

함수 외부에서 선언되는 변수이다.


✅지역변수와 전역변수의 초기값은 언제 설정되는가 ?

지역변수는 자동으로 초기화 되지 않으므로 사용자가 초기화를 하여야 하며
전역변수는 컴파일러가 자동으로 초기화하기 때문에 사용자가 초기화를 하지 않아도 된다.


✅함수에 데이터를 전달하는 방법

  • 값에 의한 호출이란?
    호출 시 넘긴 값을 복사하여 함수의 매개변수에 넣어 사용하는 방법이며, 함수 호출부와 호출된 함수에서 사용된 변수와 넘긴 값은 각기 다른 변수로 취급

    -> 장점 : 복잡한 문법없이 편리하게 사용 가능하다

    -> 단점 : 함수로 값이 복사되는 형태기 때문에 return 없이 함수에서 main문으로 올 때 원하는 데이터 값으로 오지 않는다.

-> 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);
}
  • 순서도

✅함수 예시 문제

  • 문제 : 재귀함수를 이용하여 100!을 구하는 프로그램을 작성하시오.

  • 소스코드
#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;
}
  • 순서도
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글