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

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

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

习题解答
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= 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 
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;
}

输出结果为:
c++ primer第五版(中文)习题答案 第一章-开始_第1张图片
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;
}

输出如下:
c++ primer第五版(中文)习题答案 第一章-开始_第2张图片

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;
}

输出如下:

c++ primer第五版(中文)习题答案 第一章-开始_第3张图片

1.24:输入表示多个isbn的多条销售记录来测试上一个程序,每个isbn的记录应该聚在一起。
在不使用数组或容器的情况下 ,不太理解怎么做到,能把每个isbn合并。
1.25 借助网上的Sales_item.h头文件,编译并运行本节给出的书店程序
读者自行编译运行。

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

你可能感兴趣的:(c++,primer第五版习题)