C++ Primer 第五版 第6章 6.2——函数参数传递习题答案
理论讲解请参考:C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
目录
6.10 指针形参交换两个数
6.12 引用形参交换两个数
6.13
6.14
6.15
6.16
6.17
6.18
6.19
6.20
6.21
6.22
6.24
6.25
6.27
6.10 指针形参交换两个数
# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(int *v1,int *v2)
{int i = 0;int * temp = &i;*temp = *v1;*v1 = *v2;*v2 = *temp;
}int main()
{int m = 6;int n = 9;cout << "m: " << m << " n: " << n << endl;fun(&m, &n); //这里调用,参数是地址,因为形参是指针,区别于形参是引用cout << "交换后的值为:" << endl;cout << "m: " << m << " n: " << n << endl;return 0;
}
运行结果:
6.12 引用形参交换两个数
# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(int &v1,int &v2)
{int i = 0;int &temp = i;temp = v1;v1 = v2;v2 = temp;
}int main()
{int m = 6;int n = 9;cout << "m: " << m << " n: " << n << endl;fun(m, n); //这里参数只需对象就行,不需要地址cout << "交换后的值为:" << endl;cout << "m: " << m << " n: " << n << endl;return 0;
}
运行结果:
6.13
(1)f(T)是值传递,不能改变实参的值
(2)f(&T)是引用传递,相当于实参的另一个名字,可以改变实参的值
6.14
如果在程序中需要被修改,则需要声明为引用类型
6.15
s:在执行函数期间,s值不会被改变
occurs:occurs值需要被改变
c:是一个临时变量,所以不需要使用引用类型
如果令occurs为常量引用,则输出occurs为0(不能加以修改),
如果s生命为普通引用可能会在程序中被修改
6.16
细节:尽量使用常量引用
应定义s为常量引用:const string& s
6.17
第一个只需判断是否含有大写字母,没有涉及到改变值,所以形参定义为常量引用
第二个需要更改值,所以形参为普通引用
判断是否有大写字母(形参为常量引用):
# include <iostream>
# include <string>
# include <vector>
using namespace std;// 形参常量引用
void fun(const string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z') //判断是否存在大写字母cout << "存在大写字母!" << endl;elsecout << "不存在大学字母!" << endl;}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);return 0;
}
将大写字母改为小写(形参为普通引用):
知识点:将大写字母改为小写,则是加32。如果将小写改为大写,则是减32。
# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z') // 判断是否大写str[i] += 32; //加32改为小写}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);for (int i = 0; i != tr.size(); ++i)cout << tr[i];cout << endl;return 0;
}
引申一下,将字符串小写改为大写大写改为小写:
# include <iostream>
# include <string>
# include <vector>
using namespace std;void fun(string& str)
{for (int i = 0; i != str.size(); ++i){if (str[i] >= 'A' && str[i] <= 'Z') // 判断是否大写str[i] += 32; //加32改为小写elsestr[i] -= 32; //键32改为大写}
}int main()
{cout << "Please enter strings:";string tr;cin >> tr;fun(tr);for (int i = 0; i != tr.size(); ++i)cout << tr[i];cout << endl;return 0;
}
6.18
(a)
//功能可能是比较两个matrix的大小
bool compare(const matrix &m1, const matrix &m2) { /.../ }
(b)
vector<int>::iterator change_val(int, vector<int>::iterator) { /.../ }
6.19
(a):不合法,函数只有一个参数
(b):合法
(c):合法
(d):合法
6.20
函数不改变形参值时应该是常量引用。
如果将应该是常量引用设置为普通引用,则可能会修改其指造成错误
6.21
# include <iostream>
# include <string>
# include <vector>
using namespace std;int fun(int v1, const int *cp)
{int max=v1;if (v1 < *cp)max = *cp;return max;
}int main()
{int n1, n2;cout << "Please enter two numbers: " << endl;cin >> n1 >> n2;int *p = &n2;int Max=fun(n1,p);cout <<"较大值为: " << Max<<endl;return 0;
}
6.22
# include <iostream>
# include <string>
# include <vector>
using namespace std;int fun( int *cp1, int *cp2)
{int m = 0;int *Temp=&m;*Temp = *cp1;*cp1 = *cp2;*cp2 = *Temp;return 0;
}int main()
{int n1, n2;cout << "Please enter two numbers: " << endl;cin >> n1 >> n2;int *p1 = &n1;int *p2 = &n2;cout << "交换前的值为:" << *p1 << ' ' << *p2 << endl;fun(p1,p2);cout <<"交换后的值为:" << *p1<<' '<< *p2<<endl;return 0;
}
6.24
此题以值传递数组,是错误的。可以用下边方法传递,数组的引用:
void print(const int (&ia)[10]) {/*...*/}
6.25
#include <iostream>
#include <string>int main(int argc, char** argv)//实参列表
{string str;for (int i = 1; i != argc; ++i) {str += argv[i]; //因为argv是从1开始,不是从0开始str += " ";}cout << str <<endl;return 0;
}
6.27
#include <iostream>
#include <string>
#include <vector>
using namespace std;int fun(initializer_list<int> lst)
{int sum = 0;for (auto beg = lst.begin(); beg!= lst.end(); ++beg)sum+=*beg;return sum;
}
void main()
{int Sum = fun({ 3, 4, 5, 6, 7, 8, 9 });cout << Sum << endl;
}
C++ Primer 第五版 第6章 6.2——函数参数传递习题答案相关推荐
- C++ Primer 第五版 第6章 6.7——函数指针习题答案
理论请参考:C++ Primer 第五版 第6章 6.7--函数指针阅读笔记 目录 6.7 函数指针习题答案 6.54 6.55 6.56 6.7 函数指针习题答案 6.54 vector是指向该函数 ...
- C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.2--函数参数传递习题答案 目录 6.2 函数参数传递 6.2.1 传值参数(值传递) 指针形参 6.2.2 传引用参数(引用传递) 使用引用 ...
- C++ Primer 第五版 第6章 6.7——函数指针阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...
- C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...
- C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案
理论讲解请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句阅读笔记 目录 6.31 6.32 6.33 6.34 6.35 6.36 6.38 6.31 返回引用无 ...
- C++ Primer 第五版 第6章 6.1——函数及函数定义及调用习题答案
理论讲解请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用阅读笔记 目录 目录 6.1 形参和实参的区别 6.2 函数语法考察 6.4 交互式输入数字,计算阶乘 6.5 输出实 ...
- C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用习题答案 目录 6.1 函数基础 函数定义 函数调用 函数的形参和实参 函数的返回类型 局部静态对象 函数声明 头文件 ...
- C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...
- C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...
最新文章
- 前端面经笔记 2021.8.28
- 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT,入选NeurIPS 2020
- 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通
- Linux目录结构FHS
- java求s a aa aaa_Java求s=a+aa+aaa+aaaa+aa...a的值
- mysql5.7.25my.ini_mysql5.7 没有my.ini 的解决办法
- eclipse 中自定义EL表达式时创建tld文件
- 计算机键盘打出来都是英语大写怎么办,电脑键盘上大小写怎么切换
- python四则运算器tkinter_Python基于Tkinter的二输入规则器(乞丐版)
- 音响上的英文是什么意思_鞋盒上的字母后缀 是什么意思?(上)
- oracle 混合分区表,Oracle 19C Hybrid partitioned tables混合分区表
- 计算机硬件设备建档,捷通科技RFID 文件柜档案管理硬件方案
- 汇编语言中xor指令_常用的汇编指令
- 电路图:LM3886 BTL功放电路图
- 嵌入式平台C语言实现二阶滤波器
- 计算机程序可以通过删除卸载嘛,怎么彻底卸载电脑软件程序多种方法
- 程序员如何通过兼职赚钱?有哪些渠道?
- 孤独的灵魂该去何处安家
- leetcode 相交链表 java
- sqlserver安装目录_SQL server2012安装图解及意外解决
热门文章
- matlab画直方图下标,matlab画二维数据直方图/画二维概率分布
- python爬虫教程视频成都工业学院-成都工业大学:Python爬虫和数据可视化实训课程(2020年3月新版)...
- ffmpeg 参数_使用FFMPEG进行视频转码
- java 高性能web_高性能WEB开发 - BearRui(AK-47) 的Blog - BlogJava
- ensp查看历史配置命令_网络工程师 | 手把手教你用华为ensp模拟器玩vxlan实验(静态方式)...
- iis服务器修改内存,修改IIS的虚拟内存
- LVS Nginx 负载均衡区别
- 人生聚散,一切随缘!
- C语言带参数的main()函数
- 2012年12月21日所谓世界末日时做的第一个五年规划——成为领域内的专家