要求是这样的:输入名字,输入期中考和期末成绩,然后是不定个平时作业成绩,按照一定的比例算出总评成绩。
用C语音实现的话没什么好说的,但是我要用c++并且使用各种奇怪的模板或者容器来实现(→ →其实我暂时也不是很懂),代码按照Accelerated C++打出,然后自己写出注释。
上代码:
1 #include <algorithm> //STL中的内容 在这段代码中用来实现对向量(其实也就是C中的数组)进行快速排序 2 #include <iomanip> //下面代码中使用的setprecision的头文件 在这里用来实现精确位数的输出。manip是manipulator的缩写。 3 #include <ios> //下面代码中使用的streamsize的头文件,在这里用来表示长度(typedef) 4 #include <iostream> //输出与输入流 5 #include <string> 6 #include <vector> //使用容器vector的头文件 7 using namespace std; 8 int main() 9 { 10 cout<<"please enter your first name:"; 11 string name; 12 cin>>name; 13 cout<<"hello, "<<name<<" !"<<endl; 14 cout<<"please enter your midterm and final exam grades :"; 15 double midteam,final; 16 cin>>midteam>>final; 17 cout<<"enter all your homework gradge, " 18 "followed by end-of-file: "; 19 /* 前面这一部分代码实现一些输入输出和变量的定义等,并且说明了输出平时作业成绩的时候要用EOF的方式进行结束(end-of-file) */20 vector<double>homework;//书上说的是定义一个向量homework,其实我的理解就是定义一个数组.用vector来定义一个向量的方式是 vector<数据类型>向量名 21 double x; //变量x用来读取数据,起到临时工的作用 22 while(cin>>x) //当输入成功的时候就继续执行while循环 23 homework.push_back(x); //将括号里面的数压进向量里面。书写的格式为 向量名.push_back(x); 24 typedef vector<double>::size_type vec_sz; /* 上面这一句是重点。vector类型下面还定义了一个类型,叫做size_type,用来保存向量的长度,而且这个长度可以是无限大, 这样的话就不会因为变量类型的不同影响到长度的获取,也能把系统环境独立出来。 。还有一个叫做size的函数,属于vector类型,用来返回长度值。 但是每次都用size_type来写就太麻烦了,于是为了简化程序,那堆天才就发现一种语言工具叫做typedef。 通过上面这句代码的使用,我们就用vec_sz替代了vector<double>::size_type,以后需要用的时候直接用vec_sz来代替就好了。 要注意的是,这里使用的格式是这样的 ”typedef vector<数据类型>::size_type 替代名“ */25 vec_sz size = homework.size(); //等同于 vector<double>::size_type = homework.size(); 26 if(size==0) //if语句用来判断到底有没有读进平时作业成绩,如果没有,直接退出重新来过~ 27 { 28 cout<<endl<<"you must enter your gradge." 29 "please try again."<<endl; 30 31 return 1; 32 } 33 sort(homework.begin(),homework.end()); //对向量进行快速排序(非递减)。其中vector类下面还提供两个成员函数begin和end,用来返回头尾元素 34 vec_sz mid=size/2; 35 double median; 36 median = size % 2 ==0?(homework[mid]+homework[mid-1])/2:homework[mid]; /* 上面这一段用来求中值。注意36行的写法。问号后面跟的是执行式,不需要写homework=xxxxxxxxxx....*/ 38 streamsize prec = cout.precision(); //这部分暂时理解不了,以后再来 39 cout<<"your final grade is "<<setprecision(3) 40 <<0.2*midteam+0.4*final+0.4*median 41 <<setprecision(prec)<<endl; 42 return 0; 43 }
时间: 2024-10-30 05:04:30