일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 카카오 코테
- C++
- nestjs typeorm
- 알고리즘
- @Autowired
- thymeleaf
- TypeORM
- C언어
- 카카오
- @Component
- 구조체배열
- spring boot
- 코딩테스트
- 프로그래머스
- OpenCV
- python
- 해시
- AWS
- 파이썬
- Spring
- 시스템호출
- 컴포넌트스캔
- 코테
- 카카오 알고리즘
- 스프링
- nestJS
- Nodejs
- 가상면접사례로배우는대규모시스템설계기초
- nestjs auth
- git
Archives
- Today
- Total
공부 기록장 💻
[자료구조] 연도별 통계 프로그램 (2차원 배열, 반복문) 본문
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
반응형
'# CS Study > DS Algorithm' 카테고리의 다른 글
[자료구조] 단순 연결 리스트(Linked List) ADT + 예제들 (1) | 2021.04.14 |
---|---|
[자료구조] 단순 연결 리스트 Singly Linked List 실습 문제 - 동적 메모리 할당, 노드 생성(create), 삽입(insert), 역순 연산(reverse), 버블 정렬(bubble sort), 출력, 메모리 해제 (0) | 2021.04.13 |
[자료구조] 배열 실습 문제들 (0) | 2021.04.04 |
[자료구조] 다항식 배열의 연산 (구조체 배열, 포인터, 다항식의 표현) (0) | 2021.04.04 |
[자료구조] 성적 관리 프로그램 (2차원 배열, 파일 입출력, 반복문 활용) (0) | 2021.03.14 |
Comments