资源描述:
《青海大学软件技术工程实验二》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验名称:实验二几种算法比较实验目的:1)学习工程中常用的几种算法设计方法。2)通过上机来比较这几种算法之间的区别和联系。实验内容:1、编程实现例题1.1百元买百鸡。#includevoidmain(){intI,J,K,n=0;printf("百元买百鸡问题求解方案");printf("----------------------");printf("t母鸡t公鸡t小鸡");for(I=0;I<=100;I++)for(J=0;J<=100;J++){K=100-I-J;if(K*0.5+I*3+J*2==100){n++
2、;printf("方案%d:t%dt%dt%d",n,I,J,K);}}}2、编程实现例题1.2计算定积分。3、编程实现例题1.3输出自然数从1到n。//3、编程实现例题1.3输出自然数从1到n。#include"stdio.h"voidwrt(intn){intk;for(k=1;k<=n;k++)printf("%d",k);return;}voidwrt1(intn){if(n!=0){wrt1(n-1);printf("%d",n);}return;}voidmain(){intn;printf("请输入n:");scanf("%d"
3、,&n);wrt(n);wrt1(n);printf("n=%d",wrt);printf("n=%d",wrt1);}1、编程实现例题1.4用二分法求方程的根。//4、编程实现例题1.4用二分法求方程的根。#include#include"math.h"main(){floatx,x1,x2;floatF(floatx,floatx1,floatx2);printf("请输入区间[x1,x2]");scanf("%f%f",&x1,&x2);printf("x=%f",F(x,x1,x2));}floatF(floatx,float
4、x1,floatx2){floatf,f1,f2;do{f1=pow(x1,3)-5*pow(x1,2)+16*x1-80;f1=pow(x2,3)-5*pow(x2,2)+16*x2-80;}while(f1*f2>0);do{x=(x1+x2)/2;f=pow(x,3)-5*pow(x,2)+16*x-80;if(f1*f>0){x1=x;f1=f;}elseif(f2*f>0){x2=x;f2=f;}}while(fabs(f)>1e-6);returnx;}二分法的基本思路是:任意两个点x1和x2,判断区间(x1,x2)内有无一个实根,如果f(x1)与
5、f(x2)符号相反,则说明有一实根。接着取(x1,x2)的中点x,检查f(x)和f(x2)是否同号,如果不同号,说明实根在(x,x2)之间,如果同号,在比较(x1,x),这样就将范围缩小一半,然后按上述方法不断的递归调用,直到区间相当小(找出根为止)!例用弦截法求方程根比如用二分法求f(x)=x^3-6x-1=0的实根。f1=pow(x1,3)-5*pow(x1,2)+16*x1-80;f2=pow(x2,3)-5*pow(x2,2)+16*x1-80;#include"math.h"main(){floatx,x1,x2;floatF(floatx,floa
6、tx1,floatx2);printf("请输入区间[x1,x2]");scanf("%f%f",&x1,&x2);printf("x=%f",F(x,x1,x2));}floatF(floatx,floatx1,floatx2){floatf,f1,f2;do{f1=pow(x1,3)-6*x1-1.0;f2=pow(x2,3)-6*x2-1.0;}while(f1*f2>0);//确保输入的x1,x2使得f1,f2符号相反do{x=(x1+x2)/2;//求x1,x2的中点f=pow(x,3)-6*x-1.0;if(f1*f>0)//当f与f1符号
7、相同时{x1=x;f1=f;}elseif(f2*f>0)//当f与f2符号相同时{x2=x;f2=f;}}while(fabs(f)>1e-6);//判断条件fabs(f)>1e-6的意思是f的值非常0returnx;}输入:15则输出:x=2.528918输入:-1010则输出:x=2.528918