博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章 表达式
阅读量:6278 次
发布时间:2019-06-22

本文共 3250 字,大约阅读时间需要 10 分钟。

4.17

 

4.18

*++pbeg:先将pbeg加1,然后用加1后的pbeg作为解引用运算符的运算对象。

所以,会从vector的第二个元素开始输出,直至输出最后一个元素的后一个位置(未知)。

 

4.19

题目意思是:int ival, *ptr;  vector<int> vec;

(a):判断ptr是否为空指针,若不是,再判断ptr指向的对象的值是否为0

(b):ival的值是否为0,若不是,再判断它加1后的值是否为0

(c):求值顺序不确定,没有意义的表达式,修改为“vec[ival] <= vec[ival+1]”

 

4.20

iter是vector<string>类型的迭代器,它指向的对象是string类型。

(a):合法,先加1,再解引用此时指向的string对象

(b):非法,string对象自加??

(c):非法,解引用运算符的优先级低于点运算符,而iter没有该成员函数

(d):合法,->运算符搭配迭代器使用,表示迭代器所指对象的成员

(e):非法,同(b)

(f ):合法,先判string对象是否为空,再将迭代器加1

 

4.21

#include 
#include
#include
#include
#include
#include
using std::cin;using std::cout; using std::endl;using std::vector;using std::string;int main() { vector
a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for(auto &i : a) i = i%2 ? 2*i : i; return 0;}

 

  

4.22

#include 
#include
#include
#include
#include
#include
using std::cin;using std::cout; using std::endl;using std::vector;using std::string;int main() { int grade = 70; string level = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : (grade < 75) ? "low pass" : "pass"; cout << level << endl; return 0;}

  

4.23

条件运算符的优先级过低!!

修改为:string pl = s + (s[s.size() - 1] == 's' ? "" : "s");

 

4.24

左结合律:代入一个数试试,行不通。

 

4.25

先取反再左移6位,即10001110→1000000

但是程序运行结果是-7296,这是因为题目最后问的是“值”而不是字符了,所以应该由8位转向32位。

最后的结果为:1111 1111 1111 1111 1110 0011 1000 0000   值为:-7296

 

4.26

如果机器上int是32位,那就没有影响;如果机器上int是16位,则若设置第27位为1,那么该数的值仍为0。

 

4.27

(a):3

(b):7

(c):true

(d):true

 

4.28

cout << sizeof(int) << endl;

 

 

4.29

第一行输出:10,对数组使用时,返回的是数组的大小;对指针使用是,返回的是指针本身的大小

第二行输出:1,对指针解引用使用,返回的是指针所指数据的类型(p指向数组的第一个元素)的大小

 

4.31

本节的程序中使用前置版本或者后置版本的效果是一样的,但是后置版本还需要保留改变前的变量并进行返回,这是额外的无任何意义的操作,因此无需使用后置版本。这里前置版本和后置版本的效果是一样的,无需任何改写。

1 #include 
2 #include
3 4 using std::cout; 5 using std::endl; 6 using std::vector; 7 8 9 int main()10 {11 vector
ivec(10,0);12 cout << "修改前ivec内元素值" << endl;13 for (auto a : ivec)14 cout << a << " ";15 cout << endl;16 17 vector
::size_type cnt = ivec.size();18 for (vector
::size_type ix = 0; ix != ivec.size(); ix++, cnt--)19 ivec[ix] = cnt;20 21 cout << "修改后ivec内元素值" << endl;22 for (auto a : ivec)23 cout << a << " ";24 cout << endl;25 26 return 0;27 }
View Code

 

 

4.32

利用指针和下标操作数组中的元素。

 

4.33

表达式实质为:(someVal ? ++x), (++yx), (--y)

显然,编译器会报错,因为上面那个冒号没有定义。

 

4.34

 (a):bool转换

 (b):ival转换为float,计算完的结果转换为double

 (c):cval转换为int,计算完毕后转换为double

 

4.35

(a):'a'转换为int,计算完后int转换为char

(b):ival转换为double,ui转换为double,计算完后double转换为float

(c):ui转换为float,计算完后float转换为double

(d):ival转换为float,计算完后float转换为double,最后计算完后double转换为char

 

4.36

i *= static_cast<int>(d);

 

4.37

int i; double d; const string *ps; char *pc; void *pv;

(a):pv = (void*)ps;    // pv = static_cast<void*>(const_cast<string*>(ps));

(b):i = int(*pc);     // i = static_cast<int>(*pc)

(c):pv = &d;      // pv = static_cast<void*>(&d)

(d):pc = (char*)pv;   // pc = static_cast<char*>(pv)

 

4.38

将 j/i 的结果转换为 double,然后赋给slope。

 

转载于:https://www.cnblogs.com/xzxl/p/7628045.html

你可能感兴趣的文章
分享pdf转换成word的方法
查看>>
jquery选择器
查看>>
Mac安装Tomcat的Home路径
查看>>
mysql 主从配置
查看>>
Java多线程(二) synchronized 针对对象进行锁定
查看>>
mount过程分析之六——挂载关系(图解)【转】
查看>>
宏定义编写技巧__调试技巧【原创】
查看>>
SQLAlchemy基础操作一
查看>>
前端的字符串时间如何自动转换为后端Java的Date属性,介绍springMVC中如何解决时间转换问题...
查看>>
0317复利软件更新
查看>>
wpf之Popup弹出自定义输入"键盘"
查看>>
Webform 分页
查看>>
分享python分析wave, pcm音频文件
查看>>
Linux 下 安装jdk 1.7
查看>>
odoo开发笔记--from视图隐藏顶部&tree视图保留
查看>>
C#对象JSON序列化与客户端JavaScript反序列化
查看>>
windows10最实用的快捷键、高效的windows模式
查看>>
HDU 2546 饭卡(01 背包)
查看>>
debian9源
查看>>
Asponse.Cell操作Excel
查看>>