《C++ Primer》第01章习题练习1~8题

本篇是《C++ Primer》(第5版)第1章的习题练习1~8题的答案。

练习1:查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行第2页的main程序。

解答:在Mac上用XCode编写的C++源文件后缀名为.cpp
 
 
int main()
{
    return 0;
}

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

解答:编译上面一个例子,然后在终端输入echo $?  返回的结果为0

把返回0改为返回-1时,然后再编译,运行,在终端输入echo $?  返回的结果为0

int main()
{
    std::cout << "hello world===================\\n" << std::endl;
    //return -1;
    exit(-1);
}
为什么不是-1 ?

在进行源代码编译,或者执行命令无法确认所执行的命令是否成功执行的情况下,我们都会使用 echo $? 来进行测试

如果返回值是0,就是执行成功;如果是返回值是0以外的值,就是失败。

之前在学习的时候只是机械的接受了这个事实,没有考虑背后的原理。

这二天在查看资料的时候突然看到了“进程生命周期”的知识:

当一个进程执行完毕时,该进程会调用一个名为 _exit 的例程来通知内核它已经做好“消亡”的准备了。该进程会提供一个退出码(一个整数)表明它准备退出的原因。按照惯例,0用来表示正常的或者说“成功”的终止。

也就是说我们在执行 echo $? 时反回的值就是进程的退出码。而且,这个退出码是由刚刚执行完的进程提供给系统内核的。

《编写高质量代码:改善C++程序的150个建议》 第0个建议
int main()
{  
    return 0;
}

int main()
{  
    return -1;
}

 

 

在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号 ( Error Number )。

在控制台下,有一个特殊的环境变量 $?,保存着前一个程序的返回值,我们可以试试:

先随便执行个命令,比如像上面的 ls 某些文件,然后通过 echo $?,打印 $? 的值~

我们发现返回值是 0,这是什么意思呢?

只要返回值是 0,就代表程序执行成功了~

也就是说,如果 $? 变量的值不是 0 的话,就表示上一个命令在执行的过程中出错了。我们可以试着 ls 一个不存在的文件:

练习3:编写程序,在标准输出上打印Hello, World。
#include <iostream>

int main()
{
    std::cout << "\nhello world C++ Primer 开始-__-|-__-\n";
    return 0;
}

练习4:我们的程序使用加法运行符+来将两个数相加。编写程序使用乘法运行符*,来打印两个数的积。

#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int param1 = 0;
    int param2 = 0;
    std::cin >> param1 >> param2;
    std::cout << "The sum of " << param1 << " and " << param2 << " is " << (param1 + param2)
              << "The difference of " << param1 << " and " << param2 << " is " << (param1 - param2)
              << "The product of " << param1 << " and " << param2 << " is " << (param1 * param2)
              << "The quotients of " << param1 << " and " << param2 << " is " << (param1 / param2) << std::endl;
    std::cout << std::endl;
    return 0;
}

练习5:我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作入在一条独立的语句中。

#include <iostream>

int main()
{
    
    std::cout << "请输入两个数:" << std::endl;
    int param1 = 0;
    int param2 = 0;
    std::cin >> param1 >> param2;
    std::cout << param1 << "和" << param2 << "的和为:" << (param1 + param2) << std::endl;
    std::cout << param1 << "和" << param2 << "的差为:" << (param1 - param2) << std::endl;
    std::cout << param1 << "和" << param2 << "的积为:" << (param1 * param2) << std::endl;
    std::cout << param1 << "和" << param2 << "的商为:" << (param1 / param2) << std::endl;
    std::cout << std::endl;
    return 0;
}

练习6:解释下面程序片段是否合法。

std::cout << "The sum of " << v1;

              << " and " <<v2;

      << " is " << v1+ v2 << std::endl;

如果程序是合法的,它输出什么?如果程序不合法,原因何在?应该如何修正?

#include <iostream>

int main()
{
    std::cout << "Enter two  numbers:" << std::endl;
    int param1 = 0;
    int param2 = 0;
    std::cin >> param1 >> param2;
    std::cout << "The sum和 of " << param1
            << " and " << param2
            << " is " << (param1 + param2) << std::endl;


    return 0;
}

分号表示语句的结束, “<<” 之前加上输出流(std::cout),或去掉分号连写成一条语句才可以编译。

练习7:编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。

#include <iostream>

int main()
{
    int a = 0;
    int b = 0;
    
    std::cout << "a = " << a << "   b = " << b << std::endl;
    
    return 0;
}

练习8:指出下外输出语句是合法的(如果有的话):

std::cout << "/*";

std::cout << "*/*";

std::cout << "*  "*/* " */;

std::cout << "/  "*/"  /*  "/*"  */;

预测编译这些语句会产生什么样的结果,实际编译实些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。

#include <iostream>


int main()
{
    std::cout << "/*";
    std::cout << "*/";
    //std::cout << /* "*/" */;
    std::cout << /* "*/" */";
    std::cout << /* "*/" /* "/*" */;    //不赞成这样写,维护性差
    
    return 0;
}

 

 

 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值