1、实验八1实验目的(1)初步学会指针数组的定义与使用方法。(2)了解指向一维数组的指针变量的概念,能用指向一维数组的指针变量按行处理二维数组的问题。(3)理解返回指针值函数的概念、定义格式,学会用返回指针值函数处理字符串问题。(4)理解函数指针与函数指针变量的概念,学会用函数指针变量处理不同函数数学计算问题。2实验要求(1)编写实验程序(2)在 VC+运行环境中,输入源程序;(3)编译运行源程序;(4)输入测试数据进行程序测试;(5)写出实验输入数据与运行结果。3实验内容(1)定义一个二维字符数组 s380及指针数组 p3,用 cin.getline(si,80) 输入 3 个字符串到二维数组
2、3 行中,然后用指针数组 p 对字符串进行降序排列(要求用擂台法) ,最后用指针数组 p 输出排序后的结果,用字符数组 s 输出排序前的三个字符串。实验数据:“Visual C+“ ,“Visual Basic“ ,“Delphi“(2)输入一个二维数组 a33,设计一个函数,用指向一维数组的指针变量和二维数组的行数作为函数的参数,求出平均值、最大值和最小值,并输出。实验数据:10,25,90,80,70,35,65,40,55(3)设计程序,用函数指针变量完成两个操作数的加、减、乘、除、取余运算。实验数据:10 + 2010 - 510 * 1510 / 210 % 3 (4)设计一个用梯形
3、法求定积分的通用函数,被积函数的指针、积分的上限、积分的下限和积分的区间等分数作为函数的参数。分别求出下列定积分的值。dxs213)ln(412)(dxes312)in(4解答参考(1)#include # include void main(void) char s380;char *p3=s0,s1,s2;char *pc;int i,j,k;coutpi;for (i=0;iint 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
4、x,int y) return x/y;int res(int x,int y) return x%y;void main(void) int x,y;char operate;int (*f)(int,int);coutxoperatey ;switch (operate)case +: f=add; break;case -: f=sub; break;case *: f=mul; break;case /: f=div; break;case %: f=res; break;default: return;coutfloat ave(float (*p)3,float *max,floa
5、t *min) float sum=0;int i,j;for(i=0;i(*p)j) *min=(*p)j;p+;return sum/9;void main(void) float a33,max,min,average;int i,j;coutaij;max=min=a00;average=ave(a+0,coutvoid fun(float a33) float max,min,sum=0,(*p)3;int i,j;max=min=a00;for(i=0;i(*p)j) min=(*p)j;coutbij;fun(b);程序运行结果:Input Data:10 25 90 80 70
6、 35 65 40 55ave=52.2222max=90min=10(4)分析:由高等数学可知, 的定积分值等于由曲线 y=f(x)、直线 x=a 、x=b、 badxf)(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-1)*hx 0=a
7、,x n=b,x i=a+i*h用梯形法求定积分面积的公式为: 10)(nii hiafs其中:a、b 分别为积分的下、上限,n 为积分区间的分隔数,h=(ba)/n,h 为积分步长;f(x) 为被积函数。程序编写如下:# include # include 图 用梯形法求定积分面积y y=f (x) yn-1 y2 yny1y0s0 s1 s 2 sn-1x=a x=bx0 x1 x2 x3 xn-1 xn x0 a h b float f1(float x) return (1+log(x)+x*x*x);float f2(float x) return (1/(1+x*x);float
8、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 )cout“s1=“integral(f1,1,2,1000)endl;cout“s2=“integral(f2,-1,4,1000)endl;cout“s3=“integral(f3,1,3,1000)endl;程序运行结果:s1=5.13245s2=2.11232s3=3.31222