南大C++:《程序设计教程 用C++语言编写》答案(三)
这些是我自己写的代码,全部通过编译。
3.8.11 编写一个程序,输出十进制乘法表。
/*
编写一个程序,输出十进制乘法表。
*/
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << setw(4)<<" ";
for (int i = 1; i <= 9; i++)
cout << setw(4) << i<<" ";
cout << endl;
for (int i = 1; i <= 9; i++)
{
cout << setw(4) << i;
for (int j = 1; j <= 9; j++)
{
cout <<setw(4)<< i*j <<" ";
}
cout << endl;
}
}
4.9.7 编写一个函数digit(n,k),它计算整数n的从右向左的第k个数字。
/*
P105 4.9.7
编写一个函数digit(n,k),它计算整数n的从右向左的第k个数字。
*/
#include <iostream>
using namespace std;
int digit(int n, int k)
{
int t=0;
while (k)
{
t = n % 10;
n = n / 10;
k--;
}
return t;
}
int main()
{
int n, k;
while (1)
{
cout << "n:";
cin >> n;
cout << "k:";
cin >> k;
cout << digit(n, k) << endl;
}
}
4.9.10 分别写出计算Hermit多项式H(n)值的迭代和递归函数。
/*
P105 4.9.10
分别写出计算Hermit多项式H(n)值的迭代和递归函数。
*/
#include <iostream>
using namespace std;
int h1(int n, int x)
{
if (n == 0)
return 1;
if (n == 1)
return 2 * x;
return 2 * x*h1(n - 1, x) - 2 * (n - 1)*h1(n - 2, x);
}
int h2(int n, int x)
{
int a, b, c;
a = 1;
b = 2 * x;
c = 2 * x*b - 2 *a;
for (int i = 3; i <= n;i++)
{
a = b;
b = c;
c = 2 * x*b - 2 * (i - 1)*a;
}
return c;
}
int main()
{
int n, x;
while (1)
{
cout << "n:";
cin >> n;
cout << "x:";
cin >> x;
cout << "递归:" << h1(n, x) << endl;
cout << "迭代:" << h2(n, x) << endl;
}
}
4.9.11 写出计算Ackermann函数ack(m,n)值的递归函数并用它计算ack(2,2)的值。
/*
P105 4.9.11
写出计算Ackermann函数ack(m,n)值的递归函数并用它计算ack(2,2)的值。
*/
#include <iostream>
using namespace std;
int ack(int m, int n)
{
if (m == 0)
return n + 1;
else if (n == 0)
return ack(m - 1, 1);
else
{
return ack(m - 1, ack(m, n - 1));
}
}
int main()
{
int m, n;
while (1)
{
cout << "m:";
cin >> m;
cout << "n:";
cin >> n;
cout << "ack(" << m << ',' << n << ")=" << ack(m, n) << endl;
}
}
4.9.12 根据下图写一个函数int path(int n);用于计算从结点1到结点n(n大于1)共有多少条不同的路径。
/*
P105 4.9.12
根据下图写一个函数int path(int n);用于计算从结点1到结点n(n大于1)共有多少条不同的路径。
*/
#include <iostream>
using namespace std;
int path(int n)
{
if (n == 2)
return 1;
if (n == 3)
return 2;
if (n == 4)
return 3;
if (n % 2 == 0)
return path(n - 1) + path(n - 2) + path(n - 3);
else
return path(n - 1) + path(n - 2);
}
int main()
{
int n;
while (1)
{
cout << "n:";
cin >> n;
cout << "path:" << path(n) << endl;
}
}