这些是我自己写的代码,全部通过编译。

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