<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 7(1, 2, 3, 4, 5)

1. 1차원 배열의 크기 즉 원소수가 10일 때 유효한 첨자의 범위를 적으시오.

    0~9


 

2. 다음 문장 중 틀린 것을 고르시오.

 

① 다음과 같이 배열을 선언한 후 대입문으로 배열명에 배열 원소들을 한꺼번에 저장할 수 있다.

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

② 배열의 여러 원소 중 한 개를 지정하기 위해 '배열명[2]'와 같이 [] 안에 명시하는 정수를 첨자라고 한다.

③ 1차원 배열 ary의 크기 즉 배열의 원소수가 10이라면 첫 원소는 ary[1], 마지막 원소는 ary[10]으로 참조한다. - 첫 원소는 ary[0], 마지막 원소는 ary[10]으로 참조한다.

④ int형 자료 10개, double형 자료 10개, char형 자료 10개 모두 30개의 자료를 하나의 배열에 저장할 수 있다. - 하나의 배열엔 하나의 자료형만 저장할 수 있다.

⑤ 배열의 차원과 배열 원소 한 개를 나타내기 위해 사용되는 첨자의 개수는 동일하다.

⑥ 다음과 같이 배열을 선언할 때 배열의 크기를 변수로 사용할 수 있다.

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

 

3.다음의 main 함수 본체의 코드에서 잘못된 곳(밑줄 그은 곳)을 찾아 이유를 적으시오.

int i;
int age[5] = 19, 22, 25, 17, 27;
int m[][] = {{1, 2, 3}, {4, 5, 6}};
char title[5] = "c/c++";

for (i=1; i<=5; i++)    //5명의 나이 출력
    printf("%d\n", age[i]);
scanf("%s", &title);    //책 내용을 새로 입력
scanf("%c", title[0]);    //책 제목의 첫 글자 입력

둘째 줄: 대괄호를 치지 않았다.

여섯째 줄: 배열의 첨자는 0부터 시작한다.

여덟째 줄: 배열명 자체가 배열 시작 주소이므로 주소연산자를 사용할 필요 없다.

아홉째 줄: 특정 원소 값을 입력하려면 주소연산자를 사용해야 한다.

 


 

4. int count[10] = {0}; 과 같이 배열을 선언하면서 초기화하였더라도 나중에 값이 변경된 후 필요하다면 배열에 저장된 내용을 다시 0으로 초기화해야 하는 경우가 생길 수있다. count 배열을 다시 0으로 초기화하려면 어떻게 해야 할까?

 

대입문으로 직접 초기화한다. 


 

5. 사용자로부터 1~12까지의 달을 month로 입력받은 후 1월부터 입력된 month 월까지의 총일을 total에 구하여 다음과 같이 출력하시오. 프로그램을 단순화하기 위해 2월이 29일까지 있는 윤년은 고려하지 않고 2월은 무조건 28일까지로 처리한다.

#include <stdio.h>

int main(void)
{
    //첨자 번호가 월과 일치하도록 첫 요소는 0으로 초기화
    int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int range, sum = 0;

    printf("1월부터 몇 월까지의 총합을 구할까요? ");
    scanf("%d", &range);

    for (int i = 1; i <= range; i++) {
        sum += days[i];
    }

    printf("1월부터 %d월까지는 총 %d일이 있습니다.", range, sum);

    return 0;
}