# 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
반응형