系统环境: 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;
}