c++ primer第五版(中文)习题答案 第一章-开始

来源:互联网 发布:网龙网络 编辑:程序博客网 时间:2024/05/17 00:53

本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。

写完第十章习题,开始从头开始,把前面的习题全部完成,书也顺序看下去。

习题解答
1.1 查阅你使用的编译器的文档,确定它所使用的文件命名约定,编译并运行main程序。
我使用的编译器为visio studio2013 读者使用其他的编译器也是可以的只要能支持 c++11即可。

int main(){    return 0;}

比较简单,就不显示结果

1.2改写程序,让它返回-1,返回-1通常被当作程序错误的标识。重新编译运行你的程序,观察你的系统如何处理main返回的错误标识。

返回-1 和返回0 ,在单个函数中没看出有什么区别,系统也不会做什么处理。

1.3 编写程序,在标准输出上打印 hello,World。

#include<iostream>int main(){    std::cout<<"hello,World"<<std::endl;    return 0;}

1.4:我们程序使用加法运算符+来讲两个数相加,编写程序使用乘法运算*,来打印两个数的积。

#include<iostream>int main(){    int v1 = 0;    int v2 = 0;    std::cin>>v1>>v2;    std::cout<<"the product of"<< v1<<"and"<<v2<<"is"<<v1*v2 <<std::endl;    return 0;}

1.5:我们将所有输出操作放在一条很长的语句中。重写程序将每个打印操作放在独立的语句中。

#include<iostream>int main(){    int v1 = 0;    int v2 = 0;    std::cin>>v1>>v2;    std::cout<<"the product of";    std::cout<<v1;    std::cout<<"and";    std::cout<<v2;    std::cout<<"is";    std::cout<<v1*v2 ;    std::cout<<std::endl;    return 0;}

1.6解释下面程序片段是否合法,

    std::cout<<"the sum of"<<v1;    <<"and"<<v2;    <<"is"<<v1*v2<<std::endl;

如果程序合法,它输出什么,如果不合法,原因何在。

不合法 ,因为没有输出流
改正如下

    std::cout<<"the sum of"<<v1;    std::cout<<"and"<<v2;    std::cout<<"is"<<v1*v2<<std::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 <iostream>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 <iostream>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= 0for(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 <iostream>int main(){    int n=0,sum=0;    while (std::cin>>n)    {        sum = sum + n;    }         std::cout << "the numbers sum is:"<<sum << 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 <iostream>#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 <iostream>#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 <iostream>#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 <iostream>#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头文件,编译并运行本节给出的书店程序
读者自行编译运行。

在编写上面的程序中,尽量只用到本章节及前面章节所学到的知识,而不是使用 后面学到的如容器 数组等等其他编写,处理数据。

3 0