《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; }