(一〇〇)第七章复习题

1.使用函数的3个步骤是什么?

答:函数原型,函数定义,函数调用。

答:定义函数,提供原型,调用函数。

 

 

2.请创建与下面的描述匹配的函数原型。

a。igor()没有参数,且没有返回值。

b。tofu()接受一个int参数,并返回一个float

c。mpg()接受2个double参数,并返回一个double

d。summation()将long数组名和数组长度作为参数,并返回一个long值

e。doctor()接受一个字符串作为参数(不能修改该字符串),并返回一个double值。

f。ofcourse()将boss结构作为参数,不返回值

g。plot()将map结构的指针作为参数,并返回一个字符串。

答:

a.  void igor(void);

b. float tofu(int);

c. double mpg(double,double);

d. long summation(long[],int);

e. double doctor(const char*);

f. void ofcourse(boss);

g.  char*plot(map*);

 

 

3.编写一个接受3个参数的函数:int数组名、数组长度和一个int值,并将数组的所有元素都设置为该int值。

答:

void start(int a[],int long,int m)

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

a[i]=m;

}

 

 

4.编写一个接受3个参数的函数:指向数组区间中第一个元素的指针、指向数组区间最后一个元素后面的指针,以及一个int值,并将数组中每一个元素都设置为该int值。

答:

void shuzu(int*first, int*last, int m)

{

while(first != last)

{

*first=m;

first++;

}

}

//注:在函数内部移动指针,离开函数后,指针恢复到初始位置(应该是在函数内部创建了一个指针副本)。因此无需在函数内部新创建一个指针

 

 

5.编写将double数组名和数组长度作为参数,并返回该数组中最大值的函数。该函数不应修改数组的内容。

答:

double findmax(const double*a, int long)

{

double max = a[0]; //初始化max为a[0]

for (int i=1;i<long;i++)

{

if(a[i]>max) max=a[i]; //如果新的double值比max大,则赋值给max

}

return max; //返回max

}

//注:未考虑到数组长度为0的情况。

 

6.为什么不对类型为基本类型的函数参数使用const限定符?

答:因为函数在调用参数时,使用的是一个副本,而不是原来的数,因此不会修改作为实参的基本类型的值。而指针不同,指针为函数参数时,可以通过修改直着,来修改指针所指向的值。

 

 

7.C++程序可以使用哪3种C-风格字符串格式?

答:假设字符串名为abc:

①char abc{]

②char*

③char []

答:字符串可以被储存在char数组中,可以使用带双引号的字符串来表示(比如"abc",但这种无法被修改),也可以用指向字符串第一个字符的指针来表示。

 

 

8.编写一个函数,其原型如下:

int replace (char*str, char c1, char c2);

该函数将字符串中所有的c1都替换为c2,并返回替换次数。

答:

int replace(char*str, char c1, char c2)

{

int number = 0;
for( ;str[0]!='\0';str++)

{

if (str[0] == c1)
//把==写成了=

{

str[0]=c2;

number++;

}

}

return number;

}

 

 

 

9.表达式*"pizza"的含义是什么?"taco"[2]呢?

答:

*"pizza"的含义是:"pizza"是一个常量字符串,其名字表示为指向其地址的指针(类型为char*),对这个指针解除运算,是字符串的第一个字符——即p。*"pizze"的结果是:p

"taco"[2]的含义是:原理同上,这个常量字符串的第三个字符——是c。

以上答案存疑。

参考答案给的是:C++将字符串解释为指其第一个元素的地址,即p和t的地址,*给出第一个元素的值,[2]给第三个元素的值,所以分别是p和c。

 

10.C++允许按值传递结构,也允许传递结构的地址。如果glitz是一个结构变量,如何按值传递他它?如何传递他的地址?这两种方法有何利弊?

答:

按值传递则是传递他的类型,然后glitz作为参数进行传递。按地址传递则是参数使用结构指针。

按值传递的好处是不会修改原结构变量,按地址传递的好处正好是可以在函数内修改原结构变量。

假如结构类型是abc,则声明结构是abc glitz;

按值传递函数原型假如为:void mmm(abc);

按地址传递函数原型假如为:void mmm(abc*);

glitz作为参数时,按值是glitz,按地址则为&glitz。

补充:按值传递将自动保护原始数据,但这是以时间和内存为代价的(因为要复制副本),按地址传递可节省内存和时间,但不能保护原始数据,解决办法是使用const限定符。

 

 

11.函数judge()的返回类型是int,它将这样一个函数的地址作为参数:将const char指针作为参数,并返回一个int值,请编写judge()函数的原型。

答:

int judge(int(*abc)(const char*));

 

 

 

12.假设有如下结构声明:

struct applicant  {

char name[30];

int credit_ratings[3];

};

a。编写一个函数,它将applicant结构作为参数,并显示该结构的内容。

b。编写一个函数,他将applicant结构的地址作为参数,并显示该参数指向的结构的内容。

答:

void show_1(applicant m)

{

cout<<m.name<<endl;

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

cout<<m.credit_ratings[i]<<endl;

}

 

void show_2(applicant*m)

{
cout<<m->name<<endl;

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

cout<<(*m).credit_ratings[i]<<endl; //补充:(*m)后面少了一个.

}

//再注释:(*m).变量名和m->变量名是等价的。

 

 

13.假设函数f1()和f2()的原型如下:

void f1(applicant *a);

const char*f2 (const applicant*a1, const applicant *a2);

请将p1和p2分别声明为指向f1和f2的指针;将ap声明为一个数组,它包含5个类型与p1相同的指针;将pa声明为一个指针,他指向的数组包含10个类型与p2相同的指针。请使用typedef来帮助完成这项工作。

 

答:

typedef void (*name_1)(applicant*);

typedef const char*(*name_2) (const applicant*, const applicant *) 
//补充:答题的时候,这里忘写了typedef

//请将p1和p2分别声明为指向f1和f2的指针;

name_1 p1= f1;

name_2 p2= f2;

 

//将ap声明为一个数组,它包含5个类型与p1相同的指针;

name_1 ap[5];

 

//将pa声明为一个指针,他指向的数组包含10个类型与p2相同的指针

name_2 pa[10];

name_2 (*pa)[10]; //这个才是正确答案,看题看漏了

时间: 2024-09-24 17:42:56

(一〇〇)第七章复习题的相关文章

struct-C++primer第五版关于第七章类的一个问题

问题描述 C++primer第五版关于第七章类的一个问题 #include #include using namespace std; struct Sales_data{ Sales_data()=default; Sales_data(const string &s):bookNo(s){} Sales_data(const string &s,unsigned n,double p): bookNo(s),units_sold(n),revenue(p*n) {} Sales_dat

&amp;gt; 第七章 异常处理(rainbow 翻译) (来自重粒子空间)

<<展现C#>> 第七章 异常处理(rainbow 翻译) 出处:http://www.informit.com/matter/ser0000002 正文: 第七章   异常处理     通用语言运行时(CLR)具有的一个很大的优势为,异常处理是跨语言被标准化的.一个在C#中所引发的异常可以在Visual Basic客户中得到处理.不再有 HRESULTs  或者 ISupportErrorInfo 接口.    尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理.你

《.net编程先锋C#》第七章 异常处理(转)

编程|异常处理 第七章 异常处理通用语言运行时(CLR)具有的一个很大的优势为,异常处理是跨语言被标准化的.一个在C#中所引发的异常可以在Visual Basic客户中得到处理.不再有 HRESULTs 或者 ISupportErrorInfo 接口.尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理.你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常.要增加更多的手段,随后引发你所创建的异常. 7.1 校验(checked)和非校验(unchecked)语句当

Android群英传笔记——第七章:Android动画机制和使用技巧

Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中十分重要的一部分,从早期的Android版本中,由于动画机制和绘图机制的不健全,Android的人机交互备受诟病,Android从4.X开始,特别是5.X,动画越来越完善了,Google也开始重视这一方面了,我们本章学习的主要内容有 Android视图动画' Android属性动画 Android动

Knockout应用开发指南 第七章:Mapping插件

原文:Knockout应用开发指南 第七章:Mapping插件 Mapping插件 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些属性是observable的,你可以使用KO绑定他们到你的UI元素上,当这些observable值改变的时候,这些UI元素就会自动更新. 绝大多数程序都需要从服务器端获取数据,但是由于服务器不知道observable的概念是什么,它只支持简单的JavaScript对象(通常是序列化以后的JSON),

【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能

原文:[原创]构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)-托管资源优化-监测CLR性能 构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)-托管资源优化-监测CLR性能     前言:在上一篇文章中讲述了一些垃圾回收的一些知识,本篇就讲述如何来监测CLR是否导致了一些性能问题.    本篇的议题如下: 内存问题概述(前篇) 托管资源优化(前篇)          对象的生命周期(前篇)          对象的"代"(前篇)          大

求大神解答一下-C++ primer plus 第6版 中文版 第16章复习题的一个问题

问题描述 C++ primer plus 第6版 中文版 第16章复习题的一个问题 奇葩的是课后居然没答案...... 求正规.严谨.简洁的标准答案! 程序清单16.15(在p708页):functor.cpp //functor.cpp--using a functor #include尖括号iostream尖括号 #include尖括号list尖括号 #include尖括号iterator尖括号 #include尖括号algorithm尖括号 template//functor class

magento 开发 -- 深入理解Magento第七章 – 自定义Magento系统配置

  第七章 – 自定义Magento系统配置 Magento拥有十分强大的后台管理系统.作为一名开发人员,这套后台管理系统可以让你的用户简单直接的配置Magento系统或者你创建的模块.和Magento的其他功能一样,你第一次使用这套管理系统的时候可能觉得很麻烦,但是一旦你上手了,你会发现它强大的功能是那么吸引人.那么让我们开始吧.我们这一章的例子依然是基于Helloworld模块. 添加系统配置文件 首先我们要为模块添加一个系统配置文件.这个文件和"config.xml"是不搭界的a

第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能

原文:第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能   本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时刻刻进行索引维护任务.   SQLServer有专门的DMO来显示索引相关统计信息.能帮助你分析现有索引的性能情况.通过这些DMO,可以做到: Ø  检查索引使用模式 Ø  查找丢失索引 Ø  查找无用索引 Ø  查找索引碎片 Ø  分析索引页分配明细 本文将使用这些DMO来检查数据库的丢失索引,