CS/C

[2021W C프로그래밍과 실습][연습문제 10-6] 개수를 알 수 없는 배열의 원소의 개수와 평균 구하기

아이스얼그레이 2022. 2. 9. 22:20

[10 - 6] 학생의 점수가 다음 배열에 초기화 되어있다. 점수를 읽어 다음의 결과를 출력하는 프로그램을 작성하라. 이때 배열에 저장된 점수의 개수는 알 수 없으므로 평균을 구하기 위해 인원수를 증가시켜야 한다. 마지막 데이터는 배열원소에 0이 저징된 것을 기준으로 한다. 이 모든 제어를 포인터를 이용하여 처리하도록 한다.

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int score[21] = { 57, 87, 64, 86, 97, 78, 61, 81, 73, 37, 54 };
	int i, sum = 0, cnt = 0;
	int* ptr;

	ptr = &score[0];

	printf("학생들의 점수\n");

	while (*(ptr + cnt) != 0) // 이 두 while문의 반복조건은 같은 뜻이지만 가독성의 차이가 있다.
    while (*(ptr + cnt))
	{
		printf("%d, ", *(ptr + cnt));
		sum += *(ptr + cnt);
		cnt++;
	}

	printf("\n\n인원수 : %d\n", cnt);
	printf("합 : %d, 평균 : %.2lf", sum, (double)sum / cnt);

	return 0;
}

우선 배열의 개수를 모른다고 가정했으므로 ptr을 score배열의 첫 번째 원소의 주소로 지정한다.

그리고 ptr에서부터 ptr을 1씩 늘려가며 해당 주소에 해당하는 배열의 원소가 0이 아닌지를 확인하는 반복문을 작성했다. 0이 아니면 해당 원소를 출력하고 sum에 누적한 후, cnt에 1을 더한다.

cnt가 증가하다가 ptr + cnt가 원소가 0인 배열의 주소를 가르키면 반복문을 탈출하고 결과를 출력한다.

결과