C++第二章习题
2.1 简述C++的主要特点。
1) C++是C的超集,保持与C的兼容。
2) 保持了C的简洁、高效和接近汇编语言等特点,并对C的功能作了不少扩充。用C++编写的程序比C更安全,可读性更好,代码结构更为合理。
3) 程序质量高。
4) 增加了面向对象机制。
2.2
#include <iostream> using namespace std; int main() { int a, b, d, min; cout << "Enter two numbers:"; cin >> a >> b; min = a > b ? b : a; for(d = 2; d < min; d++) { if(((a % d) == 0) && ((b % d ) == 0)) break; } if (d == min) { cout << "No common denominators" << endl; return 0; } cout << "The lowest common denominator is" << d << endl; return 0; }
2.3 有效
2.4 没有函数声明;
函数定义没有写返回值类型。
2.5 (1)等价,函数声明可以省略参数的名字。
(2)不等价,第二个的函数定义不能省略参数的名字。
2.6-2.10 CDAAB
2.11-2.15 ACBDC
2.16-2.17 DC
2.18
101
2.19
10 10
2.20
10
20
2.21 举例说明可以使用const替代#define以消除#define的不安全性。
#include <iostream> using namespace std; int main() { int a = 1; #define T1 a+a #define T2 T1-T1 cout << "T2 is " << T2 <<endl; return 0; }
上面这个程序,初看应该输出 T2 is 0
但是实际上,得出T2 is 2
如果把#define换成const, 则可以输出想要的结果。
2.22 用动态分配空间的方法,计算Fibonacci数列的前20项,并存储到动态分配的空间中。
#include <iostream> using namespace std; int main() { int *pi = new int[20]; *pi = 1; pi[1] = 1; for(int i = 2; i < 20; i++) { pi[i] = pi[i - 2] + pi[i - 1]; } return 0; }
2.23 重载sroot函数,输出一个数的二次方根。
#include <iostream> using namespace std; double sroot(int num) { return (double)sqrt((double)num); } double sroot(long num) { return (double)sqrt((double)num); } double sroot (double num) { return (double)sqrt(num); } int main() { return 0; }
2.24 解决百钱问题。将一元人民币换成1、2、5分的硬币,有多少种换法?
#include <iostream> using namespace std; int main() { int num = 0; //总共换法的总数。初始化为0。 for(int i = 0; i <= 100; i++) { for(int j = 0; j <= 50; j++) { if((i + 2*j) > 100) { break; } for(int k = 0; k <= 20; k++) { if((i + 2*j + 5*k) == 100) { num++; cout << "1分" << i << "个;" << "2分" << j << "个;" << "5分" << k << "个;" << endl; } if ((i + 2*j + 5*k) > 100) { break; } } } } cout << num << endl; return 0; }
2.25 输入两个整数,按由小到大的顺序输出。要求使用变量的引用。
#include <iostream> using namespace std; void swap(int &a, int &b) { a = a + b; b = a - b; a = a - b; } int main() { int a, b; cin >> a >>b; if(a > b) { swap(a, b); } cout << a << "," << b << endl; return 0; }
2.26 用二分法求解 f(x)=0的根。
#include <iostream> using namespace std; double Fun(double x) { return 35*x +25; //假设f(x)=35x+25 } int main() { double a, b; cin >> a; if(Fun(a) == 0) { cout << "x = " << a << endl; return 0; } do { cin >> b; } while ((Fun(a) * Fun(b)) >= 0); if(Fun(b) == 0) { cout << "x = " << b << endl; return 0; } if(a > b) { a = a + b; b = a - b; a = a - b; } while(1) { if(Fun((a + b)/2) == 0) { cout << "x = " << (a + b)/2 << endl; return 0; } if(Fun(a) * Fun((a + b)/2) < 0) { b = (a + b)/2; } if(Fun(b) * Fun((a + b)/2) < 0) { a = (a + b)/2; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?