练习6.1;实参和形参的区别是什么?

通俗解释: 实参是形参的初始值。编译器能以任意可行的顺序对实参求值。实参的类型必须与对应的形参类型匹配。
详解1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

练习6.2:请指出下列函数哪个有错误,为什么?应该如何修改这些错误呢?

(a)int f()
{
 string s;
 //…
 return s;
}

(b) f2(int i){/*…*/}
(c) int calc(int v1, int v2) /*…*/ }
(d) double square(double x) return x*x;

  

修改后Code
(a)string f()
{
 string s;
 //…
 return s;
}

(b)int  f2(int i){/*…*/}

(c) int calc(int v1, int v2) {/*…*/ }

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

  

练习6.3:编写你自己的fact函数,上机检查是否正确。

#include <iostream>
#include <stdexcept>

using namespace std;

void Fact(int val)
{
    int Result = 1;
    if (val > 0)
        {
            int j = 0;
            for (j = val; j > 0; --j)
                Result *= j;
                cout << "The result is: "  << Result << endl;
        }

    if (val == 0)
        {
         Result = 1;
         cout << "The result is: "  << Result << endl;

        }

    if (val < 0)
        {
            try{
                throw runtime_error("wrong inputing : val can not less than zero !!!");
                //装个X,val<0时抛出一个异常,捕获异常
                }catch(runtime_error err){
                cout << err.what() << endl;
                }
        }   

}

int main()
{
    int val;
    while (cin >> val)
        Fact(val); 

    return 0;
}

  

练习6.4:编写一个与用户交互的函数,要求用户输入一个数字,计算生成该数字的阶乘。在main函数中调用该函数。

#include <iostream>
#include <stdexcept>

using namespace std;

void Fact()
{
    int val;
    cout << "input a number: " << endl;
    while (cin >> val)
    {
        if (val > 0)
        {
            int Result = 1;
            for (;val > 0; --val)
                Result *= val;
            cout << "The result is: " << Result << endl;
        }
        else if (val == 0)
            cout << "The result is: 1" << endl;
            else
                try{
                    throw runtime_error("wrong inputing :val can not be less than zero!!!");
                } catch(runtime_error err){
                        cout << err.what() << endl;
                }

    }
}

int main()
{
    Fact();
    return 0;
}

  

练习6.5:编写一个函数输出实参的绝对值。

#include <iostream>

using namespace std;

void ABS()
{
    int val;
    cout << "input a number :" << endl;
    while (cin >> val)
    {
        if (val >= 0)
            cout << "The absolute value is: " << val << endl;
        else cout << "The absolute value is: " << -val << endl;
    }
}

int main()
{
    ABS();
    return 0;
}

  

C++Primer第五版 6.1节练习的更多相关文章

  1. 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1

    本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...

  2. C++ 11 从C++ primer第五版的学习笔记

    1. auto (page107) auto 推断会忽略const   const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...

  3. C++PRIMER第五版练习题答案第一章

    C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...

  4. C++Primer第五版 3.2.3节练习

    练习 3.6:编写一段程序,使用范围for语句将字符串内的所有字符用X代替. #include<iostream> #include<string> using namespa ...

  5. C++Primer第五版 3.5.1节练习

    练习 3.27:假设txt_size是一个无参数的函数,它的返回值是int.请回答下列哪个定义是非法的?为什么? Unsigned buf_size = 1024; (a) int ia[buf_si ...

  6. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  7. C++学习书籍推荐《C++ Primer 第五版 (英文)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...

  8. C++Primer第五版——习题答案目录

    目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...

  9. C++Primer第五版——习题答案和解析

    感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...

随机推荐

  1. 2018-8-10-win10-uwp-调试软件启动

    title author date CreateTime categories win10 uwp 调试软件启动 lindexi 2018-08-10 19:16:51 +0800 2018-03-0 ...

  2. LA 5031 Graph and Queries —— Treap名次树

    离线做法,逆序执行操作,那么原本的删除边的操作变为加入边的操作,用名次树维护每一个连通分量的名次,加边操作即是连通分量合并操作,每次将结点数小的子树向结点数大的子树合并,那么单次合并复杂度O(n1lo ...

  3. java Dialog

    Dialog构造方法 * Dialog(Frame owner, String title, boolean modal) 构造一个最初不可见的 Dialog,它带有指定的所有者 Frame.标题和模 ...

  4. MockMvc control层单元测试 参数传递问题

    GET: 1.路径参数@PathVariable 2.表单参数@RequestParam POST: 1.JSON请求体参数 @RequestBody 放: 1.路径参数@PathVariable 2 ...

  5. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  6. es6笔记 day1---let和const的应用

    ES6 -> ECMA标准 ES7  ES8 最早是由ECMA-262版本实现的 ---------------------------------------- ES6 也称为ES2015,2 ...

  7. Spring Tool Suite记录

    快速查询:选中项目名按CTRL+H

  8. CF 453C. Little Pony and Summer Sun Celebration

    CF 453C. Little Pony and Summer Sun Celebration 构造题. 题目大意,给定一个无向图,每个点必须被指定的奇数或者偶数次,求一条满足条件的路径(长度不超\( ...

  9. dotnet 新项目格式与对应框架预定义的宏

    在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码.本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多 ...

  10. remote api

    iperf -B 99.99.3.1 -c 192.168.42.242 -p 10002 -f m -i 1 -P 1 -w 1M -u -b 1M -t 20 iperf -B 192.168.4 ...