sizeof详细分析以及陷阱

sizeof详细分析以及陷阱
sizeof详细分析以及陷阱

1、什么是sizeof

首先看一下sizeof在msdn上的定义:

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子:

cout<

cout<

在编译阶段已经被翻译为:

cout<<4<

cout<<1<

这里有个陷阱,看下面的程序:

int a = 0;

cout<

cout<

输出为什么是4,0而不是期望中的4,3???就在于sizeof在编译阶段处理的特性。由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以a=3相当于int,而代码也被替换为:

int a = 0;

cout<<4<

cout<

所以,sizeof是不可能支持链式表达式的,这也是和一元操作符不一样的地方。

结论:不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。

2、sizeof的用法

sizeof有两种用法:

(1)sizeof(object)

也就是对对象使用sizeof,也可以写成sizeof object 的形式。

(2)sizeof(typename)

也就是对类型使用sizeof,注意这种情况下写成sizeof typename是非法的。下面举几个例子说明一下:

int i = 2;

cout<

cout<

cout<

cout<

cout<

cout<

可以看出,加()是永远正确的选择。

结论:不论sizeof要对谁取值,最好都加上()。

3、数据类型的sizeof

(1)C++固有数据类型

32位C++中的基本数据类型,也就char,short int(short),int,long int(long),float,double, long double

大小分别是:1,2,4,4,4,8, 10。

考虑下面的代码:

cout<

unsigned影响的只是最高位bit的意义,数据长度不会被改变的。

结论:unsigned不能影响sizeof的取值。

(2)自定义数据类型

typedef可以用来定义C++自定义类型。考虑下面的问题:

typedef short WORD;

typedef long DWORD;

cout<<(sizeof(short) == sizeof(WORD))<

cout<<(sizeof(long) == sizeof(DWORD))<

结论:自定义类型的sizeof取值等同于它的类型原形。

(3)函数类型

考虑下面的问题:

int f1(){return 0;};

double f2(){return 0.0;}

void f3(){}

cout<

cout<

cout<

cout<

cout<

是double

结论:对函数使用sizeof,在编译阶段会被函数返回值的类型取代,

4、指针问题

考虑下面问题:

cout<

cout<

cout<

可以看到,不管是什么类型的指针,大小都是4的,因为指针就是32位的物理地址。

结论:只要是指针,大小就是4。(64位机上要变成8也不一定)。

顺便唧唧歪歪几句,C++中的指针表示实际内存的地址。和C不一样的是,C++中取消了模式之分,也就是不再有small,middle,big,取而代之的是统一的flat。flat模式采用32位实地址寻址,而不再是c中的segment:offset模式。举个例子,假如有一个指向地址f000:8888的指针,如果是C类型则是8888(16位, 只存储位移,省略段),far类型的C指针是f0008888(32位,高位保留段地址,地位保留位移),C++类型的指针是f8888(32位,相当于段地址*16 + 位移,但寻址范围要更大)。

5、数组问题

考虑下面问题:

char a[] = "abcdef";

int b[20] = {3, 4};

char c[2][3] = {"aa", "bb"};

cout<

cout<

数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是7。c是多维数组,占用的空间大小是各维数的乘积,也就是6。可以看出,数组的大小就是他在编译时被分配的空间,也就是各维数的乘积*数组元素的大小。

结论:数组的大小是各维数的乘积*数组元素的大小。

这里有一个陷阱:

int *d = new int[10];

cout<

d是我们常说的动态数组,但是他实质上还是一个指针,所以sizeof(d)的值是4。

再考虑下面的问题:

double* (*a)[3][6];

cout<

cout<

cout<

cout<

cout<

a是一个很奇怪的定义,他表示一个指向double*[3][6]类型数组的指针。既然是指针,所以sizeof(a)就是4。

既然a是执行double*[3][6]类型的指针,*a就表示一个double*[3][6]的多维数组类型,因此

sizeof(*a)=3*6*sizeof(double*)=72。同样的,**a表示一个double*[6]类型的数组,所以

sizeof(**a)=6*sizeof(double*)=24。***a就表示其中的一个元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一个double了,所以sizeof(****a)=sizeof(double)=8。

6、union struct内存对齐问题

考虑下面问题:(默认对齐方式)

C代码

1. union u

2. {

3. double a;

4. int b;

5. };

6.

7. union u2

9. char a[13];

10. int b;

11. };

12.

13. union u3

14. {

15. char a[13];

16. char b;

17. };

18.

19. cout<

20. cout<

21. cout<

都知道union的大小取决于它所有的成员中,占用空间最大的一个成员的大小。所以对于u来说,大小就是最大的double类型成员a了,所以sizeof(u)=sizeof(double)=8。但是对于u2和u3,最大的空间都是char[13]类型的数组,为什么u3的大小是13,而u2是16呢?关键在于u2中的成员int b。由于int类型成员的存在,使u2的对齐方式变成4,也就是说,u2的大小必须在4的对界上,所以占用的空间变成了16(最接近13的对界)。

结论:复合数据类型,如union,struct,class的对齐方式为成员中对齐方式最大的成员的对齐方式。

顺便提一下CPU对界问题,32的C++采用8位对界来提高运行速度,所以编译器会尽量把数据放在它的对界上以提高内存命中率。对界是可以更改的,使用#pragma pack(x)宏可以改变编译器的对界方式,默认是8。C++固有类型的对界取编译器对界方式与自身大小中较小的一个。例如,指定编译器按2对界,int类型的大小是4,则int的对界为2和4中较小的2。在默认的对界方式下,因为几乎所有的数据类型都不大于默认的对界方式8(除了long double),所以所有的固有类型的对界方式可以认为就是类型自身的大小。更改一下上面的程序:

C代码

1. #pragma pack(2)

2. union u2

3. {

4. char a[13];

5. int b;

6. };

7.

8. union u3

9. {

10. char a[13];

11. char b;

13. #pragma pack(8)

14.

15. cout<

16. cout<

由于手动更改对界方式为2,所以int的对界也变成了2,u2的对界取成员中最大的对界,也是2了,所以此时sizeof(u2)=14。

结论:C++固有类型的对界取编译器对界方式与自身大小中较小的一个。

9、struct的sizeof问题

因为对齐问题使结构体的sizeof变得比较复杂,看下面的例子:(默认对齐方式下)

C代码

1. struct s1

2. {

3. char a;

4. double b;

5. int c;

6. char d;

7. };

8.

9. struct s2

10. {

11. char a;

12. char b;

13. int c;

14. double d;

15. };

16.

17. cout<

18. cout<

同样是两个char类型,一个int类型,一个double类型,但是因为对界问题,导致他们的大小不同。计算结构体大小可以采用元素摆放法,我举例子说明一下:首先,CPU判断结构体的对界,根据上一节的结论,s1和s2的对界都取最大的元素类型,也就是double类型的对界8。然后开始摆放每个元素。

对于s1,首先把a放到8的对界,假定是0,此时下一个空闲的地址是1,但是下一个元素d是double 类型,要放到8的对界上,离1最接近的地址是8了,所以d被放在了8,此时下一个空闲地址变成了16,

下一个元素c的对界是4,16可以满足,所以c放在了16,此时下一个空闲地址变成了20,下一个元素d 需要对界1,也正好落在对界上,所以d放在了20,结构体在地址21处结束。由于s1的大小需要是8的倍数,所以21-23的空间被保留,s1的大小变成了24。

对于s2,首先把a放到8的对界,假定是0,此时下一个空闲地址是1,下一个元素的对界也是1,所以b摆放在1,下一个空闲地址变成了2;下一个元素c的对界是4,所以取离2最近的地址4摆放c,下一个空闲地址变成了8,下一个元素d的对界是8,所以d摆放在8,所有元素摆放完毕,结构体在15处结束,占用总空间为16,正好是8的倍数。

这里有个陷阱,对于结构体中的结构体成员,不要认为它的对齐方式就是他的大小,看下面的例子:

C代码

1. struct s1

2. {

3. char a[8];

4. };

5.

6. struct s2

7. {

8. double d;

9. };

10.

11. struct s3

12. {

13. s1 s;

14. char a;

15. };

16.

17. struct s4

18. {

19. s2 s;

20. char a;

21. };

22.

23. cout<

24. cout<

25. cout<

26. cout<

s1和s2大小虽然都是8,但是s1的对齐方式是1,s2是8(double),所以在s3和s4中才有这样的差异。

所以,在自己定义结构体的时候,如果空间紧张的话,最好考虑对齐因素来排列结构体里的元素。

C代码

1. struct {

2. int n;

3. char s[10];

4. union {

5. int a[5];

6. char b;

7. double c;

8. } u_a;

9. } b;

10. /* printf("%d\n", sizeof(b.n));//4

11. printf("%d\n", sizeof(b.s));//10

12. printf("%d\n", sizeof(b.u_a));//24

13. printf("%d\n", sizeof(b));//40*/

结论:struct 里面的元素是顺序存储的,每个元素占用的字节数根据对齐字节数N(struct 里占用字节最多的元素与CPU对齐字节数中较小的一个)进行调整.如果从左至右M个元素加起来的字节数大于N,则按从右至左舍去K个元素直至M-K个元素加起来的字节数小于等于N,如果等于N则不用字节填充,小于N则把M-K-1的元素填充直至=N.

行测资料分析技巧:你掉进易错陷阱里了吗.doc

行测资料分析技巧:你掉进易错陷阱里了吗公务员行测考试主要是考量大家的数学推理能力和逻辑分析能力,下面由我为你精心准备了“行测资料分析技巧:你掉进易错陷阱里了吗”,持续关注本站将可以持续获取更多的考试资讯! 行测资料分析技巧:你掉进易错陷阱里了吗 资料分析这种题型复习过的同学都知道不难,但还是总是出错,正确率提升不上去,大部分原因都是因为掉入了资料分析的易错陷阱了,所以每次做完题后对错误的总结是非常重要的,而且你发现了这些易错陷阱后,反而能利用它快速把题目正确答案选出来,这里通过例题给大家做一下介绍。 一、多几倍/是几倍 【例1】202X年,全国房地产开发总投资额为120264亿元,同比增长9.5%。其中,东部地区投资额占比53.5%,西部地区投资额占比 21.6%,中部地区投资额占比20.9%,东北地区投资额占比4.0%。 问题:202X年,东部地区房地产开发投资额比中部地区多多少倍? A.2.56 B.2.33 C.1.56 D.1.42 【答案】C。根据“东部地区投资额占比53.5%,中部地区投资额占比20.9%”,可得东部地区比中部地区多 所以正确答案为C项。但很多同学会看错问题“多几倍”,而求成了“是几倍”,导致误选A项。这就提醒大家在做倍数的题目时看清“多几倍”或“是几倍”再去求解。如果有细心的同学也能发现出题人正是想在这里设置陷阱,所以设置了A项,如果看出“A项-1=C项”的情况下,又知道所求为“多几倍”的前提下,可直接大胆选C项。 区分:多几倍=是几倍-1 二、增长最快最慢/增长最多最少 【例2】

问题:202X年上半年,河南省规模以上工业生产主要产品中同比增长最快的产品,其6月份的产量比增长最慢的产品: A.多20.83万吨 B.少20.83万吨 C.多881.54万吨 D.少881.54万吨 【答案】B。由图2可知,202X年上半年同比增长率最低的产品为十种有色金属(-1.4%),增长率最高的产品为化学纤维(13.5%)。由图1可知,202X年6月份,十种有色金属的产量为36.64万吨,化学纤维的产量为15.81万吨。则所求为15.81-36.64=-20.83万吨。即202X年6月化学纤维比十种有色金属的产量少20.83万吨,本题选择B项。有很多同学误以为增长最快是增长量最大,增长最慢是增长量最小,算了半天误选了C项。这就提醒大家要看清楚比较的是增长量还是增长率。 区分:增长最快或最慢是找增长率的最大或最小值;增长最多或最少是找增长量的最大或最小值。 三、变化幅度/增幅 【例3】 问题:202X年7月,以下限额以上单位商品零售额变化幅度最大的是: A.汽车类 B.建筑及装潢材料类 C.通讯器材类 D.金银珠宝类 【答案】A。由表格可知,202X年7月,限额以上单位商品零售额中,汽车类下降2.6%,建筑及装潢材料类上升0.4%,通讯器材类上升1.0%,金银珠宝类下降1.6%,变化幅度最大的为汽车类限额以上单位商品零售额,故本题选择A项。变化幅度在此题中指的是增长幅度的绝对值,即增长率的绝对值,不看正负,很多同学容易误选C项,就是因为没有区分清楚变化幅度和增长幅度的区别。 四、百分数/百分点

资料分析常用计算方法与技巧

国家公务员考试行政职业能力测验资料分析试题,有相当一部份考生能够理解了文章意思后,列出相应的表达式,但由于计算过程的相对复杂,使得不少考生因此而失分。同时,计算类题型在资料分析试题中所占的比重也比较大,因此如何在有限的时间内快速计算,是最终取得好成绩的至关重要的因素。基于这一问题,曾老师通过实例说明了在公务员考试行政职业能力测验资料分析题中实现快速计算的技巧。 一、国家公务员考试资料分析常用计算方法与技巧 "十五"期间某厂生产经营情况

第一章资料分析综述 第一节命题核心要点 一、时间表述、单位表述、特殊表述 无论哪一种类型的资料,考生对于其时间表述、单位表述、特殊表述都应特别留意。因为这里往往都蕴含着考点。 常见时间表述陷阱: 1.时间点、时间段不吻合,或者涉及的时间存在包含关系; 2.月份、季度、半年等时间表述形式; 3.其他特殊的时间表述。 【例】资料:中国汽车工业协会发布的2009年4月份中国汽车产销量数据显示,在其他国家汽车销售进一步疲软的情况下,国内乘用车销量却持续上升,当月销量已达83.1万辆,比3月份增长7.59%,同比增长37.37%。 题目:与上年同期相比,2009年4月份乘用车销量约增长了多少万辆? 常见单位表述陷阱: 1.“百”“千”“百万”“十亿”“%”等特殊的单位表述;

2.资料与资料之间、资料与题目之间单位不一致的情况; 3.“双单位图”中务必留意图与单位及轴之间的对应关系。 【例】资料:2008年,某省农产品出口贸易总额为7.15亿美元,比上年增长25.2%。 题目:2008年,该省的对外贸易总额约为多少亿美元? 2008年,该省的绿茶出口额约为多少万美元? 常见特殊表述形式: 1.“增长最多”指增长绝对量最大;“增长最快”指增长相对量即增长率最大; 2.凡是不能完全确定的,则“可能正确/错误”都要选,“一定正确/错误”都不能选; 3.“每……中……”“平均……当中的……”,都以“每/平均”字后面的量作分母; 4.“根据资料”只能利用资料中的信息;“根据常识”可以利用资料外的信息。 二、适当标记、巧用工具;数形结合、定性分析;组合排除、常识运用 资料分析答题的过程当中需要做“适当标记”,一切以便于自己做题为准。适当合理地运用直尺、量角器等工具辅助答题。 直尺使用法则: ◆在较大的表格型材料中利用直尺比对数据。 ◆柱状图、趋势图判断量之间的大小关系时用直尺比对“柱”的长短或者“点”的高低。 ◆在像复合立体柱状图等数据不易直接得到的图形材料中,可以用尺量出长度代替实际值计算“增长率”。

项目财务分析

项目财务分析 1、项目总投资描述 1.1 桂林市新城中心公园建设工程项目总投资共约亿元人民币下浮后为亿元人民币,其中:建安工程费亿元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同),下浮后为亿元,其他工程费万元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同),建设期管理费万元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同)。 1.2 桂林市临桂新区世纪西路改扩建工程项目总投资共约亿元人民币下浮后为亿元人民币,其中:建安工程费亿元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同),下浮后为亿元,其他工程费万元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同),建设期管理费万元(估算数,具体投资规模以桂林市财政评审中心评审结果为准,下同)。 总投资合计:亿元(建安工程费下浮后为亿元)。

总投资估价表(汇总) 项目名称:桂林市新城中心公园建设工程及桂林市临桂新区世纪西路改扩建工程BT项目 总投资估价表(中心公园) 项目名称:桂林市新城中心公园建设工程BT项目 总投资估价表(临桂世纪西路) 项目名称:桂林市临桂新区世纪西路改扩建工程BT项目

2、项目资金支出时间表 为了保证建设资金没有缺口,在筹措资金和资金支付时,必须把建设期支付银行贷款利息考虑进去。为了简化说明需要,我们以季度为时间单位来作安排。 项目资金支出时间表(汇总)

项目资金支出时间表(新城中心公园) 项目资金支出时间表(临桂新区世纪西路)

3、详细的融资计划 按照招标文件建设进度要求,本项目竣工时间:桂林市新城中心公园建设工程BT项目要求工期1095日历天,竣工时间:2013年12月。桂林临桂新区世纪西路建设工程项目要求工期180日历天,竣工时间:2011年5月。本融资计划是根据招标文件设定的条件制定的。 (1)融资方案 本项目建设资金由两部分组成,即我公司自有资金投入及银行贷款。按照招标文件要求,桂林市新城中心公园建设工程BT项目,自有资金%,银行贷款%。桂林市临桂新区世纪西路改扩建工程BT项目,自有资金%,银行贷款%。 我公司中标后独立成立项目公司,项目公司十月份首次注册资金到位金额为万元,其余自有资金两年内全部增资到位。后期根据项目建设进度,银行贷款将按照合理的资金计划陆续配比投入,保障项目实施。 融资方式初步计划为:由项目公司向申请3-5年期项目贷款,额度为BT项目合同额的%,贷款利率不高于3-5年人民银行贷款基准利率。目前已经与进行了初步沟通,对本项目出具了项目贷款意向函。

(完整版)数据结构课后习题及解析第二章

第二章习题 1.描述以下三个概念的区别:头指针,头结点,首元素结点。 2.填空: (1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 (2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。 (3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。 a. 在P结点后插入S结点的语句序列是:。 b. 在P结点前插入S结点的语句序列是:。 c. 在表首插入S结点的语句序列是:。 d. 在表尾插入S结点的语句序列是:。 供选择的语句有: (1)P->next=S; (2)P->next= P->next->next; (3)P->next= S->next; (4)S->next= P->next; (5)S->next= L; (6)S->next= NULL; (7)Q= P; (8)while(P->next!=Q) P=P->next; (9)while(P->next!=NULL) P=P->next; (10)P= Q; (11)P= L; (12)L= S; (13)L= P; 4.设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 5.写一算法,从顺序表中删除自第i个元素开始的k个元素。 6.已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 7.试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。 (1)以一维数组作存储结构,设线性表存于a(1:arrsize)的前elenum个分量中。 (2)以单链表作存储结构。 8.假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和B表归并成一个按元素值递减有序排列的线性表C,并要求利用原表(即A 表和B表的)结点空间存放表C。

sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout<

资料分析解题中常见的陷阱有一类为时间表述陷阱

资料分析解题中常见的陷阱有一类为时间表述陷阱。在此中公教育专家为大家讲解时间表述陷阱,在深入分析命题人所设陷阱的特点的基础上,提出应对策略,帮助考生走出误区,提高正确率。 1.时间点陷阱 陷阱设置 1、题干中的时间与材料中涉及的时间相关但不相同; 2、选项中给出相关时间点的数据混淆视听。 示例:材料中给出的是“2005年”的相关数据,题干要求的是“2004年”或“2003年”的相关问题,选项当中设置了“2005年”的相关数据作为干扰选项。 例题1: 国家统计局对全国31个省(区、市)6.8万个农村住户的抽样调查结果显示,2005年上半年农民现金收入人均1586元,扣除价格因素影响,实际增长12.5%,增速比去年同期提高1.6个百分点。 2004年上半年农民人均现金收入,扣除价格因素影响,实际增长()。 A.12.5% B.13.1% C.14.1% D.10.9% 中公解析:此题答案为D。方法一,因为2005年的实际增长率比2004年高,那么2004年的实际增长率肯定要低于12.5%,选项中只有D符合条件,所以可以直接选择D。 方法二,因为2005年的“实际增长12.5%,增速比去年同期提高1.6个百分点”,所以2004年实际增长12.5%-1.6%=10.9%。 陷阱分析:注意时间点混淆。题干所问的是“2004年上半年”,而材料中所给的是2005年上半年,很可能会混淆而误选A。 2.时间段陷阱 陷阱设置 1、题干中的时间段与材料中涉及的时间段相关但不相同; 2、选项中给出原文时间段的相关数据混淆视听。 示例:材料中给出的是“2004-2010年”相关数据,题干要求的是“2005-2010年”的相关问题,选项当中给出了“2004-2010年”的相关数据作为干扰选项。 例题2: 全国1998年至2006年地质灾害造成直接经济损失情况图

16种常用数据分析方法 (2)

一、描述统计 描述性统计是指运用制表和分类,图形以及计筠概括性数据来描述数据的集中趋势、离散趋势、偏度、峰度。 1、缺失值填充:常用方法:剔除法、均值法、最小邻居法、比率回归法、决策树法。 2、正态性检验:很多统计方法都要求数值服从或近似服从正态分布,所以之前需要进行正态性检验。常用方法:非参数检验的K-量检验、P-P图、Q-Q图、W检验、动差法。 二、假设检验 1、参数检验 参数检验是在已知总体分布的条件下(一股要求总体服从正态分布)对一些主要的参数(如均值、百分数、方差、相关系数等)进行的检验。 1)U验使用条件:当样本含量n较大时,样本值符合正态分布 2)T检验使用条件:当样本含量n较小时,样本值符合正态分布 A 单样本t检验:推断该样本来自的总体均数μ与已知的某一总体均数μ0 (常为理论值或标准值)有无差别; B 配对样本t检验:当总体均数未知时,且两个样本可以配对,同对中的两者在可能会影响处理效果的各种条件方面扱为相似; C 两独立样本t检验:无法找到在各方面极为相似的两样本作配对比较时使用。 2、非参数检验 非参数检验则不考虑总体分布是否已知,常常也不是针对总体参数,而是针对总体的某些一股性假设(如总体分布的位罝是否相同,总体分布是否正态)进行检验。 适用情况:顺序类型的数据资料,这类数据的分布形态一般是未知的。

A 虽然是连续数据,但总体分布形态未知或者非正态; B 体分布虽然正态,数据也是连续类型,但样本容量极小,如10以下; 主要方法包括:卡方检验、秩和检验、二项检验、游程检验、K-量检验等。 三、信度分析 检査测量的可信度,例如调查问卷的真实性。 分类: 1、外在信度:不同时间测量时量表的一致性程度,常用方法重测信度 2、内在信度;每个量表是否测量到单一的概念,同时组成两表的内在体项一致性如 何,常用方法分半信度。 四、列联表分析 用于分析离散变量或定型变量之间是否存在相关。 对于二维表,可进行卡方检验,对于三维表,可作Mentel-Hanszel分层分析。列联表分析还包括配对计数资料的卡方检验、行列均为顺序变量的相关检验。 五、相关分析 研究现象之间是否存在某种依存关系,对具体有依存关系的现象探讨相关方向及相关程度。 1、单相关:两个因素之间的相关关系叫单相关,即研究时只涉及一个自变量和一个因变量; 2、复相关:三个或三个以上因素的相关关系叫复相关,即研究时涉及两个或两个以上的自变量和因变量相关; 3、偏相关:在某一现象与多种现象相关的场合,当假定其他变量不变时,其中两个变量之间的相关关系称为偏相关。 六、方差分析

某集团多元化经营的陷阱财务分析(doc 13页)

某集团多元化经营的陷阱财务分析(doc 13页)

多元化经营的陷阱——巨人集团失败的财务分析 近年来,我国不少企业追求多元化经营模式,试图通过多元化经营减轻企业经营风险,使企业走上健康稳定发展的道路。然而,现实却让人们看到多元化经营使许多企业走上了加速陷入财务危机甚至破产危机之路。巨人集团的兴衰就是这许许多多例子中的一个。其原因何在?学术界有各种分析。本文试图以巨人集团的兴衰为例,从财务管理的角度,对此问题作些分析。 一、巨人集团的兴衰史 1989年8月,在深圳大学软件科学管理系硕士毕业的史玉柱和三个伙伴,用借来的4000元钱承包了天津大学深圳科技工贸发展公司电脑部,并用手头仅有的4000元钱在《计算机世界》利用先打广告后付款的方式做了8400元的广告,将其开发的M—6401桌面排版印刷系统推向市场。广告打出后13天,史玉柱的银行账户第一次收到三笔汇款共15820元。巨人事业由此起步。到9月下旬,史玉柱将收到的款项全部再次投入广告。4个月后,M-6401的销售额一举突破百万大关,从而奠定了巨人集团创业的基石。

1991年4月,珠海巨人新技术公司注册成立,公司共15人,注册资金200万元,史玉柱任总经理。8月,史玉柱投资80万元,组织10多个专家开发出M-6401汉卡上市。11月,公司员工增加到30人,M-6401汉卡销售量跃居全国同类产品之首,获纯利达1 000万元。 1992年7月,巨人公司实行战略转移,将管理机构和开发基地由深圳迁往珠海。9月,巨人公司升为珠海巨人高科技集团公司,注册资金1.19亿元。史玉柱任总裁,公司员工发展到100人、12月底。巨人集团主推的M一6401汉卡年销售量2.8万套,销售产值共1.6亿元,实现纯利3500万元。年发展速度达500%。 1993年1月、巨人集团在北京、深圳、上海、成都、西安、武汉、沈阳、香港成立了8家全资子公司,员工增至190人。12月,巨人集团发展到290人,在全国各地成立了38家全资子公司。集团在一年之内推出中文手写电脑、中文笔记本电脑、巨人传真卡、巨人中文电子收款机、巨人钻石财务软件、巨人防病毒卡、巨人加密卡等产品。同年,巨人实现销售额3百亿元,利税4600万元,成为中国极具实力的计算机企业。

sizeof详细分析以及陷阱

1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 看到return这个字眼,是不是想到了函数?错了,sizeof不是一个函数,你见过给一个函数传参数,而不加括号的吗?sizeof可以,所以sizeof不是函数。网上有人说sizeof是一元操作符,但是我并不这么认为,因为sizeof更像一个特殊的宏,它是在编译阶段求值的。举个例子: cout<

CString用法

需要强制类型转化时,C++规则容许这种选择。比如,你可以将(浮点数)定义为将某个复数(有一对浮点数)进行强制类型转换后只返回该复数的第一个浮点数(也就是其实部)。可以象下面这样:Complex c(1.2f,4.8f);float realpart=c;如果(float)操作符定义正确的话,那么实部的的值应该是1.2。这种强制转化适合所有这种情况,例如,任何带有LPCTSTR类型参数的函数都会强制执行这种转换。于是,你可能有这样一个函数(也许在某个你买来的DLL中):BOOL DoSomethingCool(LPCTSTR s);你象下面这样调用它:CString file("c:¥¥myfiles¥¥coolstuff")BOOL result=DoSomethingCool(file);它能正确运行。因为DoSomethingCool函数已经说明了需要一个LPCTSTR类型的参数,因此LPCTSTR被应用于该参数,在MFC 中就是返回的串地址。如果你要格式化字符串怎么办呢?CString graycat("GrayCat");CString s;s.Format("Mew!I love%s",graycat);注意由于在可变参数列表中的值(在函数说明中是以"..."表示的)并没有隐含一个强制类型转换操作符。你会得到什么结果呢?一个令人惊讶的结果,我们得到的实际结果串是:"Mew!I love GrayCat"。因为MFC的设计者们在设计CString数据类型时非常小心,CString类型表达式求值后指向了字符串,所以这里看不到任何象Format或sprintf中的强制类型转换,你仍然可以得到正确的行为。描述CString的附加数据实际上在CString名义地址之后。有一件事情你是不能做的,那就是修改字符串。比如,你可能会尝试用","代替"."(不要做这样的,如果你在乎国际化问题,你应该使用十进制转换的National Language Support特性,),下面是个简单的例子:CString v("1.00");//货币金额,两位小数LPCTSTR p=v;p[lstrlen(p)-3]=,;这时编译器会报错,因为你赋值了一个常量串。如果你做如下尝试,编译器也会错:strcat(p,"each");因为strcat的第一个参数应该是LPTSTR类型的数据,而你却给了一个LPCTSTR。不要试图钻这个错误消息的牛角尖,这只会使你自己陷入麻烦!原因是缓冲有一个计数,它是不可存取的(它位于CString地址之下的一个隐藏区域),如果你改变这个串,缓冲中的字符计数不会反映所做的修改。此外,如果字符串长度恰好是该字符串物理限制的长度(梢后还会讲到这个问题),那么扩展该字符串将改写缓冲以外的任何数据,那是你无权进行写操作的内存(不对吗?),你会毁换坏不属于你的内存。这是应用程序真正的死亡处方。CString转化成char*之二:使用CString对象的GetBuffer方法;如果你需要修改CString中的内容,它有一个特殊的方法可以使用,那就是GetBuffer,它的作用是返回一个可写的缓冲指针。如果你只是打算修改字符或者截短字符串,你完全可以这样做:CString s(_T("File.ext"));LPTSTR p=s.GetBuffer();LPTSTR dot=strchr(p,.);//OK, should have used s.Find...if(p!=NULL)*p=_T(¥0);s.ReleaseBuffer();这是GetBuffer的第一种用法,也是最简单的一种,不用给它传递参数,它使用默认值0,意思是:"给我这个字符串的指针,我保证不加长它"。当你调用ReleaseBuffer时,字符串的实际长度会被重新计算,然后存入CString对象中。必须强调一点,在

最新行测资料分析技巧:你掉进易错陷阱里了吗

资料分析这种题型复习过的同学都知道不难,但还是总是出错,正确率提升不上去,大部分原因都是因为掉入了资料分析的易错陷阱了,所以每次做完题后对错误的总结是非常重要的,而且你发现了这些易错陷阱后,反而能利用它快速把题U正确答案选出来,这里通过例题给大家做一下介绍。 一、多儿倍/是儿倍 【例112018年,全国房地产开发总投资额为120264亿元,同比增长9. 5%。其中,东部地区投资额占比53. 5%,西部地区投资额占比21.6%,中部地区投资额占比20. 9%,东北地区投资额占比4.0%0 问题:2018年,东部地区房地产开发投资额比中部地区多多少倍? A. 2. 56 B. 2. 33 C. 1. 56 D. 1. 42 【答案】C。根据“东部地区投资额占比53. 5%,中部地区投资额占比20.9%”,可得东部地区比中部地区多 所以正确答案为C项。但很多同学会看错问题“多儿倍”,而求成了“是儿倍”,导致误选A项。这就提醒大家在做倍数的题U时看清“多儿倍”或“是儿倍”再去求解。如果有细心的同学也能发现出题人正是想在这里设置陷阱,所以设置了A项,如果看出“A项-1二C项”的悄况下,乂知道所求为“多儿倍”的前提下,可直接大胆选C项。 区分:多儿倍二是儿倍-1 二.增长最快最慢/增长最多最少 【例2】 问题:2019年上半年,河南省规模以上工业生产主要产品中同比增长最快的 产品,其6月份的产量比增长最慢的产品: A.多20. 83万吨 B.少20. 83万吨 C.多881. 54万吨 D.少881. 54万吨 【答案】B。山图2可知,2019年上半年同比增长率最低的产品为十种有色金属(-1.4%),增长率最高的产品为化学纤维(13.5%)。山图1可知,2019年6 月份,十种有色金属的产量为36. 64万吨,化学纤维的产量为15. 81万吨。则所求为15. 81-36. 64-20. 83万吨。即2019年6月化学纤维比十种有色金属的产量少20. 83万吨,本题选择B项。有很多同学误以为增长最快是增长量最大,增长最慢是增长量最小,算了半天误选了C项。这就提醒大家要看清楚比较的是增长量还是增长率。

C语言32个关键字九种控制语句34种运算符

总结归纳了C语言的32个关键字 第一个关键字:auto 用来声明自动变量。可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。 例:auto int name=1; 第二个关键字:static 用来声明静态变量。可以显式的声明变量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即使使用完毕后,它的值仍旧不还原。即使没有给静态变量赋值,它也会自动初始化为0. 例:static int name=1. 第三个关键字:extern 用来声明全局变量。同时声明在main函数之前的变量也叫全局变量。它可以在程序的任何地方使用。程序运行期间它是一直存在的。全局变量也会初始化为0. 例:extern int name; 第四个关键字:register 用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。 例:register int name=1; 第五个关键字:int 用来声明变量的类型。int为整型。注意在16位和32位系统中它的范围是不同的。16位中占用2个字节。32位中占用4个字节。还可以显式的声明为无符号或有符号: unsigned int或signed int .有符号和无符号的区别就是把符号位也当作数字位来存储。也可用short和long来声明为短整型,或长整行。 例:int num; 第六个关键字:float 用来声明变量的类型。float为浮点型,也叫实型。它的范围固定为4个字节。其中6位为小数位。其他为整数位。 例:float name;

2018国家公务员行测资料分析三大陷阱

2018国家公务员行测资料分析三大陷阱根据工作安排,中央机关及其直属机构2018年度公务员招考报名时间为10月30日至11月8日,公共科目笔试时间为12月10日,届时请广大考生关注。为帮助更多考生积极备考2018湖南省公务员考试,湖南华图为你准备2018湖南公务员考试备考资料,希望对你有所帮助!! 1.时间陷阱 这类题目往往给出与原文相近的时间、日期,并在选项中给出与原文的数据以混淆视听,扰乱考生视线。 【例题】2014年我国研究与试验发展(R&D)经费支出13312亿元,比上年增长12.4%,同比下降2.6个百分点。 问题:2012年我国研究与试验发展(R&D)经费支出为多少亿元? A.10299 B.13312 C.11843 D.12159 【陷阱解析】时间陷阱。材料给出的是2014年的数据,题目求的是2012年的量,考查求隔年的量。考生往往由于大意可能会计算2013年的量,从而误选成成C,正确答案为A。解法: ,选择最接近的A选项。 【解答】时间陷阱是资料分析中最常见的陷阱之一。考生遇

到这种题目时应本着小心谨慎的态度,答案直接显示在题干中的情况应当引起足够的重视,不可抱着捡了现成便宜的心理,草草作答。对于题干中出现的多个时间或者有百分点的情况,一定弄清楚题目所求的时间,不可掉以轻心。 2.单位陷阱 在资料分析题目中,常会出现一些单位混用的情况,如千米与里,公顷与亩,万与亿,吨与千克,;材料中给出某个单位,但在题干或选项中使用的却是另一个单位,这即是单位陷阱。 【例题】2013年,全国商品房销售面积130551万平方米,比上年增长17.3%,增速比1~11月份回落3.5个百分点,比2012年提高15.5个百分点;其中,住宅销售面增长17.5%,办公楼销售面积增长27.9%,商业营业用房销售面积增长9.1%。商品房销售额81428亿元,增长26.3%,增速比1~11 月份回落4.4个百分点,比2012年提高16.3个百分点;其中,住宅销售额增长26.6%,办公楼销售额增长35.1%,商业营业用房销售额增长18.3%。 问题:2011年全国商品房销售面积约为多少亿平方米? A.92000 B.109000 C.9.8 D.10.9 【陷阱解析】单位陷阱。材料给出的单位是万平方米,问题的单位是亿平方米,正确答案为D,学生如果没有看准单位很容易误选B选项。解法:有题干知,2012年增长率为17.3%-15.5%=1.8%,则所求为:

项目效益、风险分析.doc

第四讲项目效益、风险分析 一、内容简介 本讲主要讲述了项目效益分析的静态、动态指标及项目投资风险分析。 二、学习目标 1、掌握效益分析的指标 2、掌握项目投资风险的方法 3、掌握投资项目分析需要回避的四个陷阱 三、要点提示 1、总利润率 2、年平均利润率 3、投资利润率 4、自有资金利润率 5、净现值 6、内部收益率 7、现值指数 8、全部投资静态回收期 9、全部投资动态回收期 10、贷款偿还期 11、盈亏平衡点 12、敏感因素与敏感度 13、投资项目分析的四个陷阱 四、阅读指导 《财务管理学》第四讲第三节,第五讲 《财务管理分析》之第八讲 阅读笔记 课程重点 _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ 课程难点 _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ 疑难问题: _________________________________________________________________ _________________________________________________________________ _________________________________________________________________ _________________________________________________________________

C语言中的sizeof的理解

C语言中的sizeof的理解。。 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof(var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。 注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 如sizeof(max)若此时变量max定义为int max(),sizeof(char_v)若此时char_v定义为char char_v[MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 1、若操作数具有类型char、unsigned char或signed char,其结果等于1。 ANSI C正式规定字符类型为1字节。 2、int、unsigned int、short int、unsigned short、long int、unsigned long、float、double、long double类型的sizeof在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。 4、当操作数具有数组类型时,其结果是数组的总字节数。 5、共用体类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof 是这种类型对象的总字节数。 让我们看如下结构: struct{char b;double x;}a; 在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。 这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。 6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 四、sizeof与其他操作符的关系 sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 五、sizeof的主要用途 1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: void*malloc(size_t size), size_t fread(void*ptr, size_t size, size_t nmemb, FILE*stream)。 2、sizeof的另一个的主要用途是计算数组中元素的个数。例如: void*memset(void*s, int c, sizeof(s))。

算法设计与分析(详细解析(含源代码)

常用算法设计方法 要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 一、迭代法 迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行: (1)选一个方程的近似根,赋给变量x0; (2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0; (3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为: 【算法】迭代法求方程的根 { x0=初始近似根; do { x1=x0; x0=g(x1);/*按特定的方程计算新的近似根*/ } while ( fabs(x0-x1)>Epsilon);

C语言二级考前一个月复习概况

整数的三种表示形式 表示形式 组成 开头部分 十进制 D,或不加表示 0-9 以1-9开头 八进制 O 0-7 以0开头 十六进制 H 0-9,A-F 以0x 开头 int a[100],*p; 等价语句 p=a; P=&a[0]; 等价语句 p=a+1; P=&a[1]; 文本文件 二进制文件 使用方式 含义 使用方式 含义 r 打开文本文件进 行只读 rb 打开二进制文件进行只读 w 建立新的文本文件进行只写 wb 建立二进制文件进行只写 a 打开文本文件进 行追加 ab 打开二进制文件进行追加/写 R+ 打开文本文件进 行读/写 Rb+ 打开二进制文件进行读/写 W+ 建立新的文本文件进行读/写 Wb+ 建立二进制文件进行读/写 A+ 打开文本文件进行读/写/追加 Ab+ 打开二进制文件进行读/写/追加

指针是以地址作为其值的变量,数组名的值是一个特殊的固定地址,可以作为常量指针。 类型 名称 类型名 数据长度 整型 整型 Int 32位 短整型 Short int 16位 长整型 Long int 32位 字符型 字符型 Char 8位 实型(浮点型) 单精度浮点型 float 32位 双精度浮点型 double 64位 函数 数据类型 格式 printf float %f double %e scanf float %f %e double %lf %le 字符串的输入和输出 输入 Scanf() 该函数遇到空格或回车输入结束 Gets() 该函数遇到回车符输入结束 输出 Printf() 输出时遇到’\0’输出结束 Puts() 输出时遇到’\0’输出结束 运算符 优先级 结合方式 优先级:高->低 逻辑运算符 ! 右->左 算术运算符 ++ -- + - * 右->左 * / % + - 左->右 关系运算符 <= < >= > == != 左->右 逻辑运算符 && || 左-> 右 条件表达式 ?: 右->左 赋值运算符 *= /= %= += - = = 右->左

相关文档
最新文档