《C++ Primer》5th 课后练习 第二章 变量和基本类型 1~10

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40758751/article/details/101603728

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

它们的最小存储空间不同,分别为int(16位),long(32位),long long(64位),short(16位)。

无符号类型只能表示大于等于0的数。带符号类型可以表示正数,负数和0。

它们存储位数不同(float为32位,double为64位),因而取值范围不同,精度也不同(float精度为6位,double精度为10位)。

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

利率可以选择float 类型,因为利率通常为百分之几。一般只保留到小数点后两位,所以6 位有效数字就足以表示了。本金可以选择long 类型,因为本金通常为整数。long 类型可表示的最大整数一般为2^31-1(即2147483647),应该足以表示了。付款额一般为实数,可以选择double 类型,因为float 类型的6 位有效数字可能不足以表示。

练习2.3/2.4

#include <iostream>

using namespace std;

int main()
{
    unsigned u = 10, u2 = 42;
    cout << u2 - u << endl; //32
    cout << u - u2 << endl; //4294967264  -30%4294967296

    int i = 10, i2 = 42;
    cout << i2 - i << endl; //32
    cout << i - i2 << endl; //-32
    cout << i - u2 << endl; //4294967264 该行为自测多余
    std::cout << i - u << std::endl; //0
    cout << u - i << endl; //0
    return 0;
}

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

  • (a) ‘a’, L’a’, “a”, L"a"
  • (b) 10, 10u, 10L, 10uL, 012, 0xC
  • © 3.14, 3.14f, 3.14L
  • (d) 10, 10u, 10., 10e-2

(a) ‘a’ char类型, L’a’ wchar类型, “a” 字符串类型, L"a"宽字符串类型

(b)10 int类型, 10u unsigned int类型, 10L long类型, 10uL unsigned long类型, 012 八进制表示的int类型, 0xC 十六进制表示的int类型

©3.14 double类型, 3.14f float类型, 3.14L double类型

(d)10 int类型, 10u unsigned int类型, 10. double类型, 10e-2 double类型

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

int month = 9, day = 7;
int month = 09, day = 07;

有区别,前者定义了month和day变量,值分别为9和7;后者定义了month和day变量,值分别为八进制的9(错误,编译器会报错)和7。

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

(a) “Who goes with F\145rgus?\012”(b) 3.14e1L© 1024f(d) 3.14L

(a)“Who goes with Fergus?\n” 类型是字符串类型

(b)31.4 类型是double

©1024 类型是float

(d)3.14 类型是double

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

#include <iostream>

using namespace std;

int main()
{
    cout << "\62\115\12";
    cout << "\62\t\115" <<endl;
    return 0;
}

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

  • (a) std::cin >> int input_value;
  • (b) int i = { 3.14 };
  • © double salary = wage = 9999.99;
  • (d) int i = 3.14;

(a)(输入时才定义是不合法的)不正确,需在cin之前定义input_value

(b)会强转类型,编译器会报警告warning: narrowing conversion of ‘3.1400000000000001e+0’ from ‘double’ to ‘int’ inside { } [-Wnarrowing]|

©wage未定义

(d)会强转类型,编译器不会报警告

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

std::string global_str;
int global_int;
int main()
{
    int local_int;
    std::string local_str;
}

global_strglobal_int 是全局变量,所以初值分别为空字符串和 0 。 local_int 是局部变量并且没有初始化,它的初值是未定义的。 local_strstring 类的对象,它的值由类确定,为空字符串。

注:如果在定义变量时没有指定初值,那么变量会被默认初始化。三条性质:1、定义在任何函数体外的变量会被初始化为0。 2、定义在函数体内部的变量不会被初始化。 3、类的对象未被初始化,则初值由类决定。

猜你喜欢

转载自blog.csdn.net/qq_40758751/article/details/101603728