C++primer_plus_第五版_学习笔记

C++primer_plus_第五版_学习笔记
C++primer_plus_第五版_学习笔记

C++源代码风格1每行一条语句2每个函数的两个花括号各占一行3函数中的语句都对于花括号进行缩进4与函数名称相关的圆括号周围没有空白(空行将声明语句与程序的其他部分分开,或在变量前声明,C++的做法是尽可能在首次使用变量前声明)。

变量名的约定:类型_名称或者是类型(int)名称(Akjl)C语言输入输出是printf,scanf,他们都包含在头文件stdio.h中

操作符重载:通过重载,同意个操作符将有不同的含义。&操作符表示地址操作符又表示AND按位操作符,又如指针*

Long | cout

Main()//可以将两个关键字分开在两行写| << //分开写

a=b=c=0;// C/C++中可以连续赋值

C++程序应当为程序中使用的每个函数提供原型,而库函数在头文件中有声明,而在库文件中有他的定义。标准C库中提供了140多个预定义函数,而main()函数不是关键字,由于它不是语法的组成头文件Stdlib.h中rand()函数不接受任何参数,并返回一个随机整数,其函数声明如下:int rand(void);

C++类型有基本类型和复合类型

Sizeof操作符能够打印类型或变量长度的单位字节数,如:sizeof(int);sizeof a;//a 为变量

的值是以前留下的

C99添加了两种类型:long long和unsigned long long 两种类型都至少是64位的

Cout<

Cout<

Cout<

Cout<<1982uL;C++打印常量时候,常量后面加L或l表示1982被存为long型,若是uL或ul表示存为unsigned long型,若是u或U表示存为unsigned int,若无后缀表示存为int。

char ch=’a’;Cout.put(ch);//成员变量put()可以打印char型变量,我们也可以写成cout.put(‘n’);

Cout<

统统字符名:通用字符名以\u或\U开头,\u后面在跟8个十六进制位,而\U后面跟16个十六进制位,这些位表示的是ISO10646编码(ISO10646是一种正在制定中的国际标准,位大量的字符提供字符编码,他与Unicode合作,确保标准同步,Unicode可以表示96000多种符号和49个手写符号,而ASCII码就是Unicode 的一个子集)

Cout<<”ni g\u00E2teau.\n”;打印如下ni gateau //a的ISO10646编码是00E2

特殊类型:wcha_t 宽字符类型 Bool类型,任何数字值或指针指都可以被隐式的转换为bool值。任何非零值都被转换为TRUE,零被转换为FALSE;反之 int aa=true;long bb=false;也成立!!

3.2 Const限定符:const long MONTHS=TRUE;//const限定符用于定义常量

Const限定符定义常量时①常量名一般全用大写,便于与变量区分;②要直接初始化,否则将无法初始化

3.3浮点数

浮点数的书写有两种方式:①常用的标注-942635;②-1.54E-4 5.6545e8 。浮点类型要添加头文件float.h,浮点型的类型有float(32位,其精度低,系统至少有6位有效数位或更低),double(64位,精度至少在13位有效位),long double(80,96,128位)。浮点常量默认为double类型若希望常量位float,要用f或F后缀,对于long double类型。使用l或L(尽量用L,l像1) cout<<2.2L<<3.12f<<8.123;//8.123为double默认型

C++标准在默认输出时会删除小数点后末尾的零,如将23.450000显示成23.45。

cout.setf(ios_base::fixed,ios_base::flatfield);//可以覆盖默认设置,让打印末尾的0显示出来

3.4 C++算术操作符

求模操作符要求两个数必须为整数

潜在的数值转换问题①大浮点型→小浮点型:精度降低可能超出目标类型的取值范围,结果是不确定的。

②浮点型→整型:小数丢失,原先的值可能超出目标类型的取值范围,结果不确定。③大整型→小整形:容易超出范围,通常只复制右边字节

强制类型转换:不会修改变量本身,而是创建一个新的指定类型的值。其格式有两种:

(long) bianliang;//c语言强制类型转换的方式

Long (bianliang);//c++风格,其想法是让强制转换类型就想是函数调用

复合类型:在C语言中叫派生类型,而C++中类使用了“派生”这个词,所以叫复合类型

主要内容:1如何创建和使用数组 2如何创建和使用C-风格字符串 3如何创建和使用string类字符串 4如何使用getline()和get()方法来读取字符串 5如何混合输入字符串和数字 6如何创建和使用结构 7如何创建和使用共享体 8如何创建和使用枚举 9如何创建和使用指针 10如何通过new和delete来管理动态内存 11如何创建动态数组 12如何创建动态结构 13自动存储、静态存储和动态存储

影响最为深远的复合类型是类,它是我们正要学习的OOP堡垒。

4.1数组(array)

数组的三要素是:每个元素的类型,数组名,元素数

数组的下标总是从0开始到(元素数减1结束);如果下标超界,编译器不会报错,但可能破坏数据或代码也可能异常终止。所以必须确保有效下标!!

Long kk[10]={10,12,6856,12};//数组初始化,有逗号隔开,大括号里元素可以少于元素总数

Long jj[10]; //数组的这种初始化只能用与定义数组的时候。

Cout<

Cout<

Jj=kk;//不能将以个数组的值赋给另一个数组

Long kk[15]={0};//将没个元素都初始化为0的方法,为被定义的元素自动初始化为0!!

Long kk[]={0,523,54,3,4};//编译器计算出[ ]内的元素个数,这里为5个

Long long_kk=sizeof kk/sizeof(short);//我们不知道数组的个数是多少这样就知道了

4.2 字符串

C++处理字符串的方式有两种1:来自C语言,常被称为C-风格字符串;另一种基于string类库

定义两个char型数组:

Char dog[5]={‘a’,’b’,’c’,’d’,’c’};//定义了一个char型数组,储存的不是一个字符串

Char cat[5]={‘a’,’b’,’c’,’d’,’\0’};//储存的是一个字符串,到空字符结束!!

//在确定存储的字符串所需的最短数组时,别玩了将结尾的空字符计算在内

另一种初始化字符串的方法:

Char kk[]=”nihao!!”;编译器会在字符串最后加上”\0”字符;字符串用双引号,字符单引号拼接字符串常量:下面的语句是等效的!!

Cout<<”我们可以将字符串分开””写,但双引号紧靠着,中间无符号”;//不建议采用这种方法

Cout<<”我们也可以将字符串直接写在一对双引号内”;

Cout<<”我们也可以将字符串分开写,”//这中方法是解决一行内字符串太多,分行写

”并像这样放在两行里,第一行末尾没有分号”;

Strlen()函数是标准函数库cString的函数用来确定字符串的长度!!

Char kk[15]=”nihao!”;//strlen只计算可见字符,不把空字符计操作数在内

Cout<

Kk[3]=’\0’; //当cout读到’\0’时变停止

Cout<

打印如下:6 15 nih !

读取一行字符串的输入:istream中的类(如cin)提供面向行的类成员函数:getline()和get().

Getline()将丢去换行符,而get()将换行符保留在输入序列中!!

Getline()有两个参数,第一个是数组名第二个是读取字符数-1(如若是20,最多度19个)

在读取指定数目的字符或遇到换行符书停止读取。不保存换行符,最后用空字符代替

Get()有几个变体!!其中一个与getline相似他们接受参数相同,解释参数也相同。

该函数并不是用空字符代替换行符,而是插入,并将换行符保留在输入列中,这样get()将无法跨行,因为下个get()一开始就读到了换行符,并有把他保存在输入队伍中.

Cin.get(kk,20);

Cin.get();//Get()另一个变体cin.get()可读取一个字符,即使是换行符,这样就可以保留在

Cin.get(mm,20); //输入列中

我们可以将两个类成员函数合并:cin.get(array,200).get();//第一个get()返回一个cin对象,该对象随后被用来调用第二个get()函数!!同样:cin.get(array,200). cin.get(array,200);也是可以的等效于调用两次getline()。而cin.get().get()则不行,以为第一个get()不返回对象.

混合输入字符串和数字:

Int a; char kk[100];

Cin<

Cin.getline(kk,100);//如果就这样,我们将无法输入字符串就跳到下一行,因为上一行有回车

C++程序长使用指针(不是数组)来处理字符串

4.3 string类简介

Stringl类包含在头文件string里,且位于名称空间std中。String对象的方式与使用字符数组想用:可以使用C-风格字符串来初始化string对象;可以使用cin来将键盘输入存储到string对象中;可以使用cout来显示string对象;可以用数组的表示法访问其中的字符

理论上,char数组是存储一个字符串的存储单元,string类变量是一个表示字符串实体

String str1=”kjlsamdl”,str2,str3;//string对象我们可以看做是一个变量,可以连续定义

str2=str1;//我们可以将以个String对象赋给另一个String对象

str2+=str1;//我们可一将string对象相加,+=是将以个字符串附加到另一个String对象的末尾

Str2+=“nikan”;//我们也可以将一个String对象的末尾加上一个字符串

String类是C++新增的String库来处理输入的字符串,c语言中的字符串可以使用头文件cstring提供的函数来完成

Char char1[20]=”jjjj”,char2[20];//数组也可以连续定义,要注意不要超出数组的大小!!

Strcpy(char2,char1);//strcpy()能将char1中的字符串赋值到char2中,不能超出数组的大小,会破坏数据;发生错误!!

Strcat(char2,”kkkk”) ;//strcat()函数能将字符串”kkkk”附加到char2字符串的末尾处

cout<

打印结果:jjj jjjkkkk 4

String str=“123”;//如果没有初始化,str为0个字节,他能够随着输入字符串的大小自动调节

Getline(cin,str),//string对象比istream晚很多时间所以cin.getline(str,200)不能用,这样只换str 这个string对象名

Int kk=Str.size();size()是string对象的方法,他能够读出str内的字符串个数(不带’\0’空字符),这

里为3个字符

4.4 结构(struct)简介

结构可以存储多种类型的数据。定义结构描述:1它描述并标记了能够存储在结构中的各种数据类型;2按描述创建变量每个列表项都是一条声明语句,每一个声明语句都是一个结构成员

Struct inflatable goose;//定义结构变量这种风格是C 语言中的

Inflatanle vincent;//C++可以省略struct关键字

Goose.price就相当于一个double类型的变量,可以像常规使用double变量那样来使用它们,访问类成员函数就是从访问结构成员这里衍生来的,结构也是C++OOP(类)堡垒的基石

Struct inflatable//当然我们可以不加结构名称inflatable而建立以个结构变量kk,用kk来调用其结构的成员,但因为没有

{ char name[20]; //结构名称,所以不能定义其他的结构变量,这样后续程序将不能使用该结构Float aa;

Double bb;

} kk= //我们可以在定义结构时直接定义结构变量,我们也可以直接对其初始化!!{“wangweiming”,//初始化结构变量之间必须用逗号!!

12.3,//要用逗号!!C++不提倡使用外部变量,但提倡使用外部结构声明,还提倡外部声明符号常量

6.8};//最后一个成员变量值后面不用加逗号,大括号的后面一定要加分号!!

Inflatable mm={“wangweiming”,12.3,6.8};//我们可以直接对结构变量进行初始化,成员间用逗号,末尾用分号

Inflatable ll;ll=mm;//我们可以将结构赋给另一个同类型的结构

结构数组:inflatable kk[2]= //结构数组是一个数组,而不是一个变量,这样数组中的每个值都是一个结构变量

{{“shuzu0”,0.5,13.546},//每个结构数组变量初始化在一行内,也可以分开,用{}扩起来,同时每部变量用逗号

{“shuzu1”,513.1,56.133}};//结构数组变量之间也用逗号进行分隔,也可以放在一行内结构中的位字段

4.5 共用体(union):是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。结构能够同时存储各种类型,而共用体只能存储一种类型,因此共用体的长度为其最大成员的长度。公用体的用途之一是党数据项使用两种或更多种格式(但不会同时使用)时,可以节省空间

Union mingcheng{long long_aa;bouble bouble_aa;}bianliang;//语法与结构一样,但每次只调用一个成员,可直接定义变量

Cout<

匿名共用体:没有名称,其成员将成为位于相同地址处的变量。显然每次只有一个成员是当前的成员Struct inflatable{char name[20];double hehe;union{long long_aa;double double_aa;};};

Inflatable jiegou_bianliang;cout<

4.6枚举类型(enum)提供了另一种创建符号常量的方式,这种方式可以代替const。也可以定义新的类型Enum kk{a,b,c,d,e};//kk也称为枚举,a.b.c等也称为枚举量,第一个枚举量为0,往后依次类推

Kk meijubianliang=k;//枚举变量只能等于枚举量,不能等于其他非kk枚举的枚举量

Meijubianliang=kk(12);//我们可以通过枚举来给枚举变量赋值,通过这种方法给枚举变量赋值的范围:

上限:大于枚举量的最大值的最小的2的幂减一,如:上式中最大枚举量是4,那上限是2^3-1=7;

下限:如果不小于零则下限是0;如果小于零,则为小于最小枚举量的最大2的幂加一,如最小为-6,则最小范围为-(2^3)+1=-7

选择用多少空间来存储枚举由编译器决定,对于范围小的枚举使用一个字节或更小的空间;

Enum kk={a=0,b=0,c=100,d,f};//枚举量可以相同,当c=100,则d=101,f=102

4.7指针和自由存储空间

C++基本原理:面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段而不是编译阶段进行决策。指针用于存储值的地址,指针名表示的是地址。*操作符被称为间接值或解除引用操作符,如m表示的是一个地址,*m表示储存在该处的值

操作符*两边的值是可选的。Int* p_kare=&kk;//被初始化的是指针本身,而不是他指向的值!!

c程序员使用这种格式:int *ptr;而C++使用这种格式:int* ptr;在C++中,int*是一种复合类型,是指向int的指针。

Int* p1,p2;//这样将创建一个指针p1和一个常规int变量p2。对于每一个指针变量名,都需要使用一个*。Int*a;*a=23;//未初始化的指针的危险!!在定义指针时将指针初始化为宜个确定的、适合的地址。这是使用指针的金科玉律

Int* pt=0xB8000000;//错误!!C++不允许将一个整型付给指针,指针类型与整型是不一样的!!

Int* pt=(int*)0xB8000000;//我们可以通过强制类型转换将整型转换为适当的地址类型!!

为一个数据对像(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下;

TypeName pointer_name =new typeName;

Int* ps=new int;//定义一块新的内存区域

Int* pn=ps;//不要创建两个指针指向同意个内存块的指针,因为这将增加错误删除同一内存块两次的可能!!等于释放两次!

delete pn;//删除指针指向内存块而不是指针的值,释放ps的内存,但不会删除指针pn本身!可将其指向另一个新内存块

Delete的使用①一定要配对使用,否则将发生内存泄露,被分配的内存将无法再使用了,如果泄露严重,程序将由于不断寻找更多内存而终止②不能释放已释放的内存块,否则结果将不确定,这意味着什么情况都可能发生③不能释放声明变量所获取的内存,不过,对空指针使用delete是安全的!!

在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加到程序中的,这种叫做静态数组;可以在程序运行时选择数组的长度被称为动态联编,意味着数组是在程序运行时创建的,这种叫做动态数组。为数组分配内存的通用格式如下:type_name = new type_name [num_elements];如:long* p_kk = new long [100];

释放一个new[]数组要用delete [] zhizhenming;

动态数组的使用

Int* a = new int [2];a[0]=0;a[1]=1;//初始化!可以将他看成int a[2]数组来处理,a存储的地址为数组第一个值的地址!

a+=1;//此时a[0]=1; a-=1;//此时a[0]=0 delete [] a;//将指针的值切换为数组的第一个值的地址,便于释放!!

4.8指针、数组和指针算术:指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式

规范一下:*p不是指向类型的指针,而是完全等同于一个类型的变量;p才是指针!!

将指针变量加一,就是增加的值等于指向的类型占用的字节数!如:long* a;a++;//a指针变量保存的地址加四

*(pointname+j)=pointname[j]或者arrayname[j]=*(arrayname+j)//数组表示法与指针表示法之间区别区别:①可以修改指针值,而数组名是常量;②sizeof操作符对数组得到的是数组长度,而对指针得到的是指针的长度,即使指针指向的是一个数组!!

指针和字符串:数组和指针的特殊关系可以扩展到C-风格字符串!!

Char flower[10]=”nihao”;//常规定义一个char型数组来存储字符串

Cout<

//后面字符串打印,cout只知道第一个字符的地址,打印知道遇到’\0’结束

在cout和多数C++表达式中,char数组名、指向char的指针以及应用口号的字符串常量都被解释为字符串第一个字符的地址!

Const char* pp=”niaho”;// ”niaho”表示是其第一个字符的地址,所以pp所保存的地址为字符串第一个字符的地址!!

//形式与char型数组一样,但char型数组的数组名可以重新定义数组的字符串,但是常量字符串不能被定义!!Cout<

Char型数组在初始化后从新定义时,初始化话的字符串将被清空而重新定义

警告!!在将字符串读入程序时,应使用已分配的内存地址,该地址可以是数组名也可以是new初始化过的指针。如果给cout提供一个指针,他将打印地址。但如果指针类型为char则cout将显示指向的字符串!!如果要显示字符串的地址,则要用强制转换符转换成另一种指针类型,对其进行转换cout<<(int*)p<

用strcpy()可以将一个字符串数组复制给另一个字符串数组如:atrcpy(shuzu1,”zif”);//也以将字符串复制给数组

但当数组的空间不足时,会超出数组内存,超出部分将覆盖数组后面的其他内存;这样讲会影响程序运行,因此我们用strncpy这个函数来复制如:strncpy(shuzu,”nai znlls”,5);//它将字符串的前五个字符付给了数组,但它不能添加空字符‘\0’

所以要这样 shuzu[5]=’\0’;//我们要添加一条语句,确保字符数组的最后为空字符,要不然他存储的不是字符串了

使用new创建动态结构:在运行时创建数组优于在于编译时创建数组,对于结构也是如此。

Struct inflatable{ char name[20];float volume ;double price;};//创建结构模板,定义其中的结构成员!!

Inflatable *ps = new inflotable;//定义一个指针指向在堆中创建的结构;ps表示指向结构的指针,*ps 是表示结构变量

Cin.get((*ps).name,20);//由于我们创建的结构变量没有名称,而只有指向他的指针,所以可以用*ps表示结构名称!!

Cout<name<来访问结构成员!

记住:结构变量名来访问成员时用句点符(.),当用指向结构变量名的指针来访问成员时要用->操作符

第五章的主要内容:①for循环②表达式和语句③递增和递减操作符:++和-- ④组合赋值操作符⑤复合语句(语句块)⑥都好操作富⑦关系操作符⑧while循环⑨typedef工具⑩get()字符输入方法⑾文件尾条件⑿嵌套循环和二维数组

For循环:其中的判断表达式都能转换成bool型,如判断表达式为I,若i=1为真,若i=0为假,而所有的表达式也都可以转化成bool类型的true或者false类型;C++表达式都是值与操作符的组合,每个C++表达式都有值!!

Maid=(cooks=4)+3;//在c++中可以这样做,但是不提倡这样做,这样只是为了让x=y=z=0;这样的语句存在

Long a=100;cout<1;//a>1这个表达式为真成数值1,他将显示一个数字1!要成为表达式就必须能确定其值!

cout.setf(ios.base::boolalpha);//将输出结果转化成bool类型,同时用true和false表示,而不是1和0

cout<

定义一个const值来表达数组中的元素个数是好的。在声明数组和引用数组长度时,可以使用const值!在string类的size()获得字符串中的字符数,如:string word ;cin>>word;int kk=word.size();

C++//表示先使用当前的,使用完后就加一。++C//表示先加一后,在使用其值!!

组合赋值操作符:有+= -= *= /= %=

复合语句(也叫语句块):单独的一对大括号也是一个语句块在一个语句块内定义的变量到语句块外面后

就释放了

逗号操作符:逗号操作符的优先级是最低的。如:i=20,j=i*2;//两个语句是有先后顺序,翻过来是不行的

For(long i=0,j=10;i

关系表达式:< > <= >= == !=;//for第二个关系表达式如果为赋值表达式则其表达式的值是TRUE C-风格字符串的比较:我们要用到cstring类库中strcmp()可以比较两个字符串的大小,是否相等。

如果两个字符串相同则该函数返回的值为零;如果第一个字符串按字母顺序排在第二个字符串之前,则返回一个负数;如果第一个字符串按字母顺序排在第二个字符之后,则返回一个正数。Char aa[20];if(aa==”nihao”)//错误,比较两个字符串地址

String类字符串的比较:String类的比较字符串方法是比较简单的!!

String str1;str1 = “nihao”;//这里比较的是两个字符串,并非比较的是内存地址!!

5.3while循环:while(1);{…}//分号是一个结束语句,while是没有循环体,是一个死循环,编译时什么也不动

用whlie循环来计时:在ctime头文件中clock()可以解决计时问题。Ctime提供了以个符号常量CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数。将系统时间除以这个值将得到秒数,将秒数除以这个变量可以得到以系统时间为单位的时间。Clock_t是clock()函数返回类型的别名,我们可以将变量声明为clock_t类型,他表示long、unsignde int或系统其他类型

类型别名:c风格的预处理命令#define 和 c++的typedef都可以来创建类型别名!

#define ch char;//在编译时所有的ch都被替换成char*,这样ch kk;中的kk就是以个char型指针!!这里用char代替ch

Typedef char* ch;//我们也可以这样,有时我们只能这样,这是C++风格这里我们用char*来代替ch Do whlie循环:这种循环不如前两种,但他有他的特别用法,如让用户输入一个数后在做判断,这个循环至少循环一次!

5.5循环文本输入

cin>>ch;// 使用原始的输入能将键盘输入的下一个字符输入到变量中,但他能将空格、换行符和制表符忽略。

Cin.get(ch);//读取下一个字符,不管该字符是什么,并将其存储在ch中。其通过返回转换为FALSE的bool 值确定已达到EOF

Ch=Cin.get();//成员函数调用cin.get()返回下一个输入字符,包括空格、换行符合制表符通过返回EOF值来指出已达到EOF

EOF检测文件尾:EOF是在文件iostream中定义的

5.6嵌套循环和二维数组

Long kk[2][3]= //我们可以将其看成包含2个元素的数组,而没个元素有包含了3个long型整数的数组。{{13,12,11},//初始化时每一行内用逗号,没一行之间用逗号,结尾用分号,同一纬数组一样要将其在最后加分号!!

{15,16,18}};//我们可以把他们写在一行内,但作为一种风格,分行写成表格的形式,清晰也便于查找Char* kk[2]={“nihao”,//定义一个指针数组,并进行初始化!初始化和普通数组一样,只不过这里的值是没个字符串

”kk[1]时就等于调用了第一个字符串

if(3==kk)//我们这样做如果==写成=,编译器就会报错!而if(kk=3)将恒成立

6.2逻辑表达式

OR操作符||:i++ <6||i>6//如果i=10,则在比较i>6时,i会变成11!!

AND操作符&&:if(1

永远小于5!

NOT操作符!:!操作符的优先级高于所有的关系操作符和算术操作符,对表达式求反,必须用括号括起来逻辑AND操作符的优先级高于逻辑OR操作符!x!=0&&1/x>10;//如果x=0,第一个条件为假,后面的就不在判断了,避免了除零

逻辑操作符的另一种表示方式:就是用NOT、OR、AND来代替! || &&。在C语言中要加上头文件iso646.h,他们不是C语言的保留字,在c++中不用头文件了,他们都是c++的保留字!!

6.3字符函数库cctype

该函数库中的函数能够判断,输入的字符是大写,小写,数字,空格,符号等,比用逻辑操作符判断起来简单多了!

6.4?:操作符:他是C++唯一一个需要两个操作符的操作符,在程序员中广受欢迎!

6.5switch语句:当选择不是一个范围时,超过3个以上选项,一般就用switch语句,都不符合就用

default:i++;break;

Case ‘c’://如果case后面没有break;那么将执行下一个case,直到碰到break!!case标签都必须是一个单独值,非范围

Case ‘C’:hanshu();break;//这样输入大写小写都行,这也是一种解决大小写一样的一种方法

6.6break和continue

Break是用在switch语句或任何循环中,他能够跳出switch或循环后面的语句出执行

Continue语句用于循环中,让程序跳过循环体当前一轮循环后面的代码,并开始下一轮循环;

Goto语句:一般情况下不要用goto语句,容易造成错误,一般在多层嵌套循环内层,直接跳出,用goto比

void kk(long j);//声明 void kk(long k){}//定义

在函数参数的过程中,如果基本类型(非复合类型)不匹配,C++会自动强制类型转换,但尽量避免强制类型转换,造成数据破坏

7.3函数与数组

引用的属性和特别之处long kk=10;viod hans(long&kk);void hanshans(const long&kk)//声明变量、定义函数

为了保证被调用函数只使用调用函数的变量值,而不是是修改变量值,我们一般情况下是不用引用的,如果要用引用我们可以将被调用函数中的引用声明为const引用,这样我们只能使用该函数,但是不能修改它的值,这就像是const long*const kk;

Void hans(kk+3);//这是错误的,现在的C++ 是不允许将表达式传递给引用,当然在早期是可以的,而按值传递是允许的

Void hanshans(kk+3);//这是正确的,在现在C++中如果参数定义为const引用时,我们可以给他传递非变量名的参数因为这样//他创建了临时变量,用引用指向临时变量时,不会修改器临时变量值,这样避免了想修改原函数变量值,但没修改的状况

//用const我们编程时不会去修改原函数的变量!!在C++中使用引用时尽量将引用声明为const这样传递的类型可以转换

将引用于用于结构:引用非常适合用于结构和类,C++加入引用主要为了用于这些类型的,而不是基本

1程序员能够修改调用函数中的数据对象

2通过传递引用而不是整个数据对象,可以提高程序的运行速度

当数据对象较大时,如结构与类对象,第二个原因最重要。这也是使用指针参数的原因。这是有道理的,因为引用参数实际上是及与指针的代码的另一个接口。那么,什么时候应使用引用、什么时候使用指针、什么时候又应按值传递,应遵循下面原则:

1如果数局对象很小,如内置数据类型或小型结构,则按值传递

2如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const指针

3如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率,这样可以节省复制结构所需的时间和空间

4如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++新增这项特性的主要原因,因此,传递类对象参数的标准方式是按引用传递

对于修改调用函数中数据的函数:

1如果数据对象是内置数据类型,则使用指针。如果看到诸如fun(&kk)这样的代码(其中kk是long型),则将修改kk

2如果数据对象是数组,则只能使用指针

3如果数据对象是结构,可以使用指针与引用

4如果数据对象是类对象,则使用引用。

有机化学_第五版答案(完整版)

《有机化学》(第五版,李景宁主编)习题答案 第一章 3、指出下列各化合物所含官能团的名称。 (1) CH 3CH=CHCH 3 答:碳碳双键 (2) CH 3CH 2Cl 答:卤素(氯) (3) CH 3CHCH 3 OH 答:羟基 (4) CH 3CH 2 C=O 答:羰基 (醛基) H (5) CH 3CCH 3 答:羰基 (酮基) (6) CH 3CH 2COOH 答:羧基 (7) NH 2 答:氨基 (8) CH 3-C ≡C-CH 3 答:碳碳叁键 4、根据电负性数据,用和标明下列键或分子中带部分正电荷和负电荷的原子。 答: 6、下列各化合物哪个有偶极矩?画出其方向 (1)Br 2 (2) CH 2Cl 2 (3)HI (4) CHCl 3 (5)CH 3OH (6)CH 3OCH 3 答:以上化合物中(2)、(3)、(4)、(5)、(6)均有偶极矩 (2) H 2C Cl (3 )I (4 ) Cl 3 (5)H 3C OH (6) H 3C CH 3 7、一种化合物,在燃烧分析中发现含有84%的碳[Ar (C )=12.0]和16的氢[Ar (H )=1.0],这个化合物的分子式可能是

(1)CH 4O (2)C 6H 14O 2 (3)C 7H 16 (4)C 6H 10 (5)C 14H 22 答:根据分析结果,化合物中没有氧元素,因而不可能是化合物(1)和(2); 在化合物(3)、(4)、(5)中根据碳、氢的比例计算(计算略)可判断这个化合物的分子式可能是(3)。 第二章 习题解答 1、用系统命名法命名下列化合物 (1)2,5-二甲基-3-乙基己烷 (3)3,4,4,6-四甲基辛烷 (5)3,3,6,7-四甲基癸烷 (6)4-甲基-3,3-二乙基-5-异丙基辛烷 2、写出下列化合物的构造式和键线式,并用系统命名法命名之。 (3)仅含有伯氢和仲氢的C 5H 12 答:符合条件的构造式为CH 3CH 2CH 2CH 2CH 3; 键线式为; 命名:戊烷。 3、写出下令化合物的构造简式 (2)由一个丁基和一个异丙基组成的烷烃 (4) 相对分子质量为100,同时含有伯、叔、季碳原子的烷烃 答:该烷烃的分子式为C 7H 16。由此可以推测同时含有伯、叔、季碳原子的烷烃的构造式为(CH 3)3CCH(CH 3)2 (6) 2,2,5-trimethyl-4-propylnonane (2,2,5-三甲基-4-丙基壬烷) CH 3CH 2CH 2CH 2CHCHCH 2CCH 3 CH 3 CH 3CH 3 nC 3H 7

软件工程导论(第5版)课后习题答案

1-5 根据历史数据可以做出如下的假设: 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位) 如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美元/字) 在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。 基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算: (1) 在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少? (2) 假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。 (3) 假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。 ●(1)在1985年对计算机存储容量的需求,估计是 M=4080e0.28(1985-1960)=4474263(字) ●如果字长为16位,则这个存储器的价格是 ●P=0.048*0.72 1985-1974*4474263=$5789 ●(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令。 ●在1985年一名程序员每天可开发出10条指令,如果每月有20个工作日,则每人 每月可开发出10×20条指令。 ●为了开发出4474263条指令以装满存储器,需要的工作量是: 4474263/200=22371(人月) ●程序员的月平均工资是4000美元,开发出4474263条指令的成本是 22371*4000=¥89484000 ●(3)在1995年对存储容量的需求估计为: M=4080E0。28(1995-1960)=73577679(字)=4080E9.8 ●如果字长为32位,则这个存储器的价格是: P=0.003*32*0.72(1995-1974)*73577679=$7127 ●如果一条指令为一个字长,则为使存储器装满程序共需73,577,679条指令。 ●在1995年一名程序员每天可开发出30条指令,每月可开发出600条指令,为了开 发出可装满整个存储器的程序,需要的工作量为 73577679/600=122629(人月) ●开发上述程序的成本为: 122629*6000=$735776790 1-6 什么是软件过程?它与软件工程方法学有何关系?

c++primerplus中文版第六版源代码

C++ primer plus 中文版第六版源代码 第二章到第四章,后续继续更新……… 第二章 1:#include void main() { using namespace std; int carrots; carrots=25; cout<<"I have "; cout<

2:#include int stonetolb(int); int main() { using namespace std; int stone; cout<<"Enter the weight in stone: "; cin>>stone; int pounds=stonetolb(stone); cout< void main()

{ using namespace std; int carrots; carrots=25; cout<<"How many carrots do you have?"<>carrots; cout<<"Here are two more."; carrots=carrots+2; cout<<"Now you have "< using namespace std; void main() { cout<<"Come up and C++ me some time.";

有机化学-第五版-第十二章答案

有机化学-第五版-第十二章答案

第十二章 羧酸 1. 命名下列化合物或写 出结构式。 H C CH 2COOH 3 H 3C (1) Cl 2COOH CH 3 (2) COOH COOH (3) (4) CH 3(CH 2)4CH=CHCH 2CH=CH(CH 2)7COOH (5) 4-methylhexanoic acid (6) 2-hydroxybutanedioic acid (7) 2-chloro-4-methylbenzoic acid (8) 3,3,5-trimethyloctanoic acid 1. 解:(1)3-甲基丁酸 (2)3-对氯苯基丁酸

(3)间苯二甲酸 (4)9,12-十八二烯酸 (5) CH3CH2CHCH2CH2COOH 3 CHCOOH HO 2 COOH (6) COOH H3C (7) (8) CH3CH2CH2CHCH2CCH2COOH 33 CH3 2.试以方程式表示乙酸与下列试剂的反应。 (1)乙醇(2)三氯化磷(3)五氯化磷(4)氨 (5)碱石灰热熔 2.解:(1) CH3COOH + C2H5OH H+ CH3COOC2H5 + H2O (2)

CH 3COOH + PCl 3CH 3COCl + H 3PO 3 (3) CH 3COOH + PCl 5 CH 3COCl + POCl 3 + HCl (4) (5) △ CH 3COOH 碱石灰4 3.区别下列各组化合物。 (1) 甲酸、乙酸和乙醛; (2) 乙醇、乙醚和乙酸; (3) 乙酸、草酸、丙二酸; (4) 丙二酸、丁二酸、己二酸 3 解: CH 3COOH + NH 3 CH 3COONH 4 CH 3CONH 2 + H 2O Δ

C Primer Plus第6版编程练习答案

Chapter 2 Programming Exercises PE 2--‐1 /* Programming Exercise 2-1 */ #include <> int main(void) { printf("Gustav Mahler\n"); printf("Gustav\nMahler\n"); printf("Gustav "); printf("Mahler\n"); return 0; } PE 2--‐3 /* Programming Exercise 2-3 */ #include <> int main(void) { int ageyears; /* age in years */ int agedays; /* age in days */ /* large ages may require the long type */ ageyears = 101; agedays = 365 * ageyears; printf("An age of %d years is %d days.\n", ageyears, agedays); return 0; } PE 2--‐4 /* Programming Exercise 2-4 */ #include <> void jolly(void); void deny(void); int main(void) { jolly(); jolly(); jolly(); deny(); return 0; } void jolly(void) { printf("For he's a jolly good fellow!\n"); } void deny(void) { printf("Which nobody can deny!\n"); } PE 2--‐6 /* Programming Exercise 2-6 */ #include <> int main(void) { int toes; toes = 10; printf("toes = %d\n", toes);

计量经济学(伍德里奇第五版中文版)答案

第1章 解决问题的办法 1.1(一)理想的情况下,我们可以随机分配学生到不同尺寸的类。也就是说,每个学生被分配一个不同的类的大小,而不考虑任何学生的特点,能力和家庭背景。对于原因,我们将看到在第2章中,我们想的巨大变化,班级规模(主题,当然,伦理方面的考虑和资源约束)。 (二)呈负相关关系意味着,较大的一类大小是与较低的性能。因为班级规模较大的性能实际上伤害,我们可能会发现呈负相关。然而,随着观测数据,还有其他的原因,我们可能会发现负相关关系。例如,来自较富裕家庭的儿童可能更有可能参加班级规模较小的学校,和富裕的孩子一般在标准化考试中成绩更好。另一种可能性是,在学校,校长可能分配更好的学生,以小班授课。或者,有些家长可能会坚持他们的孩子都在较小的类,这些家长往往是更多地参与子女的教育。 (三)鉴于潜在的混杂因素- 其中一些是第(ii)上市- 寻找负相关关系不会是有力的证据,缩小班级规模,实际上带来更好的性能。在某种方式的混杂因素的控制是必要的,这是多元回归分析的主题。 1.2(一)这里是构成问题的一种方法:如果两家公司,说A和B,相同的在各方面比B公司à用品工作培训之一小时每名工人,坚定除外,多少会坚定的输出从B公司的不同? (二)公司很可能取决于工人的特点选择在职培训。一些观察到的特点是多年的教育,多年的劳动力,在一个特定的工作经验。企业甚至可能歧视根据年龄,性别或种族。也许企业选择提供培训,工人或多或少能力,其中,“能力”可能是难以量化,但其中一个经理的相对能力不同的员工有一些想法。此外,不同种类的工人可能被吸引到企业,提供更多的就业培训,平均,这可能不是很明显,向雇主。 (iii)该金额的资金和技术工人也将影响输出。所以,两家公司具有完全相同的各类员工一般都会有不同的输出,如果他们使用不同数额的资金或技术。管理者的素质也有效果。 (iv)无,除非训练量是随机分配。许多因素上市部分(二)及(iii)可有助于寻找输出和培训的正相关关系,即使不在职培训提高工人的生产力。 1.3没有任何意义,提出这个问题的因果关系。经济学家会认为学生选择的混合学习和工作(和其他活动,如上课,休闲,睡觉)的基础上的理性行为,如效用最大化的约束,在一个星期只有168小时。然后我们可以使用统计方法来衡量之间的关联学习和工作,包括回归分析,我们覆盖第2章开始。但我们不会声称一个变量“使”等。他们都选择学生的变量。 第2章 解决问题的办法

C Primer Plus (第六版)中文版 6.16编程练习

//******************6.15复习题************************** //*********** 6 ************************** #include int main(void) { int i, j; for (i = 0; i < 4; i++) //外层循环控制行内层循环控制列 { for (j = 0; j < 8; j++) { printf("$"); } printf("\n"); } return 0; } //******************6.16 编程练习 ************************** //****************** 一 ************************** #include #define SIZE 26 int main(void) { char array[SIZE]; int index = 0; array[0] = 'a'; printf("%c", array[0]); for (index = 1; index < SIZE; index++) { array[index] = 'a' + index; printf("%c", array[index]); } return 0; } //****************** 二 ************************** #include int main(void)

{ int i, j;//i控制行,j控制列计数作用 for (i = 0; i < 5; i++) { for (j = 0; j < =i ; j++) { printf("$"); } printf("\n"); } return 0; } //****************** 三 ************************** #include int main(void) { int i;//外层循环控制行 int j;//内层循环控制列 char ch = 'F'; for (i = 0; i < 6; i++) { for (j = 0; j <= i; j++) printf("%c", ch-j ); printf("\n"); } return 0; } //****************** 四 ************************** #include int main(void) { int i;//外层循环控制行 int j;//内层循环控制列 char ch = 'A'; for (i = 0; i < 6; i++) { for (j = 0; j <= i; j++) printf("%c", ch++ ); printf("\n");

伍德里奇计量经济学第六版答案Appendix-E

271 APPENDIX E SOLUTIONS TO PROBLEMS E.1 This follows directly from partitioned matrix multiplication in Appendix D. Write X = 12n ?? ? ? ? ? ???x x x , X ' = (1'x 2'x n 'x ), and y = 12n ?? ? ? ? ? ??? y y y Therefore, X 'X = 1 n t t t ='∑x x and X 'y = 1 n t t t ='∑x y . An equivalent expression for ?β is ?β = 1 11n t t t n --=??' ???∑x x 11n t t t n y -=??' ??? ∑x which, when we plug in y t = x t β + u t for each t and do some algebra, can be written as ?β= β + 1 11n t t t n --=??' ???∑x x 11n t t t n u -=??' ??? ∑x . As shown in Section E.4, this expression is the basis for the asymptotic analysis of OLS using matrices. E.2 (i) Following the hint, we have SSR(b ) = (y – Xb )'(y – Xb ) = [?u + X (?β – b )]'[ ?u + X (?β – b )] = ?u '?u + ?u 'X (?β – b ) + (?β – b )'X '?u + (?β – b )'X 'X (?β – b ). But by the first order conditions for OLS, X '?u = 0, and so (X '?u )' = ?u 'X = 0. But then SSR(b ) = ?u '?u + (?β – b )'X 'X (?β – b ), which is what we wanted to show. (ii) If X has a rank k then X 'X is positive definite, which implies that (?β – b ) 'X 'X (?β – b ) > 0 for all b ≠ ?β . The term ?u '?u does not depend on b , and so SSR(b ) – SSR(?β) = (?β– b ) 'X 'X (?β – b ) > 0 for b ≠?β. E.3 (i) We use the placeholder feature of the OLS formulas. By definition, β = (Z 'Z )-1Z 'y = [(XA )' (XA )]-1(XA )'y = [A '(X 'X )A ]-1A 'X 'y = A -1(X 'X )-1(A ')-1A 'X 'y = A -1(X 'X )-1X 'y = A -1?β . (ii) By definition of the fitted values, ?t y = ?t x β and t y = t z β. Plugging z t and β into the second equation gives t y = (x t A )(A -1?β ) = ?t x β = ?t y . (iii) The estimated variance matrix from the regression of y and Z is 2σ(Z 'Z )-1 where 2σ is the error variance estimate from this regression. From part (ii), the fitted values from the two

CPrimerPlus第6版中文版勘误表

注意:下面的勘误中,红色字体为修改后的文字,提请各位读者注意。 第 6 页,” 1.6 语言标准”中的第 3 行,将 1987 年修改为 1978 年。 第 22 页,” 2. main ()函数”中的第 1 行, int main (void ) 后面的分号( ; )删除。 第 24 页,“5. 声明”的第 10 行,也就 是一个变量、函数或其他实体的名称。 第 27 页,图 2.3 中,下划线应该只包含括号中的内容;第 2 段的第 4 行,而不是存储 在 源代码 中的指令。 第 30页,“2.5.4 打印多个值”的第 4行,双引 号后面的第 1 个变量。 第 34页,“2.7.3 程序状态”第 2段的第 4 行,要尽量忠实 于代码来模拟。 第 35页,“2.10 本章小结”第 2段的第 1句,声明 语句为变量指定变量名, 并标识该变量中存 储的数据类型;本页倒数第 2 行,即 检查程序每执行一步后所有变量的值。 第37页,“2.12编程练习”中第1题,把你的名和姓打印在一行……把你的 名和姓分别打印在 两行……把你的 名和姓打印在一行……把示例的内容换成你的 名字。 第 40 页,第 1 行,用于把英 磅常衡盎司转换为… … 第44页,“3.4 C 语言基本数据类型”的第 1句,本节将 详细介绍C 语言的基本属性类型…… 第 46页,“5. 八进制和十六进制”的第 4句,十六进制数 3的二进制数 是 0011,十六进制数 5 的二进制数 是 0101;“6. 显示八进制和十六进制”的第 1 句,既可以使用 也可以 显示不同进制 的数;将“回忆一下……程序在执行完毕后不会立即关闭执行窗口”放到一个括号里。 第 47页,“2. 使用多种整数类型的原因”第 3句,过去的一台运行 Windows 3.x 的机器上。 第 53 页,图 3.5 下面的第 4 行“上面最后一个例子( printf ( “ ” a \\ is a backslash. ” \n ” ); )” 第 56页,正文的第 2行和第 4行应该分别为 printf ( “me32 = %““d”“\n ”, me32); printf ( “me32 = %d\n ” , me32); 第 61 页,“无符号类型”的最后 1 句,相当于 unsigned int (即两者之间添加一个空格 )。 第 62 页,程序清单 3.8 中的第 1 行,将 //* typesize.c -- 打印类型大小 */ 中的第一个斜杠删 除。 第 63页,“3.6 参数和陷阱”第 2行, printf ( “ Hello,pal. ” )(即 Hello, 和 pal. 之间没有空 格)。 第 64 页,程序清单 3.10 中的第 1 行,使用 转义序列。 第 75 页,倒数第 8行, 何时使用圆括号 取决于运算对象是类型还是特定量。 第82页,第11行, . 格式字符串包含了两个待打印项 number 和pies 对应的 ..... 第83页,表4.4中的“ L”修饰符的含义介绍中,应该是示例: ” %L ”、“%10.4Le” 第 84 页,表 4.5 中的第 1 行,即,从字段的左侧开始打印该 项(即,应该只保留一个 项);在 “ 0”标记的含义中,添加一行: 示例:"%010d"和"%08.3f"。 第86页,第1段的第2行,……字段宽度是容纳 待打印数字所需的……; 倒数第4段中,根据%x 打印出1f,根据%打印出1F 第87页,“4.4.4转换说明的意义”第 2段,……读者认为原始值 被替换成转换后的值。 第89页,“参数传递”第2行,把变量n1、n2、n3和n4的值传递给程序(即,保留一个顿号)。 第 93页,第 5行的 2121.45 的字体应该与第 4行的 42 的字体保持一致;表 4.6 上面的最后一 行,对于 double 类型要使用 1 修饰符。 第 94 页,表中的第 3 行,把对应的数值存储为 unsigned short int 类型;把“ j ”转换说明的 示例 放到“ z ”转换说明中;在“ j ”转换说明的含义中添加:示例:” %jd”、” %ju”。 第95页,“3.scanf () 的返回值”上面一段的倒数第 3行,如果在格式字符串中把空格放到 %c 的前面 。 第98页,倒数第2段,strlen () 函数(声明在string.h 头文件中)可用于 ... 。 第 100 页,” 4.8 编程练习”中的第 2 题,将该题中的“名和姓”统一替换为“名字” ;并执行 以下 操作;第 3题,将 a 、 b 项中的“输入”替换为” The input is ”,将“或”替换为“ or”, 将末尾1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.

计量经济学导论 第五版 答案

APPENDIX A SOLUTIONS TO PROBLEMS A.1 (i) $566. (ii) The two middle numbers are 480 and 530; when these are averaged, we obtain 505, or $505. (iii) 5.66 and 5.05, respectively. (iv) The average increases to $586 while the median is unchanged ($505). A.3 If price = 15 and income = 200, quantity = 120 – 9.8(15) + .03(200) = –21, which is nonsense. This shows that linear demand functions generally cannot describe demand over a wide range of prices and income. A.5 The majority shareholder is referring to the percentage point increase in the stock return, while the CEO is referring to the change relative to the initial return of 15%. To be precise, the shareholder should specifically refer to a 3 percentage point increase. $45,935.80.≈ $40,134.84. When exper = 5, salary = exp[10.6 + .027(5)] ≈A.7 (i) When exper = 0, log(salary) = 10.6; therefore, salary = exp(10.6) (ii) The approximate proportionate increase is .027(5) = .135, so the approximate percentage change is 13.5%. 14.5%, so the exact percentage increase is about one percentage point higher.≈(iii) 100[(45,935.80 – 40,134.84)/40,134.84) A.9 (i) The relationship between yield and fertilizer is graphed below. (ii) Compared with a linear function, the function yield has a diminishing effect, and the slope approaches zero as fertilizer gets large. The initial pound of fertilizer has the largest effect, and each additional pound has an effect smaller than the previous pound.

C Primer Plus第6版中文版勘误表教学提纲

C P r i m e r P l u s第6版中文版勘误表

注意:下面的勘误中,红色字体为修改后的文字,提请各位读者注意。 1.第6页,” 1.6语言标准”中的第3行,将1987年修改为1978年。 2.第22页,” 2. main()函数”中的第1行,int main (void)后面的分号(;)删除。 3.第24页,“5. 声明”的第10行,也就是一个变量、函数或其他实体的名称。 4.第27页,图2.3中,下划线应该只包含括号中的内容;第2段的第4行,而不是存储在源代 码中的指令。 5.第30页,“2.5.4 打印多个值”的第4行,双引号后面的第1个变量。 6.第34页,“2. 7.3 程序状态”第2段的第4行,要尽量忠实于代码来模拟。 7.第35页,“2.10 本章小结”第2段的第1句,声明语句为变量指定变量名,并标识该变量中存 储的数据类型;本页倒数第2行,即检查程序每执行一步后所有变量的值。 8.第37页,“2.12 编程练习”中第1题,把你的名和姓打印在一行……把你的名和姓分别打印在 两行……把你的名和姓打印在一行……把示例的内容换成你的名字。 9.第40页,第1行,用于把英磅常衡盎司转换为…… 10.第44页,“3.4 C语言基本数据类型”的第1句,本节将详细介绍C语言的基本属性类型…… 11.第46页,“5. 八进制和十六进制”的第4句,十六进制数3的二进制数是0011,十六进制数5 的二进制数是0101;“6.显示八进制和十六进制”的第1句,既可以使用也可以显示不同进制的数;将“回忆一下……程序在执行完毕后不会立即关闭执行窗口”放到一个括号里。 12.第47页,“2.使用多种整数类型的原因”第3句,过去的一台运行Windows 3.x的机器上。 13.第53页,图 3.5下面的第4行“上面最后一个例子(printf(“Gramps sez, \”a \\ is a backslash.\”\n”);)” 14.第56页,正文的第2行和第4行应该分别为printf(“me32= %“ “d” “\n”, me32); printf(“me32 = %d\n”, me32); 15.第61页,“无符号类型”的最后1句,相当于unsigned int(即两者之间添加一个空格)。 16.第62页,程序清单3.8中的第1行,将//* typesize.c -- 打印类型大小*/中的第一个斜杠删除。 17.第63页,“3.6参数和陷阱”第2行,printf(“Hello,pal.”)(即Hello,和pal.之间没有空格)。 18.第64页,程序清单3.10中的第1行,使用转义序列。 19.第75页,倒数第8行,何时使用圆括号取决于运算对象是类型还是特定量。 20.第82页,第11行,……格式字符串包含了两个待打印项number和pies对应的…… 21.第83页,表4.4中的“L”修饰符的含义介绍中,应该是示例:”%L f”、“%10.4L e” 22.第84页,表4.5中的第1行,即,从字段的左侧开始打印该项(即,应该只保留一个项); 在“0”标记的含义中,添加一行:示例:"%010d"和"%08.3f"。 23.第86页,第1段的第2行,……字段宽度是容纳待打印数字所需的……;倒数第4段中,根 据%x打印出1f,根据%X打印出1F 24.第87页,“4.4.4转换说明的意义”第2段,……读者认为原始值被替换成转换后的值。 25.第89页,“参数传递”第2行,把变量n1、n2、n3和n4的值传递给程序(即,保留一个顿 号)。 26.第93页,第5行的2121.45的字体应该与第4行的42的字体保持一致;表4.6上面的最后一 行,对于double类型要使用1修饰符。 27.第94页,表中的第3行,把对应的数值存储为unsigned short int类型;把“j”转换说明的示例 放到“z”转换说明中;在“j”转换说明的含义中添加:示例:”%jd”、”%ju”。

伍德里奇 计量经济学(第4版)答案

计量经济学答案 第二章 2.4 (1)在实验的准备过程中,我们要随机安排小时数,这样小时数(hours )可以独立于其它影响SAT 成绩的因素。然后,我们收集实验中每个学生SAT 成绩的相关信息,产生一个数据集{}n i hours sat i i ,...2,1:),(=,n 是实验中学生的数量。从式(2.7)中,我们应尽量获得较多可行的i hours 变量。 (2)因素:与生俱来的能力(天赋)、家庭收入、考试当天的健康状况 ①如果我们认为天赋高的学生不需要准备SAT 考试,那天赋(ability )与小时数(hours )之间是负相关。②家庭收入与小时数之间可能是正相关,因为收入水平高的家庭更容易支付起备考课程的费用。③排除慢性健康问题,考试当天的健康问题与SAT 备考课程上的小时数(hours )大致不相关。 (3)如果备考课程有效,1β应该是正的:其他因素不变情况下,增加备考课程时间会提高SAT 成绩。 (4)0β在这个例子中有一个很有用的解释:因为E (u )=0,0β是那些在备考课程上花费小时数为0的学生的SAT 平均成绩。 2.7(1)是的。如果住房离垃圾焚化炉很近会压低房屋的价格,如果住房离垃圾焚化炉距离远则房屋的价格会高。 (2)如果城市选择将垃圾焚化炉放置在距离昂贵的街区较远的地方,那么log(dist)与房屋价格就是正相关的。也就是说方程中u 包含的因素(例如焚化炉的地理位置等)和距离(dist)相关,则E (u ︱log(dist))≠0。这就违背SLR4(零条件均值假设),而且最小二乘法估计可能有偏。 (3)房屋面积,浴室的数量,地段大小,屋龄,社区的质量(包括学校的质量)等因素,正如第(2)问所提到的,这些因素都与距离焚化炉的远近(dist,log(dist))相关 2.11(1)当cigs (孕妇每天抽烟根数)=0时,预计婴儿出生体重=110.77盎司;当cigs (孕妇每天抽烟根数)=20时,预计婴儿出生体重(bwght )=109.49盎司。 (110.77-109.49)/110.77=8.6%,抽烟数从0到20,预计儿童出生体重下降了约8.6%。 (2)并不能。还有其他因素可以影响婴儿出生体重,尤其是母亲的整体健康状况和产前保健的质量。这些因素还都可能与母亲怀孕期间的抽烟习惯有关。其它因素,比如咖啡因的摄入量也会影响婴儿出生体重,而且可能与母亲怀孕期间的抽烟习惯有关。 (3)如果预测出生体重为125盎司,则cigs=(125 – 119.77)/( –0.524) ≈–10.18 ,约为-10支,这是不可能的。当然,这只是告诉我们,对于预测婴儿出生体重这样复杂的因变量,如果只有一个解释变量,将会发生什么。预计婴儿出生体重的最大值是119.77盎司,然而样本中确有超过700个新生婴儿的体重超过了119.77盎司,这就说明模型建立不恰当 (4)85%的妇女怀孕期间不抽烟,即1388个样本中有大约1180个妇女不抽烟。因为我们只用cigs 一个变量解释婴儿出生体重,所以当cigs=0时,我们只有一个相对应的出生体重数。在cigs=0时,预计的出生体重数大致位于观测的出生体重数的中间。因此,我们可能会低估较高的出生体重数。

c++ primer plus(第六版)第二至第六章课后编程练习全部答案

第二章:开始学习C++ //ex2.1--display your name and address #include int main(void) { using namespace std; cout<<"My name is liao chunguang and I live in hunan chenzhou.\n”;} //ex2.2--convert the furlong units to yard uints-把浪单位换位码单位 #include double fur2yd(double); int main() { using namespace std; cout<<"enter the distance measured by furlong units:"; double fur; cin>>fur; cout<<"convert the furlong to yard"< void mice(); void see(); using namespace std; int main() { mice(); mice(); see(); see(); return 0; }

有机化学第五版第十一章-醛和酮-课后习题答案

第十一章 醛和酮习题答案(最新版) 1. 用系统命名法命名下列醛、酮。 O CH 3CH 2 CH(CH 3)2(1) (2) CH 3CH 22CH 3 C 2H 5 CHO H 3C H H CH 2CH 2CHO (3) C C H 3C O H CH 3H 3C (4) CHO OCH 3 (5) COCH 3 3(6) 3 (7) H COCH 3 3 Br (8) OHCCH 2CHCH 2CHO (9) O (10)

解:(1)2-甲基-3-戊酮(2)4-甲基-2-乙基己醛(3)反-4己烯醛(4)Z-3-甲基-2庚烯-5-炔-4-酮(5)3-甲氧基-4-羟基苯甲醛(6)对甲氧基苯乙酮 (7)反-2-甲基环己基甲醛(8)3R-3-溴-2-丁酮 (9)3-甲酰基戊二醛(10)螺[4.5]癸-8-酮 2. 比较下列羰基化合物与HCN加成时的平衡常数K值大小。(1)Ph2CO (2)PhCOCH3(3)Cl3CHO (4)ClCH2CHO (5)PhCHO(6)CH3CHO 解:(1)<(2)<(5)<(6)<(4)<(3) 原因: HCN对羰基加成是亲核加成,能降低羰基碳原子上电子云密度的结构因素将会使K值增大,故K值顺序是:(6)<(4)<(3),而羰基碳原子的空间位阻愈小,则K值增大,故K 值的顺序是:(1)<(2)<(5)<(6) ,综合考虑:则K值顺序是:(1)<(2)<(5)<(6)<(4)<(3)。 6. 完成下列反应式(对于有2种产物的请标明主次产物)。 CHO+H2N (1) (2) HC CH+2CH2O

《软件工程导论第五版》张海潘pdf版(第五版清华大学出版社课后答案)

第一章 z 软件工程方法学(3个要素) :通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学, 也称范型。三要素:方法、工具和过程。 z 软件生命周期模型 – 瀑布模型:优点:1.可强迫开发员采用规范的方法2.严格地规定了每个阶段必须提交的文件3.要求每 个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 – 缺点:传统的瀑布模型过于理想化,是由文档驱动的。 – 快速原型模型:通过快速构建起一个可在计算机上运行的原型系统,让用户试用原型并收集用户反 馈意见的方法,获取用户真正的需要。 – 增量模型:优点:能在较短时间内向用户提交可完成部分工作的产品;逐步增加产品功能可以使用 户有较充实的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。 – 螺旋模型:优点:对可选方案和约束条件的强调有利于已有软件的重用;减少了过多测试;维护只 是螺旋模型中另一个周期。 1-1 什么是软件危机? 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 1-2 什么是软件工程? 是指导计算机软件开发和维护的一门工程学科。 1-3 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。 目前使用得最广泛的软件工程方法学(2种): 1. 传统方法学:也称为生命周期方法学或结构化范型。 优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。 2. 面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用。 1-4 软件生命周期划分成哪些阶段 z 软件生命周期(各阶段)软件生命周期由软件定义、软件开发和运行维护三个时期组成。 1. 软件定义时期划分为三个阶段:问题定义、可行性研究和需求分析 2. 开发时期:总体设计、详细设计、编码和单元测试、综合测试。 3. 维护时期:主要任务是使软件持久地满足用户的需要。 1-5 什么是软件过程?它与软件工程方法学有何关系? z 软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 z 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型 1-6 传统“瀑布模型”的主要缺陷是什么?试说明改进的方法。 传统的瀑布模型过于理想化了。增加“反馈环” 第二章 z 可行性研究的目的:就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 z 可行性研究的任务:1.进一步分析和澄清问题;2.导出系统的逻辑模型;3.从逻辑模型出发,提出若干种系统 实现方案4.研究每种实现方案的可行性: z 技术上的可行性 ——使用现有的技术能实现这个系统吗? z 经济上的可行性 ——这个系统的经济效益能超过它的开发成本吗? (投资与效益) z 操作可行性 ——系统的操作方式在这个用户组织内行得通吗? z 社会、政策允许的可行性 5.为每个可行的解决方案制定一个粗略的实现进度 6.对以后的行动方针提出建议 方法:1.系统流程图 2.数据流图:(DFD ) 符号 数据流 第 1 页https://www.360docs.net/doc/624192271.html,

相关文档
最新文档