c언어/c언어 (문제풀기)

배열과 함수를 이용하여 홀 짝수 구분출력하기

byeol2ing 2017. 8. 10. 15:22
반응형


열혈강의 문제집의 문제를 사용하였습니다.


<도전 1. 배열과 함수를 이용하여 홀 짝수 구분출력하기>


길이가 10인 배열을 선언하고 총 10개의 정수를 입력받아서,홀수와 짝수를 구분 지어서 출력하는 프로그램을 작성해 보자. 일단 홀수부터 출력하고 나서, 짝수를 출력하도록 하자. 단, 10개의 정수는 main함수 내에서 입력받도록 하고, 배열을 인자로 받아서 배열 내에 존재하는 홀수만을 출력하는 함수와 짝수만을 출력하는 함수를 각각 정의해서 이 함수들을 호출하는 형식으로 프로그램을 작성하자.




배열이란?

배열(Array)은, 어떤 한가지 자료형을 연속적으로 나열 하는것을 의미합니다.



자료형 변수이름[갯수]; 


ex)

int a[4] = {1,2,3,4};

int형 a라는 변수를 4개 저장할  수 있는 배열이 선언된 것입니다. 또한 각각의 요소에 1,2,3,4를 저장하도록 초기화 된 것 입니다.


int a[4];

이런경우 a에 초기값을 주지 않아 모두 쓰레기 값이 들어가게 됩니다.

반면,


int a[4] = {1,2};

이런경우, a에는 1,2 가 들어가며 그이후에는 모두 0으로 초기화 되어 저장됩니다.


따라서 만약 모든 배열을 0으로 초기화시킬경우 이렇게 사용합니다.

int a[4] = {0};


또한

int a[]={1,2,3};

이렇게 선언을한다면 a란 배열은 초기화 된 값의 갯수만큼 크리를 자동으로 가지게 됩니다.




따라서 초기값이 0이고 길이가 10인 배열을 선언하면,

int a[10] = {0};  이렇게됩니다.



scanf 란?

여러개의 변수를 한번에 입력받는 함수입니다.

표준 입력 장치(키보드)로 부터 데이터를 입력받습니다.->필요한 헤더파일 : stdio.h (standard input output) 



scanf("서식문자 ...", 변수, 변수, ... ,변수);

   ex)

      #include<stdio.h>

      int main(void)

 {

             int a;

printf("입력해주세요");

scanf("%d",&a);

printf("입력받은 숫자는 %d 입니다.\n",a);

 }



 결과 





따라서 10개의 정수를 입력받으면,

for( i=0;i<10;i++)

{

scanf("%d",&a[i]);

}

함수선언


함수(function)이란, 기능을 의미하며 기능을 구현하는 부분을 따로 떼어 구현하는 것입니다. 





함수는 자료형과 함수이름 인수목록으로 나누어집니다.

반환자료형은 메인 함수의 사용에서 0을 반환한다(return 0;)는 의미로 정수형을 반환하므로 int 로 쓰였습니다.

main함수는 프로그램 실행시 가장 먼저 실행되는 부분으로 꼭 필요한 함수입니다.

인수목록인 괄호안이 비어있기 때문에, 위의 경우는 메인 함수에서 리턴 값이 없다는 뜻입니다.


main(void) -> 메인함수가 넘겨받는 인자가 없다는 의미 입니다.

void main(void) -> 메인함수에 리턴값도 없고 받는 인자도 없다는 의미입니다.


<함수의종류>

- 사용자 정의 함수 : 사용자가 구현하고 싶은 기능을 구현한 것 입니다. ex) buy() , test()...

- 라이브러리 함수 : stdio.h파일 안에 정의 된 기능입니다. ex) printf(), scanf()


<함수호출>




위에 int add (int a, int b);  부분은 함수를 선언하는 부분입니다. 


호출 순서를 보면

1. 함수 호출 -> int형 변수 둘을 받았습니다. 

                  인수의 개수는 정의와 항상 같아야 하고, 인수의 자료형은 틀려도 에러가 발생하진 않지만 정확한 결과를 위하여 일치 시켜줍니다.

                  함수의 정의와 호출부의 형태가 일치한다면, 제어권은 호출한 함수로 옮겨집니다.

2. 인수 전달 -> 함수의 제어권이 add()함수로 옮겨지면 전달받은 인수의 대입이 이루어집니다.

                  num1과 num2는 차례대로 3,4의 값을 가지게 됩니다.

                  a=3; b=4;

3. 계산 반환 -> 인수를 받았으면 함수의 몸체로 이동해 프로그래머가 구현한 작업을 하게 됩니다.

                  위의 경우 따로 구현한 것이 없으므로 return문으로 가게됩니다.

                  a+b의 값을 리턴합니다. 이반환하는 값이 정수형(7)이므로 int add(...)라고 정의 되어야 하는 것 입니다.

4. 값 대입  -> 제어권이 다시 main함수로 이동되며, add(num1, num2)부분은 반환값인 7로 바뀌어져 result =7; 의 형태로 대입이 됩니다.


    



따라서 홀수와 짝수를 구분지어 출력하는 함수는


int even(int a)            <- 짝수

{

if(a%2==0)

printf("%d",a);

return 0;

}


int odd(int a)             <- 홀수

{

if(a%2==1)

printf("%d",a);

return 0;

}


가 됩니다.




따라서 위 문제를 풀게 되면, 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<stdio.h> //표준입출력 헤더파일 포함시킴
 
 
int even(int a); //반환값이 정수형인 even 함수 선언
int odd(int a); //반환값이 정수형인 odd 함수 선언
 
int even(int a)                //even함수 (짝수만 출력하는 함수) 구현
{
    if(a%2==0)                 //만약 a를 2로나누어서 나머지가 0 이라면
        printf("%d",a);        //a를 출력한다.
    return 0;
}
 
int odd(int a)                 //odd함수 (홀수만 출력하는 함수) 구현
{
    if(a%2==1)                 //만약 a를 2로나누어서 나머지가 1 이라면
        printf("%d",a);        //a를 출력한다.
    return 0
}
 
 
int main()                    //main함수시작
{
    int i;                    //정수형 i 선언
    int a[10]={0};            //정수형 배열 a[10] 선언 a[0]~a[9]
 
    printf("열개의 정수를입력해주세요.\n");      //열개의 정수 입력해달라고 표시.
    
    for(i=0; i<10; i++)                //i가 0부터/ 10보다 작다의 조건을 만족할때까지/ i는 하나씩 증가  -> 열번 돌아감을 의미 0~9
    {
        scanf("%d",&a[i]);             //a[0]~a[9]배열에 하나씩 입력받음.
    }
 
    printf("홀수:");                    //홀수:라고 표시
    for(i=0; i<10; i++)                //열번돌아감을 의미
    {
        even(a[i]);                   //even 함수(짝수만 출력하는 함수) 실행
    }
    
    printf("짝수:");
    for(i=0; i<10; i++)
    {
        odd(a[i]);                    //odd 함수(홀수만 출력하는 함수) 실행
    }
 
 
}
 
 
cs



실행결과





반응형