C++第9周项目1参考——分段函数求值

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565

【项目1:分段函数求值】从键盘输入x的值(要求为实型),根据以下公式计算并输出x和y 的值。

 要求采用两种解法完成,解法1用if-else语句,解法2主体用switch语句(注意到分段的关键点处,x的值均是偶数,这是可以利用的条件)。

提示:在这个公式中,x<0是非法的输入,程序中应该做出处理。
测试要求:运行至少5次程序,测试程序在所有可能的执行流程中,是否存在错误的处理。

【参考解答】(解题思路请阅读注释)视频链接

参考1:用if-else语句完成

#include<iostream>
#include <cmath>
using namespace std;
int main()
{
  double x,y;
  cin>>x;
  if (x<0)
     cout<<"Input error!"<<endl;
  else
  {
     if(x<2)      //此处已经符合x>=0,0<=x<2为错误的写法
		 y=x;
	 else if (x<6)  //有人不用else双分支,而重新开始一个if语句,即if(x>=2&&x<6),这样的程序不简洁,效率也低
		 y=x*x+1;
	 else if (x<10)
		 y=sqrt(x+1);
	 else
		 y=1/(x+1);   //至此完成了y值的计算
     cout<<"x="<<x<<",y="<<y<<endl;
  }
  return 0;
}

参考2:用swicth语句完成

#include<iostream>
#include <cmath>
using namespace std;
int main()
{
  double x,y;
  int c;
  cin>>x;
  if (x<0)
     cout<<"Input error!"<<endl;
  else
  {
	 c=int(x)/2;  //int(x)为的是将x转换为整型,注意到分段函数以偶数作为界限,故这样取值c作为switch分支的依据
	 switch(c)
	 {
	 case 0:
		 y=x;
		 break;		//对应0<=x<2,注意一定要用break跳出switch
	 case 1:
	 case 2:
		 y=x*x+1;
		 break;		//2<=x<6时,对应c为1、2,执行此处的赋值
	 case 3:
	 case 4:
		 y=sqrt(x+1);
		 break;		//类比上一行注释
	 default:
		 y=1/(x+1); //x>=10时,c的值将不是0-4,执行default后的赋值,此行可以写break,也可省略了
	 }
	//以上完成了y值的计算
     cout<<"x="<<x<<",y="<<y<<endl;
  }
  return 0;
}

参考3:一种不当解法

#include <iostream>
#include <Cmath>
using namespace std;
int main()
{
    float x,y;
    cout<<"请输入x的值:";
    cin>>x;
    if(x<0)
        cout<<"输入有误!";
    else
    {
        if(x>=0&&x<2)  //考虑:此处x>=0必要吗?注意:能运行到这儿是因为x<0为假!
            y=x;
        if(x>=2&&x<6)  //如果输入的值为1.5,这个判断是否还有必要进行?只有在x<2为假时才有必要继续判断!你是否能想起else?
            y=x*x+1;
        if(x>=6&&x<10)
            y=sqrt(x+1);
        if(x>=10)
            y=1/(x+1);
    }
    cout<<"x="<<x<<"  "<<"y="<<y<<endl;
    return 0;
} 
时间: 2024-09-16 18:14:31

C++第9周项目1参考——分段函数求值的相关文章

2014秋C++第8周项目1参考-分段函数求值

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833. 课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1:分段函数求值] 编程序,计算下面函数的值并输出(x取整型即可) 参考解答: //解法1 #include <iostream> using nam

C++第8周项目1分段函数求值

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1:分段函数求值]编程序,计算下面函数的值并输出 参考解答: //解法1 #include using namespace std; int main( ) { int x, y; cin>>x; if (x>=1) y=x-1; else y=-x+1; cout<<y<<endl; return 0; } 上面的程序,第8行-第1

2014秋C++第8周项目3参考-多分段函数求值

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833. 课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目3:多分段函数求值] 从键盘输入x的值(要求为实型),根据下面的公式计算并输出y的值.  (1)请用if~else~语句的嵌套,实现这个多分支的程序: 参考解

C++第9周项目1分段函数求值

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1分段函数求值]从键盘输入x的值(整型),根据公式1计算并输出x和y的值.  要求用switch语句构造多分支结构完成求解,利用BB平台上"第9周练习源代码及博文模板.txt"中给出了博文模板发布报告. 解法1:类似例3.9的思路,各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支: #include<iost

Raptor实践参考:分段函数求值

返回->课程主页 2-3 分段函数求值 从键盘输入x的值,根据下面的公式计算并输出y的值. [参考解答]

2014秋C++第16周 项目3参考 用函数指针调用函数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目3-用函数指针调用函数] 将下面的程序补充完整(包括定义函数),使其能够完成图示的功能.请使用已有程序的风格. void eat(); void sleep(); void hitdoudou(); void run(void (*f)()); int main() { int iCh

《C语言及程序设计》实践参考——求解分段函数的值

返回:贺老师课程教学链接  项目要求 [项目2-求解分段函数的值] #include<stdio.h> double f(double); //这一句是对自定义函数f的声明 int main( ) { double x; printf("请输入x的值:"); scanf("%lf", &x); printf("解得:f(%.2f)=%.2f\n", x, f(x)); //调用函数f求解 return 0; } //将自定义函

《C语言及程序设计》实践参考——两段函数求值

返回:贺老师课程教学链接  项目要求 [项目:两段函数求值]编程序,计算下面函数的值并输出(x取整型即可)[参考解答] 解法1: #include <stdio.h> int main ( ) { int x, y; scanf("%d", &x); if (x>=1) y=x-1; else y=-x+1; printf("%d\n",y); return 0; } 上面的程序,用一个完整的双分支求值,之后再输出.先求解,再输出,这一&q

2014秋C++第11周项目5参考-当年第几天

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目5-当年第几天]定义一个函数,其参数为年.月.日的值,返回这一天为该年的第几天.要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果. int days(int y, int m, int d); int main() { int year, month,