C++ Primer 习题(第二章附答案)

练习2.1 类型int、long、long long 和short 的区别是什么?无符号类型和带符号类型的区别是什么?float 和double的区别是什么?

   在C++语言中,int、long、long long 和short都属于整型,区别是C++标准规定的尺寸的最小值不同。其中,short 是短整型,占16位;int是整型,占16位;long 和long long均为长整型,均为长整形,分别占32位和64位。
   
   大多数整型都可以划分为无符号类型和带符号类型,在无符号类型中所有比特都用来存储数值,但是仅能表示大于等于0的值;带符号类型则可以表示正数、负数或0。
   
   float 和 double 分别是单精度浮点数和双精度浮点数,区别主要是在内存中所占的比特数不同,以及默认规定的有效位数不同。

练习2.2 计算按揭贷款时,对于利率、本金和付款分别应选择何种数据类型?说明你的理由。

    在实际应用中,利率、本金和付款既有可能是整数,也有可能是普通的实数。因此应该选择一种浮点类型来表示。在三种可供选择的浮点类型 float、double和long double 中,double和float的计算代价比较接近且表示范围更广,long double 的计算代价比较大,一般情况下没有选择的必要。综上,选择double是比较恰当的。

练习2.3 读程序,写结果

    unsigned u = 10, u2 = 42; 
    std::cout << u2 - u << std::endl;   //32
    std::cout << u - u2 << std::endl;   // 表示无符号整型自动加模 4294967264
    int i = 10, i2 = 42; 
    std::cout << i2 - i << std::endl;   // 32
    std::cout << i - i2 << std::endl;   // -32
    std::cout << i - u << std::endl;    // 0
    std::cout << u - i << std::endl;    // 0
    //计算前带符号类型会自动转换成无符号类型,当带符号类型取值为负时就会出现异常结果。

练习2.4 略

练习2.5 指出下述字面值的数据类型并说明每一组内几种字面值的区别

(a)'a'<字符字面值>, L'a'<宽字符字面值,类型是wchar_t>, "a"<字符串字面值>, L"a"<宽字符字符串字面值

(b)10<十进制>, 10u<无符号整型>, 10L<长整型>, 10uL<无符号长整型>, 012<八进制>, 0xC<十六进制

(c)3.14,<浮点数> 3.14f<单精度浮点型字面值,类型是float>, 3.14L<扩展精度浮点型字面值,类型是long double>

(4)10<十进制>, 10u<无符号整型>, 10.<浮点型>, 10e-2<浮点型字面值>

练习2.6 下面两组定义是否有区别,如果有,请叙述之

int month = 9, day = 7;    //定义正确,定义了两个十进制数9和7。
int month = 09, day = 07;  // 定义错误,因为以0开头的数是八进制数,而数字9显然超出了八进制数能表示的范围。

练习2.7 下述字面值表示何种含义?它们各自的数据类型是什么?

(a)"who goes with F\145rgus?\012"   
    // \145表示字符“e”, \012表示换行符。 输出:who goes with Fergus?
(2) 3.14e1L   // 科学计数法表示的扩展精度浮点数
(3) 1024f     // 试图表示单精度浮点数,改写为1024.f
(4) 3.14L     // 表示扩展精度浮点数,类型是long double

练习2.8 使用转义字符写一段程序,要求先输出2M,然后转到新的一行。修改程序使其先输出2, 然后输出制表符,再输出M,最后转到新的一行。

#include <iostream>
using namespace std;

int main()
{
   
	cout << "2\x4d\012";
	cout << "2\tM\n";
	return 0;
}

练习2.9 解释下列定义的含义。对于非法的定义,请说明错在何处并将其改正。

 (a)std::cin >> int input_value          // 错误
 // int input_value
 //std::cin >> input_value

(b)int i = {
    3.14 };                //  引发警告,该语句定义了一个整型变量i,但是试图通过列表初始化的方式把浮点数3.14赋值给i,这样做将造成小数部分丢失,是一种不被建议的窄化操作。

(c)double salary = wage = 9999.99;      //错误
//double salary,wage
//salary = wage = 9999.99

(d)int i = 3.14;        // 引发警告,该语句定义了一个整型变量i,但是试图把浮点数3.14赋值给i,这样做将造成小数部分丢失,是一种不被建议的窄化操作

练习2.10 下列变量的初值分别是什么?

std::string g_str;    //初始化为空串
int global_int;        // 初始化为0
int main ()
{
   
    int local_int;      //不被初始化
    std::string local_str;   //初始化为空串
}

练习2.11 指出下面的语句是被声明还是定义。

(a)extern int ix = 1024;    // 定义了变量ix
(b)int iy;      // 声明并定义了变量iy
(c)extern int iz;       // 声明了变量iz

练习2.12 请指出下面的名字中哪个是非法的?

(a)int doube = 3.14;    //非法,double为关键字,不能作为变量名
(b)int _;       //合法
(c)int catch-22;        //非法,标识符只能包含字母、数字、下划线
(d)int 1_or_2 = 1;      //非法,标识符必须以字面或者下划线开头
(e)double Double = 3.14;    //合法

练习2.13 下面程序中j的值是多少?

int i =42;
int main ()
{
   
    int i = 100
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值