일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 해시
- Nodejs
- 코테
- AWS
- 구조체배열
- thymeleaf
- C++
- 시스템호출
- 파이썬
- TypeORM
- 카카오 코테
- 카카오 알고리즘
- 컴포넌트스캔
- nestjs typeorm
- 가상면접사례로배우는대규모시스템설계기초
- spring boot
- 스프링
- 카카오
- @Autowired
- 알고리즘
- 프로그래머스
- git
- python
- OpenCV
- 코딩테스트
- nestjs auth
- @Component
- Spring
- C언어
- nestJS
Archives
- Today
- Total
공부 기록장 💻
[자료구조] 성적 관리 프로그램 (2차원 배열, 파일 입출력, 반복문 활용) 본문
자료구조1 실습 2주차
data.txt 파일
20184035 80 76 91
20184095 76 42 85
20184057 83 37 76
20184033 71 86 75
20184022 94 57 80
내가 작성한 코드
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
// _CRT_SECURE_NO_WARNINGS (속성 전처리기 추가)
#pragma warning (disable : 4996)
int main(void) {
FILE* fp;
int STUD[5][5] = { 0, }; // 5명의 학번/국어/영어/수학/총점을 저장하는 배열
double avg[5] = { 0, }; // 5명의 과목 평균점수 저장
int subjectSum[3] = { 0, }; // 각 과목에 대한 총점
int studSum = 0; // 각 학생의 전체 과목에 대한 ㅊ오점
double avgTotal = 0.0; // 학생들의 평균 점수에 대한 총점
fp = fopen("data.txt", "rt");
if (fp == NULL) {
printf("File not found\n");
return 0;
}
printf("|==============================================|\n");
printf("| 학 번 | 국어 | 영어 | 수학 | 총 점 | 평 균 |\n");
for (int i = 0; i < 5; i++) {
fscanf(fp, "%d", &STUD[i][0]); // 학번 저장
printf("|%d|", STUD[i][0]); // 학번 출력(1번째 열)
for (int j = 1; j < 4; j++) {
fscanf(fp, "%d", &STUD[i][j]);
STUD[i][4] += STUD[i][j]; // 과목들의 총합을 각 행의 5번쨰 열(인덱스 번호 4)에 저장
subjectSum[j-1] += STUD[i][j]; // 각 과목의 합을 저장
printf(" %d |", STUD[i][j]); // 각 과목 점수 출력(2,3,4번째 열)
}
printf(" %d |", STUD[i][4]); // 각 학생의 총점을 5번째 열에 출력
studSum += STUD[i][4]; // 학생들의 총점을 저장
avg[i] = STUD[i][4] / 3.0; // 각 학생의 총점에 대한 평균을 저장
avgTotal += avg[i]; // 학생들의 평균을 저장
printf(" %.2f |\n", avg[i]); // 각 학생의 평균 점수를 6번째 열에 출력
}
printf("|========|======|======|======|=======|========|\n");
printf("| 평 균 |");
for (int i = 0; i < 3; i++)
printf(" %.2f|", (double)subjectSum[i]/5.0);
printf("% .1f |", (double)studSum / 5.0);
printf(" %.2f |\n", avgTotal);
printf("|==============================================|\n");
fclose(fp);
return 0;
}
학생이 5명이라는 전제 하에 배열의 행과 열의 수를 미리 선언하였다.
정답 코드
#include "pch.h"
#include <iostream>
#include <stdio.h>
#pragma warning(disable : 4996)
int main()
{
FILE *fp;
int StudentScore[4][10] = { 0 };
int nCount = 0;
int i = 0;
int ScoreSum = 0;
double ScoreAverage = 0.0;
double SubjectAverage[3] = { 0.0 };
fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("File Not Found\n");
return 0;
}
while (!feof(fp))
{
fscanf(fp, "%d%d%d%d",
&StudentScore[0][nCount], // 학번
&StudentScore[1][nCount], // 국어
&StudentScore[2][nCount], // 영어
&StudentScore[3][nCount]); // 수학
nCount++;
}
fclose(fp);
for (i = 0; i < nCount; i++)
{
ScoreSum = StudentScore[1][i] +
StudentScore[2][i] +
StudentScore[3][i];
ScoreAverage = ScoreSum / 3.0;
printf("%d %d %d %d %d %f\n",
StudentScore[0][i],
StudentScore[1][i],
StudentScore[2][i],
StudentScore[3][i],
ScoreSum, ScoreAverage);
SubjectAverage[0] += StudentScore[1][i];
SubjectAverage[1] += StudentScore[2][i];
SubjectAverage[2] += StudentScore[3][i];
}
printf("%f %f %f \n",
SubjectAverage[0] / (double)nCount,
SubjectAverage[1] / (double)nCount,
SubjectAverage[2] / (double)nCount );
return 0;
}
행을 학번/국어/영어/수학으로 설정하였다.
그리고 열을 각 학생의 정보로 설정하였다. (열의 개수가 10으로 충분한 공간을 확보)
1. 파일 입력 받으면서 학생의 수 증가시키기
- 차례대로 한 학생에 대한 정보가 한 행에 가로로 저장되어 있기 때문에, 한꺼번에 네 개의 정수를 입력 받도록 한다.
- 한 세트(정수 4개)에 대한 데이터를 입력 받고 나면, 학생의 수에 1을 더한다.
while (!feof(fp))
{
fscanf(fp, "%d%d%d%d",
&StudentScore[0][nCount], // 학번
&StudentScore[1][nCount], // 국어
&StudentScore[2][nCount], // 영어
&StudentScore[3][nCount]); // 수학
nCount++;
}
2. 한 학생이 얻은 총점 / 각 과목별 총점
- nCount만큼(학생의 수만큼) 반복하면서 한 열에 대한 데이터 세트(학생 한 명의 각 과목별 점수들)를 모두 더해서 ScoreAverage에 누적하여 저장하고, 3.0으로 나눈다.
- 한 학생에 대하여, 각 과목 성적 전체를 출력하고, 각 과목별 총점에 대한 배열의 각 과목에 한 학생의 각 과목별 점수를 누적하여 저장하도록 한다.
for (i = 0; i < nCount; i++)
{
ScoreSum = StudentScore[1][i] +
StudentScore[2][i] +
StudentScore[3][i];
ScoreAverage = ScoreSum / 3.0;
printf("%d %d %d %d %d %f\n",
StudentScore[0][i],
StudentScore[1][i],
StudentScore[2][i],
StudentScore[3][i],
ScoreSum, ScoreAverage);
SubjectAverage[0] += StudentScore[1][i];
SubjectAverage[1] += StudentScore[2][i];
SubjectAverage[2] += StudentScore[3][i];
}
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.15 |
Comments