《C++ Primer》第五版课后习题解答_第六章(1)(01-07)

系统环境: windows 10 1703

编译环境:Visual studio 2017


6.1

实参:定义在主调函数中,用来初始化形参的参数;

形参:定义在被调函数中,由其主调函数的实参来初始化。


6.2

(a) 函数的返回类型和返回变量不相同,可以修改为:

    string f() {
        string s;
        //...
        return s;
    }
(b) 没有定义返回类型,可以修改为:

    void f2(int i) { /*...*/ }
(c) 1. 缺失左侧大括号;

     2. 两个形参不能命名成相同的名字,可以修改为:

 

    int calc(int v1, int v2) { /*...*/ }

(d) 函数体没有用大括号括起来,可以修改为:

double square(double x) { return x * x };

6.3

int fact(int fac1) 
{
    int sum = 1;
    while (fac1 != 0)
    {
        sum *= fac1;
        --fac1;
    }
    return sum; 
}

6.4

#include <iostream>

using std::cout;
using std::cin;
using std::endl;
using std::runtime_error;

int fact(int fac1) // 构建计算阶乘的 fact 函数
{
    int sum = 1;
    if (fac1 == 0) // 判断输入实参的值,如果是 0,返回 1(0! = 1)
    {
        sum = 1;
    }
    else
    {
        while (fac1 != 0) // 如果不是零,则计算阶乘
        {
            sum *= fac1;
            --fac1;
        }
    }
    return sum; // 返回函数计算结果
}

int main()
{
    int val;
    int ans;
    cout << "Enter your integer:" << endl;
    while (cin >> val)
    {
        try
        {
            if (val < 0)
            {
                throw runtime_error("You Must Enter Non-negative Number!!!"); // 如果输入了负数,则报错
            }
            else
            {
                ans = fact(val);                                              // 如果输入了非负数,则正常调用函数并返回结果
                cout << "The factorial of " << val << " is: " << ans << endl; 
                break;
            }
        }
        catch (runtime_error err)
        {
            cout << err.what() << "\n" << "Do you want to continue? Enter \"y\" or \"n\" " << endl; // 函数报错之后,询问是否继续循环
            char s; // 检查用户输入字符来判断是否继续循环
            cin >> s;
            if (s == 'n')  // 如果输入了 n,则生气地结束循环
            {
                cout << "Fine!" << endl; 
                break;
            }
            else if (s == 'y')
            {
                cout << "Enter your integer AGAIN:" << endl; // 如果输入了 y,则继续循环
                continue;
            }
            else
            {
                cout << "you are funny :) " << endl; // 如果用户不按常理出牌,则结束循环
                break;
            }
        }
    }
    return 0;
}

6.5

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

double Adamabs(double abs1) 
{
    double ans = 0;
    if (abs1 < 0)
    {
        ans = abs1 * -1;
    }
    else
    {
        ans = abs1;
    }
    return ans; 
}
    
int main()
{
    double dval;
    double dans;
    cout << "Enter an number:" << endl;
    while (cin >> dval)
    {
        dans = Adamabs(dval);
        break;
    }
    cout << "The absolute value of " << dval << " is: " << dans << endl;
    return 0;
}

6.6

形参:定义在被调函数内部的参数,会被主调函数传入的实参初始化;

局部变量:定义在函数体内部的变量,只在函数体作用域内可见;

局部静态变量:在程序执行的第一次经过对象定义语句时初始化,并且知道程序终止时才被销毁。在此期间即使对象所在的函数结束执行也不会对它有影响

函数可以编写为:

int Adam(int adam1)
{
    int static cnt = 0;
    --adam1;
    ++cnt;
    return adam1;
}
函数功能为参数自减 1,并且计数变量 cnt 加一

6.7

#include <iostream>

using std::cout;
using std::endl;

int Adam()
{
    int static cnt = -1;
    ++cnt;
    return cnt;
}
    
int main()
{
    for (int i = 1; i != 10; ++i)
    {
        cout << Adam() << endl;
    }
    return 0;
}

posted @ 2017-09-13 09:57  Adam_fei  阅读(177)  评论(0编辑  收藏  举报