cprimerth第六章答案.pdf

上传人:s****u 文档编号:12791544 上传时间:2020-05-24 格式:PDF 页数:11 大小:523.56KB
返回 下载 相关 举报
cprimerth第六章答案.pdf_第1页
第1页 / 共11页
cprimerth第六章答案.pdf_第2页
第2页 / 共11页
cprimerth第六章答案.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述
C+primer 第五版 第 六 章 答案 6.1 答: 实参是形参 的初始值,实 参的类型必须 与对应的形参类 型匹配。形参 是 在函数的形 参列表中进行定义的 ,我们实参的 值去初始化形 参。 (1 ) 形参变量只有在被调用时 才分配内存单 元, 在调用结束时, 即刻释放所 分 配的内存单 元。因此,形参 只有在函数 内部有效。 函数 调用结束返 回主调函数 后则不能再 使用该形参 变量。 (2 ) 实参可以是常量、 变量、 表 达式、 函数等, 无论实参 是何种类型的 量, 在 进行函数调 用时, 它们都必须具有 确定的值, 以便把这些值 传送给形参。 因此应预 先用赋 值, 输入等 办法使实参获得确定 值。 (3 ) 实参和形参在数量上, 类 型上, 顺序上应 严格一致, 否则会发生 “ 类型不 匹配” 的错 误。 (4 ) 函数调用中发生的数据传 送是单向的。 即只能把实 参的值传送给 形参, 而 不能把形参 的值反向地传送 给实参。 因此在 函数调用过 程中,形参 的值发生改 变,而实参 中的值不会 变化。 (5 )当形参和实参 不是指针类 型时,在该 函数运行时 ,形参和实 参是不同的变 量,他们在 内存中位于不同的位 置, 形参将 实参的内容复 制一份, 在 该函数运行结 束的时候形 参被释放, 而实参 内容不 会改变 。而 如果函 数的 参数是 指针 类型变 量, 在调用 该函 数的过 程 中,传 给函 数的是实参的地址, 在函 数体内部使用 的也是实参的 地址, 即使用的就是 实参本 身。 所以在 函数体内部可以改变 实参的值。 6.2 答: (a ) 返回类型错 误; (b ) 没 有定义函数的返 回类型 ; (c ) 函数体缺少 左花 括号; (d ) 函数体缺少一对花括 号; 6.3 答:#include #include using namespace std; int fact(int n) int val=1; for (int ret = 2; ret = n; ret+) val *= ret; return val; int main() cout 0 ? n : (-1)*n; 6.6 答: 形参是一种 自动对象,函 数开始的时候 为形参申请存储 空间,因为形 参 定义在函数 体组用域之内, 所以一 旦函数终止, 形参 也就被销毁。 局部 对象如果是非 静态的 , 那么其生 存周期是从其被创建 到函数体结束 。 静态局部变 量在程序路劲第 一经过对象定 义 语句是初始 化, 并且直到程序 终止才被销毁 , 在此期间 即使对象所在 的函数结束执 行也不会对 它有影响。 例:#include #include using namespace std; int fact(int n) int i = 2; static int cnt = 0; +cnt; cout cnt * 2 0 ? n : (-1)*n; int main() for (int j = 0; j != 4; +j) cout fact(j) endl; 6.7 答:#include #include using namespace std; int fact() static int cnt = 0; return cnt+; int main() for (int j = 0; j != 4; +j) cout fact() endl; 6.8 答:chapter6.h 文件 #ifndef chapter6_h #define chapter9_h int fact(); #endif chapter6_h 6.9 答:chapter6.cpp 文件 #include #include #includechapter6.h using namespace std; int fact() static int cnt = 0; return cnt+; chapter6.cpp main 文件 #include #include #includechapter6.h using namespace std; int main() for (int j = 0; j != 4; +j) cout fact() endl; 6.10 答:#include #include using namespace std; void swap(int *ip1, int *ip2) int temp; temp = *ip1; *ip1 = *ip2; *ip2 = temp; int main() int ival1 = 1, ival2 = 3; int *p1 = swap(p1, p2); cout ival1 ival2; 6.11 答:void reset(int 6.12 答:void swap(int temp = ip1; ip1 = ip2; ip2 = temp; int main() int ival1 = 1, ival2 = 3; swap(ival1, ival2); cout ival1 = A string my_tolower(string for (decltype(s.size() index = 0; index != size; +index) sindex=tolower(sindex); return s; else return s; int main() string s(chenXun); s = my_tolower(s); cout s *p ? i : *p; 指针的类型是 int* ; 6.22 答:void swapPtr (int *p1 ,int *p2); 6.23 答:#include using namespace std; void print(int matrix, int ix) cout matrix0 2) std:string str = argv1; str += argv2; std:cout str std:endl; else std:cout error std:endl; return 0; 6.26 答:#include #include int main(int argc, char *argv) for (int i=0; iargc; i+) std:cout i+1 , argvi std:endl; return 0; 6.27 答: #include using namespace std; int my_add(const int *beg,const int *end) int sum = 0; while ( beg != end ) sum += *beg+; return sum; int main() int sumVal; const int a = 1,1,1,1,1,1,1,1,1,1,1,1 ; sumVal=my_add(a, a+sizeof(a)/sizeof(*a); cout sumVal endl; 6.28 答:string 6.29 答:不能,循环变量 声明为 const 就不 能递加了。 6.30 答:编译通不过, 会 报告没有返回 值;不是所有 的路劲都有返 回值; 6.31 答: 返回局部 对象的引用是 无效的, 当需要给返回 的引用赋值 , 那么返回 常 量的引 用就 是无效的。 6.32 答:该程序合法,其 功能为:将数 组的每一个元 素赋值为 0 ; 6.33 答:#include #include using namespace std; void my_print(vector ivec); int main() vector ivec; for (decltype(ivec.size() i = 0; i != 200; i+) ivec.push_back(i); my_print(ivec); return 0; static size_t i = 0; void my_print(vector ivec) if(i != ivec.size() cout iveci+string ( 6.38 答:int odd = 1, 3, 5, 7, 9 ; int even = 0, 2, 4, 6, 8 ; decltype(odd) 例:#include using namespace std; int odd = 1, 3, 5, 7, 9 ; int even = 0, 2, 4, 6, 8 ; decltype(odd) *arrPtr(int i) return (i % 2) ? int main() cout ( *arrPtr(4)2 endl; 6.39 答: (a )顶 层 const ,重复声明 ; (b )非 法,返回类型 不一致而参数 相同; (c )重载; 6.40 答:第二个声明错误 ;第一个形参 提供了默认值 ,那么后面的 形参都必须提 供默认值 ; 6.41 答: (a ) 非法, 没有给第一个形参 传值; (b ) 合法 ; (c ) 非法, 第三个形 参 必须提供了 默认值,那么第二形 参不能省略; 6.42 答:#include #include #include using namespace std; string make_plural(size_t ctr, const string int main() size_t cnt = 1; cout make_plural(cnt, success, es) endl; cnt = 2; cout make_plural(cnt, failure, s) endl; return 0; 6.43 答: (a ) 放在定义文件 中, 这个函数定义 函数的实现 ; (b ) 放在头文 件中, 这是函数声 明。 6.44 答:inline const string 6.45 答: 根据需要就可以写成 内联函数, 没必要 非要把所有函 数都写成内联 函数。 一般来说, 内联机制用于优化规 模较小、 流程直接、 频 繁调用的函数。 很多 编译器都不支 持 内联递归函 数,而一般一个 75 行 的函数也不大 可能在调用点 内内联的展开 。 6.46 答:可以,cosntexpr const string 6.47 答:在 main 函数体写加上#ifndef NDEBUG #endif 6.48 答: 循环体就是不断 的从输入设备 输入字符串, 这里 assert 不合理, 如果 结 束输入那么 就会提示输入失败。 6.49 答:函数匹配的第一步 是选定本次调 用对应的重载 函数,集合中 的函数称为 候选函数, 候选函数具备两个特 征: 一是与被调用 的函数同名, 二是 其声明在调用点 可见。 函数匹配的 第二步是考察本次提 供的实参 , 然后从候 选函数中选出 能被这组实参调 用的函数 , 这些新选 出来的函数称为可行 函数。 可行函数有两 个特征 : 一是其形参数 量与本次调用 提 供的实参数 量相等,二是每个 实 参的类型与对 应的形参类型 相同,或者能 转换成形参类 型。 6.50 答: (a ) 具有二义性 。 (b ) 调用 viod f (int ) ; (c ) 调用 viod f (int ,int ) ; (d ) 调用 viod f (double ,double); 6.51 答:#include #include #include #include using namespace std; void f() cout 调用 void f(); void f(int i) cout 调用 void f(int i) endl; void f(int, int) cout 调用 void f(int, int) endl; void f(double, double = 3.14) cout 调用 void f(double, double = 3.14) = b) return a - b; else return b - a; int ride(int a, int b)return a*b; int divide(int a, int b)return a / b; int main() int a = 20, b = 10; vector ivec; ivec.push_back(sum); ivec.push_back(reduce); ivec.push_back(ride); ivec.push_back(divide); for (auto it = ivec.begin(); it != ivec.end(); +it) cout (*it)(a, b) endl; return 0; 6.56 答:运行上题代码。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!