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; }