注册网站要百度实名认证安不安全,网站的倒计时怎么做的,精品无人区高清不用下载,网站检测报告那里做1.题目
2.思路 1.首先#xff0c;我们可以知道#xff0c;我们必须先要把z求出来#xff0c;但这里需要注意的是x#xff0c;y并不包含了全部的定义域#xff0c;所以我们必须先判断是否输入的数据满足条件。而这#xff0c;就是我们所需要突破的函数的防御#xff0c;…1.题目
2.思路 1.首先我们可以知道我们必须先要把z求出来但这里需要注意的是xy并不包含了全部的定义域所以我们必须先判断是否输入的数据满足条件。而这就是我们所需要突破的函数的防御即如何使函数抵御不正确使用或非法数据传入时出错提升健壮性方法就是在函数的入口处检查输入参数的合法性。
2.当然这里就又有一个问题了即我们知道一个函数的返回值只能有一个如果你又想要返回函数输入值错误的判断又想返回z值这个时候便会无计可施。但是我们很巧的是可以发现z值都是正数这也就意味着我们可以通过使z值为负来执行后面的语句。具体看代码
3.子函数的实现
#includestdio.h
#includemath.h
double func(double x, double y)
{double z0;if (x 0 y 0){z exp(x y);}else if (0 x x 1 y 0){z exp(2 * x - y);}else if (x 1){z log(x);}else{z -1;}return z;
}
注意这里的指数与对数都需要math.h头文件这个具体用法可以自己百度搜索
4.主函数的实现
int main()
{double x, y,z;printf(请输入两组数字中间用空格隔开就行)\n);scanf_s(%lf %lf, x, y);double result func(x, y);if (result -1){printf(输入的数据不在定义域范围内\n);}else{double s;s result x y;printf(结果为%lf, s);}return 0;
}
这里的result实际上便是z当z等于负数我们可以知道用户输入的数据并不是在对应的范围内所以我们可以通过这样的方法进行防御和函数的加固。
5.总结反思 那么问题又来了如果z可以取负数那么这样的话不就与之冲突了么而且如果函数很复杂我也不知道能不能取到呀。 这里我们就要认识形参与实参的关系了形参是不能改变实参但我们可以通过地址找到他从而来更改但目前地址还没学我们可以使用一下引用这个引用不等于形参因为它是本来就是实参只不过换了个名字而已这样的话我们就可以通过直接更改所引用的参数的值然后至于函数可否运行能不能实现我们则用状态来判断如-1和其他的数接下来我们具体看一下代码。
#includestdio.h
#includemath.h
double func(double x, double y,double z)
{double zz0;if (x 0 y 0){z exp(x y);}else if (0 x x 1 y 0){z exp(2 * x - y);}else if (x 1){z log(x);}else{zz -1;}return zz;
}int main(){double x, y;double z 0;printf(请输入两组数字中间用空格隔开就行)\n);scanf_s(%lf %lf, x, y);double result func(x, y, z);if (result -1){printf(输入的数据不在定义域范围内\n);}else{double s;s z x y;printf(结果为%lf, s);}return 0;}这里我们使用了引用参数传参用zz负责判断函数的可行性z的值直接在函数中就已经被更改。