관리 메뉴

공부 기록장 💻

[자료구조] 연도별 통계 프로그램 (2차원 배열, 반복문) 본문

# CS Study/DS Algorithm

[자료구조] 연도별 통계 프로그램 (2차원 배열, 반복문)

dream_for 2021. 3. 15. 11:44

2주차 실습 과제 - 3번째 문제

 

문제

 

 

내가 작성한 코드

#include <iostream>
#include <stdio.h>
#pragma warning(disable : 4996)

int main(void) {

	FILE* fp; // 파일 포인터
	int i, j; // 반복문의 제어 변수
	int data[12][20]; // 12개월-20년(충분한 열 공간을 미리 확보)의 데이터를 저장하는 2차원 배열
	int yCount = 0; // year Count- 연도를 2000년부터 시작하여 연도가 증가할 때마다 변수 값 증가시킬 변수
	int yearSum = 0; // 각 연도의 데이터들의 총합
	double yearAvg = 0.0; // 각 연도의 데이터들의 평균
	double monthAvg[12] = { 0.0, }; // 월별 평균
	int totalSum = 0; // 전체 연도의 총점을 모두 더하여 저장하는 변수
	double totalAvg = 0.0; // 전체 연도의 평균값들을 모두 더하여 저장하는 변수

	fp = fopen("data.txt", "rt"); // 읽기 모드로 data.txt 파일을 연다.
	if (fp == NULL) {
		printf("File not found\n");
		return 0;
	}

	printf("|=======================================================================================================================|\n");
	printf("|연 도|   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   |   10  |   11  |   12  | 총  합 | 평  균 |\n");
	printf("|-----------------------------------------------------------------------------------------------------------------------|\n");
	
	// 파일이 끝에 도달할 때까지 데이터를 읽어 배열에 저장
	while (!feof(fp)) {
		for (i = 0;i < 12;i++)
			fscanf(fp, "%d", &data[yCount][i]); // 각 연도별 12개월의 데이터를 배열에 저장 - 1월부터 12월까지 차례대로 한 행에 저장
		yCount++; // 12개의 데이터를 읽고 나면 yCoung를 증가시킴
	}

	for (i = 0;i < yCount;i++) // yCount만큼(읽은 연도만큼) 데이터 출력
	{
		yearSum = 0;
		printf("| %2d  ", i + 1);
		for (j = 0;j < 12;j++)
		{
			printf("| %4d  ", data[i][j]); // 각 월별 데이터 출력
			yearSum += data[i][j]; // 각 연도의 전체 데이터의 총합 저장
			monthAvg[j] += data[i][j]; // 각 월별 데이터의 총합 저장
		}
		totalSum += yearSum; // 각 연도의 총합을 totalSum에 더하여 저장
		yearAvg = yearSum / 12.0; // 각 연도의 평균 저장
		totalAvg += yearAvg; // 각 연도의 평균을 totalAvg에 더하여 저장

		printf("|%6d  |%7.2f |\n", yearSum, yearAvg); // 총합과 평균 출력
	}
	printf("|-----------------------------------------------------------------------------------------------------------------------|\n");
	printf("|평 균|");
	for (i = 0;i < 12;i++)
		printf(" %6.2f|", monthAvg[i] / (double)yCount); // 월별 데이터의 총합을 yCount만큼 나눈 평균을 출력
	printf(" %7.2f|%7.2f |\n", (double)totalSum / 8.0, (double)totalAvg / 8.0); // 전체 데이터의 총합, 평균총합에 대한 평균을 출력

	printf("|=======================================================================================================================|\n");

	fclose(fp);
	return 0;
}

 

 

 

 

1. 파일로부터 가로줄에 저장되어 있는 12개월의 데이터를 한 세트로 입력 받아 한 행에 저장하도록 하고,

한 세트(한 행)을 읽은 후에는 yCount가 1씩 증가한다.

 

// 파일이 끝에 도달할 때까지 데이터를 읽어 배열에 저장
	while (!feof(fp)) {
		for (i = 0;i < 12;i++)
			fscanf(fp, "%d", &data[yCount][i]); // 각 연도별 12개월의 데이터를 배열에 저장 - 1월부터 12월까지 차례대로 한 행에 저장
		yCount++; // 12개의 데이터를 읽고 나면 yCoung를 증가시킴
	}

 

 

 

2. 연도별로 데이터를 출력함과 동시에, 각 연도별로 데이터의 총합과 평균을 구하도록 하고,

월별 데이터 또한 선언된 일차원 배열에 저장하도록 한다. 

 

for (i = 0;i < yCount;i++) // yCount만큼(읽은 연도만큼) 데이터 출력
	{
		yearSum = 0;
		printf("| %2d  ", i + 1);
		for (j = 0;j < 12;j++)
		{
			printf("| %4d  ", data[i][j]); // 각 월별 데이터 출력
			yearSum += data[i][j]; // 각 연도의 전체 데이터의 총합 저장
			monthAvg[j] += data[i][j]; // 각 월별 데이터의 총합 저장
		}
		totalSum += yearSum; // 각 연도의 총합을 totalSum에 더하여 저장
		yearAvg = yearSum / 12.0; // 각 연도의 평균 저장
		totalAvg += yearAvg; // 각 연도의 평균을 totalAvg에 더하여 저장

		printf("|%6d  |%7.2f |\n", yearSum, yearAvg); // 총합과 평균 출력
	}

 

728x90
반응형
Comments