博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C++ Primer》第五版课后习题解答_第六章(2)(08-15)
阅读量:4318 次
发布时间:2019-06-06

本文共 2598 字,大约阅读时间需要 8 分钟。

系统环境: windows 10 1703

编译环境:Visual studio 2017

6.8

#pragma once#include 
int adamfact(int val);int fact(int fac1);double Adamabs(double abs1);

6.9

Chapter6.h

//见题目 6.8
fact.cc

#include 
#include "chapter6.h"int adamfact(int val){ int ret = 1; while (val > 1) { ret *= val--; } return ret;}int fact(int fac1) // 构建计算阶乘的 fact 函数 { int sum = 1; if (fac1 == 0) // 判断输入实参的值,如果是 0,返回 1(0! = 1) { sum = 1; } else { while (fac1 != 0) // 如果不是零,则计算阶乘 { sum *= fac1; --fac1; } } return sum; // 返回函数计算结果 }double Adamabs(double abs1){ return abs(abs1);}
factMain.cc
#include 
#include "chapter6.h"using std::cout;using std::cin;using std::endl;using std::runtime_error;int main(){ cout << adamfact(5) << endl; cout << fact(5) << endl; cout << Adamabs(-5) << endl; return 0;}
输出为:

120

120

5

6.10

函数:AdamSwap

#include "AdamSwap.h"double AdamSwap(double *i, double *j){    *i = *j + *i;    *j = *i - *j;    *i = *i - *j;    return *i, *j;}
主函数:

#include "AdamSwap.h"#include 
using std::cout;using std::endl;using std::cin;int main(){ double a = 0, b = 0; cout << "Input two numbers: " << endl; cin >> a >> b; (a, b) = AdamSwap(&a, &b); cout << "a: " << a << " b: " << b << endl; return 0;}
输入:

5.6 3.5

输出:

a: 3.5 b: 5.6 

6.11

头文件:

#pragma once#include 
int reset(int &a);

reset 函数:

#include "reset.h"int reset(int &a){    a = 0;    return a;}
主调函数:

#include "reset.h"using std::cout;using std::endl;int main(){    int a = 5;    a = reset(a);    cout << a << endl;    return 0;}

6.12

#include "AdamSwap.h"double AdamSwap(double &i, double &j){    i = j + i;    j = i - j;    i = i - j;    return i, j;}
我觉得使用引用更易于使用。因为引用对象可以直接被使用,从而达到改变实参的效果。而使用指针的话,还需要进行解引用操作才能改变实参的值。

6.13

void f(T)

T 是形参,其和给其传值的实参是两个相互独立的对象;

void f(&T)

在这里形参是引用类型,则此引用形参和给它传值的实参绑定。即此引用形参也是它绑定的对象的别名。改变形参的值

6.14

应该是引用类型:

//如题 6.11 中 reset 函数
不能是引用类型:

这道题没做出来,参考  得到如下函数:

void print(std::vector
::iterator begin, std::vector
::iterator end){ for (std::vector
::iterator iter = begin; iter != end; ++iter) std::cout << *iter << std::endl;}

6.15

(1) s 为常量引用。因为 s 有可能是一个很大的字符串,为了避免拷贝 s 所造成的降低效率,故将其设为引用类型。又因为给它传值的实参无需修改其值,故将 s 设为常量引用;

(2) c 为 char 类型。因为函数中需要一个字符类型的形参,且字符类型所占空间很小,再加上给它传值的实参的值无需做出改变。综合考虑,把 c 的类型设定成 char 而不是 引用类型;

(3) 如果 s 为普通引用,则其值(以及和其绑定的实参的值)在函数中有可能被改变;

(4) 如果 occurs 为常量引用,则其值不能被改变,语句 occurs = 0,和 ++occurs 都成了非法语句。

转载于:https://www.cnblogs.com/Adam-fei/p/7899742.html

你可能感兴趣的文章
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>
codeforces Unusual Product
查看>>
hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
查看>>
springMVC中一个class中的多个方法
查看>>
Linux系统安装出错后出现grub rescue的修复方法
查看>>
线段树模板整理
查看>>
[教程][6月4日更新]VMware 8.02虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像InstallESD.iso!...
查看>>
[iOS问题归总]iPhone上传项目遇到的问题
查看>>
Python天天美味(总) --转
查看>>
Spring Framework tutorial
查看>>
【VS开发】win7下让程序默认以管理员身份运行
查看>>
【机器学习】Learning to Rank 简介
查看>>
Unity 使用实体类
查看>>
【转】通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件...
查看>>
MySQL常见注意事项及优化
查看>>
流畅的Python (Fluent Python) —— 前言
查看>>
Jquery-menu-aim流畅的菜单滑动体验
查看>>