资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
班级:数学1402 学号:41462056 姓名:赵儒星实验3顺序结构和分支结构程序设计(1)请将自己报告部分,文字和程序代码,加粗认真阅读并操作,按实验指导书P148至P154的要求,完成实验2的实验内容及自测练习。实验内容和实验要求 练习题1 已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式: 要求在C+中用标准函数sqrt计算平方根,此函数包含在cmath头文件中。 思路 该程序用到了C+中的数学标准函数sqrt。要用编译预处理命令#include,把cmath头文件包含进来。用cin输入流控制将三条边长输入给a、b、c 三个变量。计算后用cout输出流控制将面积输出。 程序代码#include using namespace std;#include cmathint main() int a,b,c; float s,area ; cout a b c; s =1.0/2*(a+b+c) ; area = sqrt(s*(s-a)*(s-b)*(s-c) ; cout area = area endl; return 0; 运行结果【思考题及问题】 将程序中的“s=1.0/2*(a+b+c;”语句改为“s=1/2*(a+b+c);”,再进行编译、链接、运行,看结果如何。1.0/2是普通意义的除法,结果是实数,而1/2是取整运算,结果为0,所以这两种写法是不一样的。所以改了之后运行结果为0。 将程序中的“area=sqrt(s*(s-a)*(s-b)*(s-c);”语句改为“area=sqrt(s(s-a)(s-b)(s-c);”,再进行编译、链接、运行,看结果如何。C+表达式中乘号“*”是不能省略的,所以 此处为不合法语句!练习题2 从键盘输入两个实型数,编程求它们的和,差,积,商。 要求输出结果时,保留2位小数。 思路从键盘输入的两个实型数,可以定义成实型变量,简单起见,通常定义为float型。在输入之前通过cout输出流控制给出输入提示。对于输入的数据按照指定完成和,差,积,商的运算并输出即可。 程序代码#include #include using namespace std;int main() float x,y,z1,z2,z3,z4; cout x y;z1=x+y;z2=x-y;z3=x*y;z4=x/y; coutsetiosflags(ios:fixed); cout setprecision(2); cout x + y = z1 endl; cout x - y = z2 endl; cout x * y = z3 endl; cout x / y = z4 endl;return 0; 运行结果【思考题及问题】如果题目要求“输入两个整型数,编程求它们的和、差、积、商”,那么,在求商时需要注意什么?答:这时在表达式“z1=x+y;z2=x-y;z3=x*y;z4=x/y;”中,就必须进行数据的强制类型转换,即改成“z1=(float)x+(float)y; z2=(float)x-(float)y; z3=(float)x*(float)y; z4=(float)x/(float)y;”才能算出同样的结果。练习题3 编程序,计算下面分段函数的值。 2x+10 (x10) 要求 用键盘输入x的值。 运行程序时,分别按x的值小于0、x的值在0到10之间、x的值大于10三种情况输入数据,检查输出的y值是否正确。 思路该程序根据输入数据x的值不同,计算不同的函数表达式,并输出计算结果,显然需要采用分支结构实现,由于此分段函数只有3种情况,故可以采用ifelse ifelse多分支语句实现。如果情况比较多,如5种以上的情况,建议采用switch语句实现。 程序代码#include using namespace std;int main() int x,y; cout x ;if(x0) y=x+10;else if(x=10) y=8*x+5;else y=4*x-10; cout x= x , y= y endl; return 0; 运行结果【思考题及问题】判断x的值在010之间可否使用表达式“0=x=10”?为什么?正确的表示方法是什么?答:不可以,“0=x=10”其实是“(0=x)=0&x=10”.练习题4 输入并运行以下程序,分析程序的运行结果。#include using namespace std;int main() float x,y; x=2.2; y=x/2.0; y=y*2.0; if (y=2.2) cout x=y endl; if (x=y) cout 这是一个逻辑错误! endl; return 0; 运行结果 分析显然,这个结果和人们想象的不一样。在数学中,经过x=2.2;y=x/2.0;y=y*2.0;的运算后,y的值应该为2.2。 但在计算机中实型数据在存放时有一定的误差,所以一般而言,在C+程序中可以对实型数据进行大于或小于的比较,但通常不进行=或!=的关系运算,因为实型数据在内存中存放时有一定的误差,很难比较它们是否相等。如果一定要进行比较,则可以用它们的差的绝对值去与一个很小的数 (如10-6 )相比,如果小于此数,就认为它们是相等的。 例如有x和y两个实型数,比较它们是否相等的表达是fabs(x-y)le-6。当表达式的值为 1 时,即 x 和 y 之间的差值非常小,则认为它们相等,反之则不相等。【 思考题及问题】 为什么该程序的运行结果是输出“这是一个逻辑错误!”?答: 将“if (y=2.2)”改为“if (fabs(y-2.2) 0时,方程有两个不相等的实根:x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a) 当d 0时,方程有两个虚根:x1=jp+ipix2=jp-ipi其中:实部 jp=-b/(2*a),虚部 ip=sqrt(-d)/(2*a)。 程序代码#include #include using namespace std;int main() float a,b,c,d,x1,x2,lp,ip; cin a b c; if (fabs(a)1e-6) cout is not quadratic endl; else d=b*b-4*a*c; if (fabs(d)=1e-6) / 相等的实根 cout has two equal roots:n; x1=x2=-b/(2*a); cout x1=x2= x1 1e-6) / 不相等的实根 x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); cout has two real roots:n ; cout x1= x1 ,x2= x2 endl; else / 虚根 lp=-b/(2*a);ip=sqrt(-d)/(2*a); cout has two complex roots: n; cout x1= lp + ip in; cout x2= lp - ip 0时 当d 0时【思考题及问题】要求: 为输入添加提示; 输出保留1位小数。修改后程序代码为:#include #include #includeusing namespace std;int main() float a,b,c,d,x1,x2,lp,ip; cout a b c; if (fabs(a)1e-6) cout is not quadratic endl; else d=b*b-4*a*c; if (fabs(d)=1e-6) / 相等的实根 cout has two equal roots:n; x1=x2=-b/(2*a);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号