C++Primer第五版 6.1节练习
练习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节练习的更多相关文章
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
		
本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...
 - C++ 11 从C++ primer第五版的学习笔记
		
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
 - C++PRIMER第五版练习题答案第一章
		
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
 - C++Primer第五版 3.2.3节练习
		
练习 3.6:编写一段程序,使用范围for语句将字符串内的所有字符用X代替. #include<iostream> #include<string> using namespa ...
 - C++Primer第五版 3.5.1节练习
		
练习 3.27:假设txt_size是一个无参数的函数,它的返回值是int.请回答下列哪个定义是非法的?为什么? Unsigned buf_size = 1024; (a) int ia[buf_si ...
 - C++Primer第五版学习笔记
		
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
 - C++学习书籍推荐《C++ Primer 第五版 (英文)》下载
		
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...
 - C++Primer第五版——习题答案目录
		
目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...
 - C++Primer第五版——习题答案和解析
		
感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...
 
随机推荐
- 深入java面向对象四:Java 内部类种类及使用解析(转)
			
内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...
 - Java中方法的格式
			
[修饰符] 返回值类型 方法名([参数类型 形式参数1,参数类型 形式参数2,……]) { 执行语句; [return 返回值;]//需要的话 } 参数列表(参数的类型 ...
 - python模块之random模块
			
random模块 随机模块,用于处理随机问题. import random # 随机整数 print(random.randint(0, 9)) # 0到9之间随机一个整数 print(random. ...
 - CF1163F Indecisive Taxi Fee
			
NOIP之前留的坑 CF1163F Indecisive Taxi Fee 经典问题:删边最短路 在Ta的博客查看 任意找一条最短路E,给E上的点和边新加入一个1~len的编号 最短路上的边变大麻烦 ...
 - 人脸检测MTCNN的训练过程(PRO网络)
			
以下学习均由此:https://github.com/AITTSMD/MTCNN-Tensorflow 数据集 WIDER Face for face detection and Celeba for ...
 - Vue中的scoped及穿透方法(修改第三方组件局部的样式)
			
何为scoped? 在vue文件中的style标签上,有一个特殊的属性:scoped.当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组 ...
 - 一眼看懂promise async的区别
			
// promise方法 let p1 = new Promise((resolve,reject) => { setTimeout(() => { resolve('我是p1') },4 ...
 - CodeForces - 922D  Robot Vacuum Cleaner (贪心)
			
Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that Pushok is a ...
 - Nodejs之使用express框架搭建WEB应用
			
首先创建一个index.js,在里面引入相关的中间件,如果没有这些中间件,则需要在nodejs里进入index.js所在的文件夹安装这些模块,安装命令:npm install express ex ...
 - windows下的redis和redismyadmin
			
redis默认是16个数据库,从0-15 由于项目需要,我使用了19号数据库,然而再向19号数据库添加数据的时候,通过redismyadmin查看发现添加到19号数据库的数据会同步到0,16,17,1 ...