내가 푼답
#include <iostream>
#include <iomanip>
using namespace std;
#define STUDENT 5
int static flag;
const char *head[] = { "학생 신체 현황 자료 (입력순)",
"학생 신체 현황 자료 (조건부)",
"학생 신체 현황 자료 (성명순)" };
const char *underline = "============================";
const char *name[5] = { "김철수", "이영희","홍길동","오수정","박문수" };
int birth[] = { 1993, 1995, 1992, 1997, 1994 };
double height[] = { 177.5, 163.5, 174.6, 165.5, 180.3 };
double weight[] = { 67.2, 50.5, 75.1, 53.2, 68.6 };
void print() {
cout << setw(26) << " " << underline << endl << endl;
cout << setw(14) << " " << "성 명 출생년도(년) 신장(cm) 체중(kg)" << endl;
cout << "\t " << setfill('-') << setw(55) << "-" << endl << setfill(' ');
}
int main()
{
int array[] = { 70, 7, 54, 83, 98, 29, 41, 35, 12, 66, 0};
int abuff[] = { 3, 12, 29, 34, 48, 55, 60, 77, 81, 96},
bbuff[] = { 5, 18, 21, 30, 49, 54, 63, 72, 86, 97},
cbuff[20];
int i, j, count, num10 = 10, odd, even, max=0, min=200;
int index[] = { 0, 4, 3, 1, 2 };
int index_1[] = { 0 };
int index_2[] = { 0 };
double sum,sum_age=0,sum_height=0,sum_weight=0, heightmean=0., weightmean=0., average_arr=0., average_age=0. ;
//
// 문제 1. 원소 갯수, 배열 값, 최대 값/ 최소 값/합계 출력
//
cout<<"\n문제 1. 원소 갯수, 배열 값, 최대 값/ 최소 값/합계 출력\n";
i = 0; sum = 0.;
for(i=0;i<10;i++) {
sum = sum + array[i];
if (max < array[i]) {
max = array[i];
}
if (min > array[i]) {
min = array[i];
}
}
average_arr = sum / 10;
count = i;
cout << "\n .. 원소의 갯수 = " << count << "\n\n .. 원소 출력\n";
cout << " " << setfill('-') << setw(73) << "-" << endl << setfill(' ');
cout << " ";
for (j = 0; j < count; j++) cout << setw(7) << array[j];
cout << "\n " << setfill('-') << setw(73) << "-" << endl << setfill(' ');
cout << "\n .. 최대 값 = " << setw(4) << max <<setw(15)<< "최소 값 = " << min << setw(12) << "합계 = " << sum << setw(12) << "평균 = " << average_arr << endl;
//
// 문제 2. 자료 종합(입력순) 출력
//
cout << "\n\n문제 2. 자료 종합(입력순)\n" << endl;
cout << setw(26) << " " << head[0] << endl;
print();
for (i = 0; i < STUDENT; i++) {
cout << setw(20) << name[i] << setw(15) << birth[i] << setw(15) << height[i]<< setw(15) << weight[i] << endl;
}
//
// 문제 3. 나이(2020-생년), 신장 및 체중 평균 계산 출력
//
cout<<"\n\n문제 3. 나이(2020-생년), 신장 및 체중 평균 계산 출력\n";
for (i = 0; i < STUDENT; i++) {
sum_age += 2020 - birth[i];
sum_height += height[i];
sum_weight += weight[i];
}
average_age = sum_age / STUDENT;
heightmean = sum_height / STUDENT;
weightmean = sum_weight / STUDENT;
cout << "\n .. 평균 나이 = " << setw(4) << average_age<<"세" << setw(20) << "평균 신장 = " << heightmean << "cm" << setw(20) << "평균 체중 = " << weightmean <<"kg" << endl;
//
// 문제 4. 평균 신장보다 작은 학생 선별 출력
//
cout<<"\n\n문제 4. 평균 신장보다 작은 학생(평균 신장 "<<heightmean<<"cm)\n";
cout <<endl<< setw(26) << " " << head[1] << endl;
print();
for (i = 0; i < STUDENT; i++) {
if (height[i] < heightmean) {
cout << setw(20) << name[i] << setw(15) << birth[i] << setw(15) << height[i]<< setw(15) << weight[i] << endl;
}
}
//
// 문제 5. 평균 체중보다 무거운 학생 선별 출력
//
cout<<"\n\n문제 5. 평균 체중보다 무거운 학생(평균 체중 "<<weightmean<<"kg)\n\n";
cout << endl << setw(26) << " " << head[1] << endl;
print();
for (i = 0; i < STUDENT; i++) {
if (weight[i] > weightmean) {
cout << setw(20) << name[i] << setw(15) << birth[i] << setw(15) << height[i]<< setw(15) << weight[i] << endl;
}
}
//
// 문제 6. 자료 종합 출력(성명순)
//
for (i = 0; i < 4; i++) {
for (j = 1 + i; j < 5; j++) {
if (strcmp(name[i], name[j]) > 0)
{
swap(name[i], name[j]);
swap(birth[i], birth[j]);
swap(height[i], height[j]);
swap(weight[i], weight[j]);
}
}
}
cout<<"\n\n문제 6. 자료 종합(성명순)\n\n";
cout << endl << setw(26) << " " << head[2] << endl;
print();
for (i = 0; i < STUDENT; i++) {
cout << setw(20) << name[i] << setw(15) << birth[i] << setw(15) << height[i]<< setw(15) << weight[i] << endl;
}
cout << endl << endl << ">> 작업이 종료되었습니다 !\n\n";
return 0;
}
모범답안
#include <iostream>
#include <iomanip>
using namespace std;
#define STUDENT 5
int static flag;
const char *head[] = { "학생 신체 현황 자료 (입력순)",
"학생 신체 현황 자료 (조건부)",
"학생 신체 현황 자료 (성명순)" };
const char *underline = "============================";
const char *name[5] = { "김철수", "이영희","홍길동","오수정", "박문수" };
int birth[] = { 1993, 1995, 1992, 1997, 1994 };
double height[] = { 177.5, 163.5, 174.6, 165.5, 180.3 };
double weight[] = { 67.2, 50.5, 75.1, 53.2, 68.6 };
void buff_cout(int count, int buff[]) {
int i;
cout << " ";
for (i = 0; i < count; i++) cout << setw(7) << buff[i];
cout << endl;
}
void list_cout(int id) {
if (flag == 0) goto headingskip;
cout<<setw(26)<<" "<<head[flag-1]<<endl;
flag = 0;
cout<<setw(26)<<" "<<underline<<endl<<endl;
cout<<setw(14)<<" "<<"성 명 출생년도(년) 신장(cm) 체중(kg)"<<endl;
cout<<"\t "<<setfill('-')<<setw(54)<<"-"<<endl<<setfill(' ');
headingskip:
cout<<setw(20)<<name[id]<<setw(15)<<birth[id]<<setw(15)<<height[id]<<setw(14)<<weight[id]<<endl;
}
int main()
{
int array[] = { 70, 7, 54, 83, 98, 29, 41, 35, 12, 66, 0};
int i, count, mx=0, mn=32767, num10 = 10;
int index[] = { 0, 4, 3, 1, 2};
double sum, sum1, sum2, sum3;
double yearmean, heightmean, weightmean;
//
// 문제 1. 원소 갯수, 배열 값, 최대 값/최소 값/합계 출력
//
cout<<"문제 1. 원소 갯수, 배열 값, 최대 값/최소 값/합계 출력\n";
i = 0; sum = 0.;
while(true) {
sum = sum + array[i];
if (mx < array[i]) mx = array[i];
if (mn > array[i]) mn = array[i];
if(array[++i]==0) break;
}
count = i; cout << "\n .. 원소의 갯수 = " << count << "\n\n .. 원소 출력\n";
cout<<" "<<setfill('-')<<setw(73)<<"-"<<endl<< setfill(' ');
buff_cout(count, array);
cout<<" "<<setfill('-')<<setw(73)<<"-"<<endl<<setfill(' ');
cout << "\n .. 최대 값 = " << setw(5)<<mx << " 최소 값 = " << mn;
cout<<" 합계 = " << setw(5) << sum << " 평균 = " << setw(7) << sum / count << endl;
//
// 문제 2. 자료 종합(입력순) 출력
//
cout<<"\n\n문제 2. 자료 종합(입력순)\n\n";
flag = 1;
for (i = 0; i<STUDENT; i++) list_cout(i);
//
// 문제 3. 나이(2020-생년), 신장 및 체중 평균 계산 출력
//
cout << "\n문제3. 나이(2020-생년), 신장 및 체중 평균 계산 출력\n";
sum1 = sum2 = sum3 = 0.;
for (i = 0; i < STUDENT; i++) {
sum1 += 2020 - birth[i]; // 나이 합산
sum2 += height[i]; // 신장 합산
sum3 += weight[i]; // 체중 합산
}
yearmean = sum1 / STUDENT; // 나이 평균
heightmean = sum2 / STUDENT; // 평균 신장
weightmean = sum3 / STUDENT; // 평균 체중
cout << "\n .. 평균 나이 = " << setw(8) << yearmean << "세 평균 신장 = " <<
heightmean << "cm 평균 체중 = " << weightmean << "kg\n";
//
// 문제 4. 평균 신장보다 키가 작은 학생 선별 출력
//
cout<<"\n\n문제 4. 평균 신장보다 작은 학생(평균 신장 "<<heightmean<<"cm)\n\n";
sum = 0.; flag = 2;
for (i = 0; i<STUDENT; i++) if (height[i] < heightmean) list_cout(i);
//
// 문제 5. 평균 체중보다 무거운 학생 선별 출력
//
cout<<"\n\n문제 5. 평균 체중보다 무거운 학생(평균 체중 "<<weightmean<<"kg)\n\n";
sum = 0.; flag = 2;
for (i = 0; i<STUDENT; i++) if (weight[i] > weightmean) list_cout(i);
//
// 문제 6. 자료 종합 출력(성명순)
//
cout<<"\n\n문제 6. 자료 종합(성명순)\n\n";
flag = 3;
for (i = 0; i < STUDENT; i++) list_cout(index[i]);
cout<<endl<<endl;
cout<<">> 작업이 종료되었습니다 !\n\n";
return 0;
}