博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C语言及程序设计》实践参考——分段函数求值
阅读量:7113 次
发布时间:2019-06-28

本文共 1533 字,大约阅读时间需要 5 分钟。

返回:  

【项目1:分段函数求值】

从键盘输入x的值(要求为实型),根据公式1计算并输出x和y的值。 
[参考解答]

解法1  

#include 
#include
int main ( ){ double x, y; scanf("%lf", &x); if (x<2) y=x; else if(x<6) //此处已经自然满足x>=2的条件 y=x*x+1; else if(x<10) y=sqrt(x+1); else //自然是x>=10的时候执行下一语句 y=1/(x+1); printf("%lf\n", y); return 0;}
同学们的解法中,还有:
解法2  
#include 
#include
int main ( ){ double x, y; scanf("%lf", &x); if (x<2) y=x; if(x>=2 && x<6) y=x*x+1; if(x>=6 && x<10) y=sqrt(x+1); if(x>=10) y=1/(x+1); printf("%lf\n", y); return 0;}
  这个解法不能算错,但是不好,它会让计算机多“做”一些事情。例如,当输入x的值为1时,解法1只需要进行一次判断,直接求值即可,而当输入x的值为8时,解法1也只需要进行3次判断。但对于解法2,无论输入是多少,4次判断都少不了。
  这是涉及“效率”的问题,可能在此处无关大碍,但专业人员对程序评价是,正确是底线,接下来就要关注效率。
  充分用好else分支,显然程序更易懂一些,要习惯于用这种写法。
  再一个需要强调并于条件的写法。以(x>=2 && x<6)为例,有人会写成(2=<x<6),这时,编译器会提示错误,由此改正尚不至于造成严重后果。而将同样的条件,有人写成(6>x>=2)时,不会有编译错误,但更大的风险却隐藏其中。例如x=4时,
(x>=2 && x<6)的值为真(1):(x>=2)和(x<6)同时为真,故为真;
(6>x>=2)的值为假(0):为假为原因是,6>4为真(1),故表达式相当于(1>=2);
事实上,由于(6>x)的取值只能是0或1,无论x取值多少,(6>x>=2)永远为假。
  将表示判断的表达式写好,事关正确性与效率。
  有同学写出了下面的解法:
解法3  
#include 
#include
int main ( ){ double x, y; scanf("%lf", &x); if (x<2) y=x; if(x>=2 && x<6) y=x*x+1; if(x>=6 && x<10) y=sqrt(x+1); else y=1/(x+1); printf("%lf\n", y); return 0;}
  这个写法中,终于在第13行用了一个else。看似用上了双分支是好事,这个程序却是完全错误的。输入0或4运行一下,就会发现错误了。而分析程序,确实只要(x>=6 && x<10)为假,即使x<6已经在前面给y赋过值,else分支仍然要执行,y将被重新赋值,由此产生错误!

你可能感兴趣的文章
【JavaScript】JavaScript Array 对象(数组)
查看>>
github 上有趣又实用的前端项目(持续更新,欢迎补充)
查看>>
opencv python 直方图均衡化
查看>>
HotFrameLearning 热门框架学习(前言)
查看>>
git团队开发流程
查看>>
【Under-the-hood-ReactJS-Part6】React源码解读
查看>>
深入理解css之vertical-align
查看>>
Laravel事件
查看>>
matlab绘制peano(皮亚诺)曲线和koch(科赫曲线,雪花曲线)分形曲线
查看>>
使用pipenv代替virtualenv管理python包
查看>>
Docker零基础入门指南(四):Docker容器使用
查看>>
React 深入系列4:组件的生命周期
查看>>
Mybatis之设计模式之迭代器模式
查看>>
房间号生成器
查看>>
CentOS 6.8 安装vsftpd
查看>>
js设计模式 --- 装饰设计模式
查看>>
Flask源代码阅读笔记(一)——应用启动
查看>>
IOS精品源码,仿探探UIButton封装iOS提示弹框迅速引导页自定义导航栏
查看>>
setState的一个Synthetic Event Warning
查看>>
通读Python官方文档之wsgiref(未完成)
查看>>