练习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. python基础十之装饰器

    1,装饰器的形成 编程原则:开放封闭原则. 开放:对扩展是开放的 封闭:对修改是封闭的 因为修改是封闭的,所以为了对函数进行功能的扩展,就使用装饰器! 2,装饰器的定义 # wrapper就是一个装饰 ...

  2. Python--day38--多进程的方法属性总结

    多进程的方法属性:

  3. element 树形控件使用

    <el-tree :data="morkDataList" show-checkbox ref="tree" node-key="id" ...

  4. H3C 配置路由器作为FTP客户端

  5. ZR1050

    ZR1050 http://www.zhengruioi.com/problem/1030 题目大意: 给定一棵带点权的树,求所有联通块的点权和的平方的和 \(n \le 10^5\) 题解 首先,关 ...

  6. 如何在很短的时间内将大量数据插入到ConcurrentHashMap(转)

    将大批量数据保存到map中有两个地方的消耗将会是比较大的:第一个是扩容操作,第二个是锁资源的争夺.第一个扩容的问题,主要还是要通过配置合理的容量大小和扩容因子,尽可能减少扩容事件的发生:第二个锁资源的 ...

  7. JQuery多个异步操作后执行(resolve,promise,when,done)

    代码分享: //3秒后完成 function asyncThing1() { var dfd = $.Deferred(); setTimeout(function () { alert('async ...

  8. 【Docker】镜像基本操作

    1.镜像获取/生成 docker pull <image_name:tag> docker pull mysql:5.6 docker build -t <镜像名> <D ...

  9. JMeter分布式负载测试(吞吐量控制器)

    在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划. 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载.这些网页包括: 主 ...

  10. js实现php函数urlencode

    原文链接:https://www.cnblogs.com/xiaochaohuashengmi/archive/2010/05/28/1746168.html 本文介绍了php函数urlencode的 ...