zoukankan      html  css  js  c++  java
  • 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 解决百钱问题。将一元人民币换成125分的硬币,有多少种换法?

    #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;
    }
  • 相关阅读:
    vector在堆上还是在栈上(等待自己慢慢领悟吧)
    函数指针遇到typedef
    回调函数的代码示例
    _T和_L的区别
    MFC打开文件夹对话框
    C++中的抽象类和接口类
    UML图中继承和实现的区别
    扩展点(ExtensionPoint)
    组播(又称多播)是个好东西
    C++代码实现组播及归纳的流程图
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/2548666.html
Copyright © 2011-2022 走看看