学习Accelerated C++3

第三章
本章讲解的主要程序
#include //输入输出
#include//string字符串
#include//streamsize
#include//setprecision
#include//sort排序算法
#include//向量
using namespace std;

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 << “Please enter homework grades,”“Followed by end-of-file:”;
double x;
vectorhomework;
while (cin >> x)
{
homework.push_back(x);
}
//计算中值
typedef vector::size_type vec_sz;//typedef用来将vec_sz代替vector::size_type(太长了)
vec_sz size = homework.size();
if (size == 0)
{
cout << “Please enter your homework grades,”“Please try again.” << endl;
return 1;
}
sort(homework.begin(), homework.end());//将homework中内容从第一个数到最后一个数的后一位进行非递减排序
vec_sz mid = size / 2;//mid必须和size的类型一致
double median = size % 2 == 0 ? (homework[mid - 1] + homework[mid + 1]) / 2 : homework[mid];//不要忘记要取整,mid不一定是整数
//输出成绩
streamsize prec = cout.precision();
cout << “Your final grades is:” << setprecision(3) << 0.2midterm + 0.4final + 0.4*median
<< setprecision(prec) << endl;//setprecision(3)设置输出有效位为三位
system(“pause”);
return 0;
}

这一章学习了很多新的知识点
1.头文件定义了streamsize类型 输入输出库用这个类型表示长度
头文件定义了setprecision控制器 指明输出所包含的有效位
setprecision(3)输出有三位有效数字
2.单精度浮点型float 双精度浮点型double
float提供大约6位
double提供大约10位
double比float更精确
而且有时候double甚至比float要快
3.cout可以这样用
cout<<“早晨好”"今天天气真好“:
程序中输入两个以上字符串仅仅用空白符分割开来,这些字符串就会被自动连接到一起
4.一般定义变量时候都应该初始化 如果没有 就会有 缺省初始化
就是我们没有给变量初始化时候 类就会给自己指定一个初始值
但是对于内部变量 没有这种缺省初始化 创建变量时候 系统给变量分配适当的内存单元 变量值就是由这些单元中随机信息组成.
像本章程序中的count和sum 如果没有赋初值 就会出错
因为count++这种语句都会出错
5.vector保存了一系列具有特定类型的的数值 大小可以增长
vector<>push_back(x)将x加到vector向量的最后
6.typedef vector::size_type vec_sz;//typedef用来将vec_sz代替
7.sort(homework.begin(), homework.end());//将homework中内容从第一个数到最后一个数的后一位进行非递减排序
如果弄成非递增序列的话可以用reverse(number.begin(), number.end());//向量翻转排成非递增序列

课后题
3-2
#include
#include
#include
#include
using namespace std;

int main32()
{
//告诉用户输入数字
cout << "请输入任意整数(输入整数的数目要被4整除): ";
vectornumber;
int count = 0;
int x;
//输入过程
while (cin >> x)
{
number.push_back(x);
count++;//此处简便直接用 number.size()代替就好了
}
if (count % 4 != 0)
{
cout << “输入整数的数目要被4整除,请重新输入!”;
return 1;
}
//求四部分整数值的和
sort(number.begin(), number.end());//向量序列排成非递减序列
reverse(number.begin(), number.end());//向量翻转排成非递增序列
int n = count / 4;
int a=0,b=0,c=0,d=0;
for (int i = 0; i != n; i++)
{
a += number[i];
}
for (int i = n; i != 2n; i++)
{
b += number[i];
}
for (int i = 2
n; i != 3n; i++)
{
c += number[i];
}
for (int i = 3
n; i != 4*n; i++)
{
d += number[i];
}

//从大到小输出四组求和的数
cout << a << "," << b << "," << c << "," << d << endl;


system("pause");
return 0;

}

3-3
#include
#include
#include
using namespace std;

//这个程序自己开始没有想到
int main33()
{
vectorwords;
vectorcount;
typedef vector::size_type vec_sz;

string s;
cout << "Please enter words:";

while (cin >> s)
{
	bool found = 0;//found的建立很有技巧
	for (vec_sz i = 0; i != words.size(); i++)
	{
		if (s == words[i])
		{
			count[i]++;
			found = 1;
		}
	}
	if(!found)
	{
		words.push_back(s);
		count.push_back(1);
	}
}

for (vec_sz i = 0; i != words.size(); i++)
{
	cout << words[i] << " show " << count[i] << " times " << endl;
}

system("pause");
return 0;

}
3-4
#include
#include
#include
using namespace std;

int main344()
{
vectorword;
typedef vector::size_type vsz_wd;
vector<vsz_wd>count;

cout << "Please enter word:";
string s;
while (cin >> s)
{
	word.push_back(s);
	vsz_wd number = s.size();
	count.push_back(number);
}
for (vsz_wd i = 0; i != word.size(); i++)
{
	for (vsz_wd j = i; j != word.size(); j++)
	{
		if (count[i] < count[j])
		{
			vsz_wd m = count[j];
			count[j] = count[i];
			count[i] = m;
			string n = word[j];
			word[j] = word[i];
			word[i] = n;
		}
	}
}

cout << "The biggest word is:" << word[0] << endl;
cout << "The smellestword is:" << word[word.size() - 1] << endl;//向量最后一个元素的表示方法

system("pause");
return 0;

}

//自己的思想是吧所有输入的字符串的长度从长到短排序下来 然后输出第一个和最后一个就可以了
//网上还有个思想 是 定义了一个最长和最短的字符串 每输入一个字符串就和他们比较 如果更长或者 更短就更新

3-5
#include
#include
#include
#include
#include
using namespace std;

int main()
{
vectorname;
vectorgrades;

string na;
double gd=0;
double mid;
double final;

cout << "Please enter how many times of homework:";
int time;
cin >> time;

while (cin >> na)
{
	cout << "这位学生的名字是:"<<na << endl;
	name.push_back(na);

	cout << "请输入期中和期末成绩:";
	cin >> mid >> final;

	for (int i = 0; i != time; i++)
	{
		cout << "请输入作业成绩:";
		double g;
		cin >> g;
		gd += g;
	}
	double final_grade= 0.2 * mid + 0.4 * final + 0.4 * gd / time;
	grades.push_back(final_grade);
	gd = 0;
}
typedef string::size_type str_sz;

//不要忘记输出成绩一定要设置精度
streamsize prec = cout.precision();
for (str_sz j = 0; j != name.size(); j++)
{
	cout << setprecision(3)<<name[j] << "的总成绩是:" << grades[j] <<setprecision(prec)<< endl;
}

system("pause");
return 0;

}

猜你喜欢

转载自blog.csdn.net/Beat_Tao_blow/article/details/88226763