c程序设计实验八

上传人:公**** 文档编号:498057333 上传时间:2023-05-25 格式:DOC 页数:6 大小:42KB
返回 下载 相关 举报
c程序设计实验八_第1页
第1页 / 共6页
c程序设计实验八_第2页
第2页 / 共6页
c程序设计实验八_第3页
第3页 / 共6页
c程序设计实验八_第4页
第4页 / 共6页
c程序设计实验八_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《c程序设计实验八》由会员分享,可在线阅读,更多相关《c程序设计实验八(6页珍藏版)》请在金锄头文库上搜索。

1、实验八1实验目的(1)初步学会指针数组的定义与使用方法。(2)了解指向一维数组的指针变量的概念,能用指向一维数组的指针变量按行处理二维数组的问题。(3)理解返回指针值函数的概念、定义格式,学会用返回指针值函数处理字符串问题。(4)理解函数指针与函数指针变量的概念,学会用函数指针变量处理不同函数数学计算问题。2实验要求(1)编写实验程序(2)在VC+运行环境中,输入源程序;(3)编译运行源程序;(4)输入测试数据进行程序测试;(5)写出实验输入数据与运行结果。3实验内容(1)定义一个二维字符数组s380及指针数组p3,用cin.getline(si,80) 输入3个字符串到二维数组3行中,然后用

2、指针数组p对字符串进行降序排列(要求用擂台法),最后用指针数组p输出排序后的结果,用字符数组s输出排序前的三个字符串。实验数据:Visual C+ ,Visual Basic ,Delphi(2)输入一个二维数组a33,设计一个函数,用指向一维数组的指针变量和二维数组的行数作为函数的参数,求出平均值、最大值和最小值,并输出。实验数据:10,25,90,80,70,35,65,40,55(3)设计程序,用函数指针变量完成两个操作数的加、减、乘、除、取余运算。实验数据:10 + 20 10 - 5 10 * 15 10 / 2 10 % 3 (4)设计一个用梯形法求定积分的通用函数,被积函数的指针

3、、积分的上限、积分的下限和积分的区间等分数作为函数的参数。分别求出下列定积分的值。 4解答参考(1)#include # include void main(void) char s380; char *p3=s0,s1,s2; char *pc; int i,j,k; coutInput 3 String:endl; for (i=0;ipi; for (i=0;i2;i+) k=i;for (j=i+1;j3;j+) if (strcmp (pi,pj)0) k=j; if (k!=i) pc=pi;pi=pk;pk=pc; for ( i=0;i3;i+) coutpiendl;for

4、( i=0;i3;i+) coutsiendl;程序运行结果:Input 3 String:Visual BasicVisual C+DelphiVisual C+Visual BasicDelphiVisual BasicVisual C+Delphi(3)解:# include int add(int x,int y) return x+y;int sub(int x,int y) return x-y;int mul(int x,int y) return x*y;int div(int x,int y) return x/y;int res(int x,int y) return x%

5、y;void main(void) int x,y; char operate; int (*f)(int,int); coutinput three 0 endendl; coutInput x operate y= xoperatey ; switch (operate) case +: f=add; break;case -: f=sub; break;case *: f=mul; break;case /: f=div; break;case %: f=res; break;default: return; coutxoperatey=(*f)(x,y)endl; 程序运行结果:inp

6、ut three 0 endInput x operate y=10 + 2010+20=3010 - 510-5=510 * 1510*15=15010 / 210/2=510 % 310%3=10 0 0(3)方法一:用指向一维数组的指针变量和二维数组的行数作为函数的参数#include float ave(float (*p)3,float *max,float *min) float sum=0; int i,j; for(i=0;i3;i+) for(j=0;j3;j+)sum+=(*p)j;if (*max(*p)j) *min=(*p)j;p+; return sum/9;voi

7、d main(void) float a33,max,min,average; int i,j; coutInput Data:; for (i=0;i3;i+) for (j=0;jaij; max=min=a00; average=ave(a+0,&max,&min); coutave=averagen; coutmax=maxn; coutmin=minn;方法二:用数组名为函数参数,在函数内用指向一维数组的指针变量,求出平均值、最大值和最小值,并输出。解:#include void fun(float a33) float max,min,sum=0,(*p)3; int i,j; m

8、ax=min=a00; for(i=0;i3;i+) p=a+i; for(j=0;j3;j+) sum+=(*p)j; if (max(*p)j) min=(*p)j; coutave=sum/9nmax=maxnmin=minendl;void main(void) float b33; int i,j; coutInput Data:; for (i=0;i3;i+) for (j=0;jbij; fun(b);程序运行结果:Input Data:10 25 90 80 70 35 65 40 55ave=52.2222max=90min=10(4)图 用梯形法求定积分面积 y y=f

9、(x) yn-1 y2 yn y1 y0 s0 s1 s2 sn-1 x=a x=bx0 x1 x2 x3 xn-1 xn x0 a h b 分析:由高等数学可知,的定积分值等于由曲线y=f(x)、直线x=a 、x=b、 y=0所围曲边梯形的面积s,如下图所示。现将曲边梯形划分成n个小曲边梯形s0、s1、s2、sn-1。每个曲边梯形的高均为h=(ba)/n,用矩形近似曲边梯形后各曲边梯形的面积近似为:s0=y0*hs1=y1*hs2 =y2*h sn-1=yn-1*hs =s0+s1+s2+sn-1=(y0+y1+y2+yn-1)*h=(f (x0)+(f (x1)+f (x2)+f (xn-

10、1)*hx0=a ,xn=b,xi=a+i*h用梯形法求定积分面积的公式为:其中:a、b分别为积分的下、上限,n为积分区间的分隔数,h=(ba)/n,h为积分步长;f(x)为被积函数。程序编写如下:# include # include float f1(float x) return (1+log(x)+x*x*x);float f2(float x) return (1/(1+x*x);float f3(float x) return (x+exp(x)/(1+sin(x)+x*x);float integral(float (*f)(float),float a,float b,int n) float y,h; int i; y=0; h=(b-a)/n; for (i=0;in;i+) y+=f(a+i*h); return (y*h);void main (void ) couts1=integral(f1,1,2,1000)endl; couts2=integral(f2,-1,4,1000)endl; couts3=integral(f3,1,3,1000)endl;程序运行结果:s1=5.13245s2=2.11232s3=3.31222

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号