好心情说说吧,你身边的情绪管理专家!

好心情说说专题汇总 心情不好怎么办

励志的句子

⬕ C++教师工作计划 ⬕

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很 的难点,那就是函数指针了,本博文详细介绍一下常见的各种 的函数指针。

与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。

变量都包括声明和赋值,指针不例外,函数指针也不例外。我们来看一个简单的函数:

void add(int a, int b){

cout << a + b << endl;

}

一个简单的加法计算并输出到命令行的函数。

那么如何通过函数指针来调用它呢?

1、声明:

void (*p1)(int a, int b);

函数指针的声明很简单,基本就是通过一个指针把函数名替换。指针p1的类型为void (*) (int a,int b),表明指针是一个指向某个函数的指针,指针指向的类型为void (int a,int b)

3、也可以直接定义:

void (*p1)(int a, int b) = add;

注意,函数void add(int a,int b)的函数名add就是函数的地址。将地址add赋值给指针p1,那么就可以通过函数指针p1直接调用函数了。

p1(1, 2);

注意!出于历史原因以上2种方式都是可以调用函数的。

有时候有这种情况,有一个数组,数组中的每个元素都是一个函数指针,该怎么定义这个数组呢?

1、解释*p和(*p)

我们知道,运算符的优先级要高于*,所以,p表示含有3个元素的数组,而*p 前面的 “ * ” 指明了数组中元素的类型,即*p表示一个指向3个指针的数组,

p表示含有3个元素的数组,那么(*p)就是用 *p 替换了 p,很容易想到,(*p) 表示指向一个包含3个元素的数组的指针。

2、声明:

void (*p2)(int a, int b);

数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。

理解上跟上面是一样的。

(*p2)(3,4);

同样是2种方式都可以。

三、指向“包含多个函数指针的数组“的指针

这个标题好像有点拗口。简而言之,这个指针指向上文中的 “包含多个函数指针的数组” 。其实很简单,说白了,就是把上文中的p2用一个指针来代替。

1、声明:

void (*(*p3))(int a, int b);

可以看到,无非就是把p2用*p3代替。

2、赋值,注意,既然是指针,使用前必须初始化:

p3 = &p2;

(*p3) = add;

注意!既然实质上就是把p2用*p3代替,c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3))(int a, int b)= &p2;

((*p3))(1, 2);

⬕ C++教师工作计划 ⬕

搜狗2017C++笔试题

搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

1.关于重载和多态正确的是?

A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

B.选项全部都不正确

C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{

void test(floata){cout<<"1";}

};

class B:public A{

void test(intb){cout<<"2";}

};

A *a=new A;

B *b=new B;

a=b;

a.test(1.1);

结果是1

解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

C中重载在一般函数中也会使用;

D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

A.安排小亮先取硬币;

B.小明或小亮均一定必胜

C.安排自己先取硬币

D.不可能必胜

解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

#include //1

class B//2

{//3

};//4

B func(const B& rhs){//5

return rhs;//6

}//7

int main(int argc,char **argv){//8

B b1,b2;//9

b2=func(b1);//10

}//11

A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B.二次拷贝构造函数,一次析构函数

C.一次(拷贝赋值运算符)operator=,一次析构函数

D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

4.下面代码的输出结果是()

int main(){

int pid;

int num=1;

pid=fork();

if(pid>0){

num++;

printf("in parent:num:%daddr:%x\n",num,&num);

}

else if(pid==0){

printf("in child:num:%daddr:%x\n",num,&num);

}

A.父子进程中输出的num相同,num地址不相同

B.父子进程中输出的num不同,num地址相同

C.父子进程中输出的num相同,num地址也相同

D.父子进程中输出的num不同,num地址不相同

5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

int a=0;

class someClass{

int b;

static int c;

};

int main(){

int d=0;

someClass *p=new someClass();

return 0;

}

A.b存在堆区

B.c存在堆区

C.d存在栈区

D.a存在全局变量区

解析: C应该在全局静态区

6.以下代码段有问题的是()

A.void func1(char *e){

char *p1;

p1=malloc(100);

sprintf(p1,error:"%s'.",e);

local_log(p1);

}

B. int func2(char *filename)

{

FILE *fp;

int key;

fp=fopen(filename,"r");

fscanf(fp,"%d",&key);

return key;

}

C.voidfunc3(char *info){

char *p,*pp;

p=malloc(100);

pp=p;

free(p);

sprintf(pp,*info:"%s'.",info);

free(pp);

}

D.选项全部都正确

解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

7.请问该程序的输出是多少?

#include

int main()

{

unsigned char i=7;

int j=0;

for(;i>0;i-=3)

{

++j;

}

printf("%d\n",j);

return 0;

}

A.2

B.死循环

C.173

D.172

解析:unsigned char 8位数据位,范围0-255,

所以-2(11111110)时,溢出变成254;

同理-1(11111111)时,溢出变成255;

最后减到0时,不满足循环条件,for停止。

刚好173次。

7 4 1 -2 ==>共4次

254 251 ... 5 2 -1 ==>共85次

255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

所以总共173次。(相减相除)

更快捷的计算方法:256*2+7=519=173*3

8.快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

9.下列各树形结构中,哪些是平衡二叉查找树:

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

10.下面哪种数据结构最适合创建一个优先级队列()

A.堆

B.双向链表

C.单向链表

D.栈

11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

A.基数排序

B.快速排序

C.二叉排序

D.堆排序

12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

A35

B.49

C.39

D.45

13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

A. heap

B.queue

C.binary tree

D.stack

14.假设MySQL数据库表:

create table T{

k int unsigned not null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary key(k),unique key a_index (a DESC,b DESC),

key k1(b),key k2(c),key k3(d));

如下哪些sql语句查询能较好的.利用索引?()

A.select bfrom WHERE b like 'aaa%';

B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

山洞的地图如下:

S--------------------T

S是入口

T处有宝箱,打开宝箱之后可能得到的物品有:

1)宝石,出现概率为5%.

2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

3)什么也没有,概率为45%.

S到T的距离为1.

每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

问题:玩家完成任务所走路程的数学期望是()

A.40

B.25

C.35

D.30

16.下面关于TCP的描述,错误的是()

A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

B.TCP客户端和服务器之间建立连接需要经过3次握手

C.只要有一方主动关闭连接后,这个TCP连接就结束了

D.只要有一方主动关闭连接后,这个TCP连接就结束了

17.关于进程和线程描述正确的是()

A.线程不拥有系统资源,但可以访问隶属于进程的资源

B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

C.进程是调度和拥有资源的基本单位

D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

A.CreateThread

B. GetCurrentProcess

C. OpenProcess

D. CreateFile

19. invalidateRect的作用是()

A.擦除一个矩形区域

B.删除一个矩形

C.使一个矩形区域变为无效,从而释放部分GDI资源

D.使一个矩形区域变为无效,从而可以重绘

20.典型的创建Windows窗口过程的流程为:()

A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

参考答案:

1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C

⬕ C++教师工作计划 ⬕

C++实训报告

随着计算机技术的发展,越来越多的人选择学习计算机编程语言,而C++语言作为一种高级编程语言,其应用范围非常广泛,对于想进一步学习编程的人来说,学习了解C++语言是非常必要的。为此,本文在老师的指导下,进行了C++实训学习,得出了一些有关C++语言的一些学习心得和方法。

首先,C++语言的基础知识是非常重要的。在学习C++语言的过程中,我们需要学习基本语法、数据类型、运算符、循环结构、分支结构等等基础知识。对于初学者来说,学习这些知识非常关键,也是需要花费较多时间来掌握的。通过实践,我们发现,掌握了这些基本知识后,不仅可以更好地理解C++语言的编程思想,还能更好地完成编程任务。

其次,C++语言的实际应用也非常丰富。在学习C++语言的过程中,我们需要通过一些实际的编程项目来提高自己的实践技能。例如,可以通过编写简单的计算器程序、打印图形等方式,来熟练掌握C++语言的应用。在这个过程中,我们也需要注意代码的规范性和注释。代码规范的好坏往往会直接影响到程序的运行效果,而注释的添加则有助于更好地理解和维护代码。

再次,C++语言的熟练掌握需要逐步提高。对于初学者来说,熟练掌握C++语言需要花费较多时间和精力。因此,我们可以采取逐步提高的方法。首先,我们可以通过大量的实践来熟悉C++语言的基本使用方法;然后,我们需要学习一些高级用法和技巧,例如面向对象编程、模板编程、异常处理等等。这些高级用法虽然比较难掌握,但是掌握后对于改进程序的性能和效率都有很大的帮助。

最后,对于学习C++语言的初学者来说,我们也需要注意一些学习方法。除了学习基本知识和应用技巧外,我们还需要积极参加一些讨论活动、阅读相关的书籍和文章,以及参与一些实践项目。这些学习方法可以让我们更好地理解C++语言的思想和应用,也可以学习他人的编程思路和经验,有助于我们更好地提高自己的编程能力。

综上所述,学习C++语言需要掌握基础知识、进行实际应用、逐步提高和采取合理的学习方法。通过实践,我深刻地认识到C++语言是一种非常强大的编程语言,熟练掌握后能够编写高效且功能强大的程序,对于我们的职业发展也有很大的帮助。因此,我会继续学习和实践,以便更好地提高自己的编程水平。

⬕ C++教师工作计划 ⬕

c++实践报告书范文2篇

【c++实践报告书例一】

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 MFC课程设计

计算机基础教学实验中心

2015年 06月 14 日

一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基

Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用Visual C++ MFC编程实现以下功能:

b、c,计算并输出两个根x1、x2.

修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。

了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程axb、c,计算并输出两个根x事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的'输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password;

m_user.GetWindowText(c_user);

m_password.GetWindowText(c_password);

if(c_user.IsEmpty()||c_password.IsEmpty())

{

MessageBox("用户名或密码不能为空","用户登录信息");

return;

}

if(c_user=="123"&&c_password=="123")

{

CMyMenu dlg;

dlg.DoModal();//这两段代码是用于调用菜单对话框

}

else

{

MessageBox("用户名或密码不正确","提示",MB_ICONINFORMATION); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

【c++实践报告书例二】

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

题 目 科学计算器应用程序系统 学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2013年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;MFC;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“C”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”CE”,”C”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对CLR与.NET的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向Windows计算器靠拢。可以看到,这个计算器有很多Windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多Bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

⬕ C++教师工作计划 ⬕

struct node *front,*next;

};

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

BOOL DeteleNode(Node *pHeader, DataType Value)

{

if (pHeader == NULL) return;

BOOL bRet = FALSE;

Node *pNode = pHead;

{

{

{

pHeader = pNode->next;

pHeader->front = NULL;

{

{

pNode->next->front = pNode->front;

}

pNode->front->next = pNode->next;

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

bRet = TRUE;

{

pNode = pNode->next;

}

}

return bRet;

}

void DE(Node *pHeadA, Node *pHeadB)

{

if (pHeadA == NULL || pHeadB == NULL)

{

return;

}

Node *pNode = pHeadA;

{

if (DeteleNode(pHeadB, pNode->data))

{

{

pHeadA = pNode->next;

pHeadA->front = NULL;

{

pNode->front->next = pNode->next;

{

pNode->next->front = pNode->front;

}

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

{

pNode = pNode->next;

}

}

}

2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”

int GetCommon(char *s1, char *s2, char **r1, char **r2)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

int maxlen = 0;

for(int i = 0; i < len1; i++)

{

for(int j = 0; j < len2; j++)

{

int as = i, bs = j, count = 1;

while(as + 1 < len1 && bs + 1 < len2 && s1 == s2)

count++;

{

maxlen = count;

*r1 = s1 + i;

*r2 = s2 + j;

}

}

}

}

3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数

char* test3(long num) {

char* buffer = (char*)malloc(11);

buffer = “0”;

buffer = “x”;

buffer = “id="article-content1">

⬕ C++教师工作计划 ⬕

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很 的难点,那就是函数指针了,本博文详细介绍一下常见的各种 的函数指针。

与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。

变量都包括声明和赋值,指针不例外,函数指针也不例外。我们来看一个简单的函数:

void add(int a, int b){

cout << a + b << endl;

}

一个简单的加法计算并输出到命令行的函数。

那么如何通过函数指针来调用它呢?

1、声明:

void (*p1)(int a, int b);

函数指针的声明很简单,基本就是通过一个指针把函数名替换。指针p1的类型为void (*) (int a,int b),表明指针是一个指向某个函数的指针,指针指向的类型为void (int a,int b)

3、也可以直接定义:

void (*p1)(int a, int b) = add;

注意,函数void add(int a,int b)的函数名add就是函数的地址。将地址add赋值给指针p1,那么就可以通过函数指针p1直接调用函数了。

p1(1, 2);

注意!出于历史原因以上2种方式都是可以调用函数的。

有时候有这种情况,有一个数组,数组中的每个元素都是一个函数指针,该怎么定义这个数组呢?

1、解释*p和(*p)

我们知道,运算符的优先级要高于*,所以,p表示含有3个元素的数组,而*p 前面的 “ * ” 指明了数组中元素的类型,即*p表示一个指向3个指针的数组,

p表示含有3个元素的数组,那么(*p)就是用 *p 替换了 p,很容易想到,(*p) 表示指向一个包含3个元素的数组的指针。

2、声明:

void (*p2)(int a, int b);

数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。

理解上跟上面是一样的。

(*p2)(3,4);

同样是2种方式都可以。

三、指向“包含多个函数指针的数组“的指针

这个标题好像有点拗口。简而言之,这个指针指向上文中的 “包含多个函数指针的数组” 。其实很简单,说白了,就是把上文中的p2用一个指针来代替。

1、声明:

void (*(*p3))(int a, int b);

可以看到,无非就是把p2用*p3代替。

2、赋值,注意,既然是指针,使用前必须初始化:

p3 = &p2;

(*p3) = add;

注意!既然实质上就是把p2用*p3代替,c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3))(int a, int b)= &p2;

((*p3))(1, 2);

⬕ C++教师工作计划 ⬕

搜狗2017C++笔试题

搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

1.关于重载和多态正确的是?

A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

B.选项全部都不正确

C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{

void test(floata){cout<<"1";}

};

class B:public A{

void test(intb){cout<<"2";}

};

A *a=new A;

B *b=new B;

a=b;

a.test(1.1);

结果是1

解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

C中重载在一般函数中也会使用;

D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

A.安排小亮先取硬币;

B.小明或小亮均一定必胜

C.安排自己先取硬币

D.不可能必胜

解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

#include //1

class B//2

{//3

};//4

B func(const B& rhs){//5

return rhs;//6

}//7

int main(int argc,char **argv){//8

B b1,b2;//9

b2=func(b1);//10

}//11

A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B.二次拷贝构造函数,一次析构函数

C.一次(拷贝赋值运算符)operator=,一次析构函数

D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

4.下面代码的输出结果是()

int main(){

int pid;

int num=1;

pid=fork();

if(pid>0){

num++;

printf("in parent:num:%daddr:%x\n",num,&num);

}

else if(pid==0){

printf("in child:num:%daddr:%x\n",num,&num);

}

A.父子进程中输出的num相同,num地址不相同

B.父子进程中输出的num不同,num地址相同

C.父子进程中输出的num相同,num地址也相同

D.父子进程中输出的num不同,num地址不相同

5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

int a=0;

class someClass{

int b;

static int c;

};

int main(){

int d=0;

someClass *p=new someClass();

return 0;

}

A.b存在堆区

B.c存在堆区

C.d存在栈区

D.a存在全局变量区

解析: C应该在全局静态区

6.以下代码段有问题的是()

A.void func1(char *e){

char *p1;

p1=malloc(100);

sprintf(p1,error:"%s'.",e);

local_log(p1);

}

B. int func2(char *filename)

{

FILE *fp;

int key;

fp=fopen(filename,"r");

fscanf(fp,"%d",&key);

return key;

}

C.voidfunc3(char *info){

char *p,*pp;

p=malloc(100);

pp=p;

free(p);

sprintf(pp,*info:"%s'.",info);

free(pp);

}

D.选项全部都正确

解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

7.请问该程序的输出是多少?

#include

int main()

{

unsigned char i=7;

int j=0;

for(;i>0;i-=3)

{

++j;

}

printf("%d\n",j);

return 0;

}

A.2

B.死循环

C.173

D.172

解析:unsigned char 8位数据位,范围0-255,

所以-2(11111110)时,溢出变成254;

同理-1(11111111)时,溢出变成255;

最后减到0时,不满足循环条件,for停止。

刚好173次。

7 4 1 -2 ==>共4次

254 251 ... 5 2 -1 ==>共85次

255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

所以总共173次。(相减相除)

更快捷的计算方法:256*2+7=519=173*3

8.快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

9.下列各树形结构中,哪些是平衡二叉查找树:

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

10.下面哪种数据结构最适合创建一个优先级队列()

A.堆

B.双向链表

C.单向链表

D.栈

11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

A.基数排序

B.快速排序

C.二叉排序

D.堆排序

12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

A35

B.49

C.39

D.45

13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

A. heap

B.queue

C.binary tree

D.stack

14.假设MySQL数据库表:

create table T{

k int unsigned not null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary key(k),unique key a_index (a DESC,b DESC),

key k1(b),key k2(c),key k3(d));

如下哪些sql语句查询能较好的.利用索引?()

A.select bfrom WHERE b like 'aaa%';

B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

山洞的地图如下:

S--------------------T

S是入口

T处有宝箱,打开宝箱之后可能得到的物品有:

1)宝石,出现概率为5%.

2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

3)什么也没有,概率为45%.

S到T的距离为1.

每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

问题:玩家完成任务所走路程的数学期望是()

A.40

B.25

C.35

D.30

16.下面关于TCP的描述,错误的是()

A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

B.TCP客户端和服务器之间建立连接需要经过3次握手

C.只要有一方主动关闭连接后,这个TCP连接就结束了

D.只要有一方主动关闭连接后,这个TCP连接就结束了

17.关于进程和线程描述正确的是()

A.线程不拥有系统资源,但可以访问隶属于进程的资源

B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

C.进程是调度和拥有资源的基本单位

D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

A.CreateThread

B. GetCurrentProcess

C. OpenProcess

D. CreateFile

19. invalidateRect的作用是()

A.擦除一个矩形区域

B.删除一个矩形

C.使一个矩形区域变为无效,从而释放部分GDI资源

D.使一个矩形区域变为无效,从而可以重绘

20.典型的创建Windows窗口过程的流程为:()

A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

参考答案:

1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C

⬕ C++教师工作计划 ⬕

C++实训报告

随着计算机技术的发展,越来越多的人选择学习计算机编程语言,而C++语言作为一种高级编程语言,其应用范围非常广泛,对于想进一步学习编程的人来说,学习了解C++语言是非常必要的。为此,本文在老师的指导下,进行了C++实训学习,得出了一些有关C++语言的一些学习心得和方法。

首先,C++语言的基础知识是非常重要的。在学习C++语言的过程中,我们需要学习基本语法、数据类型、运算符、循环结构、分支结构等等基础知识。对于初学者来说,学习这些知识非常关键,也是需要花费较多时间来掌握的。通过实践,我们发现,掌握了这些基本知识后,不仅可以更好地理解C++语言的编程思想,还能更好地完成编程任务。

其次,C++语言的实际应用也非常丰富。在学习C++语言的过程中,我们需要通过一些实际的编程项目来提高自己的实践技能。例如,可以通过编写简单的计算器程序、打印图形等方式,来熟练掌握C++语言的应用。在这个过程中,我们也需要注意代码的规范性和注释。代码规范的好坏往往会直接影响到程序的运行效果,而注释的添加则有助于更好地理解和维护代码。

再次,C++语言的熟练掌握需要逐步提高。对于初学者来说,熟练掌握C++语言需要花费较多时间和精力。因此,我们可以采取逐步提高的方法。首先,我们可以通过大量的实践来熟悉C++语言的基本使用方法;然后,我们需要学习一些高级用法和技巧,例如面向对象编程、模板编程、异常处理等等。这些高级用法虽然比较难掌握,但是掌握后对于改进程序的性能和效率都有很大的帮助。

最后,对于学习C++语言的初学者来说,我们也需要注意一些学习方法。除了学习基本知识和应用技巧外,我们还需要积极参加一些讨论活动、阅读相关的书籍和文章,以及参与一些实践项目。这些学习方法可以让我们更好地理解C++语言的思想和应用,也可以学习他人的编程思路和经验,有助于我们更好地提高自己的编程能力。

综上所述,学习C++语言需要掌握基础知识、进行实际应用、逐步提高和采取合理的学习方法。通过实践,我深刻地认识到C++语言是一种非常强大的编程语言,熟练掌握后能够编写高效且功能强大的程序,对于我们的职业发展也有很大的帮助。因此,我会继续学习和实践,以便更好地提高自己的编程水平。

⬕ C++教师工作计划 ⬕

c++实践报告书范文2篇

【c++实践报告书例一】

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 MFC课程设计

计算机基础教学实验中心

2015年 06月 14 日

一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基

Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用Visual C++ MFC编程实现以下功能:

b、c,计算并输出两个根x1、x2.

修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。

了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程axb、c,计算并输出两个根x事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的'输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password;

m_user.GetWindowText(c_user);

m_password.GetWindowText(c_password);

if(c_user.IsEmpty()||c_password.IsEmpty())

{

MessageBox("用户名或密码不能为空","用户登录信息");

return;

}

if(c_user=="123"&&c_password=="123")

{

CMyMenu dlg;

dlg.DoModal();//这两段代码是用于调用菜单对话框

}

else

{

MessageBox("用户名或密码不正确","提示",MB_ICONINFORMATION); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

【c++实践报告书例二】

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

题 目 科学计算器应用程序系统 学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2013年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;MFC;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“C”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”CE”,”C”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对CLR与.NET的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向Windows计算器靠拢。可以看到,这个计算器有很多Windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多Bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

⬕ C++教师工作计划 ⬕

struct node *front,*next;

};

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

BOOL DeteleNode(Node *pHeader, DataType Value)

{

if (pHeader == NULL) return;

BOOL bRet = FALSE;

Node *pNode = pHead;

{

{

{

pHeader = pNode->next;

pHeader->front = NULL;

{

{

pNode->next->front = pNode->front;

}

pNode->front->next = pNode->next;

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

bRet = TRUE;

{

pNode = pNode->next;

}

}

return bRet;

}

void DE(Node *pHeadA, Node *pHeadB)

{

if (pHeadA == NULL || pHeadB == NULL)

{

return;

}

Node *pNode = pHeadA;

{

if (DeteleNode(pHeadB, pNode->data))

{

{

pHeadA = pNode->next;

pHeadA->front = NULL;

{

pNode->front->next = pNode->next;

{

pNode->next->front = pNode->front;

}

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

{

pNode = pNode->next;

}

}

}

2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”

int GetCommon(char *s1, char *s2, char **r1, char **r2)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

int maxlen = 0;

for(int i = 0; i < len1; i++)

{

for(int j = 0; j < len2; j++)

{

int as = i, bs = j, count = 1;

while(as + 1 < len1 && bs + 1 < len2 && s1 == s2)

count++;

{

maxlen = count;

*r1 = s1 + i;

*r2 = s2 + j;

}

}

}

}

3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数

char* test3(long num) {

char* buffer = (char*)malloc(11);

buffer = “0”;

buffer = “x”;

buffer = “\0”;

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp = (char)(num<<4*i>>28);

temp = temp >= 0 ? temp : temp + 16;

temp = temp < 10 ? temp + 48 : temp + 55;

}

return buffer;

{

int k = 0, i = 0, j = 0;

int a = 1;

{

while( j < N-k ) s = a++; i++; j--;

while( i < N-k ) s = a++; i--; j--;

while( j >k-1 ) s = a++; i--; j++;

while( i >k ) s = a++; i++; j++;

}

{

cout << s << “ ”;

cout << endl;

}

int matrix;

*/

void SetMatrix(int x, int y, int start, int n) {

int i, j;

return;

matrix = start;

return;

}

for (i = x; i < x + n-1; i++) //矩阵上部

matrix = start++;

for (j = y; j < y + n-1; j++) //右部

matrix = start++;

for (i = x+n-1; i >x; i--) //底部

matrix = start++;

for (j = y+n-1; j >y; j--) //左部

matrix = start++;

SetMatrix(x+1, y+1, start, n-2); //递归

}

void main() {

int i, j;

int n;

scanf(“%d”, &n);

SetMatrix(0, 0, 1, n);

for(i = 0; i < n; i++) {

printf(“%4d”, matrix);

printf(“”);

}

}

if(n==0) return 1;

if(n==1) return 1;

retrurn Funct(n-1) + Funct(n-2);

}

请问,如何不使用递归,来实现上述函数?

请教各位高手!

解答:int Funct( int n ) // n 为非负整数

{

int a=0;

int b=1;

int c;

if(n==0) c=1;

else if(n==1) c=1;

else for(int i=2;i<=n;i++) //应该n从2开始算起

{

c=a+b;

a=b;

b=c;

}

return c;

}

解答:

现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位,

1、原题跟little-endian,big-endian没有关系

2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位

3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为

01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4

{

int i,j;

int found=1;

return -1;

{

found=0;

break;

}

return found;

}

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

{

int flag, i, j = 0;

int *arr = (int *)malloc(n * sizeof(int));

arr = 1;

{

flag = 0;

++flag;

++j;

}

arr = 0;

}

free(arr);

return j;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

{

int index;

struct Node *next;

}JosephuNode;

{

int i, j;

JosephuNode *head, *tail;

head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

{

tail->index = i;

tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

tail = tail->next;

}

tail->index = i;

tail->next = head;

{

{

tail = head;

head = head->next;

}

tail->next = head->next;

printf(“第%4d个出局的人是:%4d号”, i, head->index);

free(head);

head = tail->next;

}

i = head->index;

free(head);

return i;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

}

已知strcpy函数的原型是:

char * strcpy(char * strDest,const char * strSrc);

1.不调用库函数,实现strcpy函数。

2.解释为什么要返回char *。

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL)) file://

throw “Invalid argument(s)”; //

char * strDestCopy=strDest; file://

while ((*strDest++=*strSrc++)!=“\0”); file://

return strDestCopy;

(A)不检查指针的有效性,说明答题者不注重代码的健壮性。

(B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。

(C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

(A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

(A)循环写成while (*strDest++=*strSrc++);,(B)。

(B)循环写成while (*strSrc!=“\0”) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上“\0”。

⬕ C++教师工作计划 ⬕

求输出的结果
#include
using namespace std;
class Base
{
public:
    void func(const char* str){cout << "Base: " << str << endl;}
virtual void func(int num){cout << "Base: " << num << endl;}
};
class Derived : public Base
{
public:
    void func(const char* str){cout << "Derived: " << str << endl;}
void func(int num){cout << "Derived: " << num << endl;}
void func(){cout << "The Function is in Derived!" << endl;}
};
int main()
{
  Base *pB;
Derived ObjD;
pB = ObjD;
pB->func(11);
pB->func("Hello");
// pB->func();
getchar();
return 0;
}

⬕ C++教师工作计划 ⬕

华为笔试题 - 华为C/C++笔试题(面试题)

oo1、局部变量能否和全局变量重名?

oo答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

oo

oo2、如何引用一个已经定义过的全局变量?

oo 答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

oo

oo

oo3、全局变量定义在可被多个.C文件包含的.头文件中可不可以?为什么?

oo答:可以,但要加static

oo

oo4、语句for( ;1 ;)有什么问题?它是什么意思?

oo答:死循环,同while(1),这种写法并不规范,可读性差,一般不用

oo

oo5、do……while和while……do有什么区别?

oo答:前一个循环一遍再判断,后一个判断以后再循环

oo

oo6、请写出下列代码的输出内容

oo#include

oomain()

oo{

ooint a,b,c,d;

ooa=10;

oob=a++;

ooc=++a;

ood=10*a++;

ooprintf("b,c,d:%d,%d,%d",b,c,d);

ooreturn 0;

oo}

oo答:10,12,120

oo

oo7.static函数与普通函数有什么区别?

oo只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

oo

oo8.static全局变量与普通的全局变量有什么区别?

oo全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

oo 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

oo

oo9.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆 )中。

oo

oo10.设有以下说明和定义:

ootypedef union {long i; int k[5]; char c;} DATE;

oostruct data { int cat; DATE cow; double dog;} too;

ooDATE max;

oo则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____

oo

oo11.队列和栈有什么区别?

oo队列先进先出,栈后进先出

oo

oo12.写出下列代码的输出内容

oo#include

ooint inc(int a)

oo{

ooreturn(++a);

oo}

ooint multi(int*a,int*b,int*c)

oo{

ooreturn(*c=*a**b);

oo}

ootypedef int(FUNC1)(int in);

ootypedef int(FUNC2) (int*,int*,int*);

oo

oovoid show(FUNC2 fun,int arg1, int*arg2)

oo{

ooINCp=&inc;

ooint temp =p(arg1);

oofun(&temp,&arg1, arg2);

ooprintf("%d ",*arg2);

oo}

oo

oomain()

oo{

ooint a;

ooshow(multi,10,&a);

ooreturn 0;

oo}

oo

oo翻译一下

oo==================================

oo#include

oousing namespace std;

oo

oo// 返回a + 1

ooint inc(int a){

ooreturn a+1;

oo}

oo// out = a*b

ooint multi(int& a, int& b, int& out){

ooreturn out = a*b;

oo}

oo

oo// 定义两种函数,FUNC1对应inc, FUNC2对应 multi

ootypedef int(FUNC1) (int in);

ootypedef int(FUNC2) (int&,int&,int&);

oo

oo// 诡异的函数,这是模糊C大赛么...

oovoid show( FUNC2* func, int num, int& out ){

ooFUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义

ooint numAdd1 = pInc( num );

oo// 等价于 numAdd1 = inc( num );

oo// 结果 num仍然是10, numAdd1 = 11

oo

oo// 调用func函数,可以看到, main中传给func的是 multi.

oo// 所以调用的是 multi( 11, 10, out ), out = 110

oofunc( numAdd1, num, out );

oocout

oo

ooint main(){

ooint a;

ooshow(multi,10, a);

ooreturn 0;

oo}

oo==================================

oo

oo13.请找出下面代码中的所以错误

oo说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

oo==================================

oomain(){

oochar*src="hello,world";

oochar* dest=NULL;

oo

ooint len=strlen(src);

oodest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括

oo

oochar* d = dest;

oochar* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]

oowhile( len-- != 0 )

ood++=s--;//!3 *d++ = *s--;

oo//!4 尾部要 ,应加上 *d = 0;

oo

ooprintf("%s",dest);

ooreturn 0;

oo}

oo==================================

oo

oo修正后的答案:

oo==================================

ooint main(){

oochar* src = "hello,world";

oo

ooint len = strlen(src);

oochar* dest = (char*)malloc(len+1);.

oo

oochar* d = dest;

oochar* s = &src[len-1];

oowhile( len-- != 0 )

oo*d++=*s--;

oo*d = 0;

oo

ooprintf("%s",dest);

⬕ C++教师工作计划 ⬕

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include 和 #include “filename.h” 有什么区别?(5 分)

答:对于#include ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量,(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的'名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i {

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i DoSomething();

}

else

{

for (i=0; i DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

⬕ C++教师工作计划 ⬕

pS:答案是本人随笔所写,可能不全甚至错误!

请不要盲目将其作为标准答案,不当之处,请指正,谢谢。

C++/MFC 试题

一.填空题 (26 分 )

1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。 (3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;

2 .请给出如下程序的结果 (2 分 )

int a = 3;

int b = a << 3; /// 00000011左移三位为00011000,即24

a = __3__ , b = __24__ 。

3 .请 给出如下程序的结果 (2 分 )

int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分)

#define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心

则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 )

char szTemp[1000] = "";

int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\

strcpy(szTemp, "abc");

int nLen3 = sizeof(szTemp);

int nLen4 = strlen(szTemp);

int nTemp[100];

int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = "";

sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);

则 szResult = _1000,0,1000,3,04___ 。

CObject 、 CWinApp 、 CWnd )? (2 分 )__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CpU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程___(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递

{

char szTemp[10] = "";

x = 2;

sprintf(szTemp, "%d,", x);

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

int x = 4;

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

void bbb()

{

char szTemp[10] = "";

int x = 7;

ccc(x);

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

二.改错题 ( 总共 15 分 , 每题 5 分 )。

1 .下面代码有何错误

void func1()

{

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

pa; /// pa仍然是空指针,pb申请的`空间并没有被掉

}

void func2(int *pb)

{

pb = new int(5); /// pb重新申请了堆空间

}

2 .下面代码有何错误

void func2(int *value)

{

*value = 2; /// value为空指针,不能被取值,所以*value是错误的

}

void func1()

{

int *p = 0;

func2(p);

}

3 .

int func1(int& b) /// 参数b的类型是整型

{

return 0;

}

void func2()

{

int bbb = 3;

func1(&bbb); /// 函数参数的引用调用不需要用符号"&"

func1(bbb);

}

func2 中有何错误, func1 的参数 b 的类型是什么。

三.简答题 (64 分 )

pS:以下答案是随笔所写,请读者做进一步的深入了解。

C++ 、 VC 、 MFC 在概念上的区别 (4 分 )

答:C是面向过程编程的语言;

C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows ApI函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 )

答:

int add(int a,int b)

{

return (a + b);

}

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。

floatadd(float a,float b)

{

return (a + b);

}

线程。 (4 分 )

答:Createproccess()创建进程;

CreateThread()创建线程

MFC中还提供了_beginthread()与_beginthreadex()函数创建线程

4.SendMessage 和 postMessage 有什么区别 (4 分 )

答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。

postMessage:发送消息后不等待消息处理即继续执行自身的程序。

5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。 (4 分 )

答:WaitForSingleObject是表示等待线程的一个函数。

参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。

__cdecl 、 __pascal 在什么方面有所不同。 (4 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive parameter order Clean-up passes parameters in registers?

pascal Left-to-right Routine No

cdecl Right-to-left Caller No

stdcall Right-to-left Routine No

7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

int nLen = strText.GetLength();

myFile.Write((char*)(LpCSTR)strText, nLen);

myFile.Close();

return nRet;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LpCSTR)strText, nLen);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

}

__finaly

{

myFile.Close();

}

return nRet;

}

8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少? (6 分 )

typedef int (*func)(int, int*);

int xxx(int a, int *p)

{

return a + *p;

}

int dowork(func aaa, int bbb, int *ccc)

{

return aaa(bbb, ccc);

}

int sss = 4;

int ttt = dowork(&xxx, 3, &sss);

答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为7

9 .请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多少? (6 分 )

class Fruit

{

public:

Fruit()

{

weight = 2;

}

Fruit(int w)

{

weight = w;

}

int operator+(Fruit f)

{

return this->weight * f.weight;

}

private:

int weight;

};

Fruit aaa;

Fruit bbb(4);

int ccc = aaa + bbb;

答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10. 请解释下面代码采用了何种 C++ 特性( C 语言不具备),作用是什么? (6 分 )

template

T sum(T a, T b)

{

return (a + b);

}

答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。

11 .请解释 aaa.h 中下面代码的功能 (5 分 )

#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)

#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_

... ...

#endif

答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。

12 . CMemoryState 主要功能是什么 (5 分 )

答:用于检测内存泄露。

13 .请阅读下述代码,写出程序执行的结果( 6 分)

#include

using namespace std;

class CBase

{

public:

virtual void print()

{

cout<< "base" << endl;

}

void Doprint()

{

print();

}

};

class CChild1: public CBase

{

public:

⬕ C++教师工作计划 ⬕


这本书主要讲了:嘉莉十八岁那年她就独自一人从自己的家乡离开,去往芝加哥生活。她向往物质生活,所以才离开家乡的。读完这本书,我觉得嘉莉只是沉浸在自己追求的生活和想象之中,她从未替别人着想过。她的这种性格是由于贫困所造成的。自己一无所有,却只是期求这幸福。下面为大家精心整理了一些关于《嘉莉妹妹》读后感,请您阅读。

《嘉莉妹妹》读后感1

《嘉莉妹妹》中的主人公便是嘉莉。她出生在一个普通的家庭,有一个疼爱自己的姐姐,也有一个一毛不拔的姐夫。

在小嘉莉刚满16岁时,她便做出决定,要出去闯荡闯荡,于是她独自一人,踏上了火车之旅,来到了姐姐家。在去姐姐家的路上,她碰到了一个奇怪的人——杜埃。杜埃是一家公司的推销员。他告诉嘉莉,如果你在这儿感到陌生的话,我可以帮你。后来杜埃看着嘉莉安全的到家后,才转身离开。然而就是因为杜埃对嘉莉的这一份情谊,却让嘉莉一举成了大明星。

嘉莉是一个酷爱话剧的女孩儿,所以杜埃经常带着她去大大小小的剧院去欣赏话剧。而杜埃也渐渐喜欢上了这个沉迷于戏剧的女孩儿,于是他决定,一定要让嘉莉一举成名!

嘉莉的星路旅程,也就从此拉开了帷幕。她从扮演一个从不被人注意的配角儿到扮演一个赫赫有名的大明星,她付出了常人无法想象,无法接受的苦难。大街小巷都贴着她的海报,每个剧院都放着她演过的话剧。而杜埃呢?他为了完成嘉莉的梦想,以涉嫌诈骗而被捕获,五年后,他出狱了,当他看到嘉莉时他惊呆了!嘉莉成名了,而他呢?却是一个丢了金钱、权利、地位、亲情和爱情的穷光蛋!

当我看完整本书时,我感到有一种罪恶感围绕在我的身边,我有过要为梦想执着奋斗的想法吗?就算有,我又有想过要实现它吗?我没有,我突然觉得自己太懦弱了,连最简单的现实都不敢去面对,还能有什么理由去面对呢?我恨我自己,为什么天生就是这样,为什么天生就没有改变自己的权利,我真的受够了!

我要改变,去坚强,去勇敢,去闯练,可我该怎么做呢?我依然还歪着脑袋深思着这个问题。

《嘉莉妹妹》读后感2

这本书感觉真的很现实!它把人的冷漠,自私剖析的非常透彻,又把巨大的社会现状不加掩饰的展现出来!

它有很多和其他经典相似的地方,又在相似中个性鲜明!

女主人公嘉莉和《飘》中的思嘉很像,性格都那么贪图享乐,别人有的自己也一定要有,却也都在现实的不幸中努力生存。不同的是思嘉在最困难中没有丢下媚兰,而嘉莉却丢下了伍德,她的善良在人物口口传递中是如此的苍白无力、如此虚伪,也更体现了时代的冷漠与自私。

男主人公伍德到纽约后的遭遇感觉像是中国女版的月牙儿。一个是被生活被社会拖到了尽头,为了吃饭沦为了暗娼;一个是为了活着仅仅是活着变成了乞丐。他们都没有错,他们都会干活都有谋生的能力,却被社会现实剥夺了谋生的权利!伍德的事业由兴到败又很像《林家铺子》,都是在变革中求生存,都有着短暂生存的回光返照,却最终因为现实社会中的大势,一个破产逃难,一个死于饥饿。

结构中的对比很突出。故事情节在大的方向中出现极端的结局。主人公们的性格并不算突出,甚至很大众。这一点和《巴黎圣母院》不同。它的最大特点也是对比,却是从人物的本身入手。如果说《巴》的场景感觉像是一幅流动的夸张的话剧,而它的感觉就像固定的一个个画面突出的展现,仅仅从这些瞬间的画面中就可以窥视到整个社会氛围和现状!

画面一,嘉莉刚到姐姐的小小的家时,姐姐明妮忙里忙外不停的劳作,姐夫杰森下班后看报纸的简单,还有嘉莉哄小孩时的无可奈何。那种晦涩的、阴暗的、忙碌的底层人民的生存实景一目了然。

画面二,伍德骗嘉莉私奔时,只差四分钟火车就开了的紧迫感;给赶车人多加一块钱时的急切;检票员过来时的慌乱和将要窒息的情绪波动。这一气呵成的长轴画卷,很刺激很丰富!

画面三,嘉莉在找工作时的胆怯、彷徨无注,那种羡慕、那种向往在现实面前的不堪一击,站在芝加哥商业区大街的中央,此地虽大却没有她的容身之地,仿佛可以看见那双无助、凄凉的眼神!

画面四,伍德在内的一群乞丐争抢着上尉抛洒的钱币,生存在尽头中的游弋。人群的喧哗与乞丐的悲鸣,上尉的高高在上,与伍德小心守护的自尊心,那么热闹的场面我却感觉寂静的可怕!

画面五,也是画面感最强的一幅画。伍德在乱石中不熟练的开着电车,旁边两个警察又骂又打的驱赶罢工人群,而愤怒的人群不断的冲破警察的封锁,试图扯下临时电车司机伍德,还有个小女孩在人群外冲着伍德做鬼脸。好一幅愤怒的画卷!

最后的画面,伍德把自己安顿好,打开煤气…… 明明是死亡的冷峻,我却看到了想要生存的无奈,他已经连一顿饭也乞不到了……

灰色的冬季,天空中飘下纯白的雪花,覆盖住这份寒冷的孤寂吧!

《嘉莉妹妹》读后感3

18岁的嘉罗琳(嘉莉)离开自己的父母,到芝加哥找姐姐,想谋求一份适合自己的工作。虽然之前曾经去过姐姐家一次,但毕竟对城市生活非常陌生。在火车上,被推销员德鲁埃认识,互相交换了在芝加哥的地址。

到达姐姐家后,找工作十分的不顺利,曾经在一个每周收入只有四块半的鞋厂工作,但是,在给姐姐交完每周四块钱的食宿费后,只有五角钱的使用空间,而这些,并没有阻挡住对城市灯红酒绿生活的向往,富人生活的诱惑始终在吸引着她,但是,出路在哪里呢?

由于工作的辛苦,淋雨病到后,这唯一的工作也就没有了。姐夫无法得到应得的食宿费补贴家用,让嘉罗琳产生回老家的念头。推销员德鲁埃在找到嘉莉后,了解她的情况,愿意资助她,又鼓起了她继续待在城市的念头。嘉莉给姐姐留了一张纸条后,就和德鲁埃一起在租住一个公寓里。

从此以后,嘉莉就在德鲁埃的影响下,开始去适应城市生活,去看演出、吃饭等,此时的她,认为有钱的日子真舒服,也感到非常的幸福。这是她到芝加哥之后第一次感到幸福,特别是透过阳台的窗户,看到路边走过的,曾和她在鞋店工作类似的女工时,她非常满足目前的物质生活。

通过德鲁埃,嘉莉也认识了酒店经理赫斯特伍德。相对对城市生活不太陌生的嘉莉发现,赫斯特伍德其实比德鲁埃更风趣幽默,更善解人意。其实要知道,他们两人的区别,主要是由于工作的不同,人物性格也就不同,而这些,嘉莉她不知道。

在德鲁埃外出工作时,她发现自己和赫斯特伍德非常谈的来,频频的约会,心中会时不时地想起赫斯特伍德。但是,这种变化被德鲁埃发现后,告诉她,赫斯特伍德是有妻子和孩子的,嘉莉发觉自己受到了欺骗,准备疏远赫斯特伍德。

赫斯特伍德是有妻子和孩子,但是追逐物质享受和交际的妻子,没有和丈夫有过多的交流,赫斯特伍德和妻子的生活没有激情。嘉莉的纯洁让他心动,可是自己的资产都在妻子名下,钱的问题让赫斯特伍德非常尴尬。

为了和心动的人在一起,为了不受到妻子的讽刺挖苦,逃。赫斯特伍德一心想和嘉莉远离这个让他痛苦和烦闷的家,让嘉莉离开德鲁埃和自己在一起。一天营业结束后,赫斯特伍德拿了酒店的营业款10000美元,当夜找到嘉莉,欺骗她德鲁埃受伤把她拉上了开往蒙特里尔的火车。

虽然离开了芝加哥,但是,侦探的到来还是让赫斯特伍德交出了大部分公款,同时,为了避免遇到昔日的熟人,他们到达纽约。

纽约的生活水平,让赫斯特伍德认为必须找到一份合适的工作,否则的话,留下的钱无法长久满足嘉莉日常的开销,毕竟嘉莉没有太多城市工作的经验,生活的压力目前不应该让她有。

赫斯特伍德把留下钱的一大部分与别人合伙开了一个酒店,他负责经营。工作忙碌的他,渐渐没有时间陪在嘉莉身边,嘉莉打发时间,认识了新来的邻居万斯先生和夫人。他们三人会到百老汇吃饭、看演出。嘉莉意识到,在百老汇大街上游玩的人,才是真正的有钱人,他们不是单单地来游玩,是来摆阔的,让嘉莉非常羡慕。

可是,赫斯特伍德合伙的生意受骗了,两人的生活开始拮据起来,经常为一些琐碎的事发生争吵。接连半年多的时间,逐渐年老的赫斯特伍德也没有找到工作,也丧失了继续工作的热情。无奈之下,嘉莉想起在芝加哥时,自己曾有过一次登台演出的经历,当时是帮助德鲁埃给别人许下的诺言,挽回了德鲁埃的面子。

功夫不负有心人,嘉莉从合唱歌舞队开始了她的舞台生涯。由于她热情的投入,迅速地得到经理的认可和提拔。在开始的一段时间里,她还用自己的钱照顾赫斯特伍德,但是她发现,赫斯特伍德沾染上赌博的毛病,让她恼火。在给赫斯特伍德留下一部分钱后,和一个女同伴在外边单独租了一个住处。

嘉莉的演出工作,一直比较顺利,慢慢地,她也成了百老汇出名的女演员。离开嘉莉的赫斯特伍德,最后也死去了。出名后的嘉莉,车马有了,豪华的住处也有了,银行的存款也有了,请她吃饭、玩的朋友也非常多,但是她觉得自己并不幸福,她会一个人静静地坐在躺椅上,看着窗外,她觉得,物质生活满足的她,非常孤单。

这个故事描述的19世纪末的美国大都市,跟我们现在所处的中国十分相似;而文中的嘉莉妹妹,跟我的一个朋友的处境也似乎有许多共同之处,同样的在大都市中找不到安身立命之本,同样不愿意把命运交在别人的手中,却无法拒绝别人的好意和诱惑。只是嘉莉妹妹的结局过于完美,她可以得到自己想要的东西,名誉,事业,社会地位和爱情。我想说的是,嘉莉的才华或许很高,嘉莉的运气或许十分好,嘉莉所处的时代或许有很多机会给她平步青云,嘉莉确实的有一个美妙的结局,但是,平心而论,成功的机会太少了,真的几乎不可能出现...

我们的社会,给予的机会太少,给予的压迫太多;给予的友善太少,给予的欺诈太多。

我的朋友切身的经验,让我真切的了解到一个弱女子能在一个陌生的城市立足,是多么的不容易,她需要面对那么多的困难,苦难...另外一个方面,她要抵制那么多的诱惑,好奇...

大家设身处地的想想,一个涉世未深的学生,来到一个陌生的大都市,举目无亲,一方面是在声色犬马面前的自卑,另一方面是自己的青春美丽所引来无数倾慕者而带来的自信,怎么在两者之间取得平衡,没有人会教涉世未深的学生,没有人有类似的经验,即使有一个那样的“她”存在,“她”能否遇见该涉世未深的学生,即使遇见了,涉世未深的学生能否听从一个同样陌生的“她”的意见呢?所有的一切,都是那么的不能确定,我们就有了结论,一个人要一直在这个纷繁负责的社会作出正确的决定,是多么的艰难,对于一个意志坚定的人,尚且如此,如果是一个物质化的人,是一个追求享乐的人,希望她保持自己的操守,保持自己的贞洁,保持自己良心在大多数时候的纯净,似乎过于艰难了。

可能有人会说,她可以寻求父母的指引,可是正如嘉莉妹妹只能依靠自己一样,她怎么可能询问远在百里之外的年老双亲的指引,双亲的世界跟她的世界是有如此大的差别,指望父母给她正确的指引,无疑不切实际...

可能有人会说,她可以寻求朋友的协助,可是正如嘉莉妹妹在芝加哥和纽约多年,也仅仅有点头之交不超过五个一样,她与身边的人都是从陌生的环境中到达这个城市,大家的友谊的基础并非十分牢固,更关键的是,自顾不暇的学生忙于学习之余是否有那么多的心思去关心一个同学...

可能有人会说,社会上还是好人多,他们会关心她的,可是,大家不要忘记,谦谦君子会保持距离,而抱有不良动机的小人则会美妙的装饰自己,然后不顾一切的靠近自己的猎物,因此,给予她关心的,几乎清一色只有一种人,希望她成为他们女朋友或许情人的人...

她没有错,而社会对她是如此的不公平,表面看,她可以选择,细细的一想,每一个现在看来错误的,引入歧途的决策在当时看来都是无奈之举,下下策中的最优。

一个人张相俊俏,是上天对她的眷恋,而如果俊俏的人,没有一颗纯净的心和雪亮的眼睛,则或许变成悲剧。

无数的人,在我们这个残酷的社会中,每天上演的悲剧中,扮演主角,我们熟视无睹,我们麻木,我们未能照顾好自己,何来时间关心这些“主角”,于是,他们堕落,他们被伤害,他们被淘汰,他们被摧毁。

“主角”在哭诉,社会中的人物,不是看不起我们,而是看不见我们!完全无视我们的苦痛,辛酸,艰难...

当我在阅读《嘉莉妹妹》这本书的过程中,无数次,我在问自己,同样的悲剧在我身边上演多少次?是否还有更残酷,更无情的现实,我们装聋作哑,我们高高在上。或许有,或许我们曾经回避,曾经自欺欺人,但是,悲剧依然存在,知识分子的良知告诉我,如果不是揭露,就是对自己和社会的不负责任。

我的力量过于弱小,我无力抗拒这个无情的社会,但是,我依然要呐喊,依然要为“主角”而申述,希望给予更多的了解和同情。

最后,就是一句话:一个社会的文明程度在于对弱势社群的关怀而非在于大学的数量,一个人的美德在于他对弱者的态度而非他自传中标榜的善举...

《嘉莉妹妹》读后感4

闲来无事,算了柱彩票不中,与双色球无缘,简直毫无规律可言,总是听别人说中多大多大的奖,我觉得不是真实的,下决心不再玩它了,付出太多得到太少,决意要放弃它,至少是暂时的放弃它吧,晚上看了本世界名著,<>是由[美]西奥图.德莱塞/著,刚开始平淡无奇,整个故事也没有大的悬念.

还是对故事做一个简单的描述吧,嘉洛林.米贝登(嘉莉)在她18岁的时候时候从乡村到芝加哥去寻梦,在火车上偶遇杜洛埃,因为纯朴貌美、气质迷人使得杜洛埃搭讪而相互留下联系方式。

嘉洛林.米贝登(嘉莉)在芝加哥,找到了第一份工作是鞋厂的普通女工,工作环境非常恶劣,工人素质差,工作时间也非常长,因此干不下去,而嘉洛林.米贝登(嘉莉)的姐和姐夫也因为生活据拮不愿再收留她,希望她打道回府再回乡村,这时嘉莉偶遇杜洛埃,杜洛埃鼓励嘉莉在这坐城市发展,并承诺对她帮助,嘉莉于是留了下来,杜洛埃租了房并为嘉莉买了新衣鞋等,写到这里,我觉得名著就是名著,我从头到尾没有看到有对嘉莉和杜洛埃的成人描述,呵,搞不懂他们是情人抑或其他的身份,应该该算是情人身份吧,后来杜洛埃将嘉莉介绍给酒店经理赫斯渥,这赫斯渥本来是有家室的人,但对嘉莉一见钟情,下决心要将她搞到手,于是隐瞒其已婚的经历,由于杜洛埃长年从事推销工作,让赫斯渥有机可趁,几经周折,终于鱼儿上钩,当杜洛埃知道赫斯渥与嘉莉的关系,于是告诉赫斯渥已婚的真相,嘉莉为赫斯渥的欺骗感到痛苦并写了分手信,但这老奸巨滑的情场高手竟然用杜洛埃负伤的假消息将嘉莉骗到另一坐城市,同时利用职务之便将保险箱的资金偷走,因害怕被警察追捕退回大部分资金,留一部分的资金用作投资及生活费用。

由于经营不善,赫斯渥很快将资金挥霍一空,在他和嘉莉潇洒了几年后就生活无以为继了,连生活也为钱发愁,赫斯渥因为以前的养尊处优和年龄比较大而找不到工作,嘉莉只得发挥自身特长与爱好当上了演员,结果成了大牌红星,而赫斯渥也因为失去斗志成了乞丐,后来在一个冷寒交加的晚上开煤气自杀。

以上是小说告诉我的信息,我得到的启事就是:

1、对女人而言,要发挥自身的长处,有自己的事业,以前的嘉莉是希望不劳而获,男人养活她,当然她是具备这个资本的,年轻貌美,但是好景不长,在男人有钱的时候成了怨妇,在男人无能的时候也只得养家糊口,杜洛埃、赫斯渥、艾姆斯,是她生命中很重要的人物,杜洛埃、赫斯渥只是将她带上歧途,而艾姆斯却似良师益友,能够发现她的爱好和优点,以欣赏的眼光去指导和帮助她,最后取得了成功,这是很多名女人必经之路。

2、再说说这篇小说对男人的启示吧,一句话,得到一个女人不是件难事,难的是得到一个女人的心,杜洛埃年轻潇洒,乐于助人,但处处留情,而且对结婚这件事从来没认真过,这是嘉莉没有选择他的一个重要原因;赫斯渥虽然年龄大些但也算个风流人物,钱途也多多,常在风月场所的他诡计多端,被爱或者说是被荷尔蒙冲昏了头脑,对嘉莉设计了一个又一个圈套,最后羊入狼口,在爱情上也以胜利告终,但终究在挥霍完偷来的钱后失去了嘉莉,看来女人也非善物,什么爱呀情呀,哈哈,等金钱完了的时候,爱也随之终结,真是中了网上的爱情可以转移,婚姻可以随时冻结......的口号,这个赫斯渥少说也养了嘉莉三、五年了吧,可钱一完,嘉莉立马走人,甚至在她成为红星后在赫斯渥对她乞讨时才舍了七块多钱给他,所以说,女人才是绝情的动物啊,最后赫斯渥在一个寒冷的夜开媒气自杀,死了也无人知晓,被一艘船运去了进行群尸处理,哎,多么悲惨的下场,本来拥有那么好的工作和家庭,为了嘉莉或者他自己的情欲落了个这样的下场,如果嘉莉有知,我相信也不会有泪,当她看到他的那种境遇只舍七块钱就知道她的绝情了,艾姆斯还算个人物吧,可是如果有一天他也落得个赫斯渥一样下场的话是否还有欣赏呢?这个很难说.

一年前看了这小说多好,我觉得每看一篇名著,收获真不少,这不,我也快成这倒楣鬼第二了啊,努力吧,亲爱的自己!

《嘉莉妹妹》读后感5

前几天,妈妈为我买了一本《嘉莉妹妹》,读了它,我仿佛对社会有了一定的了解。它告诉我:现实社会是非常残酷的,没有我想象中的那样简单,它是一个非常复杂的东西。不信?那就让我们一起走进嘉莉妹妹的生活中去吧。

书中塑造了这样一个人物,描述了这样一个故事:嘉莉怀着对大城市物质生活的向往,独自离家闯荡。首先,她住在表姐敏妮家,尝尽苦衷。后来,她以自己的美貌博得了推销员杜洛埃的爱慕,成为他的情妇,逐渐变成了一个挥金如土的阔太太。又由于更大的诱惑跟着酒店经理赫斯渥私奔,由于当时失业的人居多,赫斯渥的酒店也散伙了,工作难找,于是晃荡在家,想靠着嘉莉挣的微薄工资来维持生活。在一次偶然的机会中,嘉莉竟然成了走红的演员,倍受关注,薪水丰厚,挤进了上流社会,并抛弃了家庭逐渐贫困的赫斯渥,以不自觉地残忍将他推上了绝望之路。

故事揭露了资本主义社会繁荣表面底下的失业、贫困和饥饿,对美国贫富对立的社会作了深刻的描写。只有有本事的人将来才能有所作为,才有胆量跟别人竞争,才可能有丰厚的薪水,不至于失业。天啊,现实社会就是那么残酷!知识,是一笔无法掂量的财富,也是一笔无形的财富,成功之神绝不会把灿烂的霞光洒向想不劳而获的人,而给那些有知识,有胆识的人。我坚信,如果你有了一定的知识和胆识,是绝对会得到成功之神的眷顾的!

谨记:不争馒头争口气,将来好要靠自己。我以后一定好好学习,天天向上,做一个有知识,有胆识的人;更要做一个对社会有用的人。今天是祖国的花朵,明天成为祖国的栋梁。

⬕ C++教师工作计划 ⬕

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习;

#include ”stdafx.h“

#include // 包含stdio.h头文件

int main{

printf(”input two integer:“);// 以空格为分隔

scanf(”%d %d“,&a,&b);// 将输入的两个整数分别赋值给a, b

printf(”the max integer is %d.n",max(a,b));// 以整数形式输出最大值, a, b为实际参数(实参)

int max(int num1, int num2){ // num1, num2为形式参数(形参)

if(num1>num2){ // 如果num1大于num2

}

}

”;

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp = (char)(num<<4*i>>28);

temp = temp >= 0 ? temp : temp + 16;

temp = temp < 10 ? temp + 48 : temp + 55;

}

return buffer;

{

int k = 0, i = 0, j = 0;

int a = 1;

{

while( j < N-k ) s = a++; i++; j--;

while( i < N-k ) s = a++; i--; j--;

while( j >k-1 ) s = a++; i--; j++;

while( i >k ) s = a++; i++; j++;

}

{

cout << s << “ ”;

cout << endl;

}

int matrix;

*/

void SetMatrix(int x, int y, int start, int n) {

int i, j;

return;

matrix = start;

return;

}

for (i = x; i < x + n-1; i++) //矩阵上部

matrix = start++;

for (j = y; j < y + n-1; j++) //右部

matrix = start++;

for (i = x+n-1; i >x; i--) //底部

matrix = start++;

for (j = y+n-1; j >y; j--) //左部

matrix = start++;

SetMatrix(x+1, y+1, start, n-2); //递归

}

void main() {

int i, j;

int n;

scanf(“%d”, &n);

SetMatrix(0, 0, 1, n);

for(i = 0; i < n; i++) {

printf(“%4d”, matrix);

printf(“”);

}

}

if(n==0) return 1;

if(n==1) return 1;

retrurn Funct(n-1) + Funct(n-2);

}

请问,如何不使用递归,来实现上述函数?

请教各位高手!

解答:int Funct( int n ) // n 为非负整数

{

int a=0;

int b=1;

int c;

if(n==0) c=1;

else if(n==1) c=1;

else for(int i=2;i<=n;i++) //应该n从2开始算起

{

c=a+b;

a=b;

b=c;

}

return c;

}

解答:

现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位,

1、原题跟little-endian,big-endian没有关系

2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位

3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为

01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4

{

int i,j;

int found=1;

return -1;

{

found=0;

break;

}

return found;

}

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

{

int flag, i, j = 0;

int *arr = (int *)malloc(n * sizeof(int));

arr = 1;

{

flag = 0;

++flag;

++j;

}

arr = 0;

}

free(arr);

return j;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

{

int index;

struct Node *next;

}JosephuNode;

{

int i, j;

JosephuNode *head, *tail;

head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

{

tail->index = i;

tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

tail = tail->next;

}

tail->index = i;

tail->next = head;

{

{

tail = head;

head = head->next;

}

tail->next = head->next;

printf(“第%4d个出局的人是:%4d号”, i, head->index);

free(head);

head = tail->next;

}

i = head->index;

free(head);

return i;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

}

已知strcpy函数的原型是:

char * strcpy(char * strDest,const char * strSrc);

1.不调用库函数,实现strcpy函数。

2.解释为什么要返回char *。

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL)) file://

throw “Invalid argument(s)”; //

char * strDestCopy=strDest; file://

while ((*strDest++=*strSrc++)!=“id="article-content1">

⬕ C++教师工作计划 ⬕

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很 的难点,那就是函数指针了,本博文详细介绍一下常见的各种 的函数指针。

与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。

变量都包括声明和赋值,指针不例外,函数指针也不例外。我们来看一个简单的函数:

void add(int a, int b){

cout << a + b << endl;

}

一个简单的加法计算并输出到命令行的函数。

那么如何通过函数指针来调用它呢?

1、声明:

void (*p1)(int a, int b);

函数指针的声明很简单,基本就是通过一个指针把函数名替换。指针p1的类型为void (*) (int a,int b),表明指针是一个指向某个函数的指针,指针指向的类型为void (int a,int b)

3、也可以直接定义:

void (*p1)(int a, int b) = add;

注意,函数void add(int a,int b)的函数名add就是函数的地址。将地址add赋值给指针p1,那么就可以通过函数指针p1直接调用函数了。

p1(1, 2);

注意!出于历史原因以上2种方式都是可以调用函数的。

有时候有这种情况,有一个数组,数组中的每个元素都是一个函数指针,该怎么定义这个数组呢?

1、解释*p和(*p)

我们知道,运算符的优先级要高于*,所以,p表示含有3个元素的数组,而*p 前面的 “ * ” 指明了数组中元素的类型,即*p表示一个指向3个指针的数组,

p表示含有3个元素的数组,那么(*p)就是用 *p 替换了 p,很容易想到,(*p) 表示指向一个包含3个元素的数组的指针。

2、声明:

void (*p2)(int a, int b);

数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。

理解上跟上面是一样的。

(*p2)(3,4);

同样是2种方式都可以。

三、指向“包含多个函数指针的数组“的指针

这个标题好像有点拗口。简而言之,这个指针指向上文中的 “包含多个函数指针的数组” 。其实很简单,说白了,就是把上文中的p2用一个指针来代替。

1、声明:

void (*(*p3))(int a, int b);

可以看到,无非就是把p2用*p3代替。

2、赋值,注意,既然是指针,使用前必须初始化:

p3 = &p2;

(*p3) = add;

注意!既然实质上就是把p2用*p3代替,c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3))(int a, int b)= &p2;

((*p3))(1, 2);

⬕ C++教师工作计划 ⬕

搜狗2017C++笔试题

搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

1.关于重载和多态正确的是?

A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

B.选项全部都不正确

C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{

void test(floata){cout<<"1";}

};

class B:public A{

void test(intb){cout<<"2";}

};

A *a=new A;

B *b=new B;

a=b;

a.test(1.1);

结果是1

解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

C中重载在一般函数中也会使用;

D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

A.安排小亮先取硬币;

B.小明或小亮均一定必胜

C.安排自己先取硬币

D.不可能必胜

解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

#include //1

class B//2

{//3

};//4

B func(const B& rhs){//5

return rhs;//6

}//7

int main(int argc,char **argv){//8

B b1,b2;//9

b2=func(b1);//10

}//11

A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B.二次拷贝构造函数,一次析构函数

C.一次(拷贝赋值运算符)operator=,一次析构函数

D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

4.下面代码的输出结果是()

int main(){

int pid;

int num=1;

pid=fork();

if(pid>0){

num++;

printf("in parent:num:%daddr:%x\n",num,&num);

}

else if(pid==0){

printf("in child:num:%daddr:%x\n",num,&num);

}

A.父子进程中输出的num相同,num地址不相同

B.父子进程中输出的num不同,num地址相同

C.父子进程中输出的num相同,num地址也相同

D.父子进程中输出的num不同,num地址不相同

5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

int a=0;

class someClass{

int b;

static int c;

};

int main(){

int d=0;

someClass *p=new someClass();

return 0;

}

A.b存在堆区

B.c存在堆区

C.d存在栈区

D.a存在全局变量区

解析: C应该在全局静态区

6.以下代码段有问题的是()

A.void func1(char *e){

char *p1;

p1=malloc(100);

sprintf(p1,error:"%s'.",e);

local_log(p1);

}

B. int func2(char *filename)

{

FILE *fp;

int key;

fp=fopen(filename,"r");

fscanf(fp,"%d",&key);

return key;

}

C.voidfunc3(char *info){

char *p,*pp;

p=malloc(100);

pp=p;

free(p);

sprintf(pp,*info:"%s'.",info);

free(pp);

}

D.选项全部都正确

解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

7.请问该程序的输出是多少?

#include

int main()

{

unsigned char i=7;

int j=0;

for(;i>0;i-=3)

{

++j;

}

printf("%d\n",j);

return 0;

}

A.2

B.死循环

C.173

D.172

解析:unsigned char 8位数据位,范围0-255,

所以-2(11111110)时,溢出变成254;

同理-1(11111111)时,溢出变成255;

最后减到0时,不满足循环条件,for停止。

刚好173次。

7 4 1 -2 ==>共4次

254 251 ... 5 2 -1 ==>共85次

255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

所以总共173次。(相减相除)

更快捷的计算方法:256*2+7=519=173*3

8.快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

9.下列各树形结构中,哪些是平衡二叉查找树:

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

10.下面哪种数据结构最适合创建一个优先级队列()

A.堆

B.双向链表

C.单向链表

D.栈

11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

A.基数排序

B.快速排序

C.二叉排序

D.堆排序

12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

A35

B.49

C.39

D.45

13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

A. heap

B.queue

C.binary tree

D.stack

14.假设MySQL数据库表:

create table T{

k int unsigned not null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary key(k),unique key a_index (a DESC,b DESC),

key k1(b),key k2(c),key k3(d));

如下哪些sql语句查询能较好的.利用索引?()

A.select bfrom WHERE b like 'aaa%';

B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

山洞的地图如下:

S--------------------T

S是入口

T处有宝箱,打开宝箱之后可能得到的物品有:

1)宝石,出现概率为5%.

2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

3)什么也没有,概率为45%.

S到T的距离为1.

每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

问题:玩家完成任务所走路程的数学期望是()

A.40

B.25

C.35

D.30

16.下面关于TCP的描述,错误的是()

A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

B.TCP客户端和服务器之间建立连接需要经过3次握手

C.只要有一方主动关闭连接后,这个TCP连接就结束了

D.只要有一方主动关闭连接后,这个TCP连接就结束了

17.关于进程和线程描述正确的是()

A.线程不拥有系统资源,但可以访问隶属于进程的资源

B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

C.进程是调度和拥有资源的基本单位

D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

A.CreateThread

B. GetCurrentProcess

C. OpenProcess

D. CreateFile

19. invalidateRect的作用是()

A.擦除一个矩形区域

B.删除一个矩形

C.使一个矩形区域变为无效,从而释放部分GDI资源

D.使一个矩形区域变为无效,从而可以重绘

20.典型的创建Windows窗口过程的流程为:()

A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

参考答案:

1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C

⬕ C++教师工作计划 ⬕

C++实训报告

随着计算机技术的发展,越来越多的人选择学习计算机编程语言,而C++语言作为一种高级编程语言,其应用范围非常广泛,对于想进一步学习编程的人来说,学习了解C++语言是非常必要的。为此,本文在老师的指导下,进行了C++实训学习,得出了一些有关C++语言的一些学习心得和方法。

首先,C++语言的基础知识是非常重要的。在学习C++语言的过程中,我们需要学习基本语法、数据类型、运算符、循环结构、分支结构等等基础知识。对于初学者来说,学习这些知识非常关键,也是需要花费较多时间来掌握的。通过实践,我们发现,掌握了这些基本知识后,不仅可以更好地理解C++语言的编程思想,还能更好地完成编程任务。

其次,C++语言的实际应用也非常丰富。在学习C++语言的过程中,我们需要通过一些实际的编程项目来提高自己的实践技能。例如,可以通过编写简单的计算器程序、打印图形等方式,来熟练掌握C++语言的应用。在这个过程中,我们也需要注意代码的规范性和注释。代码规范的好坏往往会直接影响到程序的运行效果,而注释的添加则有助于更好地理解和维护代码。

再次,C++语言的熟练掌握需要逐步提高。对于初学者来说,熟练掌握C++语言需要花费较多时间和精力。因此,我们可以采取逐步提高的方法。首先,我们可以通过大量的实践来熟悉C++语言的基本使用方法;然后,我们需要学习一些高级用法和技巧,例如面向对象编程、模板编程、异常处理等等。这些高级用法虽然比较难掌握,但是掌握后对于改进程序的性能和效率都有很大的帮助。

最后,对于学习C++语言的初学者来说,我们也需要注意一些学习方法。除了学习基本知识和应用技巧外,我们还需要积极参加一些讨论活动、阅读相关的书籍和文章,以及参与一些实践项目。这些学习方法可以让我们更好地理解C++语言的思想和应用,也可以学习他人的编程思路和经验,有助于我们更好地提高自己的编程能力。

综上所述,学习C++语言需要掌握基础知识、进行实际应用、逐步提高和采取合理的学习方法。通过实践,我深刻地认识到C++语言是一种非常强大的编程语言,熟练掌握后能够编写高效且功能强大的程序,对于我们的职业发展也有很大的帮助。因此,我会继续学习和实践,以便更好地提高自己的编程水平。

⬕ C++教师工作计划 ⬕

c++实践报告书范文2篇

【c++实践报告书例一】

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 MFC课程设计

计算机基础教学实验中心

2015年 06月 14 日

一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基

Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用Visual C++ MFC编程实现以下功能:

b、c,计算并输出两个根x1、x2.

修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。

了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程axb、c,计算并输出两个根x事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的'输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password;

m_user.GetWindowText(c_user);

m_password.GetWindowText(c_password);

if(c_user.IsEmpty()||c_password.IsEmpty())

{

MessageBox("用户名或密码不能为空","用户登录信息");

return;

}

if(c_user=="123"&&c_password=="123")

{

CMyMenu dlg;

dlg.DoModal();//这两段代码是用于调用菜单对话框

}

else

{

MessageBox("用户名或密码不正确","提示",MB_ICONINFORMATION); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

【c++实践报告书例二】

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

题 目 科学计算器应用程序系统 学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2013年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;MFC;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“C”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”CE”,”C”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对CLR与.NET的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向Windows计算器靠拢。可以看到,这个计算器有很多Windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多Bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

⬕ C++教师工作计划 ⬕

struct node *front,*next;

};

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

BOOL DeteleNode(Node *pHeader, DataType Value)

{

if (pHeader == NULL) return;

BOOL bRet = FALSE;

Node *pNode = pHead;

{

{

{

pHeader = pNode->next;

pHeader->front = NULL;

{

{

pNode->next->front = pNode->front;

}

pNode->front->next = pNode->next;

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

bRet = TRUE;

{

pNode = pNode->next;

}

}

return bRet;

}

void DE(Node *pHeadA, Node *pHeadB)

{

if (pHeadA == NULL || pHeadB == NULL)

{

return;

}

Node *pNode = pHeadA;

{

if (DeteleNode(pHeadB, pNode->data))

{

{

pHeadA = pNode->next;

pHeadA->front = NULL;

{

pNode->front->next = pNode->next;

{

pNode->next->front = pNode->front;

}

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

{

pNode = pNode->next;

}

}

}

2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”

int GetCommon(char *s1, char *s2, char **r1, char **r2)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

int maxlen = 0;

for(int i = 0; i < len1; i++)

{

for(int j = 0; j < len2; j++)

{

int as = i, bs = j, count = 1;

while(as + 1 < len1 && bs + 1 < len2 && s1 == s2)

count++;

{

maxlen = count;

*r1 = s1 + i;

*r2 = s2 + j;

}

}

}

}

3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数

char* test3(long num) {

char* buffer = (char*)malloc(11);

buffer = “0”;

buffer = “x”;

buffer = “\0”;

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp = (char)(num<<4*i>>28);

temp = temp >= 0 ? temp : temp + 16;

temp = temp < 10 ? temp + 48 : temp + 55;

}

return buffer;

{

int k = 0, i = 0, j = 0;

int a = 1;

{

while( j < N-k ) s = a++; i++; j--;

while( i < N-k ) s = a++; i--; j--;

while( j >k-1 ) s = a++; i--; j++;

while( i >k ) s = a++; i++; j++;

}

{

cout << s << “ ”;

cout << endl;

}

int matrix;

*/

void SetMatrix(int x, int y, int start, int n) {

int i, j;

return;

matrix = start;

return;

}

for (i = x; i < x + n-1; i++) //矩阵上部

matrix = start++;

for (j = y; j < y + n-1; j++) //右部

matrix = start++;

for (i = x+n-1; i >x; i--) //底部

matrix = start++;

for (j = y+n-1; j >y; j--) //左部

matrix = start++;

SetMatrix(x+1, y+1, start, n-2); //递归

}

void main() {

int i, j;

int n;

scanf(“%d”, &n);

SetMatrix(0, 0, 1, n);

for(i = 0; i < n; i++) {

printf(“%4d”, matrix);

printf(“”);

}

}

if(n==0) return 1;

if(n==1) return 1;

retrurn Funct(n-1) + Funct(n-2);

}

请问,如何不使用递归,来实现上述函数?

请教各位高手!

解答:int Funct( int n ) // n 为非负整数

{

int a=0;

int b=1;

int c;

if(n==0) c=1;

else if(n==1) c=1;

else for(int i=2;i<=n;i++) //应该n从2开始算起

{

c=a+b;

a=b;

b=c;

}

return c;

}

解答:

现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位,

1、原题跟little-endian,big-endian没有关系

2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位

3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为

01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4

{

int i,j;

int found=1;

return -1;

{

found=0;

break;

}

return found;

}

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

{

int flag, i, j = 0;

int *arr = (int *)malloc(n * sizeof(int));

arr = 1;

{

flag = 0;

++flag;

++j;

}

arr = 0;

}

free(arr);

return j;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

{

int index;

struct Node *next;

}JosephuNode;

{

int i, j;

JosephuNode *head, *tail;

head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

{

tail->index = i;

tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

tail = tail->next;

}

tail->index = i;

tail->next = head;

{

{

tail = head;

head = head->next;

}

tail->next = head->next;

printf(“第%4d个出局的人是:%4d号”, i, head->index);

free(head);

head = tail->next;

}

i = head->index;

free(head);

return i;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

}

已知strcpy函数的原型是:

char * strcpy(char * strDest,const char * strSrc);

1.不调用库函数,实现strcpy函数。

2.解释为什么要返回char *。

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL)) file://

throw “Invalid argument(s)”; //

char * strDestCopy=strDest; file://

while ((*strDest++=*strSrc++)!=“\0”); file://

return strDestCopy;

(A)不检查指针的有效性,说明答题者不注重代码的健壮性。

(B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。

(C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

(A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

(A)循环写成while (*strDest++=*strSrc++);,(B)。

(B)循环写成while (*strSrc!=“\0”) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上“\0”。

⬕ C++教师工作计划 ⬕

求输出的结果
#include
using namespace std;
class Base
{
public:
    void func(const char* str){cout << "Base: " << str << endl;}
virtual void func(int num){cout << "Base: " << num << endl;}
};
class Derived : public Base
{
public:
    void func(const char* str){cout << "Derived: " << str << endl;}
void func(int num){cout << "Derived: " << num << endl;}
void func(){cout << "The Function is in Derived!" << endl;}
};
int main()
{
  Base *pB;
Derived ObjD;
pB = ObjD;
pB->func(11);
pB->func("Hello");
// pB->func();
getchar();
return 0;
}

⬕ C++教师工作计划 ⬕

华为笔试题 - 华为C/C++笔试题(面试题)

oo1、局部变量能否和全局变量重名?

oo答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

oo

oo2、如何引用一个已经定义过的全局变量?

oo 答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

oo

oo

oo3、全局变量定义在可被多个.C文件包含的.头文件中可不可以?为什么?

oo答:可以,但要加static

oo

oo4、语句for( ;1 ;)有什么问题?它是什么意思?

oo答:死循环,同while(1),这种写法并不规范,可读性差,一般不用

oo

oo5、do……while和while……do有什么区别?

oo答:前一个循环一遍再判断,后一个判断以后再循环

oo

oo6、请写出下列代码的输出内容

oo#include

oomain()

oo{

ooint a,b,c,d;

ooa=10;

oob=a++;

ooc=++a;

ood=10*a++;

ooprintf("b,c,d:%d,%d,%d",b,c,d);

ooreturn 0;

oo}

oo答:10,12,120

oo

oo7.static函数与普通函数有什么区别?

oo只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

oo

oo8.static全局变量与普通的全局变量有什么区别?

oo全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

oo 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

oo

oo9.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆 )中。

oo

oo10.设有以下说明和定义:

ootypedef union {long i; int k[5]; char c;} DATE;

oostruct data { int cat; DATE cow; double dog;} too;

ooDATE max;

oo则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____

oo

oo11.队列和栈有什么区别?

oo队列先进先出,栈后进先出

oo

oo12.写出下列代码的输出内容

oo#include

ooint inc(int a)

oo{

ooreturn(++a);

oo}

ooint multi(int*a,int*b,int*c)

oo{

ooreturn(*c=*a**b);

oo}

ootypedef int(FUNC1)(int in);

ootypedef int(FUNC2) (int*,int*,int*);

oo

oovoid show(FUNC2 fun,int arg1, int*arg2)

oo{

ooINCp=&inc;

ooint temp =p(arg1);

oofun(&temp,&arg1, arg2);

ooprintf("%d ",*arg2);

oo}

oo

oomain()

oo{

ooint a;

ooshow(multi,10,&a);

ooreturn 0;

oo}

oo

oo翻译一下

oo==================================

oo#include

oousing namespace std;

oo

oo// 返回a + 1

ooint inc(int a){

ooreturn a+1;

oo}

oo// out = a*b

ooint multi(int& a, int& b, int& out){

ooreturn out = a*b;

oo}

oo

oo// 定义两种函数,FUNC1对应inc, FUNC2对应 multi

ootypedef int(FUNC1) (int in);

ootypedef int(FUNC2) (int&,int&,int&);

oo

oo// 诡异的函数,这是模糊C大赛么...

oovoid show( FUNC2* func, int num, int& out ){

ooFUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义

ooint numAdd1 = pInc( num );

oo// 等价于 numAdd1 = inc( num );

oo// 结果 num仍然是10, numAdd1 = 11

oo

oo// 调用func函数,可以看到, main中传给func的是 multi.

oo// 所以调用的是 multi( 11, 10, out ), out = 110

oofunc( numAdd1, num, out );

oocout

oo

ooint main(){

ooint a;

ooshow(multi,10, a);

ooreturn 0;

oo}

oo==================================

oo

oo13.请找出下面代码中的所以错误

oo说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

oo==================================

oomain(){

oochar*src="hello,world";

oochar* dest=NULL;

oo

ooint len=strlen(src);

oodest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括

oo

oochar* d = dest;

oochar* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]

oowhile( len-- != 0 )

ood++=s--;//!3 *d++ = *s--;

oo//!4 尾部要 ,应加上 *d = 0;

oo

ooprintf("%s",dest);

ooreturn 0;

oo}

oo==================================

oo

oo修正后的答案:

oo==================================

ooint main(){

oochar* src = "hello,world";

oo

ooint len = strlen(src);

oochar* dest = (char*)malloc(len+1);.

oo

oochar* d = dest;

oochar* s = &src[len-1];

oowhile( len-- != 0 )

oo*d++=*s--;

oo*d = 0;

oo

ooprintf("%s",dest);

⬕ C++教师工作计划 ⬕

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include 和 #include “filename.h” 有什么区别?(5 分)

答:对于#include ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量,(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的'名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i {

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i DoSomething();

}

else

{

for (i=0; i DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

⬕ C++教师工作计划 ⬕

pS:答案是本人随笔所写,可能不全甚至错误!

请不要盲目将其作为标准答案,不当之处,请指正,谢谢。

C++/MFC 试题

一.填空题 (26 分 )

1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。 (3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;

2 .请给出如下程序的结果 (2 分 )

int a = 3;

int b = a << 3; /// 00000011左移三位为00011000,即24

a = __3__ , b = __24__ 。

3 .请 给出如下程序的结果 (2 分 )

int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分)

#define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心

则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 )

char szTemp[1000] = "";

int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\

strcpy(szTemp, "abc");

int nLen3 = sizeof(szTemp);

int nLen4 = strlen(szTemp);

int nTemp[100];

int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = "";

sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);

则 szResult = _1000,0,1000,3,04___ 。

CObject 、 CWinApp 、 CWnd )? (2 分 )__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CpU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程___(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递

{

char szTemp[10] = "";

x = 2;

sprintf(szTemp, "%d,", x);

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

int x = 4;

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

void bbb()

{

char szTemp[10] = "";

int x = 7;

ccc(x);

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

二.改错题 ( 总共 15 分 , 每题 5 分 )。

1 .下面代码有何错误

void func1()

{

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

pa; /// pa仍然是空指针,pb申请的`空间并没有被掉

}

void func2(int *pb)

{

pb = new int(5); /// pb重新申请了堆空间

}

2 .下面代码有何错误

void func2(int *value)

{

*value = 2; /// value为空指针,不能被取值,所以*value是错误的

}

void func1()

{

int *p = 0;

func2(p);

}

3 .

int func1(int& b) /// 参数b的类型是整型

{

return 0;

}

void func2()

{

int bbb = 3;

func1(&bbb); /// 函数参数的引用调用不需要用符号"&"

func1(bbb);

}

func2 中有何错误, func1 的参数 b 的类型是什么。

三.简答题 (64 分 )

pS:以下答案是随笔所写,请读者做进一步的深入了解。

C++ 、 VC 、 MFC 在概念上的区别 (4 分 )

答:C是面向过程编程的语言;

C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows ApI函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 )

答:

int add(int a,int b)

{

return (a + b);

}

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。

floatadd(float a,float b)

{

return (a + b);

}

线程。 (4 分 )

答:Createproccess()创建进程;

CreateThread()创建线程

MFC中还提供了_beginthread()与_beginthreadex()函数创建线程

4.SendMessage 和 postMessage 有什么区别 (4 分 )

答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。

postMessage:发送消息后不等待消息处理即继续执行自身的程序。

5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。 (4 分 )

答:WaitForSingleObject是表示等待线程的一个函数。

参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。

__cdecl 、 __pascal 在什么方面有所不同。 (4 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive parameter order Clean-up passes parameters in registers?

pascal Left-to-right Routine No

cdecl Right-to-left Caller No

stdcall Right-to-left Routine No

7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

int nLen = strText.GetLength();

myFile.Write((char*)(LpCSTR)strText, nLen);

myFile.Close();

return nRet;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LpCSTR)strText, nLen);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

}

__finaly

{

myFile.Close();

}

return nRet;

}

8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少? (6 分 )

typedef int (*func)(int, int*);

int xxx(int a, int *p)

{

return a + *p;

}

int dowork(func aaa, int bbb, int *ccc)

{

return aaa(bbb, ccc);

}

int sss = 4;

int ttt = dowork(&xxx, 3, &sss);

答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为7

9 .请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多少? (6 分 )

class Fruit

{

public:

Fruit()

{

weight = 2;

}

Fruit(int w)

{

weight = w;

}

int operator+(Fruit f)

{

return this->weight * f.weight;

}

private:

int weight;

};

Fruit aaa;

Fruit bbb(4);

int ccc = aaa + bbb;

答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10. 请解释下面代码采用了何种 C++ 特性( C 语言不具备),作用是什么? (6 分 )

template

T sum(T a, T b)

{

return (a + b);

}

答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。

11 .请解释 aaa.h 中下面代码的功能 (5 分 )

#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)

#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_

... ...

#endif

答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。

12 . CMemoryState 主要功能是什么 (5 分 )

答:用于检测内存泄露。

13 .请阅读下述代码,写出程序执行的结果( 6 分)

#include

using namespace std;

class CBase

{

public:

virtual void print()

{

cout<< "base" << endl;

}

void Doprint()

{

print();

}

};

class CChild1: public CBase

{

public:

⬕ C++教师工作计划 ⬕


这本书主要讲了:嘉莉十八岁那年她就独自一人从自己的家乡离开,去往芝加哥生活。她向往物质生活,所以才离开家乡的。读完这本书,我觉得嘉莉只是沉浸在自己追求的生活和想象之中,她从未替别人着想过。她的这种性格是由于贫困所造成的。自己一无所有,却只是期求这幸福。下面为大家精心整理了一些关于《嘉莉妹妹》读后感,请您阅读。

《嘉莉妹妹》读后感1

《嘉莉妹妹》中的主人公便是嘉莉。她出生在一个普通的家庭,有一个疼爱自己的姐姐,也有一个一毛不拔的姐夫。

在小嘉莉刚满16岁时,她便做出决定,要出去闯荡闯荡,于是她独自一人,踏上了火车之旅,来到了姐姐家。在去姐姐家的路上,她碰到了一个奇怪的人——杜埃。杜埃是一家公司的推销员。他告诉嘉莉,如果你在这儿感到陌生的话,我可以帮你。后来杜埃看着嘉莉安全的到家后,才转身离开。然而就是因为杜埃对嘉莉的这一份情谊,却让嘉莉一举成了大明星。

嘉莉是一个酷爱话剧的女孩儿,所以杜埃经常带着她去大大小小的剧院去欣赏话剧。而杜埃也渐渐喜欢上了这个沉迷于戏剧的女孩儿,于是他决定,一定要让嘉莉一举成名!

嘉莉的星路旅程,也就从此拉开了帷幕。她从扮演一个从不被人注意的配角儿到扮演一个赫赫有名的大明星,她付出了常人无法想象,无法接受的苦难。大街小巷都贴着她的海报,每个剧院都放着她演过的话剧。而杜埃呢?他为了完成嘉莉的梦想,以涉嫌诈骗而被捕获,五年后,他出狱了,当他看到嘉莉时他惊呆了!嘉莉成名了,而他呢?却是一个丢了金钱、权利、地位、亲情和爱情的穷光蛋!

当我看完整本书时,我感到有一种罪恶感围绕在我的身边,我有过要为梦想执着奋斗的想法吗?就算有,我又有想过要实现它吗?我没有,我突然觉得自己太懦弱了,连最简单的现实都不敢去面对,还能有什么理由去面对呢?我恨我自己,为什么天生就是这样,为什么天生就没有改变自己的权利,我真的受够了!

我要改变,去坚强,去勇敢,去闯练,可我该怎么做呢?我依然还歪着脑袋深思着这个问题。

《嘉莉妹妹》读后感2

这本书感觉真的很现实!它把人的冷漠,自私剖析的非常透彻,又把巨大的社会现状不加掩饰的展现出来!

它有很多和其他经典相似的地方,又在相似中个性鲜明!

女主人公嘉莉和《飘》中的思嘉很像,性格都那么贪图享乐,别人有的自己也一定要有,却也都在现实的不幸中努力生存。不同的是思嘉在最困难中没有丢下媚兰,而嘉莉却丢下了伍德,她的善良在人物口口传递中是如此的苍白无力、如此虚伪,也更体现了时代的冷漠与自私。

男主人公伍德到纽约后的遭遇感觉像是中国女版的月牙儿。一个是被生活被社会拖到了尽头,为了吃饭沦为了暗娼;一个是为了活着仅仅是活着变成了乞丐。他们都没有错,他们都会干活都有谋生的能力,却被社会现实剥夺了谋生的权利!伍德的事业由兴到败又很像《林家铺子》,都是在变革中求生存,都有着短暂生存的回光返照,却最终因为现实社会中的大势,一个破产逃难,一个死于饥饿。

结构中的对比很突出。故事情节在大的方向中出现极端的结局。主人公们的性格并不算突出,甚至很大众。这一点和《巴黎圣母院》不同。它的最大特点也是对比,却是从人物的本身入手。如果说《巴》的场景感觉像是一幅流动的夸张的话剧,而它的感觉就像固定的一个个画面突出的展现,仅仅从这些瞬间的画面中就可以窥视到整个社会氛围和现状!

画面一,嘉莉刚到姐姐的小小的家时,姐姐明妮忙里忙外不停的劳作,姐夫杰森下班后看报纸的简单,还有嘉莉哄小孩时的无可奈何。那种晦涩的、阴暗的、忙碌的底层人民的生存实景一目了然。

画面二,伍德骗嘉莉私奔时,只差四分钟火车就开了的紧迫感;给赶车人多加一块钱时的急切;检票员过来时的慌乱和将要窒息的情绪波动。这一气呵成的长轴画卷,很刺激很丰富!

画面三,嘉莉在找工作时的胆怯、彷徨无注,那种羡慕、那种向往在现实面前的不堪一击,站在芝加哥商业区大街的中央,此地虽大却没有她的容身之地,仿佛可以看见那双无助、凄凉的眼神!

画面四,伍德在内的一群乞丐争抢着上尉抛洒的钱币,生存在尽头中的游弋。人群的喧哗与乞丐的悲鸣,上尉的高高在上,与伍德小心守护的自尊心,那么热闹的场面我却感觉寂静的可怕!

画面五,也是画面感最强的一幅画。伍德在乱石中不熟练的开着电车,旁边两个警察又骂又打的驱赶罢工人群,而愤怒的人群不断的冲破警察的封锁,试图扯下临时电车司机伍德,还有个小女孩在人群外冲着伍德做鬼脸。好一幅愤怒的画卷!

最后的画面,伍德把自己安顿好,打开煤气…… 明明是死亡的冷峻,我却看到了想要生存的无奈,他已经连一顿饭也乞不到了……

灰色的冬季,天空中飘下纯白的雪花,覆盖住这份寒冷的孤寂吧!

《嘉莉妹妹》读后感3

18岁的嘉罗琳(嘉莉)离开自己的父母,到芝加哥找姐姐,想谋求一份适合自己的工作。虽然之前曾经去过姐姐家一次,但毕竟对城市生活非常陌生。在火车上,被推销员德鲁埃认识,互相交换了在芝加哥的地址。

到达姐姐家后,找工作十分的不顺利,曾经在一个每周收入只有四块半的鞋厂工作,但是,在给姐姐交完每周四块钱的食宿费后,只有五角钱的使用空间,而这些,并没有阻挡住对城市灯红酒绿生活的向往,富人生活的诱惑始终在吸引着她,但是,出路在哪里呢?

由于工作的辛苦,淋雨病到后,这唯一的工作也就没有了。姐夫无法得到应得的食宿费补贴家用,让嘉罗琳产生回老家的念头。推销员德鲁埃在找到嘉莉后,了解她的情况,愿意资助她,又鼓起了她继续待在城市的念头。嘉莉给姐姐留了一张纸条后,就和德鲁埃一起在租住一个公寓里。

从此以后,嘉莉就在德鲁埃的影响下,开始去适应城市生活,去看演出、吃饭等,此时的她,认为有钱的日子真舒服,也感到非常的幸福。这是她到芝加哥之后第一次感到幸福,特别是透过阳台的窗户,看到路边走过的,曾和她在鞋店工作类似的女工时,她非常满足目前的物质生活。

通过德鲁埃,嘉莉也认识了酒店经理赫斯特伍德。相对对城市生活不太陌生的嘉莉发现,赫斯特伍德其实比德鲁埃更风趣幽默,更善解人意。其实要知道,他们两人的区别,主要是由于工作的不同,人物性格也就不同,而这些,嘉莉她不知道。

在德鲁埃外出工作时,她发现自己和赫斯特伍德非常谈的来,频频的约会,心中会时不时地想起赫斯特伍德。但是,这种变化被德鲁埃发现后,告诉她,赫斯特伍德是有妻子和孩子的,嘉莉发觉自己受到了欺骗,准备疏远赫斯特伍德。

赫斯特伍德是有妻子和孩子,但是追逐物质享受和交际的妻子,没有和丈夫有过多的交流,赫斯特伍德和妻子的生活没有激情。嘉莉的纯洁让他心动,可是自己的资产都在妻子名下,钱的问题让赫斯特伍德非常尴尬。

为了和心动的人在一起,为了不受到妻子的讽刺挖苦,逃。赫斯特伍德一心想和嘉莉远离这个让他痛苦和烦闷的家,让嘉莉离开德鲁埃和自己在一起。一天营业结束后,赫斯特伍德拿了酒店的营业款10000美元,当夜找到嘉莉,欺骗她德鲁埃受伤把她拉上了开往蒙特里尔的火车。

虽然离开了芝加哥,但是,侦探的到来还是让赫斯特伍德交出了大部分公款,同时,为了避免遇到昔日的熟人,他们到达纽约。

纽约的生活水平,让赫斯特伍德认为必须找到一份合适的工作,否则的话,留下的钱无法长久满足嘉莉日常的开销,毕竟嘉莉没有太多城市工作的经验,生活的压力目前不应该让她有。

赫斯特伍德把留下钱的一大部分与别人合伙开了一个酒店,他负责经营。工作忙碌的他,渐渐没有时间陪在嘉莉身边,嘉莉打发时间,认识了新来的邻居万斯先生和夫人。他们三人会到百老汇吃饭、看演出。嘉莉意识到,在百老汇大街上游玩的人,才是真正的有钱人,他们不是单单地来游玩,是来摆阔的,让嘉莉非常羡慕。

可是,赫斯特伍德合伙的生意受骗了,两人的生活开始拮据起来,经常为一些琐碎的事发生争吵。接连半年多的时间,逐渐年老的赫斯特伍德也没有找到工作,也丧失了继续工作的热情。无奈之下,嘉莉想起在芝加哥时,自己曾有过一次登台演出的经历,当时是帮助德鲁埃给别人许下的诺言,挽回了德鲁埃的面子。

功夫不负有心人,嘉莉从合唱歌舞队开始了她的舞台生涯。由于她热情的投入,迅速地得到经理的认可和提拔。在开始的一段时间里,她还用自己的钱照顾赫斯特伍德,但是她发现,赫斯特伍德沾染上赌博的毛病,让她恼火。在给赫斯特伍德留下一部分钱后,和一个女同伴在外边单独租了一个住处。

嘉莉的演出工作,一直比较顺利,慢慢地,她也成了百老汇出名的女演员。离开嘉莉的赫斯特伍德,最后也死去了。出名后的嘉莉,车马有了,豪华的住处也有了,银行的存款也有了,请她吃饭、玩的朋友也非常多,但是她觉得自己并不幸福,她会一个人静静地坐在躺椅上,看着窗外,她觉得,物质生活满足的她,非常孤单。

这个故事描述的19世纪末的美国大都市,跟我们现在所处的中国十分相似;而文中的嘉莉妹妹,跟我的一个朋友的处境也似乎有许多共同之处,同样的在大都市中找不到安身立命之本,同样不愿意把命运交在别人的手中,却无法拒绝别人的好意和诱惑。只是嘉莉妹妹的结局过于完美,她可以得到自己想要的东西,名誉,事业,社会地位和爱情。我想说的是,嘉莉的才华或许很高,嘉莉的运气或许十分好,嘉莉所处的时代或许有很多机会给她平步青云,嘉莉确实的有一个美妙的结局,但是,平心而论,成功的机会太少了,真的几乎不可能出现...

我们的社会,给予的机会太少,给予的压迫太多;给予的友善太少,给予的欺诈太多。

我的朋友切身的经验,让我真切的了解到一个弱女子能在一个陌生的城市立足,是多么的不容易,她需要面对那么多的困难,苦难...另外一个方面,她要抵制那么多的诱惑,好奇...

大家设身处地的想想,一个涉世未深的学生,来到一个陌生的大都市,举目无亲,一方面是在声色犬马面前的自卑,另一方面是自己的青春美丽所引来无数倾慕者而带来的自信,怎么在两者之间取得平衡,没有人会教涉世未深的学生,没有人有类似的经验,即使有一个那样的“她”存在,“她”能否遇见该涉世未深的学生,即使遇见了,涉世未深的学生能否听从一个同样陌生的“她”的意见呢?所有的一切,都是那么的不能确定,我们就有了结论,一个人要一直在这个纷繁负责的社会作出正确的决定,是多么的艰难,对于一个意志坚定的人,尚且如此,如果是一个物质化的人,是一个追求享乐的人,希望她保持自己的操守,保持自己的贞洁,保持自己良心在大多数时候的纯净,似乎过于艰难了。

可能有人会说,她可以寻求父母的指引,可是正如嘉莉妹妹只能依靠自己一样,她怎么可能询问远在百里之外的年老双亲的指引,双亲的世界跟她的世界是有如此大的差别,指望父母给她正确的指引,无疑不切实际...

可能有人会说,她可以寻求朋友的协助,可是正如嘉莉妹妹在芝加哥和纽约多年,也仅仅有点头之交不超过五个一样,她与身边的人都是从陌生的环境中到达这个城市,大家的友谊的基础并非十分牢固,更关键的是,自顾不暇的学生忙于学习之余是否有那么多的心思去关心一个同学...

可能有人会说,社会上还是好人多,他们会关心她的,可是,大家不要忘记,谦谦君子会保持距离,而抱有不良动机的小人则会美妙的装饰自己,然后不顾一切的靠近自己的猎物,因此,给予她关心的,几乎清一色只有一种人,希望她成为他们女朋友或许情人的人...

她没有错,而社会对她是如此的不公平,表面看,她可以选择,细细的一想,每一个现在看来错误的,引入歧途的决策在当时看来都是无奈之举,下下策中的最优。

一个人张相俊俏,是上天对她的眷恋,而如果俊俏的人,没有一颗纯净的心和雪亮的眼睛,则或许变成悲剧。

无数的人,在我们这个残酷的社会中,每天上演的悲剧中,扮演主角,我们熟视无睹,我们麻木,我们未能照顾好自己,何来时间关心这些“主角”,于是,他们堕落,他们被伤害,他们被淘汰,他们被摧毁。

“主角”在哭诉,社会中的人物,不是看不起我们,而是看不见我们!完全无视我们的苦痛,辛酸,艰难...

当我在阅读《嘉莉妹妹》这本书的过程中,无数次,我在问自己,同样的悲剧在我身边上演多少次?是否还有更残酷,更无情的现实,我们装聋作哑,我们高高在上。或许有,或许我们曾经回避,曾经自欺欺人,但是,悲剧依然存在,知识分子的良知告诉我,如果不是揭露,就是对自己和社会的不负责任。

我的力量过于弱小,我无力抗拒这个无情的社会,但是,我依然要呐喊,依然要为“主角”而申述,希望给予更多的了解和同情。

最后,就是一句话:一个社会的文明程度在于对弱势社群的关怀而非在于大学的数量,一个人的美德在于他对弱者的态度而非他自传中标榜的善举...

《嘉莉妹妹》读后感4

闲来无事,算了柱彩票不中,与双色球无缘,简直毫无规律可言,总是听别人说中多大多大的奖,我觉得不是真实的,下决心不再玩它了,付出太多得到太少,决意要放弃它,至少是暂时的放弃它吧,晚上看了本世界名著,<>是由[美]西奥图.德莱塞/著,刚开始平淡无奇,整个故事也没有大的悬念.

还是对故事做一个简单的描述吧,嘉洛林.米贝登(嘉莉)在她18岁的时候时候从乡村到芝加哥去寻梦,在火车上偶遇杜洛埃,因为纯朴貌美、气质迷人使得杜洛埃搭讪而相互留下联系方式。

嘉洛林.米贝登(嘉莉)在芝加哥,找到了第一份工作是鞋厂的普通女工,工作环境非常恶劣,工人素质差,工作时间也非常长,因此干不下去,而嘉洛林.米贝登(嘉莉)的姐和姐夫也因为生活据拮不愿再收留她,希望她打道回府再回乡村,这时嘉莉偶遇杜洛埃,杜洛埃鼓励嘉莉在这坐城市发展,并承诺对她帮助,嘉莉于是留了下来,杜洛埃租了房并为嘉莉买了新衣鞋等,写到这里,我觉得名著就是名著,我从头到尾没有看到有对嘉莉和杜洛埃的成人描述,呵,搞不懂他们是情人抑或其他的身份,应该该算是情人身份吧,后来杜洛埃将嘉莉介绍给酒店经理赫斯渥,这赫斯渥本来是有家室的人,但对嘉莉一见钟情,下决心要将她搞到手,于是隐瞒其已婚的经历,由于杜洛埃长年从事推销工作,让赫斯渥有机可趁,几经周折,终于鱼儿上钩,当杜洛埃知道赫斯渥与嘉莉的关系,于是告诉赫斯渥已婚的真相,嘉莉为赫斯渥的欺骗感到痛苦并写了分手信,但这老奸巨滑的情场高手竟然用杜洛埃负伤的假消息将嘉莉骗到另一坐城市,同时利用职务之便将保险箱的资金偷走,因害怕被警察追捕退回大部分资金,留一部分的资金用作投资及生活费用。

由于经营不善,赫斯渥很快将资金挥霍一空,在他和嘉莉潇洒了几年后就生活无以为继了,连生活也为钱发愁,赫斯渥因为以前的养尊处优和年龄比较大而找不到工作,嘉莉只得发挥自身特长与爱好当上了演员,结果成了大牌红星,而赫斯渥也因为失去斗志成了乞丐,后来在一个冷寒交加的晚上开煤气自杀。

以上是小说告诉我的信息,我得到的启事就是:

1、对女人而言,要发挥自身的长处,有自己的事业,以前的嘉莉是希望不劳而获,男人养活她,当然她是具备这个资本的,年轻貌美,但是好景不长,在男人有钱的时候成了怨妇,在男人无能的时候也只得养家糊口,杜洛埃、赫斯渥、艾姆斯,是她生命中很重要的人物,杜洛埃、赫斯渥只是将她带上歧途,而艾姆斯却似良师益友,能够发现她的爱好和优点,以欣赏的眼光去指导和帮助她,最后取得了成功,这是很多名女人必经之路。

2、再说说这篇小说对男人的启示吧,一句话,得到一个女人不是件难事,难的是得到一个女人的心,杜洛埃年轻潇洒,乐于助人,但处处留情,而且对结婚这件事从来没认真过,这是嘉莉没有选择他的一个重要原因;赫斯渥虽然年龄大些但也算个风流人物,钱途也多多,常在风月场所的他诡计多端,被爱或者说是被荷尔蒙冲昏了头脑,对嘉莉设计了一个又一个圈套,最后羊入狼口,在爱情上也以胜利告终,但终究在挥霍完偷来的钱后失去了嘉莉,看来女人也非善物,什么爱呀情呀,哈哈,等金钱完了的时候,爱也随之终结,真是中了网上的爱情可以转移,婚姻可以随时冻结......的口号,这个赫斯渥少说也养了嘉莉三、五年了吧,可钱一完,嘉莉立马走人,甚至在她成为红星后在赫斯渥对她乞讨时才舍了七块多钱给他,所以说,女人才是绝情的动物啊,最后赫斯渥在一个寒冷的夜开媒气自杀,死了也无人知晓,被一艘船运去了进行群尸处理,哎,多么悲惨的下场,本来拥有那么好的工作和家庭,为了嘉莉或者他自己的情欲落了个这样的下场,如果嘉莉有知,我相信也不会有泪,当她看到他的那种境遇只舍七块钱就知道她的绝情了,艾姆斯还算个人物吧,可是如果有一天他也落得个赫斯渥一样下场的话是否还有欣赏呢?这个很难说.

一年前看了这小说多好,我觉得每看一篇名著,收获真不少,这不,我也快成这倒楣鬼第二了啊,努力吧,亲爱的自己!

《嘉莉妹妹》读后感5

前几天,妈妈为我买了一本《嘉莉妹妹》,读了它,我仿佛对社会有了一定的了解。它告诉我:现实社会是非常残酷的,没有我想象中的那样简单,它是一个非常复杂的东西。不信?那就让我们一起走进嘉莉妹妹的生活中去吧。

书中塑造了这样一个人物,描述了这样一个故事:嘉莉怀着对大城市物质生活的向往,独自离家闯荡。首先,她住在表姐敏妮家,尝尽苦衷。后来,她以自己的美貌博得了推销员杜洛埃的爱慕,成为他的情妇,逐渐变成了一个挥金如土的阔太太。又由于更大的诱惑跟着酒店经理赫斯渥私奔,由于当时失业的人居多,赫斯渥的酒店也散伙了,工作难找,于是晃荡在家,想靠着嘉莉挣的微薄工资来维持生活。在一次偶然的机会中,嘉莉竟然成了走红的演员,倍受关注,薪水丰厚,挤进了上流社会,并抛弃了家庭逐渐贫困的赫斯渥,以不自觉地残忍将他推上了绝望之路。

故事揭露了资本主义社会繁荣表面底下的失业、贫困和饥饿,对美国贫富对立的社会作了深刻的描写。只有有本事的人将来才能有所作为,才有胆量跟别人竞争,才可能有丰厚的薪水,不至于失业。天啊,现实社会就是那么残酷!知识,是一笔无法掂量的财富,也是一笔无形的财富,成功之神绝不会把灿烂的霞光洒向想不劳而获的人,而给那些有知识,有胆识的人。我坚信,如果你有了一定的知识和胆识,是绝对会得到成功之神的眷顾的!

谨记:不争馒头争口气,将来好要靠自己。我以后一定好好学习,天天向上,做一个有知识,有胆识的人;更要做一个对社会有用的人。今天是祖国的花朵,明天成为祖国的栋梁。

⬕ C++教师工作计划 ⬕

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习;

#include ”stdafx.h“

#include // 包含stdio.h头文件

int main{

printf(”input two integer:“);// 以空格为分隔

scanf(”%d %d“,&a,&b);// 将输入的两个整数分别赋值给a, b

printf(”the max integer is %d.n",max(a,b));// 以整数形式输出最大值, a, b为实际参数(实参)

int max(int num1, int num2){ // num1, num2为形式参数(形参)

if(num1>num2){ // 如果num1大于num2

}

}

”); file://

return strDestCopy;

(A)不检查指针的有效性,说明答题者不注重代码的健壮性。

(B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。

(C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

(A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

(A)循环写成while (*strDest++=*strSrc++);,(B)。

(B)循环写成while (*strSrc!=“id="article-content1">

⬕ C++教师工作计划 ⬕

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很 的难点,那就是函数指针了,本博文详细介绍一下常见的各种 的函数指针。

与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。

变量都包括声明和赋值,指针不例外,函数指针也不例外。我们来看一个简单的函数:

void add(int a, int b){

cout << a + b << endl;

}

一个简单的加法计算并输出到命令行的函数。

那么如何通过函数指针来调用它呢?

1、声明:

void (*p1)(int a, int b);

函数指针的声明很简单,基本就是通过一个指针把函数名替换。指针p1的类型为void (*) (int a,int b),表明指针是一个指向某个函数的指针,指针指向的类型为void (int a,int b)

3、也可以直接定义:

void (*p1)(int a, int b) = add;

注意,函数void add(int a,int b)的函数名add就是函数的地址。将地址add赋值给指针p1,那么就可以通过函数指针p1直接调用函数了。

p1(1, 2);

注意!出于历史原因以上2种方式都是可以调用函数的。

有时候有这种情况,有一个数组,数组中的每个元素都是一个函数指针,该怎么定义这个数组呢?

1、解释*p和(*p)

我们知道,运算符的优先级要高于*,所以,p表示含有3个元素的数组,而*p 前面的 “ * ” 指明了数组中元素的类型,即*p表示一个指向3个指针的数组,

p表示含有3个元素的数组,那么(*p)就是用 *p 替换了 p,很容易想到,(*p) 表示指向一个包含3个元素的数组的指针。

2、声明:

void (*p2)(int a, int b);

数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。

理解上跟上面是一样的。

(*p2)(3,4);

同样是2种方式都可以。

三、指向“包含多个函数指针的数组“的指针

这个标题好像有点拗口。简而言之,这个指针指向上文中的 “包含多个函数指针的数组” 。其实很简单,说白了,就是把上文中的p2用一个指针来代替。

1、声明:

void (*(*p3))(int a, int b);

可以看到,无非就是把p2用*p3代替。

2、赋值,注意,既然是指针,使用前必须初始化:

p3 = &p2;

(*p3) = add;

注意!既然实质上就是把p2用*p3代替,c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3))(int a, int b)= &p2;

((*p3))(1, 2);

⬕ C++教师工作计划 ⬕

搜狗2017C++笔试题

搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

1.关于重载和多态正确的是?

A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

B.选项全部都不正确

C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{

void test(floata){cout<<"1";}

};

class B:public A{

void test(intb){cout<<"2";}

};

A *a=new A;

B *b=new B;

a=b;

a.test(1.1);

结果是1

解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

C中重载在一般函数中也会使用;

D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

A.安排小亮先取硬币;

B.小明或小亮均一定必胜

C.安排自己先取硬币

D.不可能必胜

解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

#include //1

class B//2

{//3

};//4

B func(const B& rhs){//5

return rhs;//6

}//7

int main(int argc,char **argv){//8

B b1,b2;//9

b2=func(b1);//10

}//11

A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B.二次拷贝构造函数,一次析构函数

C.一次(拷贝赋值运算符)operator=,一次析构函数

D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

4.下面代码的输出结果是()

int main(){

int pid;

int num=1;

pid=fork();

if(pid>0){

num++;

printf("in parent:num:%daddr:%x\n",num,&num);

}

else if(pid==0){

printf("in child:num:%daddr:%x\n",num,&num);

}

A.父子进程中输出的num相同,num地址不相同

B.父子进程中输出的num不同,num地址相同

C.父子进程中输出的num相同,num地址也相同

D.父子进程中输出的num不同,num地址不相同

5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

int a=0;

class someClass{

int b;

static int c;

};

int main(){

int d=0;

someClass *p=new someClass();

return 0;

}

A.b存在堆区

B.c存在堆区

C.d存在栈区

D.a存在全局变量区

解析: C应该在全局静态区

6.以下代码段有问题的是()

A.void func1(char *e){

char *p1;

p1=malloc(100);

sprintf(p1,error:"%s'.",e);

local_log(p1);

}

B. int func2(char *filename)

{

FILE *fp;

int key;

fp=fopen(filename,"r");

fscanf(fp,"%d",&key);

return key;

}

C.voidfunc3(char *info){

char *p,*pp;

p=malloc(100);

pp=p;

free(p);

sprintf(pp,*info:"%s'.",info);

free(pp);

}

D.选项全部都正确

解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

7.请问该程序的输出是多少?

#include

int main()

{

unsigned char i=7;

int j=0;

for(;i>0;i-=3)

{

++j;

}

printf("%d\n",j);

return 0;

}

A.2

B.死循环

C.173

D.172

解析:unsigned char 8位数据位,范围0-255,

所以-2(11111110)时,溢出变成254;

同理-1(11111111)时,溢出变成255;

最后减到0时,不满足循环条件,for停止。

刚好173次。

7 4 1 -2 ==>共4次

254 251 ... 5 2 -1 ==>共85次

255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

所以总共173次。(相减相除)

更快捷的计算方法:256*2+7=519=173*3

8.快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

9.下列各树形结构中,哪些是平衡二叉查找树:

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

10.下面哪种数据结构最适合创建一个优先级队列()

A.堆

B.双向链表

C.单向链表

D.栈

11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

A.基数排序

B.快速排序

C.二叉排序

D.堆排序

12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

A35

B.49

C.39

D.45

13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

A. heap

B.queue

C.binary tree

D.stack

14.假设MySQL数据库表:

create table T{

k int unsigned not null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary key(k),unique key a_index (a DESC,b DESC),

key k1(b),key k2(c),key k3(d));

如下哪些sql语句查询能较好的.利用索引?()

A.select bfrom WHERE b like 'aaa%';

B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

山洞的地图如下:

S--------------------T

S是入口

T处有宝箱,打开宝箱之后可能得到的物品有:

1)宝石,出现概率为5%.

2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

3)什么也没有,概率为45%.

S到T的距离为1.

每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

问题:玩家完成任务所走路程的数学期望是()

A.40

B.25

C.35

D.30

16.下面关于TCP的描述,错误的是()

A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

B.TCP客户端和服务器之间建立连接需要经过3次握手

C.只要有一方主动关闭连接后,这个TCP连接就结束了

D.只要有一方主动关闭连接后,这个TCP连接就结束了

17.关于进程和线程描述正确的是()

A.线程不拥有系统资源,但可以访问隶属于进程的资源

B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

C.进程是调度和拥有资源的基本单位

D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

A.CreateThread

B. GetCurrentProcess

C. OpenProcess

D. CreateFile

19. invalidateRect的作用是()

A.擦除一个矩形区域

B.删除一个矩形

C.使一个矩形区域变为无效,从而释放部分GDI资源

D.使一个矩形区域变为无效,从而可以重绘

20.典型的创建Windows窗口过程的流程为:()

A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

参考答案:

1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C

⬕ C++教师工作计划 ⬕

C++实训报告

随着计算机技术的发展,越来越多的人选择学习计算机编程语言,而C++语言作为一种高级编程语言,其应用范围非常广泛,对于想进一步学习编程的人来说,学习了解C++语言是非常必要的。为此,本文在老师的指导下,进行了C++实训学习,得出了一些有关C++语言的一些学习心得和方法。

首先,C++语言的基础知识是非常重要的。在学习C++语言的过程中,我们需要学习基本语法、数据类型、运算符、循环结构、分支结构等等基础知识。对于初学者来说,学习这些知识非常关键,也是需要花费较多时间来掌握的。通过实践,我们发现,掌握了这些基本知识后,不仅可以更好地理解C++语言的编程思想,还能更好地完成编程任务。

其次,C++语言的实际应用也非常丰富。在学习C++语言的过程中,我们需要通过一些实际的编程项目来提高自己的实践技能。例如,可以通过编写简单的计算器程序、打印图形等方式,来熟练掌握C++语言的应用。在这个过程中,我们也需要注意代码的规范性和注释。代码规范的好坏往往会直接影响到程序的运行效果,而注释的添加则有助于更好地理解和维护代码。

再次,C++语言的熟练掌握需要逐步提高。对于初学者来说,熟练掌握C++语言需要花费较多时间和精力。因此,我们可以采取逐步提高的方法。首先,我们可以通过大量的实践来熟悉C++语言的基本使用方法;然后,我们需要学习一些高级用法和技巧,例如面向对象编程、模板编程、异常处理等等。这些高级用法虽然比较难掌握,但是掌握后对于改进程序的性能和效率都有很大的帮助。

最后,对于学习C++语言的初学者来说,我们也需要注意一些学习方法。除了学习基本知识和应用技巧外,我们还需要积极参加一些讨论活动、阅读相关的书籍和文章,以及参与一些实践项目。这些学习方法可以让我们更好地理解C++语言的思想和应用,也可以学习他人的编程思路和经验,有助于我们更好地提高自己的编程能力。

综上所述,学习C++语言需要掌握基础知识、进行实际应用、逐步提高和采取合理的学习方法。通过实践,我深刻地认识到C++语言是一种非常强大的编程语言,熟练掌握后能够编写高效且功能强大的程序,对于我们的职业发展也有很大的帮助。因此,我会继续学习和实践,以便更好地提高自己的编程水平。

⬕ C++教师工作计划 ⬕

c++实践报告书范文2篇

【c++实践报告书例一】

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 MFC课程设计

计算机基础教学实验中心

2015年 06月 14 日

一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基

Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用Visual C++ MFC编程实现以下功能:

b、c,计算并输出两个根x1、x2.

修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。

了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程axb、c,计算并输出两个根x事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的'输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password;

m_user.GetWindowText(c_user);

m_password.GetWindowText(c_password);

if(c_user.IsEmpty()||c_password.IsEmpty())

{

MessageBox("用户名或密码不能为空","用户登录信息");

return;

}

if(c_user=="123"&&c_password=="123")

{

CMyMenu dlg;

dlg.DoModal();//这两段代码是用于调用菜单对话框

}

else

{

MessageBox("用户名或密码不正确","提示",MB_ICONINFORMATION); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

【c++实践报告书例二】

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

题 目 科学计算器应用程序系统 学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2013年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;MFC;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“C”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”CE”,”C”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对CLR与.NET的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向Windows计算器靠拢。可以看到,这个计算器有很多Windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多Bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

⬕ C++教师工作计划 ⬕

struct node *front,*next;

};

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

BOOL DeteleNode(Node *pHeader, DataType Value)

{

if (pHeader == NULL) return;

BOOL bRet = FALSE;

Node *pNode = pHead;

{

{

{

pHeader = pNode->next;

pHeader->front = NULL;

{

{

pNode->next->front = pNode->front;

}

pNode->front->next = pNode->next;

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

bRet = TRUE;

{

pNode = pNode->next;

}

}

return bRet;

}

void DE(Node *pHeadA, Node *pHeadB)

{

if (pHeadA == NULL || pHeadB == NULL)

{

return;

}

Node *pNode = pHeadA;

{

if (DeteleNode(pHeadB, pNode->data))

{

{

pHeadA = pNode->next;

pHeadA->front = NULL;

{

pNode->front->next = pNode->next;

{

pNode->next->front = pNode->front;

}

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

{

pNode = pNode->next;

}

}

}

2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”

int GetCommon(char *s1, char *s2, char **r1, char **r2)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

int maxlen = 0;

for(int i = 0; i < len1; i++)

{

for(int j = 0; j < len2; j++)

{

int as = i, bs = j, count = 1;

while(as + 1 < len1 && bs + 1 < len2 && s1 == s2)

count++;

{

maxlen = count;

*r1 = s1 + i;

*r2 = s2 + j;

}

}

}

}

3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数

char* test3(long num) {

char* buffer = (char*)malloc(11);

buffer = “0”;

buffer = “x”;

buffer = “\0”;

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp = (char)(num<<4*i>>28);

temp = temp >= 0 ? temp : temp + 16;

temp = temp < 10 ? temp + 48 : temp + 55;

}

return buffer;

{

int k = 0, i = 0, j = 0;

int a = 1;

{

while( j < N-k ) s = a++; i++; j--;

while( i < N-k ) s = a++; i--; j--;

while( j >k-1 ) s = a++; i--; j++;

while( i >k ) s = a++; i++; j++;

}

{

cout << s << “ ”;

cout << endl;

}

int matrix;

*/

void SetMatrix(int x, int y, int start, int n) {

int i, j;

return;

matrix = start;

return;

}

for (i = x; i < x + n-1; i++) //矩阵上部

matrix = start++;

for (j = y; j < y + n-1; j++) //右部

matrix = start++;

for (i = x+n-1; i >x; i--) //底部

matrix = start++;

for (j = y+n-1; j >y; j--) //左部

matrix = start++;

SetMatrix(x+1, y+1, start, n-2); //递归

}

void main() {

int i, j;

int n;

scanf(“%d”, &n);

SetMatrix(0, 0, 1, n);

for(i = 0; i < n; i++) {

printf(“%4d”, matrix);

printf(“”);

}

}

if(n==0) return 1;

if(n==1) return 1;

retrurn Funct(n-1) + Funct(n-2);

}

请问,如何不使用递归,来实现上述函数?

请教各位高手!

解答:int Funct( int n ) // n 为非负整数

{

int a=0;

int b=1;

int c;

if(n==0) c=1;

else if(n==1) c=1;

else for(int i=2;i<=n;i++) //应该n从2开始算起

{

c=a+b;

a=b;

b=c;

}

return c;

}

解答:

现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位,

1、原题跟little-endian,big-endian没有关系

2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位

3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为

01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4

{

int i,j;

int found=1;

return -1;

{

found=0;

break;

}

return found;

}

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

{

int flag, i, j = 0;

int *arr = (int *)malloc(n * sizeof(int));

arr = 1;

{

flag = 0;

++flag;

++j;

}

arr = 0;

}

free(arr);

return j;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

{

int index;

struct Node *next;

}JosephuNode;

{

int i, j;

JosephuNode *head, *tail;

head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

{

tail->index = i;

tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

tail = tail->next;

}

tail->index = i;

tail->next = head;

{

{

tail = head;

head = head->next;

}

tail->next = head->next;

printf(“第%4d个出局的人是:%4d号”, i, head->index);

free(head);

head = tail->next;

}

i = head->index;

free(head);

return i;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

}

已知strcpy函数的原型是:

char * strcpy(char * strDest,const char * strSrc);

1.不调用库函数,实现strcpy函数。

2.解释为什么要返回char *。

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL)) file://

throw “Invalid argument(s)”; //

char * strDestCopy=strDest; file://

while ((*strDest++=*strSrc++)!=“\0”); file://

return strDestCopy;

(A)不检查指针的有效性,说明答题者不注重代码的健壮性。

(B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。

(C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

(A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

(A)循环写成while (*strDest++=*strSrc++);,(B)。

(B)循环写成while (*strSrc!=“\0”) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上“\0”。

⬕ C++教师工作计划 ⬕

求输出的结果
#include
using namespace std;
class Base
{
public:
    void func(const char* str){cout << "Base: " << str << endl;}
virtual void func(int num){cout << "Base: " << num << endl;}
};
class Derived : public Base
{
public:
    void func(const char* str){cout << "Derived: " << str << endl;}
void func(int num){cout << "Derived: " << num << endl;}
void func(){cout << "The Function is in Derived!" << endl;}
};
int main()
{
  Base *pB;
Derived ObjD;
pB = ObjD;
pB->func(11);
pB->func("Hello");
// pB->func();
getchar();
return 0;
}

⬕ C++教师工作计划 ⬕

华为笔试题 - 华为C/C++笔试题(面试题)

oo1、局部变量能否和全局变量重名?

oo答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

oo

oo2、如何引用一个已经定义过的全局变量?

oo 答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

oo

oo

oo3、全局变量定义在可被多个.C文件包含的.头文件中可不可以?为什么?

oo答:可以,但要加static

oo

oo4、语句for( ;1 ;)有什么问题?它是什么意思?

oo答:死循环,同while(1),这种写法并不规范,可读性差,一般不用

oo

oo5、do……while和while……do有什么区别?

oo答:前一个循环一遍再判断,后一个判断以后再循环

oo

oo6、请写出下列代码的输出内容

oo#include

oomain()

oo{

ooint a,b,c,d;

ooa=10;

oob=a++;

ooc=++a;

ood=10*a++;

ooprintf("b,c,d:%d,%d,%d",b,c,d);

ooreturn 0;

oo}

oo答:10,12,120

oo

oo7.static函数与普通函数有什么区别?

oo只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

oo

oo8.static全局变量与普通的全局变量有什么区别?

oo全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

oo 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

oo

oo9.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆 )中。

oo

oo10.设有以下说明和定义:

ootypedef union {long i; int k[5]; char c;} DATE;

oostruct data { int cat; DATE cow; double dog;} too;

ooDATE max;

oo则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____

oo

oo11.队列和栈有什么区别?

oo队列先进先出,栈后进先出

oo

oo12.写出下列代码的输出内容

oo#include

ooint inc(int a)

oo{

ooreturn(++a);

oo}

ooint multi(int*a,int*b,int*c)

oo{

ooreturn(*c=*a**b);

oo}

ootypedef int(FUNC1)(int in);

ootypedef int(FUNC2) (int*,int*,int*);

oo

oovoid show(FUNC2 fun,int arg1, int*arg2)

oo{

ooINCp=&inc;

ooint temp =p(arg1);

oofun(&temp,&arg1, arg2);

ooprintf("%d ",*arg2);

oo}

oo

oomain()

oo{

ooint a;

ooshow(multi,10,&a);

ooreturn 0;

oo}

oo

oo翻译一下

oo==================================

oo#include

oousing namespace std;

oo

oo// 返回a + 1

ooint inc(int a){

ooreturn a+1;

oo}

oo// out = a*b

ooint multi(int& a, int& b, int& out){

ooreturn out = a*b;

oo}

oo

oo// 定义两种函数,FUNC1对应inc, FUNC2对应 multi

ootypedef int(FUNC1) (int in);

ootypedef int(FUNC2) (int&,int&,int&);

oo

oo// 诡异的函数,这是模糊C大赛么...

oovoid show( FUNC2* func, int num, int& out ){

ooFUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义

ooint numAdd1 = pInc( num );

oo// 等价于 numAdd1 = inc( num );

oo// 结果 num仍然是10, numAdd1 = 11

oo

oo// 调用func函数,可以看到, main中传给func的是 multi.

oo// 所以调用的是 multi( 11, 10, out ), out = 110

oofunc( numAdd1, num, out );

oocout

oo

ooint main(){

ooint a;

ooshow(multi,10, a);

ooreturn 0;

oo}

oo==================================

oo

oo13.请找出下面代码中的所以错误

oo说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

oo==================================

oomain(){

oochar*src="hello,world";

oochar* dest=NULL;

oo

ooint len=strlen(src);

oodest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括

oo

oochar* d = dest;

oochar* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]

oowhile( len-- != 0 )

ood++=s--;//!3 *d++ = *s--;

oo//!4 尾部要 ,应加上 *d = 0;

oo

ooprintf("%s",dest);

ooreturn 0;

oo}

oo==================================

oo

oo修正后的答案:

oo==================================

ooint main(){

oochar* src = "hello,world";

oo

ooint len = strlen(src);

oochar* dest = (char*)malloc(len+1);.

oo

oochar* d = dest;

oochar* s = &src[len-1];

oowhile( len-- != 0 )

oo*d++=*s--;

oo*d = 0;

oo

ooprintf("%s",dest);

⬕ C++教师工作计划 ⬕

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include 和 #include “filename.h” 有什么区别?(5 分)

答:对于#include ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量,(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的'名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i {

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i DoSomething();

}

else

{

for (i=0; i DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

⬕ C++教师工作计划 ⬕

pS:答案是本人随笔所写,可能不全甚至错误!

请不要盲目将其作为标准答案,不当之处,请指正,谢谢。

C++/MFC 试题

一.填空题 (26 分 )

1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。 (3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;

2 .请给出如下程序的结果 (2 分 )

int a = 3;

int b = a << 3; /// 00000011左移三位为00011000,即24

a = __3__ , b = __24__ 。

3 .请 给出如下程序的结果 (2 分 )

int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分)

#define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心

则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 )

char szTemp[1000] = "";

int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\

strcpy(szTemp, "abc");

int nLen3 = sizeof(szTemp);

int nLen4 = strlen(szTemp);

int nTemp[100];

int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = "";

sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);

则 szResult = _1000,0,1000,3,04___ 。

CObject 、 CWinApp 、 CWnd )? (2 分 )__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CpU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程___(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递

{

char szTemp[10] = "";

x = 2;

sprintf(szTemp, "%d,", x);

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

int x = 4;

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

void bbb()

{

char szTemp[10] = "";

int x = 7;

ccc(x);

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

二.改错题 ( 总共 15 分 , 每题 5 分 )。

1 .下面代码有何错误

void func1()

{

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

pa; /// pa仍然是空指针,pb申请的`空间并没有被掉

}

void func2(int *pb)

{

pb = new int(5); /// pb重新申请了堆空间

}

2 .下面代码有何错误

void func2(int *value)

{

*value = 2; /// value为空指针,不能被取值,所以*value是错误的

}

void func1()

{

int *p = 0;

func2(p);

}

3 .

int func1(int& b) /// 参数b的类型是整型

{

return 0;

}

void func2()

{

int bbb = 3;

func1(&bbb); /// 函数参数的引用调用不需要用符号"&"

func1(bbb);

}

func2 中有何错误, func1 的参数 b 的类型是什么。

三.简答题 (64 分 )

pS:以下答案是随笔所写,请读者做进一步的深入了解。

C++ 、 VC 、 MFC 在概念上的区别 (4 分 )

答:C是面向过程编程的语言;

C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows ApI函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 )

答:

int add(int a,int b)

{

return (a + b);

}

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。

floatadd(float a,float b)

{

return (a + b);

}

线程。 (4 分 )

答:Createproccess()创建进程;

CreateThread()创建线程

MFC中还提供了_beginthread()与_beginthreadex()函数创建线程

4.SendMessage 和 postMessage 有什么区别 (4 分 )

答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。

postMessage:发送消息后不等待消息处理即继续执行自身的程序。

5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。 (4 分 )

答:WaitForSingleObject是表示等待线程的一个函数。

参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。

__cdecl 、 __pascal 在什么方面有所不同。 (4 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive parameter order Clean-up passes parameters in registers?

pascal Left-to-right Routine No

cdecl Right-to-left Caller No

stdcall Right-to-left Routine No

7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

int nLen = strText.GetLength();

myFile.Write((char*)(LpCSTR)strText, nLen);

myFile.Close();

return nRet;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LpCSTR)strText, nLen);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

}

__finaly

{

myFile.Close();

}

return nRet;

}

8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少? (6 分 )

typedef int (*func)(int, int*);

int xxx(int a, int *p)

{

return a + *p;

}

int dowork(func aaa, int bbb, int *ccc)

{

return aaa(bbb, ccc);

}

int sss = 4;

int ttt = dowork(&xxx, 3, &sss);

答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为7

9 .请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多少? (6 分 )

class Fruit

{

public:

Fruit()

{

weight = 2;

}

Fruit(int w)

{

weight = w;

}

int operator+(Fruit f)

{

return this->weight * f.weight;

}

private:

int weight;

};

Fruit aaa;

Fruit bbb(4);

int ccc = aaa + bbb;

答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10. 请解释下面代码采用了何种 C++ 特性( C 语言不具备),作用是什么? (6 分 )

template

T sum(T a, T b)

{

return (a + b);

}

答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。

11 .请解释 aaa.h 中下面代码的功能 (5 分 )

#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)

#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_

... ...

#endif

答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。

12 . CMemoryState 主要功能是什么 (5 分 )

答:用于检测内存泄露。

13 .请阅读下述代码,写出程序执行的结果( 6 分)

#include

using namespace std;

class CBase

{

public:

virtual void print()

{

cout<< "base" << endl;

}

void Doprint()

{

print();

}

};

class CChild1: public CBase

{

public:

⬕ C++教师工作计划 ⬕


这本书主要讲了:嘉莉十八岁那年她就独自一人从自己的家乡离开,去往芝加哥生活。她向往物质生活,所以才离开家乡的。读完这本书,我觉得嘉莉只是沉浸在自己追求的生活和想象之中,她从未替别人着想过。她的这种性格是由于贫困所造成的。自己一无所有,却只是期求这幸福。下面为大家精心整理了一些关于《嘉莉妹妹》读后感,请您阅读。

《嘉莉妹妹》读后感1

《嘉莉妹妹》中的主人公便是嘉莉。她出生在一个普通的家庭,有一个疼爱自己的姐姐,也有一个一毛不拔的姐夫。

在小嘉莉刚满16岁时,她便做出决定,要出去闯荡闯荡,于是她独自一人,踏上了火车之旅,来到了姐姐家。在去姐姐家的路上,她碰到了一个奇怪的人——杜埃。杜埃是一家公司的推销员。他告诉嘉莉,如果你在这儿感到陌生的话,我可以帮你。后来杜埃看着嘉莉安全的到家后,才转身离开。然而就是因为杜埃对嘉莉的这一份情谊,却让嘉莉一举成了大明星。

嘉莉是一个酷爱话剧的女孩儿,所以杜埃经常带着她去大大小小的剧院去欣赏话剧。而杜埃也渐渐喜欢上了这个沉迷于戏剧的女孩儿,于是他决定,一定要让嘉莉一举成名!

嘉莉的星路旅程,也就从此拉开了帷幕。她从扮演一个从不被人注意的配角儿到扮演一个赫赫有名的大明星,她付出了常人无法想象,无法接受的苦难。大街小巷都贴着她的海报,每个剧院都放着她演过的话剧。而杜埃呢?他为了完成嘉莉的梦想,以涉嫌诈骗而被捕获,五年后,他出狱了,当他看到嘉莉时他惊呆了!嘉莉成名了,而他呢?却是一个丢了金钱、权利、地位、亲情和爱情的穷光蛋!

当我看完整本书时,我感到有一种罪恶感围绕在我的身边,我有过要为梦想执着奋斗的想法吗?就算有,我又有想过要实现它吗?我没有,我突然觉得自己太懦弱了,连最简单的现实都不敢去面对,还能有什么理由去面对呢?我恨我自己,为什么天生就是这样,为什么天生就没有改变自己的权利,我真的受够了!

我要改变,去坚强,去勇敢,去闯练,可我该怎么做呢?我依然还歪着脑袋深思着这个问题。

《嘉莉妹妹》读后感2

这本书感觉真的很现实!它把人的冷漠,自私剖析的非常透彻,又把巨大的社会现状不加掩饰的展现出来!

它有很多和其他经典相似的地方,又在相似中个性鲜明!

女主人公嘉莉和《飘》中的思嘉很像,性格都那么贪图享乐,别人有的自己也一定要有,却也都在现实的不幸中努力生存。不同的是思嘉在最困难中没有丢下媚兰,而嘉莉却丢下了伍德,她的善良在人物口口传递中是如此的苍白无力、如此虚伪,也更体现了时代的冷漠与自私。

男主人公伍德到纽约后的遭遇感觉像是中国女版的月牙儿。一个是被生活被社会拖到了尽头,为了吃饭沦为了暗娼;一个是为了活着仅仅是活着变成了乞丐。他们都没有错,他们都会干活都有谋生的能力,却被社会现实剥夺了谋生的权利!伍德的事业由兴到败又很像《林家铺子》,都是在变革中求生存,都有着短暂生存的回光返照,却最终因为现实社会中的大势,一个破产逃难,一个死于饥饿。

结构中的对比很突出。故事情节在大的方向中出现极端的结局。主人公们的性格并不算突出,甚至很大众。这一点和《巴黎圣母院》不同。它的最大特点也是对比,却是从人物的本身入手。如果说《巴》的场景感觉像是一幅流动的夸张的话剧,而它的感觉就像固定的一个个画面突出的展现,仅仅从这些瞬间的画面中就可以窥视到整个社会氛围和现状!

画面一,嘉莉刚到姐姐的小小的家时,姐姐明妮忙里忙外不停的劳作,姐夫杰森下班后看报纸的简单,还有嘉莉哄小孩时的无可奈何。那种晦涩的、阴暗的、忙碌的底层人民的生存实景一目了然。

画面二,伍德骗嘉莉私奔时,只差四分钟火车就开了的紧迫感;给赶车人多加一块钱时的急切;检票员过来时的慌乱和将要窒息的情绪波动。这一气呵成的长轴画卷,很刺激很丰富!

画面三,嘉莉在找工作时的胆怯、彷徨无注,那种羡慕、那种向往在现实面前的不堪一击,站在芝加哥商业区大街的中央,此地虽大却没有她的容身之地,仿佛可以看见那双无助、凄凉的眼神!

画面四,伍德在内的一群乞丐争抢着上尉抛洒的钱币,生存在尽头中的游弋。人群的喧哗与乞丐的悲鸣,上尉的高高在上,与伍德小心守护的自尊心,那么热闹的场面我却感觉寂静的可怕!

画面五,也是画面感最强的一幅画。伍德在乱石中不熟练的开着电车,旁边两个警察又骂又打的驱赶罢工人群,而愤怒的人群不断的冲破警察的封锁,试图扯下临时电车司机伍德,还有个小女孩在人群外冲着伍德做鬼脸。好一幅愤怒的画卷!

最后的画面,伍德把自己安顿好,打开煤气…… 明明是死亡的冷峻,我却看到了想要生存的无奈,他已经连一顿饭也乞不到了……

灰色的冬季,天空中飘下纯白的雪花,覆盖住这份寒冷的孤寂吧!

《嘉莉妹妹》读后感3

18岁的嘉罗琳(嘉莉)离开自己的父母,到芝加哥找姐姐,想谋求一份适合自己的工作。虽然之前曾经去过姐姐家一次,但毕竟对城市生活非常陌生。在火车上,被推销员德鲁埃认识,互相交换了在芝加哥的地址。

到达姐姐家后,找工作十分的不顺利,曾经在一个每周收入只有四块半的鞋厂工作,但是,在给姐姐交完每周四块钱的食宿费后,只有五角钱的使用空间,而这些,并没有阻挡住对城市灯红酒绿生活的向往,富人生活的诱惑始终在吸引着她,但是,出路在哪里呢?

由于工作的辛苦,淋雨病到后,这唯一的工作也就没有了。姐夫无法得到应得的食宿费补贴家用,让嘉罗琳产生回老家的念头。推销员德鲁埃在找到嘉莉后,了解她的情况,愿意资助她,又鼓起了她继续待在城市的念头。嘉莉给姐姐留了一张纸条后,就和德鲁埃一起在租住一个公寓里。

从此以后,嘉莉就在德鲁埃的影响下,开始去适应城市生活,去看演出、吃饭等,此时的她,认为有钱的日子真舒服,也感到非常的幸福。这是她到芝加哥之后第一次感到幸福,特别是透过阳台的窗户,看到路边走过的,曾和她在鞋店工作类似的女工时,她非常满足目前的物质生活。

通过德鲁埃,嘉莉也认识了酒店经理赫斯特伍德。相对对城市生活不太陌生的嘉莉发现,赫斯特伍德其实比德鲁埃更风趣幽默,更善解人意。其实要知道,他们两人的区别,主要是由于工作的不同,人物性格也就不同,而这些,嘉莉她不知道。

在德鲁埃外出工作时,她发现自己和赫斯特伍德非常谈的来,频频的约会,心中会时不时地想起赫斯特伍德。但是,这种变化被德鲁埃发现后,告诉她,赫斯特伍德是有妻子和孩子的,嘉莉发觉自己受到了欺骗,准备疏远赫斯特伍德。

赫斯特伍德是有妻子和孩子,但是追逐物质享受和交际的妻子,没有和丈夫有过多的交流,赫斯特伍德和妻子的生活没有激情。嘉莉的纯洁让他心动,可是自己的资产都在妻子名下,钱的问题让赫斯特伍德非常尴尬。

为了和心动的人在一起,为了不受到妻子的讽刺挖苦,逃。赫斯特伍德一心想和嘉莉远离这个让他痛苦和烦闷的家,让嘉莉离开德鲁埃和自己在一起。一天营业结束后,赫斯特伍德拿了酒店的营业款10000美元,当夜找到嘉莉,欺骗她德鲁埃受伤把她拉上了开往蒙特里尔的火车。

虽然离开了芝加哥,但是,侦探的到来还是让赫斯特伍德交出了大部分公款,同时,为了避免遇到昔日的熟人,他们到达纽约。

纽约的生活水平,让赫斯特伍德认为必须找到一份合适的工作,否则的话,留下的钱无法长久满足嘉莉日常的开销,毕竟嘉莉没有太多城市工作的经验,生活的压力目前不应该让她有。

赫斯特伍德把留下钱的一大部分与别人合伙开了一个酒店,他负责经营。工作忙碌的他,渐渐没有时间陪在嘉莉身边,嘉莉打发时间,认识了新来的邻居万斯先生和夫人。他们三人会到百老汇吃饭、看演出。嘉莉意识到,在百老汇大街上游玩的人,才是真正的有钱人,他们不是单单地来游玩,是来摆阔的,让嘉莉非常羡慕。

可是,赫斯特伍德合伙的生意受骗了,两人的生活开始拮据起来,经常为一些琐碎的事发生争吵。接连半年多的时间,逐渐年老的赫斯特伍德也没有找到工作,也丧失了继续工作的热情。无奈之下,嘉莉想起在芝加哥时,自己曾有过一次登台演出的经历,当时是帮助德鲁埃给别人许下的诺言,挽回了德鲁埃的面子。

功夫不负有心人,嘉莉从合唱歌舞队开始了她的舞台生涯。由于她热情的投入,迅速地得到经理的认可和提拔。在开始的一段时间里,她还用自己的钱照顾赫斯特伍德,但是她发现,赫斯特伍德沾染上赌博的毛病,让她恼火。在给赫斯特伍德留下一部分钱后,和一个女同伴在外边单独租了一个住处。

嘉莉的演出工作,一直比较顺利,慢慢地,她也成了百老汇出名的女演员。离开嘉莉的赫斯特伍德,最后也死去了。出名后的嘉莉,车马有了,豪华的住处也有了,银行的存款也有了,请她吃饭、玩的朋友也非常多,但是她觉得自己并不幸福,她会一个人静静地坐在躺椅上,看着窗外,她觉得,物质生活满足的她,非常孤单。

这个故事描述的19世纪末的美国大都市,跟我们现在所处的中国十分相似;而文中的嘉莉妹妹,跟我的一个朋友的处境也似乎有许多共同之处,同样的在大都市中找不到安身立命之本,同样不愿意把命运交在别人的手中,却无法拒绝别人的好意和诱惑。只是嘉莉妹妹的结局过于完美,她可以得到自己想要的东西,名誉,事业,社会地位和爱情。我想说的是,嘉莉的才华或许很高,嘉莉的运气或许十分好,嘉莉所处的时代或许有很多机会给她平步青云,嘉莉确实的有一个美妙的结局,但是,平心而论,成功的机会太少了,真的几乎不可能出现...

我们的社会,给予的机会太少,给予的压迫太多;给予的友善太少,给予的欺诈太多。

我的朋友切身的经验,让我真切的了解到一个弱女子能在一个陌生的城市立足,是多么的不容易,她需要面对那么多的困难,苦难...另外一个方面,她要抵制那么多的诱惑,好奇...

大家设身处地的想想,一个涉世未深的学生,来到一个陌生的大都市,举目无亲,一方面是在声色犬马面前的自卑,另一方面是自己的青春美丽所引来无数倾慕者而带来的自信,怎么在两者之间取得平衡,没有人会教涉世未深的学生,没有人有类似的经验,即使有一个那样的“她”存在,“她”能否遇见该涉世未深的学生,即使遇见了,涉世未深的学生能否听从一个同样陌生的“她”的意见呢?所有的一切,都是那么的不能确定,我们就有了结论,一个人要一直在这个纷繁负责的社会作出正确的决定,是多么的艰难,对于一个意志坚定的人,尚且如此,如果是一个物质化的人,是一个追求享乐的人,希望她保持自己的操守,保持自己的贞洁,保持自己良心在大多数时候的纯净,似乎过于艰难了。

可能有人会说,她可以寻求父母的指引,可是正如嘉莉妹妹只能依靠自己一样,她怎么可能询问远在百里之外的年老双亲的指引,双亲的世界跟她的世界是有如此大的差别,指望父母给她正确的指引,无疑不切实际...

可能有人会说,她可以寻求朋友的协助,可是正如嘉莉妹妹在芝加哥和纽约多年,也仅仅有点头之交不超过五个一样,她与身边的人都是从陌生的环境中到达这个城市,大家的友谊的基础并非十分牢固,更关键的是,自顾不暇的学生忙于学习之余是否有那么多的心思去关心一个同学...

可能有人会说,社会上还是好人多,他们会关心她的,可是,大家不要忘记,谦谦君子会保持距离,而抱有不良动机的小人则会美妙的装饰自己,然后不顾一切的靠近自己的猎物,因此,给予她关心的,几乎清一色只有一种人,希望她成为他们女朋友或许情人的人...

她没有错,而社会对她是如此的不公平,表面看,她可以选择,细细的一想,每一个现在看来错误的,引入歧途的决策在当时看来都是无奈之举,下下策中的最优。

一个人张相俊俏,是上天对她的眷恋,而如果俊俏的人,没有一颗纯净的心和雪亮的眼睛,则或许变成悲剧。

无数的人,在我们这个残酷的社会中,每天上演的悲剧中,扮演主角,我们熟视无睹,我们麻木,我们未能照顾好自己,何来时间关心这些“主角”,于是,他们堕落,他们被伤害,他们被淘汰,他们被摧毁。

“主角”在哭诉,社会中的人物,不是看不起我们,而是看不见我们!完全无视我们的苦痛,辛酸,艰难...

当我在阅读《嘉莉妹妹》这本书的过程中,无数次,我在问自己,同样的悲剧在我身边上演多少次?是否还有更残酷,更无情的现实,我们装聋作哑,我们高高在上。或许有,或许我们曾经回避,曾经自欺欺人,但是,悲剧依然存在,知识分子的良知告诉我,如果不是揭露,就是对自己和社会的不负责任。

我的力量过于弱小,我无力抗拒这个无情的社会,但是,我依然要呐喊,依然要为“主角”而申述,希望给予更多的了解和同情。

最后,就是一句话:一个社会的文明程度在于对弱势社群的关怀而非在于大学的数量,一个人的美德在于他对弱者的态度而非他自传中标榜的善举...

《嘉莉妹妹》读后感4

闲来无事,算了柱彩票不中,与双色球无缘,简直毫无规律可言,总是听别人说中多大多大的奖,我觉得不是真实的,下决心不再玩它了,付出太多得到太少,决意要放弃它,至少是暂时的放弃它吧,晚上看了本世界名著,<>是由[美]西奥图.德莱塞/著,刚开始平淡无奇,整个故事也没有大的悬念.

还是对故事做一个简单的描述吧,嘉洛林.米贝登(嘉莉)在她18岁的时候时候从乡村到芝加哥去寻梦,在火车上偶遇杜洛埃,因为纯朴貌美、气质迷人使得杜洛埃搭讪而相互留下联系方式。

嘉洛林.米贝登(嘉莉)在芝加哥,找到了第一份工作是鞋厂的普通女工,工作环境非常恶劣,工人素质差,工作时间也非常长,因此干不下去,而嘉洛林.米贝登(嘉莉)的姐和姐夫也因为生活据拮不愿再收留她,希望她打道回府再回乡村,这时嘉莉偶遇杜洛埃,杜洛埃鼓励嘉莉在这坐城市发展,并承诺对她帮助,嘉莉于是留了下来,杜洛埃租了房并为嘉莉买了新衣鞋等,写到这里,我觉得名著就是名著,我从头到尾没有看到有对嘉莉和杜洛埃的成人描述,呵,搞不懂他们是情人抑或其他的身份,应该该算是情人身份吧,后来杜洛埃将嘉莉介绍给酒店经理赫斯渥,这赫斯渥本来是有家室的人,但对嘉莉一见钟情,下决心要将她搞到手,于是隐瞒其已婚的经历,由于杜洛埃长年从事推销工作,让赫斯渥有机可趁,几经周折,终于鱼儿上钩,当杜洛埃知道赫斯渥与嘉莉的关系,于是告诉赫斯渥已婚的真相,嘉莉为赫斯渥的欺骗感到痛苦并写了分手信,但这老奸巨滑的情场高手竟然用杜洛埃负伤的假消息将嘉莉骗到另一坐城市,同时利用职务之便将保险箱的资金偷走,因害怕被警察追捕退回大部分资金,留一部分的资金用作投资及生活费用。

由于经营不善,赫斯渥很快将资金挥霍一空,在他和嘉莉潇洒了几年后就生活无以为继了,连生活也为钱发愁,赫斯渥因为以前的养尊处优和年龄比较大而找不到工作,嘉莉只得发挥自身特长与爱好当上了演员,结果成了大牌红星,而赫斯渥也因为失去斗志成了乞丐,后来在一个冷寒交加的晚上开煤气自杀。

以上是小说告诉我的信息,我得到的启事就是:

1、对女人而言,要发挥自身的长处,有自己的事业,以前的嘉莉是希望不劳而获,男人养活她,当然她是具备这个资本的,年轻貌美,但是好景不长,在男人有钱的时候成了怨妇,在男人无能的时候也只得养家糊口,杜洛埃、赫斯渥、艾姆斯,是她生命中很重要的人物,杜洛埃、赫斯渥只是将她带上歧途,而艾姆斯却似良师益友,能够发现她的爱好和优点,以欣赏的眼光去指导和帮助她,最后取得了成功,这是很多名女人必经之路。

2、再说说这篇小说对男人的启示吧,一句话,得到一个女人不是件难事,难的是得到一个女人的心,杜洛埃年轻潇洒,乐于助人,但处处留情,而且对结婚这件事从来没认真过,这是嘉莉没有选择他的一个重要原因;赫斯渥虽然年龄大些但也算个风流人物,钱途也多多,常在风月场所的他诡计多端,被爱或者说是被荷尔蒙冲昏了头脑,对嘉莉设计了一个又一个圈套,最后羊入狼口,在爱情上也以胜利告终,但终究在挥霍完偷来的钱后失去了嘉莉,看来女人也非善物,什么爱呀情呀,哈哈,等金钱完了的时候,爱也随之终结,真是中了网上的爱情可以转移,婚姻可以随时冻结......的口号,这个赫斯渥少说也养了嘉莉三、五年了吧,可钱一完,嘉莉立马走人,甚至在她成为红星后在赫斯渥对她乞讨时才舍了七块多钱给他,所以说,女人才是绝情的动物啊,最后赫斯渥在一个寒冷的夜开媒气自杀,死了也无人知晓,被一艘船运去了进行群尸处理,哎,多么悲惨的下场,本来拥有那么好的工作和家庭,为了嘉莉或者他自己的情欲落了个这样的下场,如果嘉莉有知,我相信也不会有泪,当她看到他的那种境遇只舍七块钱就知道她的绝情了,艾姆斯还算个人物吧,可是如果有一天他也落得个赫斯渥一样下场的话是否还有欣赏呢?这个很难说.

一年前看了这小说多好,我觉得每看一篇名著,收获真不少,这不,我也快成这倒楣鬼第二了啊,努力吧,亲爱的自己!

《嘉莉妹妹》读后感5

前几天,妈妈为我买了一本《嘉莉妹妹》,读了它,我仿佛对社会有了一定的了解。它告诉我:现实社会是非常残酷的,没有我想象中的那样简单,它是一个非常复杂的东西。不信?那就让我们一起走进嘉莉妹妹的生活中去吧。

书中塑造了这样一个人物,描述了这样一个故事:嘉莉怀着对大城市物质生活的向往,独自离家闯荡。首先,她住在表姐敏妮家,尝尽苦衷。后来,她以自己的美貌博得了推销员杜洛埃的爱慕,成为他的情妇,逐渐变成了一个挥金如土的阔太太。又由于更大的诱惑跟着酒店经理赫斯渥私奔,由于当时失业的人居多,赫斯渥的酒店也散伙了,工作难找,于是晃荡在家,想靠着嘉莉挣的微薄工资来维持生活。在一次偶然的机会中,嘉莉竟然成了走红的演员,倍受关注,薪水丰厚,挤进了上流社会,并抛弃了家庭逐渐贫困的赫斯渥,以不自觉地残忍将他推上了绝望之路。

故事揭露了资本主义社会繁荣表面底下的失业、贫困和饥饿,对美国贫富对立的社会作了深刻的描写。只有有本事的人将来才能有所作为,才有胆量跟别人竞争,才可能有丰厚的薪水,不至于失业。天啊,现实社会就是那么残酷!知识,是一笔无法掂量的财富,也是一笔无形的财富,成功之神绝不会把灿烂的霞光洒向想不劳而获的人,而给那些有知识,有胆识的人。我坚信,如果你有了一定的知识和胆识,是绝对会得到成功之神的眷顾的!

谨记:不争馒头争口气,将来好要靠自己。我以后一定好好学习,天天向上,做一个有知识,有胆识的人;更要做一个对社会有用的人。今天是祖国的花朵,明天成为祖国的栋梁。

⬕ C++教师工作计划 ⬕

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习;

#include ”stdafx.h“

#include // 包含stdio.h头文件

int main{

printf(”input two integer:“);// 以空格为分隔

scanf(”%d %d“,&a,&b);// 将输入的两个整数分别赋值给a, b

printf(”the max integer is %d.n",max(a,b));// 以整数形式输出最大值, a, b为实际参数(实参)

int max(int num1, int num2){ // num1, num2为形式参数(形参)

if(num1>num2){ // 如果num1大于num2

}

}

”) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上“id="article-content1">

⬕ C++教师工作计划 ⬕

学习c++的过程中,指针是难点,熟悉了指针之后,还有一个让人很 的难点,那就是函数指针了,本博文详细介绍一下常见的各种 的函数指针。

与数据一样,函数也有地址,函数的地址就是内存中存放函数语言代码的起始地址。函数指针就是指向这个地址。函数指针所指向的类型,就是函数本身。我们知道,指针所指向类型代表了指针所指向的内存区域的大小。所以函数指针所指向的类型,就是函数在内存中所占据内存的大小。知道了函数的起始地址和大小,所以函数指针可以很轻易的代替函数完成函数调用。

变量都包括声明和赋值,指针不例外,函数指针也不例外。我们来看一个简单的函数:

void add(int a, int b){

cout << a + b << endl;

}

一个简单的加法计算并输出到命令行的函数。

那么如何通过函数指针来调用它呢?

1、声明:

void (*p1)(int a, int b);

函数指针的声明很简单,基本就是通过一个指针把函数名替换。指针p1的类型为void (*) (int a,int b),表明指针是一个指向某个函数的指针,指针指向的类型为void (int a,int b)

3、也可以直接定义:

void (*p1)(int a, int b) = add;

注意,函数void add(int a,int b)的函数名add就是函数的地址。将地址add赋值给指针p1,那么就可以通过函数指针p1直接调用函数了。

p1(1, 2);

注意!出于历史原因以上2种方式都是可以调用函数的。

有时候有这种情况,有一个数组,数组中的每个元素都是一个函数指针,该怎么定义这个数组呢?

1、解释*p和(*p)

我们知道,运算符的优先级要高于*,所以,p表示含有3个元素的数组,而*p 前面的 “ * ” 指明了数组中元素的类型,即*p表示一个指向3个指针的数组,

p表示含有3个元素的数组,那么(*p)就是用 *p 替换了 p,很容易想到,(*p) 表示指向一个包含3个元素的数组的指针。

2、声明:

void (*p2)(int a, int b);

数组名为p2,数组大小为2,数组中元素类型为void (*)(int a, int b),表明元素是一个指向某个函数的指针,指针指向的类型为void () (int a,int b)。

理解上跟上面是一样的。

(*p2)(3,4);

同样是2种方式都可以。

三、指向“包含多个函数指针的数组“的指针

这个标题好像有点拗口。简而言之,这个指针指向上文中的 “包含多个函数指针的数组” 。其实很简单,说白了,就是把上文中的p2用一个指针来代替。

1、声明:

void (*(*p3))(int a, int b);

可以看到,无非就是把p2用*p3代替。

2、赋值,注意,既然是指针,使用前必须初始化:

p3 = &p2;

(*p3) = add;

注意!既然实质上就是把p2用*p3代替,c++11可以很简单的这样直接定义:auto p3 = &p2; 代替了void (*(*p3))(int a, int b)= &p2;

((*p3))(1, 2);

⬕ C++教师工作计划 ⬕

搜狗2017C++笔试题

搜狗2017C++笔试题有哪些呢?以下是CN人才网小编为大家整理的搜狗2017C++笔试题,欢迎阅读参考。

1.关于重载和多态正确的是?

A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法时,实际调用的是子类的方法;

B.选项全部都不正确

C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用

D.

class A{

void test(floata){cout<<"1";}

};

class B:public A{

void test(intb){cout<<"2";}

};

A *a=new A;

B *b=new B;

a=b;

a.test(1.1);

结果是1

解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;

C中重载在一般函数中也会使用;

D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数为virtual,则输出2

2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个数分别是12,13时,小明应该如何安排策略才能必定获得胜利?

A.安排小亮先取硬币;

B.小明或小亮均一定必胜

C.安排自己先取硬币

D.不可能必胜

解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中取相同的个数,则可保证自己会取胜,因为两堆都是12个。

3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生

#include //1

class B//2

{//3

};//4

B func(const B& rhs){//5

return rhs;//6

}//7

int main(int argc,char **argv){//8

B b1,b2;//9

b2=func(b1);//10

}//11

A.一次默认构造函数,一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

B.二次拷贝构造函数,一次析构函数

C.一次(拷贝赋值运算符)operator=,一次析构函数

D.一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解析:b2=func(b1),首先b1作为形参传递到const B& rhs,会发生拷贝构造函数,然后fun函数结束时发生析构函数,最后是operator=,赋值给b2.

4.下面代码的输出结果是()

int main(){

int pid;

int num=1;

pid=fork();

if(pid>0){

num++;

printf("in parent:num:%daddr:%x\n",num,&num);

}

else if(pid==0){

printf("in child:num:%daddr:%x\n",num,&num);

}

A.父子进程中输出的num相同,num地址不相同

B.父子进程中输出的num不同,num地址相同

C.父子进程中输出的num相同,num地址也相同

D.父子进程中输出的num不同,num地址不相同

5.关于以下代码中的变量在内存中的存储位置描述不正确的是()

int a=0;

class someClass{

int b;

static int c;

};

int main(){

int d=0;

someClass *p=new someClass();

return 0;

}

A.b存在堆区

B.c存在堆区

C.d存在栈区

D.a存在全局变量区

解析: C应该在全局静态区

6.以下代码段有问题的是()

A.void func1(char *e){

char *p1;

p1=malloc(100);

sprintf(p1,error:"%s'.",e);

local_log(p1);

}

B. int func2(char *filename)

{

FILE *fp;

int key;

fp=fopen(filename,"r");

fscanf(fp,"%d",&key);

return key;

}

C.voidfunc3(char *info){

char *p,*pp;

p=malloc(100);

pp=p;

free(p);

sprintf(pp,*info:"%s'.",info);

free(pp);

}

D.选项全部都正确

解析:答案是ABC,答案是A申请了空间没有释放,答案B打开流没有关闭,答案C其实指针都是一块内存空间,free了二次,程序会因为内存错误崩溃.

7.请问该程序的输出是多少?

#include

int main()

{

unsigned char i=7;

int j=0;

for(;i>0;i-=3)

{

++j;

}

printf("%d\n",j);

return 0;

}

A.2

B.死循环

C.173

D.172

解析:unsigned char 8位数据位,范围0-255,

所以-2(11111110)时,溢出变成254;

同理-1(11111111)时,溢出变成255;

最后减到0时,不满足循环条件,for停止。

刚好173次。

7 4 1 -2 ==>共4次

254 251 ... 5 2 -1 ==>共85次

255 252 ... 6 3 ==>共85-1=84次(因为3-3=0,不能进入循环了)

所以总共173次。(相减相除)

更快捷的计算方法:256*2+7=519=173*3

8.快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

9.下列各树形结构中,哪些是平衡二叉查找树:

解析:二叉平衡查找树:左子树中所有节点的值小于根的值,右子树中的所有节点的值大于根的值;左右子树的高度之差的绝对值为0或1,选C

10.下面哪种数据结构最适合创建一个优先级队列()

A.堆

B.双向链表

C.单向链表

D.栈

11.某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()

A.基数排序

B.快速排序

C.二叉排序

D.堆排序

12.有A,B,C,D,E五个字符,出现的频率分别为2,5,3,3,4,由A,B,C,D,E生成的最优二叉树中,该树的带权路径长是多少()

A35

B.49

C.39

D.45

13.从根开始按层次(第0层->第1层->第2层)遍历一颗二叉树,需要使用什么辅助数据结构?()

A. heap

B.queue

C.binary tree

D.stack

14.假设MySQL数据库表:

create table T{

k int unsigned not null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary key(k),unique key a_index (a DESC,b DESC),

key k1(b),key k2(c),key k3(d));

如下哪些sql语句查询能较好的.利用索引?()

A.select bfrom WHERE b like 'aaa%';

B.select a,bfrom T WHERE a='2015-10-25' ORDER BY b ASC,c ASC;

C.selecta,b,c from T WHERE a='2015-10-25' ORDER BY b ASC;

D.selecta,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

15.在一个游戏的任务中,玩家需要进入1个山洞,取得宝石,之后回到入口.

山洞的地图如下:

S--------------------T

S是入口

T处有宝箱,打开宝箱之后可能得到的物品有:

1)宝石,出现概率为5%.

2)魔法券.出现概率为50%.玩家每消耗一个魔法券,可以直接传送到入口S.

3)什么也没有,概率为45%.

S到T的距离为1.

每次玩家回到S之后,宝箱T的状态会重置,再次进入山洞可以重新打开宝箱获得物品.

玩家的任务是到达T获取宝石之后回到入口S.如果到达T之后没有获得宝石,可以走出山洞之后再进入反复刷.

问题:玩家完成任务所走路程的数学期望是()

A.40

B.25

C.35

D.30

16.下面关于TCP的描述,错误的是()

A.TCP是一种面向连接的协议,给用户进程提供可靠的全双工的字节流

B.TCP客户端和服务器之间建立连接需要经过3次握手

C.只要有一方主动关闭连接后,这个TCP连接就结束了

D.只要有一方主动关闭连接后,这个TCP连接就结束了

17.关于进程和线程描述正确的是()

A.线程不拥有系统资源,但可以访问隶属于进程的资源

B.在创建或销毁进程时,系统开销明显大于创建或销毁线程时开销

C.进程是调度和拥有资源的基本单位

D.不仅进程自检可以并发执行,同一个进程的多个进程之间也可以并发执行

18.下面()哪个函数返回的有效句柄用完后不需要CloseHandle

A.CreateThread

B. GetCurrentProcess

C. OpenProcess

D. CreateFile

19. invalidateRect的作用是()

A.擦除一个矩形区域

B.删除一个矩形

C.使一个矩形区域变为无效,从而释放部分GDI资源

D.使一个矩形区域变为无效,从而可以重绘

20.典型的创建Windows窗口过程的流程为:()

A.注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

B.创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

C.注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

D.创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

参考答案:

1.B 2.C 3.D 4.B 5.B 6.ABC 7.C 8.C 9.C 10.A

11.D 12.C 13.B 14.AD 15.D 16.C 17.ABCD 18.B 19.D 20.C

⬕ C++教师工作计划 ⬕

C++实训报告

随着计算机技术的发展,越来越多的人选择学习计算机编程语言,而C++语言作为一种高级编程语言,其应用范围非常广泛,对于想进一步学习编程的人来说,学习了解C++语言是非常必要的。为此,本文在老师的指导下,进行了C++实训学习,得出了一些有关C++语言的一些学习心得和方法。

首先,C++语言的基础知识是非常重要的。在学习C++语言的过程中,我们需要学习基本语法、数据类型、运算符、循环结构、分支结构等等基础知识。对于初学者来说,学习这些知识非常关键,也是需要花费较多时间来掌握的。通过实践,我们发现,掌握了这些基本知识后,不仅可以更好地理解C++语言的编程思想,还能更好地完成编程任务。

其次,C++语言的实际应用也非常丰富。在学习C++语言的过程中,我们需要通过一些实际的编程项目来提高自己的实践技能。例如,可以通过编写简单的计算器程序、打印图形等方式,来熟练掌握C++语言的应用。在这个过程中,我们也需要注意代码的规范性和注释。代码规范的好坏往往会直接影响到程序的运行效果,而注释的添加则有助于更好地理解和维护代码。

再次,C++语言的熟练掌握需要逐步提高。对于初学者来说,熟练掌握C++语言需要花费较多时间和精力。因此,我们可以采取逐步提高的方法。首先,我们可以通过大量的实践来熟悉C++语言的基本使用方法;然后,我们需要学习一些高级用法和技巧,例如面向对象编程、模板编程、异常处理等等。这些高级用法虽然比较难掌握,但是掌握后对于改进程序的性能和效率都有很大的帮助。

最后,对于学习C++语言的初学者来说,我们也需要注意一些学习方法。除了学习基本知识和应用技巧外,我们还需要积极参加一些讨论活动、阅读相关的书籍和文章,以及参与一些实践项目。这些学习方法可以让我们更好地理解C++语言的思想和应用,也可以学习他人的编程思路和经验,有助于我们更好地提高自己的编程能力。

综上所述,学习C++语言需要掌握基础知识、进行实际应用、逐步提高和采取合理的学习方法。通过实践,我深刻地认识到C++语言是一种非常强大的编程语言,熟练掌握后能够编写高效且功能强大的程序,对于我们的职业发展也有很大的帮助。因此,我会继续学习和实践,以便更好地提高自己的编程水平。

⬕ C++教师工作计划 ⬕

c++实践报告书范文2篇

【c++实践报告书例一】

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 MFC课程设计

计算机基础教学实验中心

2015年 06月 14 日

一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基

Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用Visual C++ MFC编程实现以下功能:

b、c,计算并输出两个根x1、x2.

修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。

了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程axb、c,计算并输出两个根x事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的'输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password;

m_user.GetWindowText(c_user);

m_password.GetWindowText(c_password);

if(c_user.IsEmpty()||c_password.IsEmpty())

{

MessageBox("用户名或密码不能为空","用户登录信息");

return;

}

if(c_user=="123"&&c_password=="123")

{

CMyMenu dlg;

dlg.DoModal();//这两段代码是用于调用菜单对话框

}

else

{

MessageBox("用户名或密码不正确","提示",MB_ICONINFORMATION); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

【c++实践报告书例二】

本科生课程设计(实践)任务书、设计报告

(C++程序设计)

题 目 科学计算器应用程序系统 学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2013年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;MFC;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“C”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”CE”,”C”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对CLR与.NET的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向Windows计算器靠拢。可以看到,这个计算器有很多Windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多Bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

⬕ C++教师工作计划 ⬕

struct node *front,*next;

};

有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除

BOOL DeteleNode(Node *pHeader, DataType Value)

{

if (pHeader == NULL) return;

BOOL bRet = FALSE;

Node *pNode = pHead;

{

{

{

pHeader = pNode->next;

pHeader->front = NULL;

{

{

pNode->next->front = pNode->front;

}

pNode->front->next = pNode->next;

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

bRet = TRUE;

{

pNode = pNode->next;

}

}

return bRet;

}

void DE(Node *pHeadA, Node *pHeadB)

{

if (pHeadA == NULL || pHeadB == NULL)

{

return;

}

Node *pNode = pHeadA;

{

if (DeteleNode(pHeadB, pNode->data))

{

{

pHeadA = pNode->next;

pHeadA->front = NULL;

{

pNode->front->next = pNode->next;

{

pNode->next->front = pNode->front;

}

}

Node *pNextNode = pNode->next;

delete pNode;

pNode = pNextNode;

{

pNode = pNode->next;

}

}

}

2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”

int GetCommon(char *s1, char *s2, char **r1, char **r2)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

int maxlen = 0;

for(int i = 0; i < len1; i++)

{

for(int j = 0; j < len2; j++)

{

int as = i, bs = j, count = 1;

while(as + 1 < len1 && bs + 1 < len2 && s1 == s2)

count++;

{

maxlen = count;

*r1 = s1 + i;

*r2 = s2 + j;

}

}

}

}

3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数

char* test3(long num) {

char* buffer = (char*)malloc(11);

buffer = “0”;

buffer = “x”;

buffer = “\0”;

char* temp = buffer + 2;

for (int i=0; i < 8; i++) {

temp = (char)(num<<4*i>>28);

temp = temp >= 0 ? temp : temp + 16;

temp = temp < 10 ? temp + 48 : temp + 55;

}

return buffer;

{

int k = 0, i = 0, j = 0;

int a = 1;

{

while( j < N-k ) s = a++; i++; j--;

while( i < N-k ) s = a++; i--; j--;

while( j >k-1 ) s = a++; i--; j++;

while( i >k ) s = a++; i++; j++;

}

{

cout << s << “ ”;

cout << endl;

}

int matrix;

*/

void SetMatrix(int x, int y, int start, int n) {

int i, j;

return;

matrix = start;

return;

}

for (i = x; i < x + n-1; i++) //矩阵上部

matrix = start++;

for (j = y; j < y + n-1; j++) //右部

matrix = start++;

for (i = x+n-1; i >x; i--) //底部

matrix = start++;

for (j = y+n-1; j >y; j--) //左部

matrix = start++;

SetMatrix(x+1, y+1, start, n-2); //递归

}

void main() {

int i, j;

int n;

scanf(“%d”, &n);

SetMatrix(0, 0, 1, n);

for(i = 0; i < n; i++) {

printf(“%4d”, matrix);

printf(“”);

}

}

if(n==0) return 1;

if(n==1) return 1;

retrurn Funct(n-1) + Funct(n-2);

}

请问,如何不使用递归,来实现上述函数?

请教各位高手!

解答:int Funct( int n ) // n 为非负整数

{

int a=0;

int b=1;

int c;

if(n==0) c=1;

else if(n==1) c=1;

else for(int i=2;i<=n;i++) //应该n从2开始算起

{

c=a+b;

a=b;

b=c;

}

return c;

}

解答:

现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位,

1、原题跟little-endian,big-endian没有关系

2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位

3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为

01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4

{

int i,j;

int found=1;

return -1;

{

found=0;

break;

}

return found;

}

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

{

int flag, i, j = 0;

int *arr = (int *)malloc(n * sizeof(int));

arr = 1;

{

flag = 0;

++flag;

++j;

}

arr = 0;

}

free(arr);

return j;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

{

int index;

struct Node *next;

}JosephuNode;

{

int i, j;

JosephuNode *head, *tail;

head = tail = (JosephuNode *)malloc(sizeof(JosephuNode));

{

tail->index = i;

tail->next = (JosephuNode *)malloc(sizeof(JosephuNode));

tail = tail->next;

}

tail->index = i;

tail->next = head;

{

{

tail = head;

head = head->next;

}

tail->next = head->next;

printf(“第%4d个出局的人是:%4d号”, i, head->index);

free(head);

head = tail->next;

}

i = head->index;

free(head);

return i;

{

int n, m;

scanf(“%d%d”, &n, &m);

printf(“最后胜利的是%d号!”, Josephu(n, m));

system(“pause”);

return 0;

}

已知strcpy函数的原型是:

char * strcpy(char * strDest,const char * strSrc);

1.不调用库函数,实现strcpy函数。

2.解释为什么要返回char *。

char * strcpy(char * strDest,const char * strSrc)

{

if ((strDest==NULL)||(strSrc==NULL)) file://

throw “Invalid argument(s)”; //

char * strDestCopy=strDest; file://

while ((*strDest++=*strSrc++)!=“\0”); file://

return strDestCopy;

(A)不检查指针的有效性,说明答题者不注重代码的健壮性。

(B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。

(C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

(A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

(A)循环写成while (*strDest++=*strSrc++);,(B)。

(B)循环写成while (*strSrc!=“\0”) *strDest++=*strSrc++;,说明答题者对边界条件的检查不力。循环体结束后,strDest字符串的末尾没有正确地加上“\0”。

⬕ C++教师工作计划 ⬕

求输出的结果
#include
using namespace std;
class Base
{
public:
    void func(const char* str){cout << "Base: " << str << endl;}
virtual void func(int num){cout << "Base: " << num << endl;}
};
class Derived : public Base
{
public:
    void func(const char* str){cout << "Derived: " << str << endl;}
void func(int num){cout << "Derived: " << num << endl;}
void func(){cout << "The Function is in Derived!" << endl;}
};
int main()
{
  Base *pB;
Derived ObjD;
pB = ObjD;
pB->func(11);
pB->func("Hello");
// pB->func();
getchar();
return 0;
}

⬕ C++教师工作计划 ⬕

华为笔试题 - 华为C/C++笔试题(面试题)

oo1、局部变量能否和全局变量重名?

oo答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

oo

oo2、如何引用一个已经定义过的全局变量?

oo 答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

oo

oo

oo3、全局变量定义在可被多个.C文件包含的.头文件中可不可以?为什么?

oo答:可以,但要加static

oo

oo4、语句for( ;1 ;)有什么问题?它是什么意思?

oo答:死循环,同while(1),这种写法并不规范,可读性差,一般不用

oo

oo5、do……while和while……do有什么区别?

oo答:前一个循环一遍再判断,后一个判断以后再循环

oo

oo6、请写出下列代码的输出内容

oo#include

oomain()

oo{

ooint a,b,c,d;

ooa=10;

oob=a++;

ooc=++a;

ood=10*a++;

ooprintf("b,c,d:%d,%d,%d",b,c,d);

ooreturn 0;

oo}

oo答:10,12,120

oo

oo7.static函数与普通函数有什么区别?

oo只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

oo

oo8.static全局变量与普通的全局变量有什么区别?

oo全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

oo 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

oo

oo9.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆 )中。

oo

oo10.设有以下说明和定义:

ootypedef union {long i; int k[5]; char c;} DATE;

oostruct data { int cat; DATE cow; double dog;} too;

ooDATE max;

oo则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____

oo

oo11.队列和栈有什么区别?

oo队列先进先出,栈后进先出

oo

oo12.写出下列代码的输出内容

oo#include

ooint inc(int a)

oo{

ooreturn(++a);

oo}

ooint multi(int*a,int*b,int*c)

oo{

ooreturn(*c=*a**b);

oo}

ootypedef int(FUNC1)(int in);

ootypedef int(FUNC2) (int*,int*,int*);

oo

oovoid show(FUNC2 fun,int arg1, int*arg2)

oo{

ooINCp=&inc;

ooint temp =p(arg1);

oofun(&temp,&arg1, arg2);

ooprintf("%d ",*arg2);

oo}

oo

oomain()

oo{

ooint a;

ooshow(multi,10,&a);

ooreturn 0;

oo}

oo

oo翻译一下

oo==================================

oo#include

oousing namespace std;

oo

oo// 返回a + 1

ooint inc(int a){

ooreturn a+1;

oo}

oo// out = a*b

ooint multi(int& a, int& b, int& out){

ooreturn out = a*b;

oo}

oo

oo// 定义两种函数,FUNC1对应inc, FUNC2对应 multi

ootypedef int(FUNC1) (int in);

ootypedef int(FUNC2) (int&,int&,int&);

oo

oo// 诡异的函数,这是模糊C大赛么...

oovoid show( FUNC2* func, int num, int& out ){

ooFUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义

ooint numAdd1 = pInc( num );

oo// 等价于 numAdd1 = inc( num );

oo// 结果 num仍然是10, numAdd1 = 11

oo

oo// 调用func函数,可以看到, main中传给func的是 multi.

oo// 所以调用的是 multi( 11, 10, out ), out = 110

oofunc( numAdd1, num, out );

oocout

oo

ooint main(){

ooint a;

ooshow(multi,10, a);

ooreturn 0;

oo}

oo==================================

oo

oo13.请找出下面代码中的所以错误

oo说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

oo==================================

oomain(){

oochar*src="hello,world";

oochar* dest=NULL;

oo

ooint len=strlen(src);

oodest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括

oo

oochar* d = dest;

oochar* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]

oowhile( len-- != 0 )

ood++=s--;//!3 *d++ = *s--;

oo//!4 尾部要 ,应加上 *d = 0;

oo

ooprintf("%s",dest);

ooreturn 0;

oo}

oo==================================

oo

oo修正后的答案:

oo==================================

ooint main(){

oochar* src = "hello,world";

oo

ooint len = strlen(src);

oochar* dest = (char*)malloc(len+1);.

oo

oochar* d = dest;

oochar* s = &src[len-1];

oowhile( len-- != 0 )

oo*d++=*s--;

oo*d = 0;

oo

ooprintf("%s",dest);

⬕ C++教师工作计划 ⬕

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include 和 #include “filename.h” 有什么区别?(5 分)

答:对于#include ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量,(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的'名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i {

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i DoSomething();

}

else

{

for (i=0; i DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

⬕ C++教师工作计划 ⬕

pS:答案是本人随笔所写,可能不全甚至错误!

请不要盲目将其作为标准答案,不当之处,请指正,谢谢。

C++/MFC 试题

一.填空题 (26 分 )

1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。 (3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;

2 .请给出如下程序的结果 (2 分 )

int a = 3;

int b = a << 3; /// 00000011左移三位为00011000,即24

a = __3__ , b = __24__ 。

3 .请 给出如下程序的结果 (2 分 )

int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分)

#define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心

则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 )

char szTemp[1000] = "";

int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\

strcpy(szTemp, "abc");

int nLen3 = sizeof(szTemp);

int nLen4 = strlen(szTemp);

int nTemp[100];

int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = "";

sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);

则 szResult = _1000,0,1000,3,04___ 。

CObject 、 CWinApp 、 CWnd )? (2 分 )__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CpU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程___(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递

{

char szTemp[10] = "";

x = 2;

sprintf(szTemp, "%d,", x);

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

int x = 4;

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

void bbb()

{

char szTemp[10] = "";

int x = 7;

ccc(x);

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

二.改错题 ( 总共 15 分 , 每题 5 分 )。

1 .下面代码有何错误

void func1()

{

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

pa; /// pa仍然是空指针,pb申请的`空间并没有被掉

}

void func2(int *pb)

{

pb = new int(5); /// pb重新申请了堆空间

}

2 .下面代码有何错误

void func2(int *value)

{

*value = 2; /// value为空指针,不能被取值,所以*value是错误的

}

void func1()

{

int *p = 0;

func2(p);

}

3 .

int func1(int& b) /// 参数b的类型是整型

{

return 0;

}

void func2()

{

int bbb = 3;

func1(&bbb); /// 函数参数的引用调用不需要用符号"&"

func1(bbb);

}

func2 中有何错误, func1 的参数 b 的类型是什么。

三.简答题 (64 分 )

pS:以下答案是随笔所写,请读者做进一步的深入了解。

C++ 、 VC 、 MFC 在概念上的区别 (4 分 )

答:C是面向过程编程的语言;

C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows ApI函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 )

答:

int add(int a,int b)

{

return (a + b);

}

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。

floatadd(float a,float b)

{

return (a + b);

}

线程。 (4 分 )

答:Createproccess()创建进程;

CreateThread()创建线程

MFC中还提供了_beginthread()与_beginthreadex()函数创建线程

4.SendMessage 和 postMessage 有什么区别 (4 分 )

答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。

postMessage:发送消息后不等待消息处理即继续执行自身的程序。

5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。 (4 分 )

答:WaitForSingleObject是表示等待线程的一个函数。

参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。

__cdecl 、 __pascal 在什么方面有所不同。 (4 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive parameter order Clean-up passes parameters in registers?

pascal Left-to-right Routine No

cdecl Right-to-left Caller No

stdcall Right-to-left Routine No

7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

int nLen = strText.GetLength();

myFile.Write((char*)(LpCSTR)strText, nLen);

myFile.Close();

return nRet;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LpCSTR)strText, nLen);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

}

__finaly

{

myFile.Close();

}

return nRet;

}

8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少? (6 分 )

typedef int (*func)(int, int*);

int xxx(int a, int *p)

{

return a + *p;

}

int dowork(func aaa, int bbb, int *ccc)

{

return aaa(bbb, ccc);

}

int sss = 4;

int ttt = dowork(&xxx, 3, &sss);

答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为7

9 .请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多少? (6 分 )

class Fruit

{

public:

Fruit()

{

weight = 2;

}

Fruit(int w)

{

weight = w;

}

int operator+(Fruit f)

{

return this->weight * f.weight;

}

private:

int weight;

};

Fruit aaa;

Fruit bbb(4);

int ccc = aaa + bbb;

答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10. 请解释下面代码采用了何种 C++ 特性( C 语言不具备),作用是什么? (6 分 )

template

T sum(T a, T b)

{

return (a + b);

}

答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。

11 .请解释 aaa.h 中下面代码的功能 (5 分 )

#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)

#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_

... ...

#endif

答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。

12 . CMemoryState 主要功能是什么 (5 分 )

答:用于检测内存泄露。

13 .请阅读下述代码,写出程序执行的结果( 6 分)

#include

using namespace std;

class CBase

{

public:

virtual void print()

{

cout<< "base" << endl;

}

void Doprint()

{

print();

}

};

class CChild1: public CBase

{

public:

⬕ C++教师工作计划 ⬕


这本书主要讲了:嘉莉十八岁那年她就独自一人从自己的家乡离开,去往芝加哥生活。她向往物质生活,所以才离开家乡的。读完这本书,我觉得嘉莉只是沉浸在自己追求的生活和想象之中,她从未替别人着想过。她的这种性格是由于贫困所造成的。自己一无所有,却只是期求这幸福。下面为大家精心整理了一些关于《嘉莉妹妹》读后感,请您阅读。

《嘉莉妹妹》读后感1

《嘉莉妹妹》中的主人公便是嘉莉。她出生在一个普通的家庭,有一个疼爱自己的姐姐,也有一个一毛不拔的姐夫。

在小嘉莉刚满16岁时,她便做出决定,要出去闯荡闯荡,于是她独自一人,踏上了火车之旅,来到了姐姐家。在去姐姐家的路上,她碰到了一个奇怪的人——杜埃。杜埃是一家公司的推销员。他告诉嘉莉,如果你在这儿感到陌生的话,我可以帮你。后来杜埃看着嘉莉安全的到家后,才转身离开。然而就是因为杜埃对嘉莉的这一份情谊,却让嘉莉一举成了大明星。

嘉莉是一个酷爱话剧的女孩儿,所以杜埃经常带着她去大大小小的剧院去欣赏话剧。而杜埃也渐渐喜欢上了这个沉迷于戏剧的女孩儿,于是他决定,一定要让嘉莉一举成名!

嘉莉的星路旅程,也就从此拉开了帷幕。她从扮演一个从不被人注意的配角儿到扮演一个赫赫有名的大明星,她付出了常人无法想象,无法接受的苦难。大街小巷都贴着她的海报,每个剧院都放着她演过的话剧。而杜埃呢?他为了完成嘉莉的梦想,以涉嫌诈骗而被捕获,五年后,他出狱了,当他看到嘉莉时他惊呆了!嘉莉成名了,而他呢?却是一个丢了金钱、权利、地位、亲情和爱情的穷光蛋!

当我看完整本书时,我感到有一种罪恶感围绕在我的身边,我有过要为梦想执着奋斗的想法吗?就算有,我又有想过要实现它吗?我没有,我突然觉得自己太懦弱了,连最简单的现实都不敢去面对,还能有什么理由去面对呢?我恨我自己,为什么天生就是这样,为什么天生就没有改变自己的权利,我真的受够了!

我要改变,去坚强,去勇敢,去闯练,可我该怎么做呢?我依然还歪着脑袋深思着这个问题。

《嘉莉妹妹》读后感2

这本书感觉真的很现实!它把人的冷漠,自私剖析的非常透彻,又把巨大的社会现状不加掩饰的展现出来!

它有很多和其他经典相似的地方,又在相似中个性鲜明!

女主人公嘉莉和《飘》中的思嘉很像,性格都那么贪图享乐,别人有的自己也一定要有,却也都在现实的不幸中努力生存。不同的是思嘉在最困难中没有丢下媚兰,而嘉莉却丢下了伍德,她的善良在人物口口传递中是如此的苍白无力、如此虚伪,也更体现了时代的冷漠与自私。

男主人公伍德到纽约后的遭遇感觉像是中国女版的月牙儿。一个是被生活被社会拖到了尽头,为了吃饭沦为了暗娼;一个是为了活着仅仅是活着变成了乞丐。他们都没有错,他们都会干活都有谋生的能力,却被社会现实剥夺了谋生的权利!伍德的事业由兴到败又很像《林家铺子》,都是在变革中求生存,都有着短暂生存的回光返照,却最终因为现实社会中的大势,一个破产逃难,一个死于饥饿。

结构中的对比很突出。故事情节在大的方向中出现极端的结局。主人公们的性格并不算突出,甚至很大众。这一点和《巴黎圣母院》不同。它的最大特点也是对比,却是从人物的本身入手。如果说《巴》的场景感觉像是一幅流动的夸张的话剧,而它的感觉就像固定的一个个画面突出的展现,仅仅从这些瞬间的画面中就可以窥视到整个社会氛围和现状!

画面一,嘉莉刚到姐姐的小小的家时,姐姐明妮忙里忙外不停的劳作,姐夫杰森下班后看报纸的简单,还有嘉莉哄小孩时的无可奈何。那种晦涩的、阴暗的、忙碌的底层人民的生存实景一目了然。

画面二,伍德骗嘉莉私奔时,只差四分钟火车就开了的紧迫感;给赶车人多加一块钱时的急切;检票员过来时的慌乱和将要窒息的情绪波动。这一气呵成的长轴画卷,很刺激很丰富!

画面三,嘉莉在找工作时的胆怯、彷徨无注,那种羡慕、那种向往在现实面前的不堪一击,站在芝加哥商业区大街的中央,此地虽大却没有她的容身之地,仿佛可以看见那双无助、凄凉的眼神!

画面四,伍德在内的一群乞丐争抢着上尉抛洒的钱币,生存在尽头中的游弋。人群的喧哗与乞丐的悲鸣,上尉的高高在上,与伍德小心守护的自尊心,那么热闹的场面我却感觉寂静的可怕!

画面五,也是画面感最强的一幅画。伍德在乱石中不熟练的开着电车,旁边两个警察又骂又打的驱赶罢工人群,而愤怒的人群不断的冲破警察的封锁,试图扯下临时电车司机伍德,还有个小女孩在人群外冲着伍德做鬼脸。好一幅愤怒的画卷!

最后的画面,伍德把自己安顿好,打开煤气…… 明明是死亡的冷峻,我却看到了想要生存的无奈,他已经连一顿饭也乞不到了……

灰色的冬季,天空中飘下纯白的雪花,覆盖住这份寒冷的孤寂吧!

《嘉莉妹妹》读后感3

18岁的嘉罗琳(嘉莉)离开自己的父母,到芝加哥找姐姐,想谋求一份适合自己的工作。虽然之前曾经去过姐姐家一次,但毕竟对城市生活非常陌生。在火车上,被推销员德鲁埃认识,互相交换了在芝加哥的地址。

到达姐姐家后,找工作十分的不顺利,曾经在一个每周收入只有四块半的鞋厂工作,但是,在给姐姐交完每周四块钱的食宿费后,只有五角钱的使用空间,而这些,并没有阻挡住对城市灯红酒绿生活的向往,富人生活的诱惑始终在吸引着她,但是,出路在哪里呢?

由于工作的辛苦,淋雨病到后,这唯一的工作也就没有了。姐夫无法得到应得的食宿费补贴家用,让嘉罗琳产生回老家的念头。推销员德鲁埃在找到嘉莉后,了解她的情况,愿意资助她,又鼓起了她继续待在城市的念头。嘉莉给姐姐留了一张纸条后,就和德鲁埃一起在租住一个公寓里。

从此以后,嘉莉就在德鲁埃的影响下,开始去适应城市生活,去看演出、吃饭等,此时的她,认为有钱的日子真舒服,也感到非常的幸福。这是她到芝加哥之后第一次感到幸福,特别是透过阳台的窗户,看到路边走过的,曾和她在鞋店工作类似的女工时,她非常满足目前的物质生活。

通过德鲁埃,嘉莉也认识了酒店经理赫斯特伍德。相对对城市生活不太陌生的嘉莉发现,赫斯特伍德其实比德鲁埃更风趣幽默,更善解人意。其实要知道,他们两人的区别,主要是由于工作的不同,人物性格也就不同,而这些,嘉莉她不知道。

在德鲁埃外出工作时,她发现自己和赫斯特伍德非常谈的来,频频的约会,心中会时不时地想起赫斯特伍德。但是,这种变化被德鲁埃发现后,告诉她,赫斯特伍德是有妻子和孩子的,嘉莉发觉自己受到了欺骗,准备疏远赫斯特伍德。

赫斯特伍德是有妻子和孩子,但是追逐物质享受和交际的妻子,没有和丈夫有过多的交流,赫斯特伍德和妻子的生活没有激情。嘉莉的纯洁让他心动,可是自己的资产都在妻子名下,钱的问题让赫斯特伍德非常尴尬。

为了和心动的人在一起,为了不受到妻子的讽刺挖苦,逃。赫斯特伍德一心想和嘉莉远离这个让他痛苦和烦闷的家,让嘉莉离开德鲁埃和自己在一起。一天营业结束后,赫斯特伍德拿了酒店的营业款10000美元,当夜找到嘉莉,欺骗她德鲁埃受伤把她拉上了开往蒙特里尔的火车。

虽然离开了芝加哥,但是,侦探的到来还是让赫斯特伍德交出了大部分公款,同时,为了避免遇到昔日的熟人,他们到达纽约。

纽约的生活水平,让赫斯特伍德认为必须找到一份合适的工作,否则的话,留下的钱无法长久满足嘉莉日常的开销,毕竟嘉莉没有太多城市工作的经验,生活的压力目前不应该让她有。

赫斯特伍德把留下钱的一大部分与别人合伙开了一个酒店,他负责经营。工作忙碌的他,渐渐没有时间陪在嘉莉身边,嘉莉打发时间,认识了新来的邻居万斯先生和夫人。他们三人会到百老汇吃饭、看演出。嘉莉意识到,在百老汇大街上游玩的人,才是真正的有钱人,他们不是单单地来游玩,是来摆阔的,让嘉莉非常羡慕。

可是,赫斯特伍德合伙的生意受骗了,两人的生活开始拮据起来,经常为一些琐碎的事发生争吵。接连半年多的时间,逐渐年老的赫斯特伍德也没有找到工作,也丧失了继续工作的热情。无奈之下,嘉莉想起在芝加哥时,自己曾有过一次登台演出的经历,当时是帮助德鲁埃给别人许下的诺言,挽回了德鲁埃的面子。

功夫不负有心人,嘉莉从合唱歌舞队开始了她的舞台生涯。由于她热情的投入,迅速地得到经理的认可和提拔。在开始的一段时间里,她还用自己的钱照顾赫斯特伍德,但是她发现,赫斯特伍德沾染上赌博的毛病,让她恼火。在给赫斯特伍德留下一部分钱后,和一个女同伴在外边单独租了一个住处。

嘉莉的演出工作,一直比较顺利,慢慢地,她也成了百老汇出名的女演员。离开嘉莉的赫斯特伍德,最后也死去了。出名后的嘉莉,车马有了,豪华的住处也有了,银行的存款也有了,请她吃饭、玩的朋友也非常多,但是她觉得自己并不幸福,她会一个人静静地坐在躺椅上,看着窗外,她觉得,物质生活满足的她,非常孤单。

这个故事描述的19世纪末的美国大都市,跟我们现在所处的中国十分相似;而文中的嘉莉妹妹,跟我的一个朋友的处境也似乎有许多共同之处,同样的在大都市中找不到安身立命之本,同样不愿意把命运交在别人的手中,却无法拒绝别人的好意和诱惑。只是嘉莉妹妹的结局过于完美,她可以得到自己想要的东西,名誉,事业,社会地位和爱情。我想说的是,嘉莉的才华或许很高,嘉莉的运气或许十分好,嘉莉所处的时代或许有很多机会给她平步青云,嘉莉确实的有一个美妙的结局,但是,平心而论,成功的机会太少了,真的几乎不可能出现...

我们的社会,给予的机会太少,给予的压迫太多;给予的友善太少,给予的欺诈太多。

我的朋友切身的经验,让我真切的了解到一个弱女子能在一个陌生的城市立足,是多么的不容易,她需要面对那么多的困难,苦难...另外一个方面,她要抵制那么多的诱惑,好奇...

大家设身处地的想想,一个涉世未深的学生,来到一个陌生的大都市,举目无亲,一方面是在声色犬马面前的自卑,另一方面是自己的青春美丽所引来无数倾慕者而带来的自信,怎么在两者之间取得平衡,没有人会教涉世未深的学生,没有人有类似的经验,即使有一个那样的“她”存在,“她”能否遇见该涉世未深的学生,即使遇见了,涉世未深的学生能否听从一个同样陌生的“她”的意见呢?所有的一切,都是那么的不能确定,我们就有了结论,一个人要一直在这个纷繁负责的社会作出正确的决定,是多么的艰难,对于一个意志坚定的人,尚且如此,如果是一个物质化的人,是一个追求享乐的人,希望她保持自己的操守,保持自己的贞洁,保持自己良心在大多数时候的纯净,似乎过于艰难了。

可能有人会说,她可以寻求父母的指引,可是正如嘉莉妹妹只能依靠自己一样,她怎么可能询问远在百里之外的年老双亲的指引,双亲的世界跟她的世界是有如此大的差别,指望父母给她正确的指引,无疑不切实际...

可能有人会说,她可以寻求朋友的协助,可是正如嘉莉妹妹在芝加哥和纽约多年,也仅仅有点头之交不超过五个一样,她与身边的人都是从陌生的环境中到达这个城市,大家的友谊的基础并非十分牢固,更关键的是,自顾不暇的学生忙于学习之余是否有那么多的心思去关心一个同学...

可能有人会说,社会上还是好人多,他们会关心她的,可是,大家不要忘记,谦谦君子会保持距离,而抱有不良动机的小人则会美妙的装饰自己,然后不顾一切的靠近自己的猎物,因此,给予她关心的,几乎清一色只有一种人,希望她成为他们女朋友或许情人的人...

她没有错,而社会对她是如此的不公平,表面看,她可以选择,细细的一想,每一个现在看来错误的,引入歧途的决策在当时看来都是无奈之举,下下策中的最优。

一个人张相俊俏,是上天对她的眷恋,而如果俊俏的人,没有一颗纯净的心和雪亮的眼睛,则或许变成悲剧。

无数的人,在我们这个残酷的社会中,每天上演的悲剧中,扮演主角,我们熟视无睹,我们麻木,我们未能照顾好自己,何来时间关心这些“主角”,于是,他们堕落,他们被伤害,他们被淘汰,他们被摧毁。

“主角”在哭诉,社会中的人物,不是看不起我们,而是看不见我们!完全无视我们的苦痛,辛酸,艰难...

当我在阅读《嘉莉妹妹》这本书的过程中,无数次,我在问自己,同样的悲剧在我身边上演多少次?是否还有更残酷,更无情的现实,我们装聋作哑,我们高高在上。或许有,或许我们曾经回避,曾经自欺欺人,但是,悲剧依然存在,知识分子的良知告诉我,如果不是揭露,就是对自己和社会的不负责任。

我的力量过于弱小,我无力抗拒这个无情的社会,但是,我依然要呐喊,依然要为“主角”而申述,希望给予更多的了解和同情。

最后,就是一句话:一个社会的文明程度在于对弱势社群的关怀而非在于大学的数量,一个人的美德在于他对弱者的态度而非他自传中标榜的善举...

《嘉莉妹妹》读后感4

闲来无事,算了柱彩票不中,与双色球无缘,简直毫无规律可言,总是听别人说中多大多大的奖,我觉得不是真实的,下决心不再玩它了,付出太多得到太少,决意要放弃它,至少是暂时的放弃它吧,晚上看了本世界名著,<>是由[美]西奥图.德莱塞/著,刚开始平淡无奇,整个故事也没有大的悬念.

还是对故事做一个简单的描述吧,嘉洛林.米贝登(嘉莉)在她18岁的时候时候从乡村到芝加哥去寻梦,在火车上偶遇杜洛埃,因为纯朴貌美、气质迷人使得杜洛埃搭讪而相互留下联系方式。

嘉洛林.米贝登(嘉莉)在芝加哥,找到了第一份工作是鞋厂的普通女工,工作环境非常恶劣,工人素质差,工作时间也非常长,因此干不下去,而嘉洛林.米贝登(嘉莉)的姐和姐夫也因为生活据拮不愿再收留她,希望她打道回府再回乡村,这时嘉莉偶遇杜洛埃,杜洛埃鼓励嘉莉在这坐城市发展,并承诺对她帮助,嘉莉于是留了下来,杜洛埃租了房并为嘉莉买了新衣鞋等,写到这里,我觉得名著就是名著,我从头到尾没有看到有对嘉莉和杜洛埃的成人描述,呵,搞不懂他们是情人抑或其他的身份,应该该算是情人身份吧,后来杜洛埃将嘉莉介绍给酒店经理赫斯渥,这赫斯渥本来是有家室的人,但对嘉莉一见钟情,下决心要将她搞到手,于是隐瞒其已婚的经历,由于杜洛埃长年从事推销工作,让赫斯渥有机可趁,几经周折,终于鱼儿上钩,当杜洛埃知道赫斯渥与嘉莉的关系,于是告诉赫斯渥已婚的真相,嘉莉为赫斯渥的欺骗感到痛苦并写了分手信,但这老奸巨滑的情场高手竟然用杜洛埃负伤的假消息将嘉莉骗到另一坐城市,同时利用职务之便将保险箱的资金偷走,因害怕被警察追捕退回大部分资金,留一部分的资金用作投资及生活费用。

由于经营不善,赫斯渥很快将资金挥霍一空,在他和嘉莉潇洒了几年后就生活无以为继了,连生活也为钱发愁,赫斯渥因为以前的养尊处优和年龄比较大而找不到工作,嘉莉只得发挥自身特长与爱好当上了演员,结果成了大牌红星,而赫斯渥也因为失去斗志成了乞丐,后来在一个冷寒交加的晚上开煤气自杀。

以上是小说告诉我的信息,我得到的启事就是:

1、对女人而言,要发挥自身的长处,有自己的事业,以前的嘉莉是希望不劳而获,男人养活她,当然她是具备这个资本的,年轻貌美,但是好景不长,在男人有钱的时候成了怨妇,在男人无能的时候也只得养家糊口,杜洛埃、赫斯渥、艾姆斯,是她生命中很重要的人物,杜洛埃、赫斯渥只是将她带上歧途,而艾姆斯却似良师益友,能够发现她的爱好和优点,以欣赏的眼光去指导和帮助她,最后取得了成功,这是很多名女人必经之路。

2、再说说这篇小说对男人的启示吧,一句话,得到一个女人不是件难事,难的是得到一个女人的心,杜洛埃年轻潇洒,乐于助人,但处处留情,而且对结婚这件事从来没认真过,这是嘉莉没有选择他的一个重要原因;赫斯渥虽然年龄大些但也算个风流人物,钱途也多多,常在风月场所的他诡计多端,被爱或者说是被荷尔蒙冲昏了头脑,对嘉莉设计了一个又一个圈套,最后羊入狼口,在爱情上也以胜利告终,但终究在挥霍完偷来的钱后失去了嘉莉,看来女人也非善物,什么爱呀情呀,哈哈,等金钱完了的时候,爱也随之终结,真是中了网上的爱情可以转移,婚姻可以随时冻结......的口号,这个赫斯渥少说也养了嘉莉三、五年了吧,可钱一完,嘉莉立马走人,甚至在她成为红星后在赫斯渥对她乞讨时才舍了七块多钱给他,所以说,女人才是绝情的动物啊,最后赫斯渥在一个寒冷的夜开媒气自杀,死了也无人知晓,被一艘船运去了进行群尸处理,哎,多么悲惨的下场,本来拥有那么好的工作和家庭,为了嘉莉或者他自己的情欲落了个这样的下场,如果嘉莉有知,我相信也不会有泪,当她看到他的那种境遇只舍七块钱就知道她的绝情了,艾姆斯还算个人物吧,可是如果有一天他也落得个赫斯渥一样下场的话是否还有欣赏呢?这个很难说.

一年前看了这小说多好,我觉得每看一篇名著,收获真不少,这不,我也快成这倒楣鬼第二了啊,努力吧,亲爱的自己!

《嘉莉妹妹》读后感5

前几天,妈妈为我买了一本《嘉莉妹妹》,读了它,我仿佛对社会有了一定的了解。它告诉我:现实社会是非常残酷的,没有我想象中的那样简单,它是一个非常复杂的东西。不信?那就让我们一起走进嘉莉妹妹的生活中去吧。

书中塑造了这样一个人物,描述了这样一个故事:嘉莉怀着对大城市物质生活的向往,独自离家闯荡。首先,她住在表姐敏妮家,尝尽苦衷。后来,她以自己的美貌博得了推销员杜洛埃的爱慕,成为他的情妇,逐渐变成了一个挥金如土的阔太太。又由于更大的诱惑跟着酒店经理赫斯渥私奔,由于当时失业的人居多,赫斯渥的酒店也散伙了,工作难找,于是晃荡在家,想靠着嘉莉挣的微薄工资来维持生活。在一次偶然的机会中,嘉莉竟然成了走红的演员,倍受关注,薪水丰厚,挤进了上流社会,并抛弃了家庭逐渐贫困的赫斯渥,以不自觉地残忍将他推上了绝望之路。

故事揭露了资本主义社会繁荣表面底下的失业、贫困和饥饿,对美国贫富对立的社会作了深刻的描写。只有有本事的人将来才能有所作为,才有胆量跟别人竞争,才可能有丰厚的薪水,不至于失业。天啊,现实社会就是那么残酷!知识,是一笔无法掂量的财富,也是一笔无形的财富,成功之神绝不会把灿烂的霞光洒向想不劳而获的人,而给那些有知识,有胆识的人。我坚信,如果你有了一定的知识和胆识,是绝对会得到成功之神的眷顾的!

谨记:不争馒头争口气,将来好要靠自己。我以后一定好好学习,天天向上,做一个有知识,有胆识的人;更要做一个对社会有用的人。今天是祖国的花朵,明天成为祖国的栋梁。

⬕ C++教师工作计划 ⬕

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习;

#include ”stdafx.h“

#include // 包含stdio.h头文件

int main{

printf(”input two integer:“);// 以空格为分隔

scanf(”%d %d“,&a,&b);// 将输入的两个整数分别赋值给a, b

printf(”the max integer is %d.n",max(a,b));// 以整数形式输出最大值, a, b为实际参数(实参)

int max(int num1, int num2){ // num1, num2为形式参数(形参)

if(num1>num2){ // 如果num1大于num2

}

}

”。

⬕ C++教师工作计划 ⬕

求输出的结果
#include
using namespace std;
class Base
{
public:
    void func(const char* str){cout << "Base: " << str << endl;}
virtual void func(int num){cout << "Base: " << num << endl;}
};
class Derived : public Base
{
public:
    void func(const char* str){cout << "Derived: " << str << endl;}
void func(int num){cout << "Derived: " << num << endl;}
void func(){cout << "The Function is in Derived!" << endl;}
};
int main()
{
  Base *pB;
Derived ObjD;
pB = ObjD;
pB->func(11);
pB->func("Hello");
// pB->func();
getchar();
return 0;
}

⬕ C++教师工作计划 ⬕

华为笔试题 - 华为C/C++笔试题(面试题)

oo1、局部变量能否和全局变量重名?

oo答:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

oo

oo2、如何引用一个已经定义过的全局变量?

oo 答:可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

oo

oo

oo3、全局变量定义在可被多个.C文件包含的.头文件中可不可以?为什么?

oo答:可以,但要加static

oo

oo4、语句for( ;1 ;)有什么问题?它是什么意思?

oo答:死循环,同while(1),这种写法并不规范,可读性差,一般不用

oo

oo5、do……while和while……do有什么区别?

oo答:前一个循环一遍再判断,后一个判断以后再循环

oo

oo6、请写出下列代码的输出内容

oo#include

oomain()

oo{

ooint a,b,c,d;

ooa=10;

oob=a++;

ooc=++a;

ood=10*a++;

ooprintf("b,c,d:%d,%d,%d",b,c,d);

ooreturn 0;

oo}

oo答:10,12,120

oo

oo7.static函数与普通函数有什么区别?

oo只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

oo

oo8.static全局变量与普通的全局变量有什么区别?

oo全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

oo 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

oo

oo9.程序的局部变量存在于(栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆 )中。

oo

oo10.设有以下说明和定义:

ootypedef union {long i; int k[5]; char c;} DATE;

oostruct data { int cat; DATE cow; double dog;} too;

ooDATE max;

oo则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:___52____

oo

oo11.队列和栈有什么区别?

oo队列先进先出,栈后进先出

oo

oo12.写出下列代码的输出内容

oo#include

ooint inc(int a)

oo{

ooreturn(++a);

oo}

ooint multi(int*a,int*b,int*c)

oo{

ooreturn(*c=*a**b);

oo}

ootypedef int(FUNC1)(int in);

ootypedef int(FUNC2) (int*,int*,int*);

oo

oovoid show(FUNC2 fun,int arg1, int*arg2)

oo{

ooINCp=&inc;

ooint temp =p(arg1);

oofun(&temp,&arg1, arg2);

ooprintf("%d ",*arg2);

oo}

oo

oomain()

oo{

ooint a;

ooshow(multi,10,&a);

ooreturn 0;

oo}

oo

oo翻译一下

oo==================================

oo#include

oousing namespace std;

oo

oo// 返回a + 1

ooint inc(int a){

ooreturn a+1;

oo}

oo// out = a*b

ooint multi(int& a, int& b, int& out){

ooreturn out = a*b;

oo}

oo

oo// 定义两种函数,FUNC1对应inc, FUNC2对应 multi

ootypedef int(FUNC1) (int in);

ootypedef int(FUNC2) (int&,int&,int&);

oo

oo// 诡异的函数,这是模糊C大赛么...

oovoid show( FUNC2* func, int num, int& out ){

ooFUNC1* pInc = inc;//原文这句写错了...orz... INC根本没定义

ooint numAdd1 = pInc( num );

oo// 等价于 numAdd1 = inc( num );

oo// 结果 num仍然是10, numAdd1 = 11

oo

oo// 调用func函数,可以看到, main中传给func的是 multi.

oo// 所以调用的是 multi( 11, 10, out ), out = 110

oofunc( numAdd1, num, out );

oocout

oo

ooint main(){

ooint a;

ooshow(multi,10, a);

ooreturn 0;

oo}

oo==================================

oo

oo13.请找出下面代码中的所以错误

oo说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

oo==================================

oomain(){

oochar*src="hello,world";

oochar* dest=NULL;

oo

ooint len=strlen(src);

oodest=(char*)malloc(len);//!1 少分配了一字节. strlen计数不包括

oo

oochar* d = dest;

oochar* s = src[len];//!2 两个错误. 应该为 &src[ len-1 ]

oowhile( len-- != 0 )

ood++=s--;//!3 *d++ = *s--;

oo//!4 尾部要 ,应加上 *d = 0;

oo

ooprintf("%s",dest);

ooreturn 0;

oo}

oo==================================

oo

oo修正后的答案:

oo==================================

ooint main(){

oochar* src = "hello,world";

oo

ooint len = strlen(src);

oochar* dest = (char*)malloc(len+1);.

oo

oochar* d = dest;

oochar* s = &src[len-1];

oowhile( len-- != 0 )

oo*d++=*s--;

oo*d = 0;

oo

ooprintf("%s",dest);

⬕ C++教师工作计划 ⬕

1、头文件中的 ifndef/define/endif 干什么用?(5 分)

答:防止该头文件被重复引用。

2、#include 和 #include “filename.h” 有什么区别?(5 分)

答:对于#include ,编译器从标准库路径开始搜索 filename.h

对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

3、const 有什么用途?(请至少说明两种)(5 分)

答:(1)可以定义 const 常量,(2)const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? (5 分)

答:C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的'名字

与C 语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo , 而C++编译器则会产生像_foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。

5、请简述以下两个for 循环的优缺点(5 分)

for (i=0; i {

if (condition)

DoSomething();

else

DoOtherthing();

}

if (condition)

{

for (i=0; i DoSomething();

}

else

{

for (i=0; i DoOtherthing();

}

优点:程序简洁

缺点:多执行了N-1 次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

⬕ C++教师工作计划 ⬕

pS:答案是本人随笔所写,可能不全甚至错误!

请不要盲目将其作为标准答案,不当之处,请指正,谢谢。

C++/MFC 试题

一.填空题 (26 分 )

1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。 (3 分 ) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;

2 .请给出如下程序的结果 (2 分 )

int a = 3;

int b = a << 3; /// 00000011左移三位为00011000,即24

a = __3__ , b = __24__ 。

3 .请 给出如下程序的结果 (2 分 )

int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分)

#define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心

则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 )

char szTemp[1000] = "";

int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符\

strcpy(szTemp, "abc");

int nLen3 = sizeof(szTemp);

int nLen4 = strlen(szTemp);

int nTemp[100];

int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = "";

sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);

则 szResult = _1000,0,1000,3,04___ 。

CObject 、 CWinApp 、 CWnd )? (2 分 )__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CpU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程___(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递

{

char szTemp[10] = "";

x = 2;

sprintf(szTemp, "%d,", x);

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

int x = 4;

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

void bbb()

{

char szTemp[10] = "";

int x = 7;

ccc(x);

sprintf(szTemp, "%d,", x);

afxDump << szTemp;

}

二.改错题 ( 总共 15 分 , 每题 5 分 )。

1 .下面代码有何错误

void func1()

{

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

pa; /// pa仍然是空指针,pb申请的`空间并没有被掉

}

void func2(int *pb)

{

pb = new int(5); /// pb重新申请了堆空间

}

2 .下面代码有何错误

void func2(int *value)

{

*value = 2; /// value为空指针,不能被取值,所以*value是错误的

}

void func1()

{

int *p = 0;

func2(p);

}

3 .

int func1(int& b) /// 参数b的类型是整型

{

return 0;

}

void func2()

{

int bbb = 3;

func1(&bbb); /// 函数参数的引用调用不需要用符号"&"

func1(bbb);

}

func2 中有何错误, func1 的参数 b 的类型是什么。

三.简答题 (64 分 )

pS:以下答案是随笔所写,请读者做进一步的深入了解。

C++ 、 VC 、 MFC 在概念上的区别 (4 分 )

答:C是面向过程编程的语言;

C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows ApI函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 )

答:

int add(int a,int b)

{

return (a + b);

}

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。

floatadd(float a,float b)

{

return (a + b);

}

线程。 (4 分 )

答:Createproccess()创建进程;

CreateThread()创建线程

MFC中还提供了_beginthread()与_beginthreadex()函数创建线程

4.SendMessage 和 postMessage 有什么区别 (4 分 )

答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。

postMessage:发送消息后不等待消息处理即继续执行自身的程序。

5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。 (4 分 )

答:WaitForSingleObject是表示等待线程的一个函数。

参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。

__cdecl 、 __pascal 在什么方面有所不同。 (4 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive parameter order Clean-up passes parameters in registers?

pascal Left-to-right Routine No

cdecl Right-to-left Caller No

stdcall Right-to-left Routine No

7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

int nLen = strText.GetLength();

myFile.Write((char*)(LpCSTR)strText, nLen);

myFile.Close();

return nRet;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LpCSTR)strText, nLen);

if(!nRet)

{

/// 输出异常信息

__leave;/// 结束try块,跳到__finaly代码块

}

}

__finaly

{

myFile.Close();

}

return nRet;

}

8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少? (6 分 )

typedef int (*func)(int, int*);

int xxx(int a, int *p)

{

return a + *p;

}

int dowork(func aaa, int bbb, int *ccc)

{

return aaa(bbb, ccc);

}

int sss = 4;

int ttt = dowork(&xxx, 3, &sss);

答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为7

9 .请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多少? (6 分 )

class Fruit

{

public:

Fruit()

{

weight = 2;

}

Fruit(int w)

{

weight = w;

}

int operator+(Fruit f)

{

return this->weight * f.weight;

}

private:

int weight;

};

Fruit aaa;

Fruit bbb(4);

int ccc = aaa + bbb;

答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10. 请解释下面代码采用了何种 C++ 特性( C 语言不具备),作用是什么? (6 分 )

template

T sum(T a, T b)

{

return (a + b);

}

答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。

11 .请解释 aaa.h 中下面代码的功能 (5 分 )

#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)

#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_

... ...

#endif

答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。

12 . CMemoryState 主要功能是什么 (5 分 )

答:用于检测内存泄露。

13 .请阅读下述代码,写出程序执行的结果( 6 分)

#include

using namespace std;

class CBase

{

public:

virtual void print()

{

cout<< "base" << endl;

}

void Doprint()

{

print();

}

};

class CChild1: public CBase

{

public:

⬕ C++教师工作计划 ⬕


这本书主要讲了:嘉莉十八岁那年她就独自一人从自己的家乡离开,去往芝加哥生活。她向往物质生活,所以才离开家乡的。读完这本书,我觉得嘉莉只是沉浸在自己追求的生活和想象之中,她从未替别人着想过。她的这种性格是由于贫困所造成的。自己一无所有,却只是期求这幸福。下面为大家精心整理了一些关于《嘉莉妹妹》读后感,请您阅读。

《嘉莉妹妹》读后感1

《嘉莉妹妹》中的主人公便是嘉莉。她出生在一个普通的家庭,有一个疼爱自己的姐姐,也有一个一毛不拔的姐夫。

在小嘉莉刚满16岁时,她便做出决定,要出去闯荡闯荡,于是她独自一人,踏上了火车之旅,来到了姐姐家。在去姐姐家的路上,她碰到了一个奇怪的人——杜埃。杜埃是一家公司的推销员。他告诉嘉莉,如果你在这儿感到陌生的话,我可以帮你。后来杜埃看着嘉莉安全的到家后,才转身离开。然而就是因为杜埃对嘉莉的这一份情谊,却让嘉莉一举成了大明星。

嘉莉是一个酷爱话剧的女孩儿,所以杜埃经常带着她去大大小小的剧院去欣赏话剧。而杜埃也渐渐喜欢上了这个沉迷于戏剧的女孩儿,于是他决定,一定要让嘉莉一举成名!

嘉莉的星路旅程,也就从此拉开了帷幕。她从扮演一个从不被人注意的配角儿到扮演一个赫赫有名的大明星,她付出了常人无法想象,无法接受的苦难。大街小巷都贴着她的海报,每个剧院都放着她演过的话剧。而杜埃呢?他为了完成嘉莉的梦想,以涉嫌诈骗而被捕获,五年后,他出狱了,当他看到嘉莉时他惊呆了!嘉莉成名了,而他呢?却是一个丢了金钱、权利、地位、亲情和爱情的穷光蛋!

当我看完整本书时,我感到有一种罪恶感围绕在我的身边,我有过要为梦想执着奋斗的想法吗?就算有,我又有想过要实现它吗?我没有,我突然觉得自己太懦弱了,连最简单的现实都不敢去面对,还能有什么理由去面对呢?我恨我自己,为什么天生就是这样,为什么天生就没有改变自己的权利,我真的受够了!

我要改变,去坚强,去勇敢,去闯练,可我该怎么做呢?我依然还歪着脑袋深思着这个问题。

《嘉莉妹妹》读后感2

这本书感觉真的很现实!它把人的冷漠,自私剖析的非常透彻,又把巨大的社会现状不加掩饰的展现出来!

它有很多和其他经典相似的地方,又在相似中个性鲜明!

女主人公嘉莉和《飘》中的思嘉很像,性格都那么贪图享乐,别人有的自己也一定要有,却也都在现实的不幸中努力生存。不同的是思嘉在最困难中没有丢下媚兰,而嘉莉却丢下了伍德,她的善良在人物口口传递中是如此的苍白无力、如此虚伪,也更体现了时代的冷漠与自私。

男主人公伍德到纽约后的遭遇感觉像是中国女版的月牙儿。一个是被生活被社会拖到了尽头,为了吃饭沦为了暗娼;一个是为了活着仅仅是活着变成了乞丐。他们都没有错,他们都会干活都有谋生的能力,却被社会现实剥夺了谋生的权利!伍德的事业由兴到败又很像《林家铺子》,都是在变革中求生存,都有着短暂生存的回光返照,却最终因为现实社会中的大势,一个破产逃难,一个死于饥饿。

结构中的对比很突出。故事情节在大的方向中出现极端的结局。主人公们的性格并不算突出,甚至很大众。这一点和《巴黎圣母院》不同。它的最大特点也是对比,却是从人物的本身入手。如果说《巴》的场景感觉像是一幅流动的夸张的话剧,而它的感觉就像固定的一个个画面突出的展现,仅仅从这些瞬间的画面中就可以窥视到整个社会氛围和现状!

画面一,嘉莉刚到姐姐的小小的家时,姐姐明妮忙里忙外不停的劳作,姐夫杰森下班后看报纸的简单,还有嘉莉哄小孩时的无可奈何。那种晦涩的、阴暗的、忙碌的底层人民的生存实景一目了然。

画面二,伍德骗嘉莉私奔时,只差四分钟火车就开了的紧迫感;给赶车人多加一块钱时的急切;检票员过来时的慌乱和将要窒息的情绪波动。这一气呵成的长轴画卷,很刺激很丰富!

画面三,嘉莉在找工作时的胆怯、彷徨无注,那种羡慕、那种向往在现实面前的不堪一击,站在芝加哥商业区大街的中央,此地虽大却没有她的容身之地,仿佛可以看见那双无助、凄凉的眼神!

画面四,伍德在内的一群乞丐争抢着上尉抛洒的钱币,生存在尽头中的游弋。人群的喧哗与乞丐的悲鸣,上尉的高高在上,与伍德小心守护的自尊心,那么热闹的场面我却感觉寂静的可怕!

画面五,也是画面感最强的一幅画。伍德在乱石中不熟练的开着电车,旁边两个警察又骂又打的驱赶罢工人群,而愤怒的人群不断的冲破警察的封锁,试图扯下临时电车司机伍德,还有个小女孩在人群外冲着伍德做鬼脸。好一幅愤怒的画卷!

最后的画面,伍德把自己安顿好,打开煤气…… 明明是死亡的冷峻,我却看到了想要生存的无奈,他已经连一顿饭也乞不到了……

灰色的冬季,天空中飘下纯白的雪花,覆盖住这份寒冷的孤寂吧!

《嘉莉妹妹》读后感3

18岁的嘉罗琳(嘉莉)离开自己的父母,到芝加哥找姐姐,想谋求一份适合自己的工作。虽然之前曾经去过姐姐家一次,但毕竟对城市生活非常陌生。在火车上,被推销员德鲁埃认识,互相交换了在芝加哥的地址。

到达姐姐家后,找工作十分的不顺利,曾经在一个每周收入只有四块半的鞋厂工作,但是,在给姐姐交完每周四块钱的食宿费后,只有五角钱的使用空间,而这些,并没有阻挡住对城市灯红酒绿生活的向往,富人生活的诱惑始终在吸引着她,但是,出路在哪里呢?

由于工作的辛苦,淋雨病到后,这唯一的工作也就没有了。姐夫无法得到应得的食宿费补贴家用,让嘉罗琳产生回老家的念头。推销员德鲁埃在找到嘉莉后,了解她的情况,愿意资助她,又鼓起了她继续待在城市的念头。嘉莉给姐姐留了一张纸条后,就和德鲁埃一起在租住一个公寓里。

从此以后,嘉莉就在德鲁埃的影响下,开始去适应城市生活,去看演出、吃饭等,此时的她,认为有钱的日子真舒服,也感到非常的幸福。这是她到芝加哥之后第一次感到幸福,特别是透过阳台的窗户,看到路边走过的,曾和她在鞋店工作类似的女工时,她非常满足目前的物质生活。

通过德鲁埃,嘉莉也认识了酒店经理赫斯特伍德。相对对城市生活不太陌生的嘉莉发现,赫斯特伍德其实比德鲁埃更风趣幽默,更善解人意。其实要知道,他们两人的区别,主要是由于工作的不同,人物性格也就不同,而这些,嘉莉她不知道。

在德鲁埃外出工作时,她发现自己和赫斯特伍德非常谈的来,频频的约会,心中会时不时地想起赫斯特伍德。但是,这种变化被德鲁埃发现后,告诉她,赫斯特伍德是有妻子和孩子的,嘉莉发觉自己受到了欺骗,准备疏远赫斯特伍德。

赫斯特伍德是有妻子和孩子,但是追逐物质享受和交际的妻子,没有和丈夫有过多的交流,赫斯特伍德和妻子的生活没有激情。嘉莉的纯洁让他心动,可是自己的资产都在妻子名下,钱的问题让赫斯特伍德非常尴尬。

为了和心动的人在一起,为了不受到妻子的讽刺挖苦,逃。赫斯特伍德一心想和嘉莉远离这个让他痛苦和烦闷的家,让嘉莉离开德鲁埃和自己在一起。一天营业结束后,赫斯特伍德拿了酒店的营业款10000美元,当夜找到嘉莉,欺骗她德鲁埃受伤把她拉上了开往蒙特里尔的火车。

虽然离开了芝加哥,但是,侦探的到来还是让赫斯特伍德交出了大部分公款,同时,为了避免遇到昔日的熟人,他们到达纽约。

纽约的生活水平,让赫斯特伍德认为必须找到一份合适的工作,否则的话,留下的钱无法长久满足嘉莉日常的开销,毕竟嘉莉没有太多城市工作的经验,生活的压力目前不应该让她有。

赫斯特伍德把留下钱的一大部分与别人合伙开了一个酒店,他负责经营。工作忙碌的他,渐渐没有时间陪在嘉莉身边,嘉莉打发时间,认识了新来的邻居万斯先生和夫人。他们三人会到百老汇吃饭、看演出。嘉莉意识到,在百老汇大街上游玩的人,才是真正的有钱人,他们不是单单地来游玩,是来摆阔的,让嘉莉非常羡慕。

可是,赫斯特伍德合伙的生意受骗了,两人的生活开始拮据起来,经常为一些琐碎的事发生争吵。接连半年多的时间,逐渐年老的赫斯特伍德也没有找到工作,也丧失了继续工作的热情。无奈之下,嘉莉想起在芝加哥时,自己曾有过一次登台演出的经历,当时是帮助德鲁埃给别人许下的诺言,挽回了德鲁埃的面子。

功夫不负有心人,嘉莉从合唱歌舞队开始了她的舞台生涯。由于她热情的投入,迅速地得到经理的认可和提拔。在开始的一段时间里,她还用自己的钱照顾赫斯特伍德,但是她发现,赫斯特伍德沾染上赌博的毛病,让她恼火。在给赫斯特伍德留下一部分钱后,和一个女同伴在外边单独租了一个住处。

嘉莉的演出工作,一直比较顺利,慢慢地,她也成了百老汇出名的女演员。离开嘉莉的赫斯特伍德,最后也死去了。出名后的嘉莉,车马有了,豪华的住处也有了,银行的存款也有了,请她吃饭、玩的朋友也非常多,但是她觉得自己并不幸福,她会一个人静静地坐在躺椅上,看着窗外,她觉得,物质生活满足的她,非常孤单。

这个故事描述的19世纪末的美国大都市,跟我们现在所处的中国十分相似;而文中的嘉莉妹妹,跟我的一个朋友的处境也似乎有许多共同之处,同样的在大都市中找不到安身立命之本,同样不愿意把命运交在别人的手中,却无法拒绝别人的好意和诱惑。只是嘉莉妹妹的结局过于完美,她可以得到自己想要的东西,名誉,事业,社会地位和爱情。我想说的是,嘉莉的才华或许很高,嘉莉的运气或许十分好,嘉莉所处的时代或许有很多机会给她平步青云,嘉莉确实的有一个美妙的结局,但是,平心而论,成功的机会太少了,真的几乎不可能出现...

我们的社会,给予的机会太少,给予的压迫太多;给予的友善太少,给予的欺诈太多。

我的朋友切身的经验,让我真切的了解到一个弱女子能在一个陌生的城市立足,是多么的不容易,她需要面对那么多的困难,苦难...另外一个方面,她要抵制那么多的诱惑,好奇...

大家设身处地的想想,一个涉世未深的学生,来到一个陌生的大都市,举目无亲,一方面是在声色犬马面前的自卑,另一方面是自己的青春美丽所引来无数倾慕者而带来的自信,怎么在两者之间取得平衡,没有人会教涉世未深的学生,没有人有类似的经验,即使有一个那样的“她”存在,“她”能否遇见该涉世未深的学生,即使遇见了,涉世未深的学生能否听从一个同样陌生的“她”的意见呢?所有的一切,都是那么的不能确定,我们就有了结论,一个人要一直在这个纷繁负责的社会作出正确的决定,是多么的艰难,对于一个意志坚定的人,尚且如此,如果是一个物质化的人,是一个追求享乐的人,希望她保持自己的操守,保持自己的贞洁,保持自己良心在大多数时候的纯净,似乎过于艰难了。

可能有人会说,她可以寻求父母的指引,可是正如嘉莉妹妹只能依靠自己一样,她怎么可能询问远在百里之外的年老双亲的指引,双亲的世界跟她的世界是有如此大的差别,指望父母给她正确的指引,无疑不切实际...

可能有人会说,她可以寻求朋友的协助,可是正如嘉莉妹妹在芝加哥和纽约多年,也仅仅有点头之交不超过五个一样,她与身边的人都是从陌生的环境中到达这个城市,大家的友谊的基础并非十分牢固,更关键的是,自顾不暇的学生忙于学习之余是否有那么多的心思去关心一个同学...

可能有人会说,社会上还是好人多,他们会关心她的,可是,大家不要忘记,谦谦君子会保持距离,而抱有不良动机的小人则会美妙的装饰自己,然后不顾一切的靠近自己的猎物,因此,给予她关心的,几乎清一色只有一种人,希望她成为他们女朋友或许情人的人...

她没有错,而社会对她是如此的不公平,表面看,她可以选择,细细的一想,每一个现在看来错误的,引入歧途的决策在当时看来都是无奈之举,下下策中的最优。

一个人张相俊俏,是上天对她的眷恋,而如果俊俏的人,没有一颗纯净的心和雪亮的眼睛,则或许变成悲剧。

无数的人,在我们这个残酷的社会中,每天上演的悲剧中,扮演主角,我们熟视无睹,我们麻木,我们未能照顾好自己,何来时间关心这些“主角”,于是,他们堕落,他们被伤害,他们被淘汰,他们被摧毁。

“主角”在哭诉,社会中的人物,不是看不起我们,而是看不见我们!完全无视我们的苦痛,辛酸,艰难...

当我在阅读《嘉莉妹妹》这本书的过程中,无数次,我在问自己,同样的悲剧在我身边上演多少次?是否还有更残酷,更无情的现实,我们装聋作哑,我们高高在上。或许有,或许我们曾经回避,曾经自欺欺人,但是,悲剧依然存在,知识分子的良知告诉我,如果不是揭露,就是对自己和社会的不负责任。

我的力量过于弱小,我无力抗拒这个无情的社会,但是,我依然要呐喊,依然要为“主角”而申述,希望给予更多的了解和同情。

最后,就是一句话:一个社会的文明程度在于对弱势社群的关怀而非在于大学的数量,一个人的美德在于他对弱者的态度而非他自传中标榜的善举...

《嘉莉妹妹》读后感4

闲来无事,算了柱彩票不中,与双色球无缘,简直毫无规律可言,总是听别人说中多大多大的奖,我觉得不是真实的,下决心不再玩它了,付出太多得到太少,决意要放弃它,至少是暂时的放弃它吧,晚上看了本世界名著,<>是由[美]西奥图.德莱塞/著,刚开始平淡无奇,整个故事也没有大的悬念.

还是对故事做一个简单的描述吧,嘉洛林.米贝登(嘉莉)在她18岁的时候时候从乡村到芝加哥去寻梦,在火车上偶遇杜洛埃,因为纯朴貌美、气质迷人使得杜洛埃搭讪而相互留下联系方式。

嘉洛林.米贝登(嘉莉)在芝加哥,找到了第一份工作是鞋厂的普通女工,工作环境非常恶劣,工人素质差,工作时间也非常长,因此干不下去,而嘉洛林.米贝登(嘉莉)的姐和姐夫也因为生活据拮不愿再收留她,希望她打道回府再回乡村,这时嘉莉偶遇杜洛埃,杜洛埃鼓励嘉莉在这坐城市发展,并承诺对她帮助,嘉莉于是留了下来,杜洛埃租了房并为嘉莉买了新衣鞋等,写到这里,我觉得名著就是名著,我从头到尾没有看到有对嘉莉和杜洛埃的成人描述,呵,搞不懂他们是情人抑或其他的身份,应该该算是情人身份吧,后来杜洛埃将嘉莉介绍给酒店经理赫斯渥,这赫斯渥本来是有家室的人,但对嘉莉一见钟情,下决心要将她搞到手,于是隐瞒其已婚的经历,由于杜洛埃长年从事推销工作,让赫斯渥有机可趁,几经周折,终于鱼儿上钩,当杜洛埃知道赫斯渥与嘉莉的关系,于是告诉赫斯渥已婚的真相,嘉莉为赫斯渥的欺骗感到痛苦并写了分手信,但这老奸巨滑的情场高手竟然用杜洛埃负伤的假消息将嘉莉骗到另一坐城市,同时利用职务之便将保险箱的资金偷走,因害怕被警察追捕退回大部分资金,留一部分的资金用作投资及生活费用。

由于经营不善,赫斯渥很快将资金挥霍一空,在他和嘉莉潇洒了几年后就生活无以为继了,连生活也为钱发愁,赫斯渥因为以前的养尊处优和年龄比较大而找不到工作,嘉莉只得发挥自身特长与爱好当上了演员,结果成了大牌红星,而赫斯渥也因为失去斗志成了乞丐,后来在一个冷寒交加的晚上开煤气自杀。

以上是小说告诉我的信息,我得到的启事就是:

1、对女人而言,要发挥自身的长处,有自己的事业,以前的嘉莉是希望不劳而获,男人养活她,当然她是具备这个资本的,年轻貌美,但是好景不长,在男人有钱的时候成了怨妇,在男人无能的时候也只得养家糊口,杜洛埃、赫斯渥、艾姆斯,是她生命中很重要的人物,杜洛埃、赫斯渥只是将她带上歧途,而艾姆斯却似良师益友,能够发现她的爱好和优点,以欣赏的眼光去指导和帮助她,最后取得了成功,这是很多名女人必经之路。

2、再说说这篇小说对男人的启示吧,一句话,得到一个女人不是件难事,难的是得到一个女人的心,杜洛埃年轻潇洒,乐于助人,但处处留情,而且对结婚这件事从来没认真过,这是嘉莉没有选择他的一个重要原因;赫斯渥虽然年龄大些但也算个风流人物,钱途也多多,常在风月场所的他诡计多端,被爱或者说是被荷尔蒙冲昏了头脑,对嘉莉设计了一个又一个圈套,最后羊入狼口,在爱情上也以胜利告终,但终究在挥霍完偷来的钱后失去了嘉莉,看来女人也非善物,什么爱呀情呀,哈哈,等金钱完了的时候,爱也随之终结,真是中了网上的爱情可以转移,婚姻可以随时冻结......的口号,这个赫斯渥少说也养了嘉莉三、五年了吧,可钱一完,嘉莉立马走人,甚至在她成为红星后在赫斯渥对她乞讨时才舍了七块多钱给他,所以说,女人才是绝情的动物啊,最后赫斯渥在一个寒冷的夜开媒气自杀,死了也无人知晓,被一艘船运去了进行群尸处理,哎,多么悲惨的下场,本来拥有那么好的工作和家庭,为了嘉莉或者他自己的情欲落了个这样的下场,如果嘉莉有知,我相信也不会有泪,当她看到他的那种境遇只舍七块钱就知道她的绝情了,艾姆斯还算个人物吧,可是如果有一天他也落得个赫斯渥一样下场的话是否还有欣赏呢?这个很难说.

一年前看了这小说多好,我觉得每看一篇名著,收获真不少,这不,我也快成这倒楣鬼第二了啊,努力吧,亲爱的自己!

《嘉莉妹妹》读后感5

前几天,妈妈为我买了一本《嘉莉妹妹》,读了它,我仿佛对社会有了一定的了解。它告诉我:现实社会是非常残酷的,没有我想象中的那样简单,它是一个非常复杂的东西。不信?那就让我们一起走进嘉莉妹妹的生活中去吧。

书中塑造了这样一个人物,描述了这样一个故事:嘉莉怀着对大城市物质生活的向往,独自离家闯荡。首先,她住在表姐敏妮家,尝尽苦衷。后来,她以自己的美貌博得了推销员杜洛埃的爱慕,成为他的情妇,逐渐变成了一个挥金如土的阔太太。又由于更大的诱惑跟着酒店经理赫斯渥私奔,由于当时失业的人居多,赫斯渥的酒店也散伙了,工作难找,于是晃荡在家,想靠着嘉莉挣的微薄工资来维持生活。在一次偶然的机会中,嘉莉竟然成了走红的演员,倍受关注,薪水丰厚,挤进了上流社会,并抛弃了家庭逐渐贫困的赫斯渥,以不自觉地残忍将他推上了绝望之路。

故事揭露了资本主义社会繁荣表面底下的失业、贫困和饥饿,对美国贫富对立的社会作了深刻的描写。只有有本事的人将来才能有所作为,才有胆量跟别人竞争,才可能有丰厚的薪水,不至于失业。天啊,现实社会就是那么残酷!知识,是一笔无法掂量的财富,也是一笔无形的财富,成功之神绝不会把灿烂的霞光洒向想不劳而获的人,而给那些有知识,有胆识的人。我坚信,如果你有了一定的知识和胆识,是绝对会得到成功之神的眷顾的!

谨记:不争馒头争口气,将来好要靠自己。我以后一定好好学习,天天向上,做一个有知识,有胆识的人;更要做一个对社会有用的人。今天是祖国的花朵,明天成为祖国的栋梁。

⬕ C++教师工作计划 ⬕

C#学习中,问道艰辛,今自C学起,第一个函数学习:输入两个数比较大小,仅作练习;

#include ”stdafx.h“

#include // 包含stdio.h头文件

int main{

printf(”input two integer:“);// 以空格为分隔

scanf(”%d %d“,&a,&b);// 将输入的两个整数分别赋值给a, b

printf(”the max integer is %d.n",max(a,b));// 以整数形式输出最大值, a, b为实际参数(实参)

int max(int num1, int num2){ // num1, num2为形式参数(形参)

if(num1>num2){ // 如果num1大于num2

}

}

转载请保留原文链接://www.djz525.com/a/6284641.html,并在标注文章来源。
上一篇 : 父亲节搞笑幽默文案(通用三十七句)
下一篇 : 关于新年的好句(锦集九十九句)
" C++教师工作计划 " 相关阅读
 最新更新 更多 +
 C++教师工作计划 更多 +