本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
写完第十章习题,开始从头开始,把前面的习题全部完成,书也顺序看下去。
习题解答
1.1 查阅你使用的编译器的文档,确定它所使用的文件命名约定,编译并运行main程序。
我使用的编译器为visio studio2013 读者使用其他的编译器也是可以的只要能支持 c++11即可。
int main()
{
return 0;
}
比较简单,就不显示结果
1.2改写程序,让它返回-1,返回-1通常被当作程序错误的标识。重新编译运行你的程序,观察你的系统如何处理main返回的错误标识。
返回-1 和返回0 ,在单个函数中没看出有什么区别,系统也不会做什么处理。
1.3 编写程序,在标准输出上打印 hello,World。
#include
int main()
{
std::cout<<"hello,World"<::endl;
return 0;
}
1.4:我们程序使用加法运算符+来讲两个数相加,编写程序使用乘法运算*,来打印两个数的积。
#include
int main()
{
int v1 = 0;
int v2 = 0;
std::cin>>v1>>v2;
std::cout<<"the product of"<< v1<<"and"<"is"<std::endl;
return 0;
}
1.5:我们将所有输出操作放在一条很长的语句中。重写程序将每个打印操作放在独立的语句中。
#include
int main()
{
int v1 = 0;
int v2 = 0;
std::cin>>v1>>v2;
std::cout<<"the product of";
std::cout<;
std::cout<<"and";
std::cout<;
std::cout<<"is";
std::cout< ;
std::cout<::endl;
return 0;
}
1.6解释下面程序片段是否合法,
std::cout<<"the sum of"<;
<<"and"<"is" <std::endl;
如果程序合法,它输出什么,如果不合法,原因何在。
不合法 ,因为没有输出流
改正如下
std::cout<<"the sum of"<;
std::cout<<"and"<;
std::cout<<"is"<::endl;
1.7编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
int main()
{
/*
/*
*/
*/
return 0;
}
输出结果编译错误 :在注释外找到“*/”
1.8指出下列输出语句那些是合法的(如果有的话)
std::cout<<"/*";
std::cout<<"*/";
std::cout<*"*/"*/;
std::cout<*"*"/*"*/"*/;
//预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将一条语句作为其主体)改正每个编译错误。
第一二个能正确编译并运行输出结果。
第三四个不能通过编译,可以改正为如下
std::cout <
int main()
{
int i = 50;
int sum = 0;
while (i<=100)
{
sum = sum + (i++);
}
//for版本
int sum1 =0;
for(int i = 50 ;i<=100;i++)
{
sum1 +=i;
}
std::cout << sum << std::endl;
system("pause");
return 0;
}
输出结果 为3825
1.10除了++运算符将运算对象的值加1之外,还有一个递减运算符–实现将值减一,编写程序,使用递减运算符在循环中按递减顺序打印出10到0的整数。
#include
int main()
{
int i = 10; //设定初始值
while (i>=0)
{
std::cout << i << std::endl;
i--;
}
//for版本
for (inti=10;i>=0;i--)
{
std::cout << i << std::endl;
i--;
}
//暂停程序运行
system("pause");
return 0;
}
1.11 编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
#include
int main()
{
int num1=0,num2=0;
std::cout << "input two numbers " << std::endl;
//从输入流中得到输人的两个数并分别赋值给num1和num2
std::cin >> num1 >> num2;
//使用三目运算符 从num1和num2中得到最小数
int minnum = num1 < num2 ? num1 : num2;
int n = minnum; //保存最小数
//num1 + num2 - n 得到最大数 不用再比较一次
while (minnum <= num1 + num2 - n)
{
std::cout << minnum << std::endl;
minnum++;
}
//for版本
for(int k = minum;minnum<=num1 + num2 - n;minnum++)
{
std::cout << minnum << std::endl;
}
system("pause");
return 0;
}
1.12下面for循环完成了什么功能,sum的终值是多少?
int sum= 0;
for(int i=-100;i<=100;i++)
sum + =i;
循环完成,从[-100,100]之间的数和相加 ,sum的值为0.
1.13使用for循环重做1.1.4节的所有练习。
在上面
1.14 对比for循环和while循环,两者的优缺点各式什么;
for:循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。
while:循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)
1.15编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器错误信息
这个自己调试就好了,不贴结果。
1.16 编写程序从cin读取一组数,输出其和。
#include
int main()
{
int n=0,sum=0;
while (std::cin>>n)
{
sum = sum + n;
}
std::cout << "the numbers sum is:"<std::endl;
system("pause");
return 0;
}
输出结果为:
1.17 如果输入的所有值都是相等的,本节程序输出什么,如果没哟重复的输出什么?
如果所有值相等输出的 为输入元素的个数
如果所有值不重复输出为每个元素个数为一
1.18编译并运行本节程序,给他输入全部相等的值,再次运行程序,输入没有重复的值。
执行编译运行,这里不贴结果。
1.19 修改你为1.4.1节练习1.10所编写的程序,打印一个范围内的数,使其能处理用户输入的第一个数比第二个数小的情况。
1.20在网站http://www.informit.com/title/0321714113上,第一章的代码目录中包含了头文件Sales_item.h,将他拷贝到你自己的工作目录中,用它编写一个程序,读取一组书籍记录,将每条记录打印在标准输出上。
#include
#include "Sales_item.h"
int main()
{
Sales_item item;
while (std::cin>>item)
std::cout << item;
system("pause");
return 0;
}
输出如下
1.21,编写程序,读取两个isbn相同的sales_item对象,输出他们的和
#include
#include "Sales_item.h"
int main()
{
Sales_item item1,item2;
//这里并没有判断isbn是否相等
while (std::cin>>item1>>item2)
std::cout << item1+item2;
system("pause");
return 0;
}
输出结果如下
1.22 编写程序,读取具有多个相同isbn的销售记录,输出所有记录之和
#include
#include "Sales_item.h"
int main()
{
Sales_item itemSum,item;
//先保存第一个 不然会出错
std::cin >> itemSum;
//然后输入
while (std::cin >> item)
itemSum += item; //并没有判断是否相同isbn
std::cout << itemSum;
system("pause");
return 0;
}
1.23编写程序,读取多条销售记录,并统计每个isbn有几条销售记录。
#include
#include "Sales_item.h"
int main()
{
Sales_item currItem,nextItem;
int number = 1;
std::cin >> currItem;
while (std::cin >> nextItem)
if (currItem.isbn() == nextItem.isbn())
{
number++;
currItem = nextItem;
}
else
{
std::cout << currItem.isbn() << " has sold note " << number << std::endl;
number = 1;
currItem = nextItem;
}
//输出最后一条
std::cout << currItem.isbn() << " has sold note " << number << std::endl;
system("pause");
return 0;
}
输出如下:
1.24:输入表示多个isbn的多条销售记录来测试上一个程序,每个isbn的记录应该聚在一起。
在不使用数组或容器的情况下 ,不太理解怎么做到,能把每个isbn合并。
1.25 借助网上的Sales_item.h头文件,编译并运行本节给出的书店程序
读者自行编译运行。
在编写上面的程序中,尽量只用到本章节及前面章节所学到的知识,而不是使用 后面学到的如容器 数组等等其他编写,处理数据。