您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 第五章习题答案(21~25)

2017-01-07 10:36 417 查看
21:

知识点1:continue语句:终止最近循环中的当前迭代并立即开始下一次迭代。

知识点2:它只能出现在for、while、do while的内部。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
string My_string1, My_string2;
do
{
cout<<"请输入字符串"<<endl;
cin>>My_string1;
if (My_string1[0] > 'Z' || My_string1[0] < 'A')
{
continue;
}//感觉这里是强行练习一下continue的用法,不是大写字母就直接跳出开始下一次即可
if (My_string1 == My_string2)
{
cout<<"没有任何单词是重复的"<<endl;
break;
}
else
My_string2 = My_string1;
} while (cin);//第18题中就有的很好的例子
}


连同20题在内,我都给做错了.....................感谢评论区的指点,审题还是很重要的啊!

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
string My_string1, My_string2;
int flag = 0;//记录是否有重复单词出现
cout<<"请输入单词:";
while(cin>>My_string1)
{
cout<<"请继续输入单词:";
if (My_string1[0] > 'Z' || My_string1[0] < 'A')
{
continue;
}//感觉这里是强行练习一下continue的用法,不是大写字母就直接跳出开始下一次即可
if (My_string1 == My_string2)
{
cout<<"重复单词为:"<<My_string1<<endl;
flag = 1;
break;
}
else
My_string2 = My_string1;
} //第18题中就有的很好的例子
if (flag == 0)
{
cout<<"无重复单词出现"<<endl;
}
}


第二次改进:细节问题还是很重要的啊!!!!感谢评论区的小伙伴!

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{

string My_string1, My_string2;
int flag = 0;//记录是否有重复单词出现
cout<<"请输入单词:";
while(cin>>My_string1)
{

if (My_string1[0] > 'Z' || My_string1[0] < 'A')
{
My_string2 = My_string1;
cout<<"请继续输入单词:"; //主要是这里出现了一些缺陷~
continue;
}//感觉这里是强行练习一下continue的用法,不是大写字母就直接跳出开始下一次即可
if (My_string1 == My_string2)
{
cout<<"重复单词为:"<<My_string1<<endl;
flag = 1;
break;
}
else
My_string2 = My_string1;
cout<<"请继续输入单词:";
} //第18题中就有的很好的例子
if (flag == 0)
{
cout<<"无重复单词出现"<<endl;
}
system("pause");
}

22:只有一句话:千万别用goto语句,这个东西和人类的阑尾一样,切了完全不影响。

23、24、25:

知识点1:异常——指运行时程序的反常行为,典型的有:失去数据库连接、遇到意外的输入等。

知识点2:异常处理—— 在异常被检测出以后,进行异常的处理,主要分为三种:throw表达式、try语句快和异常类

throw表达式:异常检测部分使用throw表达式来表示它遇到的无法处理的问题。

try语句块:处理异常,以关键字try开始,以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被catch子句处理。被称为异常处理代码。

异常类:用于在throw和相关的catch子句之间进行异常信息的传递。

#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>//标准异常库
using namespace std;
void main()
{
int a,b;
cout<<"请输入相除的两个整数:";
while(cin>>a>>b)
{
try
{
if (b == 0) throw std::runtime_error("被除数不能为0");//runtime_error异常类:只有在运行时才能检测出的问题
cout<<static_cast<double>(a)/b<<endl;//考虑到不可以整除产生小数的情况,先将a强制转化为double类型
}
catch (runtime_error err)//err是runtime_error类的一个实例
{
cout << err.what() ;实例的成员函数,返回内容由编译其决定
cout << "\n是否需要重新输入? Enter y or n:" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;//break只能用在开关体或者循环体中
}//简单来说try是检测异常的,如果产生了异常,就throw(抛出)一个异常,然后被catch到,进行异常的处理
//如果没有catch部分,仅有try,仍然会报错
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息