#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <string>
#include <vector>
using std::cin; using std::sort;
using std::cout; using std::string;
using std::endl; using std::streamsize;
using std::vector;
using std::setprecision; using std::precision;
int main()
{
//请求输入并读入学生的姓名
cout <<"Please enter your first name:";
string name;
cin >>name;
cout << "Hello, "<<name <<"!"<<endl;
//请求输入并读入期中和期末成绩
cout <<"Please enter your midterm and final exam grades:";
double midterm,final;
cin >> midterm >>final;
//请求输入家庭作业成绩
cout << "Enter all your homework grades," //输完后输个结束位 ctrl+z
"follwed by end-of-file:";
double x;
vector<double> homework;
//不变式:到目前为止,homework包含了所有读到的家庭作业成绩
while (cin>>x)
homework.push_back(x);
//检查homework是否为空
typedef vector<double>::size_type vec_sz;
vec_sz size = homework.size();
if (size ==0)
{
cout << endl <<"You must enter your grades."
<<"Please try again." <<endl;
return 1;
}
//对成绩进行排序
sort (homework.begin(),homework.end());
//计算家庭作业的中值
vec_sz mid =size/2;
double median;
median = (size%2 == 0) ? (homework[mid]+homework[mid-1])/2
:homework[mid];
//输出结果
streamsize prec =cout.precision();
cout <<"Your final greade is " <<setprecision(3)
<<0.2*midterm+0.4*final+0.4*median
<<setprecision(prec)<<endl;
return 0;
}
以下为调试信息
:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(12) : error C2039: 'precision' : is not a member of 'std'
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(12) : error C2873: 'precision' : symbol cannot be used in a using-declaration
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(35) : error C2653: 'vector<double,class std::allocator<double> >' : is not a class or namespace name
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(35) : error C2146: syntax error : missing ';' before identifier 'vec_sz'
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(35) : error C2065: 'vec_sz' : undeclared identifier
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(36) : error C2146: syntax error : missing ';' before identifier 'size'
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(36) : error C2065: 'size' : undeclared identifier
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(46) : error C2146: syntax error : missing ';' before identifier 'mid'
F:\Program Files\Microsoft Visual Studio\各章程序\3\3.2课内用中值代替平均值求学生成绩.cpp(46) : error C2065: 'mid' : undeclared identifier