메뉴 건너뛰기

#include <iostream>

#include <iomanip>

 

using namespace std;

 

int main() {

int total{ 0 };

unsigned int gradeCounter{ 0 };

 

cout << "Enter grade or -1 to quit: ";

int grade;

cin >> grade;

 

while (grade != -1) {

total = total + grade;

gradeCounter = gradeCounter + 1;

 

cout << "Enter grade or -1 to quit: ";

cin >> grade;

}

 

if (gradeCounter != 0) {

double average(static_cast<double> (total) / gradeCounter);

 

cout << "Total of the " << gradeCounter

<< " grades entered is " << total;

cout << setprecision(2) << fixed;

cout << "\nClass average is " << average << endl;

}

else {

cout << "No grades were entered" << endl;

}

}

 

 

위 프로그램은 특정값(-1)이 입력될 때까지 반복하며 점수를 입력 받고, 총점과 평균을 출력한다.

위 프로그램의 결과는 아래와 같다.

 

Enter grade or -1 to quit: 80

Enter grade or -1 to quit: 70

Enter grade or -1 to quit: 90

Enter grade or -1 to quit: -1

Total of the 3 grades entered is 240

Class average is 80.00

 

static_cast는 <>안의 자료형으로 total 값을 임시적으로 변환하여준다.
이 때, total의 원래 자료형과 값은 변하지 않는다.

이는 정수끼리의 연산은 average 변수가 double로 선언되었더라도 정수형의 결과가 나오기 때문이다.

 

setprecision(2)은 소수 2자리의 출력을 위하여 사용되었다.

fixed는 컴퓨터에서 자리수가 많아져서 10의 거듭제곱꼴로 표현되는 것을 막고, 소수 자리를 무조건 2자리로 출력하도록 한다.

그래서 위의 결과에서 평균이 80.0이 아니라 80.00으로 표현되었다.