본문 바로가기
자료구조

[자료구조 2장] - 프로그래밍 기초(3)

by jyppro 2024. 1. 1.

프로그래밍 기초(3)

 

함수의 매개변수

함수를 작성하기 전에 함수 코드가 수행해야 하는 기능 정의를 명확하게 함과 동시에 함수이름, 함수 매개변수(parameter) 각각의 자료형과 함수 결과값의 자료형을 결정해야 한다. 그 중 매개변수는 C 프로그래밍에서 값에 의하여 참조(call by value) 되므로 함수의 입력값의 역할을 한다.

 

배열을 매개변수로 넘겨주기

배열의 대표적인 정보 넘겨주기 -> 첫 데이터의 주소

 

포인터를 매개변수로 넘겨주기

void main()
{
    int x, y, z;
    printf("세 수를 입력하시오. ");
    scanf("%d %d %d", &x, &y, &z);
    if(x > y) swap(&x, &y);
    if(y > z) swap(&y, &z);
    if(x > y) swap(&x, &y);
    printf("%d **** %d **** %d\n", x, y, z);
}

void swap(int *px, int *py)
{
    int temp;
    temp = *px;
    *px = *py;
    *py = temp;
}

위 예제 프로그램을 통해 알아볼 수 있다.

x = 10, y = 30, z = 5가 입력되었다고 가정할 때, main함수 안의 3개의 if문 중에 어느 것이 실행되는지 알아보자.

 

일단 scanf로 세가지 수를 입력받으면, 가장 먼저 if문 조건에 충족하는 y > z가 실행되고, y와 z의 swap이 실행되는데,

swap함수는 매개변수 값을 포인터로 받아 실행시킨다. 이를 살펴보면 temp에 y 주소값이 저장되고, y주소값에 z주소값을 넣고, z주소값에는 temp를 넣는다. 한 마디로 두 수의 위치를 바꾸는 함수이다. 그렇게 되면 y와 z의 위치가 바뀌어 y = 5, z = 30이 된다.

 

이후 if문을 보면 위치가 바뀐 상태에서 x > y 조건을 충족하므로, x와 y의 swap이 실행된다. 그렇게 되면 결과는

x = 5, y = 10, z = 30 이 나오게 된다.

 

main() 함수의 매개변수

메인도 2개의 매개변수를 사용할 수 있다.

흔히 argc, argv 로 불린다.

argc : 명령어 라인에 있는 매개변수(인수)의 수를 말하며, int로 선언한다.

argv : 각 매개변수(인수)의 첫 문자로의 포인터 배열이므로 char *argv[]와 같이 선언한다.

 

void main(int argc, char *argv[])
{

}

이런 식으로 사용된다.


 

프로그래밍 연습

1. 주어진 문제를 파악하고 입력데이터와 출력데이터를 정한다.

2. 입력데이터와 출력데이터에 대한 변수명을 정하고 문제를 재정의하여 본다.

3. 문제에서 요구하는 출력결과를 얻기 위한 과정을 구상한다.

4. 3의 과정에서 프로그램 문장으로 표현 가능할 때까지 세분화하여 표현한다.

5. 정해진 프로그래밍 언어로 코딩한다.

 

실습 예제

- 0과 100 사이 난수 발생 출력 프로그램

- n개의 양의 정수 입력받아 홀수의 합과 짝수의 합 구하는 프로그램

- 양의 정수를 읽어 끝자리부터 출력하는 프로그램

- 0 ~ 100점인 n명의 학생의 성적을 입력받아 평균과 최고점을 출력하는 프로그램

- n명의 성적 데이터를 배열에 읽어 들여 평균을 구한 후 각 학생의 성적을 평균과 비교하여 출력하는 프로그램

- n명의 학생이 학번과 성적을 이차원 배열에 읽어 들여 학번을 입력하면 성적과 등수를 출력하는 프로그램

- -100 ~ 100 사이의 50개 난수를 배열에 저장한 후 양수와 음수의 합을 구하는 프로그램

- 0.00 ~ 99.99 사이의 실수 난수 20개를 만들어 소수 부분의 합과 정수 부분의 합을 구하는 프로그램