Chapter 4: Expressions

Exercises Section 4.1.2

Ex4.1

5 + 10 * 20 / 2 = 105

Ex4.2

a) *(vec.begin())
b) (*(vec.begin())) + 1

Exercises Section 4.2

Ex4.4

((12 / 3) * 4) + (5 * 15) + ((24 % 4) / 2) = 91

Ex4.5

a) -30 * 3 + 21 / 5 = -86
b) -30 + 3 * 21 / 5 = -18
c) 30 / 3 * 21 % 5 = 0
d) -30 / 3 * 21 % 4 = -2

Ex4.6

#include<iostream>

using namespace std;

int main()
{
    int value;
    cin >> value;
    if (value % 2 == 0)
        cout << "The number is even " << endl;
    else 
        cout << "The number is odd" << endl;
    system("pause");
    return 0;
}

Ex4.7

在这里插入图片描述

Exercises Section 4.3

Ex4.9

const char *cp = "Hello World";
if (cp && *cp)	// 如果指针 cp 的内容不为 0 且指针  cp 指向的地址内的内容不为 0,那么条件成立

Ex4.10

#include<iostream>

using namespace std;

int main()
{
    int value;
    while ((cin >> value) && (value != 42))
    {
        cout << value << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

Ex4.11

#include<iostream>

using namespace std;

void test(int a, int b, int c, int d)
{
    if ((a > b) && (b > c) && (c > d))
    {
        cout << "Success" << endl;
    }
    else 
    {
        cout << "Failed" << endl;
    }
}

int main()
{
    int a, b, c, d;
    cout << "Please enter four numbers: " << endl;
    cin >> a >> b >> c >> d;
    test(a, b, c, d);
    system("pause");
    return 0;
}

Ex4.12

int i, j, k;
if (i != j < k) 	// 如果 j < k 那么就判断 i 是否等于 1,不等于则条件成立;	如果 j >= k 那么就判断 i 是否等于 0,不等于则条件成立

Exercises Section 4.4

Ex4.13

int i;	double d;
a) d = i = 3.5;		// i = 3, d = 3.0
b) i = d = 3.5;		// d = 3.5, i = 3

Ex4.14

if (42 = i)		// 非法,42不能为左值
if (i = 42) 	// 合法,变量 i 被赋值42,条件一直成立

Ex4.15

double dval; int ival; int *pi;
dval = ival = pi = 0;	// int double 类型都不能和指针类型发生转换
// 修改如下:
dval = ival = *pi = 0;

Ex4.16

a) if (p = getPtr() != 0)	// origin
   if ((p = getPtr()) != 0)	// 修改
   
b) if (i = 1024)	// origin
   if (i == 1024) 	// 修改

Exercises Section 4.5

Ex4.17

前缀增量符例如 “++i”,先增加变量 i 的值然后再使用 i 的值;后缀增量符例如 "i++"先使用变量 i 然后再把 i 的值加1。而且后缀增量符会创建一个临时变量,效率没有相同效果的前缀增量符高。

Ex4.18

如果使用了前缀增量符会超出 vector 容器容量。

Ex4.19

int *ptr;	vector<int> vec;	int ival;

a) ptr != 0 && *ptr++	// 指针 ptr 内容不为 0 且指针 ptr 指向的地址的内容不为 0 条件成立,判断后增加 ptr 的值

b) ival++ && ival	// 可能是不正确的
   ++ival && ival 	// 修改
   
c) vec[ival++] <= vec[ival]		// 可能是不正确的
   vec[++ival] <= vec[ival]		//  修改

Exercises Section 4.6

Ex4.20

vector<string>::iterator iter;
a) *iter++;		// 合法
b) (*iter)++;	// 非法; 修改:*iter++
c) *iter.empty()	// 非法;   修改:(*iter).empty()
d) iter->empty()	// 合法
e) ++*iter;			// 非法;修改:*iter++
f) iter++->empty();	// 合法

Exercises Section 4.7

Ex4.21

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    int value;
    vector<int> vec;
    while (cin >> value)
    {
        vec.push_back(value);
    }
    for (auto it = vec.begin(); it != vec.end(); ++it)
    {
        if (*it % 2 == 0)
            cout << *it << " is even" << endl;
        else 
            cout << *it << " is odd" << endl;
    }
    system("pause");
    return 0;
}

Ex4.23

string s = "word";
string p1 = s + s[s.size() - 1] == 's' ? "" : "s";	// 类型不匹配

// 修改如下
string p1 = s + (s[s.size() - 1] == 's' ? "" : "s");

Exercises Section 4.8

Ex4.25

'q'  --> 01110001
~'q' --> 10001110
(~'q' << 6) --> 10000000

Ex4.27

unsigned long ul1 = 3, ul2 = 7;
a) ul1 & ul2	// 3
b) ul1 | ul2 	// 7
c) ul1 && ul2 	// true
d) ul1 || ul2	// true

Exercises Section 4.9

Ex4.28

#include<iostream>

using namespace std;

int main()
{
    cout << sizeof(char) << endl;
    cout << sizeof(short) << endl;
    cout << sizeof(int) << endl;
    cout << sizeof(long) << endl;
    cout << sizeof(float) << endl;
    cout << sizeof(double) << endl;
    system("pause");
    return 0;
}

Ex4.29

int x[10];	int *p = x;
cout << sizeof(x) / sizeof(*x) << endl;		// 结果为 10
cout << sizeof(p) / sizeof(*p) << endl;		// 结果为 2

Ex4.30

a) sizeof(x + y)
b) sizeof(p->mem[i])
c) sizeof(a) < b
d) sizeof(f())

Exercises Section 4.10

Ex4.32

// 分别用指针和索引遍历数组
constexpr int size = 5;
int ia[size] = {1, 2, 3, 4, 5};
for (int *ptr = ia, ix = 0; ix != size && ptr != ia + size; ++ix, ++ptr)	{   /*... */ }

Ex4.33

// 如果someValue 为真,那么 x 加 1,y 加 1;反之,x 减 1,y 减 1
someValue ? ++x, ++y : --x, --y;

Exercises Section 4.11.1

Ex4.35

char cval;	int ival;	unsigned int ui;
float fval;	double dval;

a) cval = 'a' + 3;	// 结果为 d
b) fval = ui - ival * 1.0;	// ival 从 int 转换成 float, ui 从 unsigned int 转换成 float
c) dval = ui * fval;	// ui 转换成 float,最后结果再转换成 double 
d) cval = ival + fval + dval;	// 先是 ival 转换成 float 类型,然后 (ival + fval) 转换成 double 类型,最后结果转换为 char 类型

Exercises Scetion 4.11.3

Ex4.36

int i = 2;
double d = 3.5;
i *= static_cast<int>(d);

Ex4.37

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

a) pv = (void*)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);

Ex4.38

// 将变量 j 除以 变量 i 的值转换成 double 类型赋给 变量 slope
double slope = static_cast<double>(j / i);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值