C++PRIMER第二章前半部分答案

哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~

2.1&2.2

// 1.尺寸不同也就是可表示的数据大小不同,无符号和有符号即一个是所有bit都来存储值表示数据没有符号,另一个则相反,float与double即表示精度范围不同,double更精准些
// 2.利率,本金,付款都可选用double,因为浮点数运算通常选double
// 当然,学过java的都知道,这方面要用bigdecimal存储,当然现在不用了解

2.3&2.4

#include <iostream>
int main()
{
    unsigned u = 10, u2 = 42;
    std::cout << u2 -u << std::endl;//32
    std::cout << u -u2 << std::endl;//模-32

    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.5&2.6&2.7

// (a). 'a', L'a', "a", L"a"     字符, 宽字符, 字符串, 宽字符串
// (b). 10, 10u, 10L, 10uL, 012, 0xC  int, unsigned int, long int, unsigned long int, 8进制, 16进制
// (c). 3.14, 3.14f, 3.14L  double, float, long double 
// (d). 10, 10u, 10., 10e-2 int, unsigned int, double, double


// int month = 9, day = 7; 
// int month = 09, day = 07;
// 有,后者8进制,09会发生编译错误,因为9>8



// (a)"Who goes with F\145rhus?\012" 字符串 Who goes with Ferhus?\n   \145 10进制为101 ASCII码表对应字母e, \012 10进制为10 对应换行
// (b)3.14e1L 31.4 long double
// (c)1024f 1024.0 float
// (d)3.14L 3.14 long double

2.8

#include <iostream>
int main()
{
    std::cout << "2M\n" << std::endl;
    std::cout << "2\tM\n" << std::endl;
}

2.9&2.10

#include <iostream>


std::string global_str;
int global_int;
int main()
{
    //std::cin >> int input_value; //不可以 >>含义为右侧变量赋值 对变量赋值并不是初始化,初始化不等于赋值!!! ,先定义 input_value即可
    //int i = { 3.14 }; //不可以,列表初始化在赋值可能丢失信息的危险时不被允许 改为i(3.14)或去掉{}即可
    //double salary = wage = 9999.99; //不可以 wage为salary赋值时未定义,先定义wage即可
    //int i = 3.14; //可以,i为3
    int local_int;
    std::string local_str;
    std::cout << global_str << "\n" << global_int << "\n" << local_int << "\n" << local_str << "\n" << std::endl; //空字符串,0,0空字符串
}

2.11

#include <iostream>
extern int ix = 1024;//定义,切记不可在函数体内使用,只可全局使用
int iy;//定义
extern int iz;//声明

2.12

#include <iostream>
//int _diy;//不建议在函数体外部以下划线开头
int main()
{
    //int double = 3.14; //不可使用关键字
    //int _; // 可以
    //int and = 2; // 不可使用操作符替代名
    //int catch-22; //不可出现-
    //int 1_or_2 = 1; //不可数字开头
    //int wu__hu = 1; //不建议连续使用两个下划线
    //int _Soyu =2; //不建议使用下划线后大写字母
    //double Double = 3.14; // 可以,对大小写字母敏感
}

2.13

#include <iostream>
int i = 42;
int main()
{
    int i = 100;
    int j = i;
    std::cout << j << std::endl; //j=100;
}

2.14

#include <iostream>
int main()
{
    int i = 100, sum =0;
    for (int i = 0; i != 10; ++i)
        sum += i;
    std::cout << i << " " << sum << std::endl;//合法,sum为1-9累加和
}

2.15

#include <iostream>
int main()
{
    //int ival = 1.01;//可
    //int &rvall = 1.01;//不可初始值必须为对象且为int型对象
    //int &rval2 = ival;//可
    //int &rval3;//不可需赋初始值
}

2.16

#include <iostream>
int main()
{
    int i = 0, &r1 = i;
    double d = 0, &r2 = d;
    r2 = 3.14159;//d = 3.14159
    r2 = r1;//d = i
    i = r2;//i = d
    r1 = d;//i = d
}

2.17

#include <iostream>
int main()
{
    int i,&ri = i;
    i = 5; ri = 10; // i = 5 ; i = 10;
    std::cout << i << " " << ri << std::endl;// 10 10 
}

2.18

#include <iostream>
int main()
{
    int i = 42;
    int *p = &i;
    *p = 52;// i = 52
    std::cout << i << "\n" << p << std::endl;
    p = 0;// 指针p 指向空地址
    std::cout << i << "\n" << p << std::endl;
}

2.19

// 指针可以更改需要指向的对象,引用一经引用即终生绑定一个对象不可更改

2.20

#include <iostream>
int main()
{
    int i = 42;
    int *p1 = &i;//p指向i的地址
    *p1 = *p1 * *p1;// i = i*i
    std::cout << i << "\n" << *p1 << std::endl;// i i  
}

2.21

#include <iostream>
int main()
{
    //int i = 0;
    //double* dp = &i;//类型不同
    //int *ip = i;//需初始化地址
    //int *p = &i;//合法

}

2.22

#include <iostream>
int main()
{
    int *p = nullptr;
    if (p) //p的地址如果为0就false,如果不为空则true
    {
        ;
    }
    if (*p) //p指向的内容如果为0就false,如果不为0则true
    {
        ;
    }
}

2.23

//可以,查看是否赋予的是否为相同类型的地址或nullptr或0或NULL(不建议)

2.24

#include <iostream>
int main()
{
    //int i = 42;
    //void *p = &i;//void 可以存放任意类型对象的地址
    //long *lp = &i;//类型不对
}

2.25

#include <iostream>
int main()
{
    //int* ip,i,&r=i;// ip为int型指针,i为int ,r为int i的引用
    //int i,*p = 0;// i为int , p为空指针
    //int* ip,ip2;// ip为int型指针 ip2为int
}
最后修改:2021 年 06 月 02 日
END
本文作者:
文章标题:C++PRIMER第二章前半部分答案
本文地址:https://www.zaunekko.com/archives/11/
版权说明:若无注明,本文皆ZaunEkko原创,转载请保留文章出处。
如果觉得我的文章对你有用,请随意赞赏