实验3 函数
实验三 函数的应用
实验三函数的应用实验三函数的应用实验3函数的应用(2学时)一、实验目的1.掌握函数的定义和调用方法。
2.练习重载函数的使用。
3.练习函数模板的使用。
4.练习使用系统函数。
5.学习使用VC++的调试功能,并使用stepinto跟踪到该功能的内部。
二、实验任务1.编写函数将华氏温度转换为摄氏温度,转换公式为。
C=(f-32)*5/9。
2.编写重载函数maxl,可以分别计算两个整数、三个整数、两个双精度数和三个双精度数的最大值。
3.使用重载函数模板重新实现上小题中的函数maxl。
4.使用系统函数pow(x,y)计算Zi的值。
请注意,其中包括头文件mathh。
5.用递归方法编写函数,计算斐波那契级数,观察递归调用过程。
三、实验步骤1.编写函数floatconvert(floatmpfer),参数和返回值为float类型,实现算法C=(f-32)*5/9,在main()函数中实现输入和输出。
程序名称:lab3_1。
cpp2.分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_2.cpp。
3.使用函数模板查找任何类型的最大数量。
对于不同数量的参数,编写两个同名函数模板maxl。
参数个数不同,实现函数重载,并在main()函数中测试函数。
程序名称:lab3_3.cpp4.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
程序名.1ab3_4.cpp。
5.编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算斐波那契级数。
公式为FIB(n)=FIB(n-1)+FIB(n-2),n>2;fib(1)=fib(2)=1.使用if语句判断函数的退出,使用cout语句在程序中输出提示信息。
程序名称:lab3_5.cpp6.使用debug中的stepinto追踪到函数内部,观察函数的调用过程,参考程序如下:/lab3_5#includeintfib(intn);intmain(){intn,回答cout<cin>>ncout<库特<intfib(int,n){库特<cout<{cout<7.调试步骤如下:(1)选择菜单命令build|startdebug|stepin,或按下快捷键fll,系统进入单步执行状态,程序开始运行,并出现一个dos窗口,此时visualstudio中光标停在main()函数的入口处。
C语言3:函数的运用
C语言实验——三个整数和、积与平均值Time Limit: 1000MS Memory limit: 65536K题目描述给出三个整数,请你设计一个程序,求出这三个数的和、乘积和平均数。
输入输入只有三个正整数a、b、c。
输出输出一行,包括三个的和、乘积、平均数。
数据之间用一个空格隔开,其中平均数保留小数后面两位。
示例输入1 2 3示例输出6 6 2.00#include<stdio.h>#include<math.h>void main(){int a,b,c,sum,product;float ave;while(scanf("%d%d%d",&a,&b,&c)!=EOF){sum=a+b+c;product=a*b*c;ave=sum/3;printf("%d %d %0.2f",sum,product,ave);}}汉诺塔Time Limit: 1000MS Memory limit: 65536K题目描述汉诺塔(又称河内塔)问题是印度的一个古老的传说。
开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了。
聪明的你还有计算机帮你完成,你能写一个程序帮助僧侣们完成这辈子的夙愿吗?输入输入金片的个数n。
这里的n<=10。
输出输出搬动金片的全过程。
格式见样例。
示例输入2示例输出Move disk 1 from A to BMove disk 2 from A to CMove disk 1 from B to C字符逆序Time Limit: 1000MS Memory limit: 65536K题目描述将一个字符串str的内容颠倒过来,并输出。
实验三窗函数的特性分析
实验三窗函数的特性分析窗函数是在时间域上对信号进行加权的一种方法。
它在信号处理领域中应用广泛,用于去除频谱泄露和减少频谱波动。
窗函数可以改变信号的频谱特性,有助于减小频谱波动,提高频谱分析的准确性。
本实验将分析三种不同类型的窗函数:矩形窗、汉明窗和布莱克曼窗。
1.矩形窗:矩形窗是一种简单的窗函数,它将输入的信号乘以常数1、它在时间域上呈现出矩形的形状,频域上表现为sinc函数。
矩形窗的特点是具有较宽的主瓣,但是有很高的边瓣衰减,对于频谱泄露较为敏感。
它适用于信号频谱比较窄的情况,可以提供较好的分辨率。
2.汉明窗:汉明窗是一种平滑且对称的窗函数,它在时间域上具有一对对称的凸边,频域上表现为sinc-squared函数。
汉明窗的特点是在频域上拥有较窄的主瓣和较小的边瓣泄露。
这使得它在频谱分析中具有较好的分辨率和较低的波动。
它适用于信号频谱分析的大多数情况。
3.布莱克曼窗:布莱克曼窗是一种设计用于音频处理的窗函数,它在时间域和频域上都具有较好的性能。
它的形状和汉明窗类似,但有更宽的底部。
布莱克曼窗的特点是具有更强的边瓣抑制能力,相对于汉明窗能够更好地抑制频谱波动和频谱泄露。
它适用于对频谱准确性要求较高的信号处理任务。
综上所述,不同的窗函数在频域上具有不同的特性。
矩形窗适用于频谱较窄的信号,提供较好的分辨率;汉明窗适用于大多数频谱分析的情况,具有较低的波动;布莱克曼窗能够更好地抑制频谱波动和泄露,适用于对准确性要求较高的任务。
在实际应用中,选择窗函数需要根据具体的信号特性和分析需求来进行。
需要折衷考虑分析的准确性和频谱泄露问题,并选择合适的窗函数来优化频谱分析的结果。
数学实验室探秘用实验探索数学规律
数学实验室探秘用实验探索数学规律数学实验室探秘:用实验探索数学规律数学,作为一门理性而抽象的学科,往往让人感到枯燥乏味。
但实际上,数学也可以充满趣味和创造力。
数学实验室就是一个地方,通过实验方法来揭示数学规律。
本文将带领读者一同探秘数学实验室,看看其中的奥秘。
实验1:掷骰子与概率第一次实验中,我们将掷一个六面骰子,观察出现每个面的概率。
我们重复掷骰子一百次,并记录每个面出现的次数。
根据统计结果,我们可以计算出每个面出现的频率。
在这个实验中,我们发现,当掷骰子次数越多时,各个面出现的频率越接近于1/6。
这就是概率的基本规律之一:大量实验中,事件发生的频率趋近于事件的概率。
实验2:几何形状的探索第二次实验中,我们将研究几何形状的性质。
我们选取一个平面图形,比如正方形,然后测量其周长和面积。
接着,我们随机调整正方形的边长,再次测量其周长和面积。
通过实验数据的比较,我们可以发现边长和周长、面积之间的关系。
在这个实验中,我们发现,正方形的周长与边长成正比,而面积与边长的平方成正比。
我们还可以进一步推广这个规律,比如研究任意多边形、圆形等形状的性质。
实验3:函数关系的研究第三次实验中,我们将研究函数关系。
我们选取一个简单的函数,比如y=x,然后通过选取不同的x值,计算对应的y值。
接着,我们绘制出x和y的坐标图,并观察其图形特征。
通过实验数据的分析,我们可以得出函数图像的一些性质。
在这个实验中,我们发现,函数y=x的图像是一条直线,斜率为1,过原点。
类似地,我们可以研究其他函数的图像特征,比如二次函数、指数函数等。
实验4:随机事件与统计第四次实验中,我们将研究随机事件与统计。
我们选取一个含有随机因素的事件,比如抛硬币的结果。
我们重复抛硬币一百次,并记录正面和反面出现的次数。
通过实验数据的统计分析,我们可以得出事件发生的概率和规律。
在这个实验中,我们发现,抛硬币的结果是随机的,正面和反面的概率都是1/2。
通过多次实验可以验证这个概率规律,并进一步研究其他随机事件的概率。
MATLAB实验3
实验三函数式M文件和MA TLAB绘图一、实验目的:1、掌握基本的绘图命令2、掌握各种图形注释方法3、掌握三维图形的绘制方法4、了解一些特殊图形的绘制5、了解图形的高级控制技巧二、相关知识1基本的绘图命令1)、常用绘图命令常用的统计图函数:在MA TLAB 7中,使用plot函数进行二维曲线图的绘制>> x=0:0.1:10;>> y1=sin(x);>> y2=cos(x-2.5);>> y3=sqrt(x);>> plot(x,y1,x,y2,x,y3)3)、极坐标图形的绘制MA TLAB提供了polar(x1,x2,s)函数来在极坐标下绘制图形:(参数1角度,参数2极半径,参数3颜色和线性)>> x= 0:0.01:10;>> y1=sin(x);>> y2 = cos(x-2.5);>> polar(y1,y2,'-r+')4)、多个图形的绘制方法subplot函数可以实现多个图形的绘制:>>x = 0:.1:20;>>subplot(2,2,1)>>plot(x,sin(x));>>subplot(2,2,2);>>plot(x,cos(x))5)、曲线的色彩、线型和数据点型基本的绘图命令都支持使用字符串来给不同的曲线定义不同的线型,颜色和数据点型。
plot(x,sin(x),'-rd')图形注释对图形进行注释的方式A 图形注释“工具栏。
B 图形调色板中的注释工具C insert 菜单中的“注释”命令D 直接使用注释命令Annotation 函数Xlabel ,ylabel ,zlabel 函数 Title 函数 Colorbar 函数 Legend 函数实验内容: 一、 基础练习1、跟我练输入x,y 的值,并将它们的值互换后输出 x=input('Input x please:\n');y=input('Input y please:\n'); echo on z=x; x=y; y=z; disp(x); disp(y);echo off2、练习请求键盘输入命令keyboard ,处理完毕后,键入return ,程序将继续运行 求一元二次方程ax2 +bx+c=0的根。
(实验三窗函数的特性分析)
实验报告实验课程:数字信号处理实验开课时间:2020—2021 学年秋季学期实验名称:窗函数的特性分析实验时间:2020年9月16日星期三学院:物理与电子信息学院年级:大三班级:182 学号:1843202000234 姓名:武建璋一、实验预习(2)固定N=60,分别取beta=1,5,11。
clc,clear,close allbeat1=1;beat2=5;beat3=11;N=60;figure(1)subplot(3,2,[1,2])W=kaiser(N,beat1);stem([0:N-1],W);subplot(3,2,[3,4]);Ww=kaiser(N,beat2);stem([0:N-1],Ww);subplot(3,2,[5,6]);WW=kaiser(N,beat3);stem([0:N-1],WW);figure(2)subplot(3,2,[1,2])W1=fft(W,N)plot([0:N-1],abs(fftshift(W1))) subplot(3,2,[3,4]);W2=fft(Ww,N)plot([0:N-1],abs(fftshift(W2))) subplot(3,2,[5,6]);W3=fft(WW,N)plot([0:N-1],abs(fftshift(W3)))4、某序列为x[k] = (11πk/20) + cos(9πk/20),使用fft函数分析其频谱。
(1) 利用不同宽度N的矩形窗截短该序列,N分别为20,40,160,观察不同长度N 的窗对谱分析结果的影响。
clc,clear,close allN1=20;N2=40;N3=160;k1=0:N1;k2=0:N2;k3=0:N3;X1=0.5.*cos((11*pi*k1)/20)+cos((9*pi*k1)/20)X2=0.5.*cos((11*pi*k2)/20)+cos((9*pi*k2)/20)X3=0.5.*cos((11*pi*k3)/20)+cos((9*pi*k3)/20)figure(1)subplot(3,2,[1,2])W1=fft(X1,N1)plot([0:N1-1],abs(fftshift(W1)))subplot(3,2,[3,4]);W2=fft(X2,N2)plot([0:N2-1],abs(fftshift(W2)))subplot(3,2,[5,6]);W3=fft(X3,N3)plot([0:N3-1],abs(fftshift(W3)))figure(2)subplot(3,2,[1,2])W=abs(fftshift(W1))stem([0:N1-1],W);subplot(3,2,[3,4]);Ww=abs(fftshift(W2))stem([0:N2-1],Ww);subplot(3,2,[5,6]);WW=abs(fftshift(W3))stem([0:N3-1],WW);(2) 利用汉明窗重做(1)。
R语言实验三
实验三数组的运算、求解方程(组)和函数极值、数值积分【实验类型】验证性【实验学时】2 学时【实验目的】1、掌握向量的四则运算和内积运算、矩阵的行列式和逆等相关运算;2、掌握线性和非线性方程(组)的求解方法,函数极值的求解方法;3、了解 R 中数值积分的求解方法。
【实验内容】1、向量与矩阵的常见运算;2、求解线性和非线性方程(组);3、求函数的极值,计算函数的积分。
【实验方法或步骤】第一部分、课件例题:1.向量的运算x<-c(-1,0,2)y<-c(3,8,2)v<-2*x+y+1vx*yx/yy^xexp(x)sqrt(y)x1<-c(100,200); x2<-1:6; x1+x22.x<-1:5y<-2*1:5x%*%ycrossprod(x,y)x%o%ytcrossprod(x,y)outer(x,y)3.矩阵的运算A<-matrix(1:9,nrow=3,byrow=T);AA+1 #A的每个元素都加上1B<-matrix(1:9,nrow=3); BC<-matrix(c(1,2,2,3,3,4,4,6,8),nrow=3); C D<-2*C+A/B; D #对应元素进行四则运算x<-1:9A+x #矩阵按列与向量相加E<-A%*%B; E #矩阵的乘法y<-1:3A%*%y #矩阵与向量相乘crossprod(A,B) #A的转置乘以Btcrossprod(A,B) #A乘以B的转置4.矩阵的运算A<-matrix(c(1:8,0),nrow=3);At(A) #转置det(A) #求矩阵行列式的值diag(A) #提取对角线上的元素A[lower.tri(A)==T]<-0;A #构造A对应的上三角矩阵qr.A<-qr(A);qr.A #将矩阵A分解成正交阵Q与上三角阵R的乘积,该结果为一列表Q<-qr.Q(qr.A);Q;R<-qr.R(qr.A);R #显示分解后对应的正交阵Q与上三角阵Rdet(Q);det(R);Q%*%R #A=Q*Rqr.X(qr.A) #显示分解前的矩阵5.解线性方程组A<-matrix(c(1:8,0),nrow=3,byrow=TRUE)b<-c(1,1,1)x<-solve(A,b); x #解线性方程组Ax=bB<-solve(A); B #求矩阵A的逆矩阵BA%*%B #结果为单位阵6.非线性方程求根f<-function(x) x^3-x-1 #建立函数uniroot(f,c(1,2)) #输出列表中f.root为近似解处的函数值,iter为迭代次数,estim.prec为精度的估计值uniroot(f,lower=1,upper=2) #与上述结果相同polyroot(c(-1,-1,0,1)) #专门用来求多项式的根,其中c(-1,-1,0,1)表示对应多项式从零次幂项到高次幂项的系数7.求解非线性方程组(1)自编函数: (Newtons.R)Newtons<-function (funs, x, ep=1e-5, it_max=100){index<-0; k<-1while (k<=it_max){ #it_max 表示最大迭代次数x1 <- x; obj <- funs(x);x <- x - solve(obj$J, obj$f); #Newton 法的迭代公式norm <- sqrt((x-x1) %*% (x-x1))if (norm<ep){ index<-1; break #index=1 表示求解成功}; k<-k+1 }obj <- funs(x);list(root=x, it=k, index=index, FunVal= obj$f)} # 输出列表(2)调用求解非线性方程组的自编函数funs<-function(x){ f<-c(x[1]^2+x[2]^2-5, (x[1]+1)*x[2]-(3*x[1]+1)) # 定义函数组J<-matrix(c(2*x[1], 2*x[2], x[2]-3, x[1]+1), nrow=2,byrow=T) # 函数组的 Jacobi 矩阵list(f=f, J=J)} # 返回值为列表 : 函数值 f 和 Jacobi 矩阵 Jsource("F:/wenjian_daima/Newtons.R") # 调用求解非线性方程组的自编函数Newtons(funs, x=c(0,1))8.一元函数极值f<-function(x) x^3-2*x-5 # 定义函数optimize(f,lower=0,upper=2) # 返回值 : 极小值点和目标函数f<-function(x,a) (x-a)^2 # 定义含有参数的函数optimize(f,interval=c(0,1),a=1/3) # 在函数中输入附加参数9.多元函数极值(1)obj <-function (x){ # 定义函数F<-c(10*(x[2]-x[1]^2),1-x[1]) # 视为向量sum (F^2) } # 向量对应分量平方后求和nlm(obj,c(-1.2,1))(2)fn<-function(x){ # 定义目标函数F<-c(10*(x[2]-x[1]^2), 1-x[1])t(F)%*%F } # 向量的内积gr <- function(x){ # 定义梯度函数F<-c(10*(x[2]-x[1]^2), 1-x[1])J<-matrix(c(-20*x[1],10,-1,0),2,2,byrow=T) #Jacobi 矩阵2*t(J)%*%F } # 梯度optim(c(-1.2,1), fn, gr, method="BFGS")最优点 (par) 、最优函数值 (value)10.梯形求积分公式(1)求积分程序: (trape.R)trape<-function(fun, a, b, tol=1e-6){ # 精度为 10 -6N <- 1; h <- b-a ; T <- h/2 * (fun(a) + fun(b)) # 梯形面积 repeat{h <- h/2; x<-a+(2*1:N-1)*h; I <-T/2 + h*sum(fun(x)) if(abs(I-T) < tol) break; N <- 2 * N; T = I }; I}(2)source("F:/wenjian_daima/trape.R") # 调用函数f<-function(x) exp(-x^2)trape(f,-1,1)(3)常用求积分函数f<-function(x)exp(-x^2) # 定义函数integrate(f,0,1)integrate(f,0,10)integrate(f,0,100)integrate(f,0,10000) # 当积分上限很大时,结果出现问题integrate(f,0,Inf) # 积分上限为无穷大ft<-function(t) exp(-(t/(1-t))^2)/(1-t)^2 # 对上述积分的被积函数 e 2 作变量代换 t=x/(1+x) 后的函数integrate(ft,0,1) # 与上述计算结果相同,且精度较高第二部分、教材例题:1.随机抽样(1)等可能的不放回的随机抽样:> sample(x, n) 其中x为要抽取的向量, n为样本容量(2)等可能的有放回的随机抽样:> sample(x, n, replace=TRUE)其中选项replace=TRUE表示有放回的, 此选项省略或replace=FALSE表示抽样是不放回的sample(c("H", "T"), 10, replace=T)sample(1:6, 10, replace=T)(3)不等可能的随机抽样:> sample(x, n, replace=TRUE, prob=y)其中选项prob=y用于指定x中元素出现的概率, 向量y与x等长度sample(c("成功", "失败"), 10, replace=T, prob=c(0.9,0.1))sample(c(1,0), 10, replace=T, prob=c(0.9,0.1))2.排列组合与概率的计算1/prod(52:49)1/choose(52,4)3.概率分布qnorm(0.025) #显著性水平为5%的正态分布的双侧临界值qnorm(0.975)1 - pchisq(3.84, 1) #计算假设检验的p值2*pt(-2.43, df = 13) #容量为14的双边t检验的p值4.limite.central( )的定义limite.central <- function (r=runif, distpar=c(0,1), m=.5,s=1/sqrt(12),n=c(1,3,10,30), N=1000) {for (i in n) {if (length(distpar)==2){x <- matrix(r(i*N, distpar[1],distpar[2]),nc=i)}else {x <- matrix(r(i*N, distpar), nc=i)}x <- (apply(x, 1, sum) - i*m )/(sqrt(i)*s)hist(x,col="light blue",probability=T,main=paste("n=",i), ylim=c(0,max(.4, density(x)$y)))lines(density(x), col="red", lwd=3)curve(dnorm(x), col="blue", lwd=3, lty=3, add=T)if( N>100 ) {rug(sample(x,100))}else {rug(x)}}}5.直方图x=runif(100,min=0,max=1)hist(x)6.二项分布B(10,0.1)op <- par(mfrow=c(2,2))limite.central(rbinom,distpar=c(10,0.1),m=1,s=0.9)par(op)7.泊松分布: pios(1)op <- par(mfrow=c(2,2))limite.central(rpois, distpar=1, m=1, s=1, n=c(3, 10, 30 ,50)) par(op)8.均匀分布:unif(0,1)op <- par(mfrow=c(2,2))limite.central( )par(op)9.指数分布:exp(1)op <- par(mfrow=c(2,2))limite.central(rexp, distpar=1, m=1, s=1)par(op)10.混合正态分布的渐近正态性mixn <- function (n, a=-1, b=1){rnorm(n, sample(c(a,b),n,replace=T))}limite.central(r=mixn, distpar=c(-3,3),m=0, s=sqrt(10), n=c(1,2,3,10)) par(op)11.混合正态分布的渐近正态性op <- par(mfrow=c(2,2))mixn <- function (n, a=-1, b=1){rnorm(n, sample(c(a,b),n,replace=T))}limite.central(r=mixn, distpar=c(-3,3),m=0,s=sqrt(10),n=c(1,2,3,10)) par(op)第三部分、课后习题:3.1a=sample(1:100,5)asum(a)3.2(1)抽到10、J、Q、K、A的事件记为A,概率为P(A)=1(5220)其中在R中计算得:> 1/choose(52,20)[1] 7.936846e-15(2)抽到的是同花顺P(B)=(41)(91) (525)在R中计算得:> (choose(4,1)*choose(9,1))/choose(52,5) [1] 1.385e-053.3#(1)x<-rnorm(1000,mean=100,sd=100)hist(x)#(2)y<-sample(x,500)hist(y)#(3)mean(x)mean(y)var(x)var(y)3.4x<-rnorm(1000,mean=0,sd=1) y=cumsum(x)plot(y,type = "l")plot(y,type = "p")3.5x<-rnorm(100,mean=0,sd=1) qnorm(.025)qnorm(.975)t.test(x)由R结果知:理论值为[-1.96,1.96],实际值为:[-0.07929,0.33001]3.6op <- par(mfrow=c(2,2))limite.central(rbeta, distpar=c(0.5 ,0.5),n=c(30,200,500,1000))par(op)3.7N=seq(-4,4,length=1000)f<-function(x){dnorm(x)/sum(dnorm(x))}n=f(N)result=sample(n,replace=T,size = 1000)standdata=rnorm(1000)op<-par(mfrow=c(1,2)) #1行2列数组按列(mfcol)或行(mfrow)各自绘图hist(result,probability = T)lines(density(result),col="red",lwd=3)hist(standdata,probability = T)lines(density(standdata),col="red",lwd=3) par(op)。
实验三窗函数特性分析
实验三窗函数特性分析窗函数特性分析是信号处理领域中一个重要的研究方向,通过对窗函数的分析可以有效地应用于噪声抑制、频谱分析等方面。
下面我们来详细分析几个常见的窗函数特性。
1.矩形窗矩形窗函数也被称为哈曼窗,其表达式为:w(n)={1(n∈[0,N-1])0otherwise(1)其中,N表示窗口长度。
矩形窗函数在频域上等效为一个 sinc 函数,其主瓣宽度与窗口长度成反比。
由于矩形窗函数在主瓣两侧具有较深的零点,因此具有较高的频率分辨率。
然而,由于其旁瓣较大,矩形窗函数容易产生假响应和泄露现象。
2.汉宁窗汉宁窗函数是一种改进的矩形窗函数,通过在矩形窗函数的基础上增加两个旁瓣,以减小旁瓣电平并抑制假响应。
汉宁窗函数的表达式为:w(n)=0.5−0.5cos(2πnN−1)(2)其中,N表示窗口长度。
与矩形窗函数相比,汉宁窗函数的主瓣宽度增加了,旁瓣电平也较低。
在保持较高频率分辨率的同时,减小了假响应的可能性。
3.哈曼窗哈曼窗函数是一种基于最小旁瓣电平为目标的窗函数,通过调整汉宁窗函数的系数,使得旁瓣电平最小。
哈曼窗函数的表达式为:w(n)=0.4935N+0.4834cos(2πnN−1)+0.0133cos(4πnN−1)(3)其中,N表示窗口长度。
哈曼窗函数在主瓣两侧具有较深的零点,同时旁瓣电平较低,具有较高的频率分辨率和较小的假响应。
4.高斯窗高斯窗函数是一种基于高斯函数的窗函数,具有平滑的旁瓣衰减和较小的旁瓣电平。
高斯窗函数的表达式为:w(n)=e−n2/(2σ2)(4)其中,σ表示高斯函数的方差,N表示窗口长度。
高斯窗函数的主瓣宽度与窗口长度成反比,旁瓣电平随着远离主瓣而逐渐增大。
由于其旁瓣衰减较慢,高斯窗函数容易产生交叉干扰现象。
通过对以上常见窗函数的特性分析可知,不同的窗函数具有不同的频率响应特性。
在应用中需要根据具体需求选择合适的窗函数。
例如,当需要高频率分辨率时,可以选择矩形窗函数;当需要抑制假响应时,可以选择汉宁窗函数或哈曼窗函数;当需要平滑的旁瓣衰减时,可以选择高斯窗函数。
数学实验三 软件Mathematica求导数全微分
Dxyt[y_,x_,t_]:=D[y,t]/D[x,t]
自定义函数用于求参数方程所确 定的导数
例:求下列函数的一阶导数
y x3 cos x
In[1] : D x 3 * Cos[x ],x
Out[1] 3x 2Cos[x ] x 3Sin[x ]
y ln ln x
In[2] : D Log[Log[x]],x
命令
D[f[x],x] D[f[x],{x,n}]
功能 计算一元函数导数df/dx 计算一元函数高阶导数f(n)(x)
D[f,{x,n},{y,m}]
求函数f对x的n阶,对y的m阶混 合偏导数
Dt[f]
求函数f的全微分
DFxy[f_,x_,y_]:=Solve[D[f,x]==0, 自定义函数用于隐函数求导 y′[x]]
学生实验
基础操作
用mathematica求下列函数的导数
y e4x
y axex
y x 1 x 1 x
y sin x2
y (x 1 x2 )n y ln tan x
应用部分
• 将一物体垂直上抛,其运动方 s 10t ,1 g试t 2 求: 1)物体从t=1秒到t=2秒的平均速度;2 2)物体从t=1秒到t=1+△t秒的平均速度 2)物体在t=1时的瞬时速度; 3)物体从t秒到t+△t秒的平均速度; 4)物体在任意t秒时的瞬时速度。
某公司在推销一种产品个月后,每月销售额(千元)可表示为
S(t) 2t3 40t2 220t 160
1)分别求1个月,4个月,6个月,9个月,20个月后的每月销售额; 2)求变化率 S(t) 3)分别求在 t 1, 4,6,9,12 处的变化率; 4)解释该公司的CEO为什么不必为6月份的销售额下降而发愁。
C语言实验报告 实验三 参考答案
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
C_lab3-2_函数(上)
实验3-2 函数(上)【实验目的】1.掌握return的用法2.熟练掌握函数使用的三个环节:声明、定义、调用3.掌握逐步求精的解决问题的方法4.掌握函数调用机制的执行流程,掌握程序跳转被调函数前必做的三件事:类型匹配、为形参开辟空间、实参向形参单向值传递5.正确识别实参与形参,掌握实参向形参单向顺序值传递的特性【实验内容】Part1:基础练习(课堂练习)1.C语言中,以下不正确的说法是 B 。
A.实参可以是常量、变量或表达式B.形参可以是常量、变量或表达式C.实参可以为任意类型D.形参应与其对应的实参类型一致2.以下正确的说法是 C 。
A.定义函数时,形参的类型说明可以放在函数体内B.return后面的值不能为表达式C.如果函数首部的返回值类型与函数体中return语句中带回的参数类型不一致,以函数首部的返回类型为准D.如果形参与实参的类型不一致,以实参类型为准3.C语言中,简单数据类型的变量作为实参,它和对应形参之间的数据传递方式是B 。
A.地址传递B.单向值传递C.由实参传给形参,再由形参传回给实参D.由用户指定传递方式4.以下说法正确的是 B 。
A.函数定义可以嵌套,但函数的调用不可以嵌套B.函数定义不可以嵌套,但函数的调用可以嵌套C.函数定义和函数的调用均不可以嵌套D.函数定义和函数的调用均可以嵌套5.以下程序有语法性错误,有关错误原因的正确说法是 C 。
main(){int Digit = 5, k;void prt_char();……k = prt_char(Digit);……}A.语句void prt_char();有错,它是函数调用语句,不能用void说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾D.函数名不能使用下划线6.C语言允许函数值类型缺省定义,此时该函数返回值隐含的类型是 B 。
A.float 型B. int 型C. long型D. double型7.以下错误的描述为 D 。
实验3 函数
实验3 函数一、实验目的1、复习并掌握C++函数的定义方法和调用形式。
2、学习使用函数原型来声明函数。
3、掌握函数参数的传递方式,透彻理解值传递方式和引用传递方式之间的区别。
4、掌握递归函数的设计方法。
5、学习并掌握函数重载技术。
6、学习并掌握函数模板技术。
7、进一步学习程序的调试方法。
二、实验任务1、编写一个函数完成两个整数的加法运算,并返回运算结果。
要求使用函数原型声明该函数。
2、定义一个函数计算一个正整数各位数字之和,要求不使用函数返回值和指针返回运算结果。
3、编写递归函数求解n阶勒让德多项式的值。
已知勒让德多项式的推导公式如下:1 (n=0)P n(x)= x (n=1)[(2n-1)*P n-1(x)-(n-1)*P n-2(x)]/n4、编写一组重载的函数分别计算两个短整数的加法,两个普通整数的加法,两个单精度浮点数的加法和两个双精度浮点数的加法。
5、编写一个函数模板,计算两个数值的加法。
并使用这个函数模板求出任意两个整数和任意两个浮点数的和。
6、进一步学习VC++编程环境的程序调试功能。
三、实验步骤1、创建VC++控制台应用程序exp3_1,编写一个函数add,实现两个整数的加法,并使用函数原型声明该函数。
在main函数中从键盘输入两个整数,使用它们作为参数调用add 函数计算并返回两个整数的和,并在main函数中输出结果。
2、创建控制台应用程序exp3_2,编写函数sum用来计算并一个正整数的各位数字之和,但不能使用函数返回值和指针来返回计算结果。
在main函数中从键盘输入一个正整数,调用函数sum计算各位数字之和,再于main函数中输出结果。
3、创建控制台应用程序exp3_3,在其中编写递归函数Lpolynomial,用来计算n阶勒让德多项式的值。
函数原型如下:float Lpolynomial(int n, int x);在程序的主函数main中从键盘输入两个正整数x和n,调用函数Lpolynomial来计算x 的n阶勒让德多项式的值。
实验3-函数与程序结构
计算机程序设计实验报告姓名班级学号实验日期2011-9-26 课程名称计算机程序设计指导教师成绩实验三:函数与程序结构一、实验目的1、掌握函数声明、定义和使用的方法。
2、掌握全局变量、局部变量、静态局部变量的概念和使用方法。
3、掌握自定义头文件的方法,学会建立和调试多文件程序。
二、实验环境1.硬件环境:微机2.软件环境:Windows XP;Microsoft Visual C++6.0 集成开发环境。
三、实验内容1、实验题目:分析程序运行结果#include <iostream.h>int n;int func(int x);void main(){int a,b;a=5;b=func(a);cout<<"\nlocal a="<<a<<endl<<"local b="<<b<<endl<<"globel n="<<n<<endl;a++;b=func(a);cout<<"\nlocal a="<<a<<endl<<"local b="<<b<<endl<<"globel n="<<n<<endl;}int func(int x){int a =1;static int b=10;a++;b++;x++;n++;cout <<"\nlocal func a="<<a<<endl<<"local func b="<<b<<endl<<"parameter x="<<x<<endl;return b;}(1)基本要求:(a)运行该程序,给出运行结果。
实验报告函数的用法(3篇)
第1篇一、实验目的1. 理解函数的概念及作用。
2. 掌握函数的声明、定义和调用方法。
3. 学习函数的参数传递和返回值。
4. 熟悉函数的嵌套调用和递归调用。
二、实验原理函数是程序设计中的一种基本概念,它将一系列具有特定功能的代码封装在一起,以便重复使用。
函数的主要作用是将复杂的程序分解为多个模块,提高代码的可读性和可维护性。
在C语言中,函数分为两大类:标准函数和自定义函数。
标准函数是C语言库函数,如printf()、scanf()等;自定义函数是由程序员根据实际需求编写的函数。
函数的基本结构如下:```c函数返回类型函数名(参数列表) {// 函数体}```三、实验内容1. 函数的声明函数声明用于告诉编译器函数的存在,包括函数名、返回类型和参数列表。
函数声明格式如下:```c函数返回类型函数名(参数类型参数名);```2. 函数的定义函数定义是函数声明的具体实现,包括函数名、返回类型、参数列表和函数体。
函数体由大括号{}包围,包含一系列执行语句。
```c函数返回类型函数名(参数类型参数名) {// 函数体}```3. 函数的调用函数调用是指程序中调用函数的过程。
调用函数时,需要按照函数的参数列表提供相应的实参。
```c函数名(实参1, 实参2, ..., 实参n);```4. 函数的参数传递函数的参数传递主要有两种方式:值传递和地址传递。
(1)值传递:将实参的值复制给形参,函数内部对形参的修改不会影响实参。
(2)地址传递:将实参的地址传递给形参,函数内部通过修改形参的地址来修改实参的值。
5. 函数的返回值函数的返回值是指函数执行完毕后返回给调用者的值。
函数返回值类型必须与函数声明时指定的返回类型一致。
6. 函数的嵌套调用函数嵌套调用是指在一个函数内部调用另一个函数。
嵌套调用的函数可以递归调用自身。
7. 函数的递归调用递归调用是指函数在执行过程中直接或间接地调用自身。
递归调用分为直接递归和间接递归两种。
实验三导数及其微分中值定理[1]
实验三导数及其中值定理实验目的:1掌握matlab求导数与高阶导数的方法。
2深入理解和掌握求隐函数的导数以及由参数方程定义的函数的导数的方法。
3理解中值定理的条件和结论;4会写函数的Taylor展开式和Maclaurin展开式;5掌握求函数的极值和最值的方法;6作出函数的图形。
实验使用的MATLAB函数:Matlab命令:求导数命令是diff,常用格式是:syms xdiff('f(x)',x)diff('f(x)',x,n) 求出f关于x的n阶导数Matlab 泰勒展开格式:taylor(f)求在x=0点展开6项taylor(f,n,x0) 求在x=x0点展开n项solve(方程,变量):求解方程或方程组。
实验指导:一、导数概念与导数的几何意义:例:用定义求g(x)=2x3-4x2+x+1的导数输入:syms xdiff('2*x^3-4*x^2+x+1')输出:ans =6*x^2-8*x+1再输入:x=-1:0.1:3;y1=2*x.^3-4*x.^2+x+1;y2=6*x.^2-8*x+1;plot(x,y1,'b',x,y2,'r:')执行后得到函数y1与它的导函数y2的图像,如下图。
例:作函数f(x)=3x3+3x2-12x+7的图形和在x=1处的切线输入:syms xhanshu=3*x^3+3*x^2-12*x+7;daoshu=diff('3*x^3+3*x^2-12*x+7');x=1;hanshuzhi=eval(hanshu)daoshuzhi=eval(daoshu)输出:hanshuzhi =1daoshuzhi =3再输入:x=-4:0.1:3;y=3*x.^3+3*x.^2-12*x+7;y1=1+3*(x-1);plot(x,y,'b',x,y1,'r')输出:二、求函数的高阶导数以及函数在某点的导数值例:求函数y=x n 的一阶导数和二阶导数输入:syms xdiff('x^n',1)diff('x^n',2)输出:ans =x^n*n/xans =x^n*n^2/x^2-x^n*n/x^2例:求函数f(x)=sinaxcosbx 的一阶导数,并求f ’(1/(a+b))输入:syms x a bdaoshu=diff('sin(a*x)*cos(b*x)')x=1/(a+b);daoshuzhi=eval(daoshu)输出:daoshu =cos(a*x)*a*cos(b*x)-sin(a*x)*sin(b*x)*bdaoshuzhi =cos(a/(a+b))*a*cos(b/(a+b))-sin(a/(a+b))*sin(b/(a+b))*b例:求函数910)10(2-+=x xy 的1阶到11阶导数输入:syms xy=x^10+2*(x-10)^9;for n=1:11diff(y,x,n)end 输出:ns =10*x^9+18*(x-10)^8ans =90*x^8+144*(x-10)^7ans =720*x^7+1008*(x-10)^6ans =5040*x^6+6048*(x-10)^5ans =30240*x^5+30240*(x-10)^4ans =151200*x^4+120960*(x-10)^3ans =604800*x^3+362880*(x-10)^2ans =1814400*x^2+725760*x-7257600ans =3628800*x+725760ans =3628800ans =三、求由隐函数、参数方程确定的函数的导数例:求由方程x 2-2xy+y 2+x+2y+1=0确定的隐函数的导数输入:syms x yz=x^2-2*x*y+y^2+x+2*y+1daoshu=-diff(z,x)/diff(z,y)输出:daoshu =(-2*x+2*y-1)/(-2*x+2*y+2)例:求由参数方程x=e t cost,y==e t sint 确定的函数的导数输入:syms tx=exp(t)*cos(t);y=exp(t)*sin(t);daoshu=diff(y,t)/diff(x,t)simple(daoshu)四、 理解中值定理的条件和结论;例1 针对函数()(1)(2)f x x x x =--观察罗尔定理的几何意义。
C语言程序设计实验报告(函数)
C语言程序设计实验报告(实验名称:函数)1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式;(3)掌握函数的嵌套调用及递归调用的用的设计方法;(4)在编程过程中加深理解函数调用的程序设计思想。
2实验内容(1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。
要求:①在主函数中输入一个整数x(直接赋值或从键盘输入);②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是否为素数的信息,输出格式为“x is a prime number”或”x is not aprime number”;③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查结果是否正确。
(2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。
如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。
要求:①在主函数中从键盘输入一对整型数据a和b;②调用函数后,根据返回值对a和b的关系进行说明。
例如,在主函数中输入:10,5,则输出“10 is a multiple of 5”;③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6与4,20与4,37与9。
3算法描述流程图(1)primeNum(int x)(判别一个数是否是素数)函数流程图①主函数流程图:②判断素数函数流程图:(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图①主函数流程图:②判断倍数流程图:4源程序(1)判断某个数是否是素数#include <stdio.h>int primNum(int x) /*编写函数判断某个数是否是素数*/ {int i;if (x==0||x==1) /*当x等于1或等于0时判断是否为素数*/return 0;for (i=2;i<x;i++) /* 当x大于2时判断不为素数的数*/{if (x%i==0)return 0;}if (x%i) /* 当x等于2或不满足上述条件时时判断出该数是素数*/ return 1;}void main(){int n ;printf("Please input an integer:"); /* 提示从键盘输入一个数x */scanf("%d",&n);if (primNum(n)==1) /* 调用定义的函数*/ printf("%d is a prime number\n",n); /* 由函数得出结论判断是否为素数*/ elseprintf("%d is not a prime number\n",n);}(2)个数是否是整数倍关系#include <stdio.h>int mulNum(int a,int b)/* 定义函数确定两个数是否有整数倍关系*/{if (a%b==0) /* 判断出a是b的整数*/return 1;else /* 判断出a不是b的整数*/return 0;}void main (){int m,n;printf ("please input tow integers:\n"); /*提示从键盘输入两个数*/scanf ("%d%d",&m,&n); /*从键盘输入两个数的值*/if(mulNum(m,n)==1) /*调用定义的函数并判断输出相应的结果*/printf("%d is a multiple of %d\n",m,n);elseprintf("%d is not a multiple of %d\n",m,n);}5测试数据(1)实验(1)测试数据为0,1,2,5,9,13,59,121 运行结果当测试数据0时当测试数据1时当测试数据2时当测试数据5时当测试数据9时当测试数据13时当测试数据59时当测试数据121时(2)实验2测试的数据1与5,5与5,6与2,6与4,20与4,37与9。
Matlab数学实验3 一元函数导数
例2. 已知函数 f (x) 1 ,求 f (1), f (2) ; >> syms x; x f=1/x; f1=diff(f,x)
ff=inline(f1);
ff(1) 运行结果:
/ / 注意,inline命令用来定义函数
ans =-1 >> ff(-2)
end
输出: ans =10*x^9+18*(x-10)^8
ans =90*x^8+144*(x-10)^7 ans =720*x^7+1008*(x-10)^6 ans =5040*x^6+6048*(x-10)^5 ans =30240*x^5+30240*(x-10)^4 ans =151200*x^4+120960*(x-10)^3 ans =604800*x^3+362880*(x-10)^2 ans =1814400*x^2+725760*x-7257600 ans =3628800*x+725760 ans =3628800 ans =0
运行结果: ans = -0.2500
例3.求函数 y xe x 的二阶导数,并求 y(2) 。
解:输入命令及运行结果如下所示:
syms x; f=diff(x*exp(x),x,2)
f=inline(diff(x*exp(x),x,2))
运行结果
f = Inline function:
f =2*exp(x) + x*exp(x) f(x) = 2.*exp(x)+x.*exp(x)
>>f1=inline(f) 运行结果: f1 =Inline function:
实验三 多元函数的极值及Matlab实现
实验三多元函数的极值【实验目的】1.掌握MATLAB 软件有关的命令。
2.多元函数自由极值的求法3.多元函数条件极值的求法.【实验准备】1.计算多元函数的自由极值对于多元函数的自由极值问题,根据多元函数极值的必要和充分条件,可分为以下几个步骤:步骤1.定义多元函数),(y x f z =步骤2.求解正规方程0),(,0),(==y x f y x f y x ,得到驻点步骤3.对于每一个驻点),(00y x ,求出二阶偏导数,,,22222yz C y x z B x z A ∂∂=∂∂∂=∂∂=步骤4.对于每一个驻点),(00y x ,计算判别式2B AC −,如果02>−B AC ,则该驻点是极值点,当0>A 为极小值,0<A 为极大值;,如果02=−B AC ,判别法失效,需进一步判断;如果02<−B AC ,则该驻点不是极值点.2.计算二元函数在区域D 内的最大值和最小值设函数),(y x f z =在有界区域D 上连续,则),(y x f 在D 上必定有最大值和最小值。
求),(y x f 在D 上的最大值和最小值的一般步骤为:步骤1.计算),(y x f 在D 内所有驻点处的函数值;步骤2.计算),(y x f 在D 的各个边界线上的最大值和最小值;步骤3.将上述各函数值进行比较,最终确定出在D 内的最大值和最小值。
3.函数求偏导数的MATLAB 命令MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
diff(f,x,n)求函数f关于自变量x的n阶导数。
jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian矩阵。
可以用help diff,help jacobian查阅有关这些命令的详细信息【实验内容】例1:求函数z=sin(x)sin(y)sin(x+y)在0<x<pi/2,0<y<pi/2内的极大值.理论分析知:当X=pi/3y=pi/3z有极大值3/8*3^(1/2)Matlab程序:%定义二元函数clc;clear;syms x y;z=sin(x)*sin(y)*sin(x+y);ezsurf(x,y,z,[0,pi/2,0,pi/2]);%求解驻点dzx=diff(z,x)dzy=diff(z,y)[xx,yy]=solve('cos(x)*sin(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0',...'sin(x)*cos(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0','x','y')%对于定义域内的驻点求解二阶偏导函数A=diff(z,x,2);B=diff(diff(z,x),y);C=diff(z,y,2);D=A*C-B^2;%判别极大值点D1=subs(subs(D,'x',xx(1)),'y',yy(1))A1=subs(subs(A,'x',xx(1)),'y',yy(1))D2=subs(subs(D,'x',xx(2)),'y',yy(2))A2=subs(subs(A,'x',xx(2)),'y',yy(2))%极大值点和极大值[xx(2)yy(2)]JDZ=subs(subs(z,'x',xx(2)),'y',yy(2))程序运行结果ans=[1/3*pi,1/3*pi]JDZ=3/8*3^(1/2)例2函数32824−+−=y xy x z 的极值点和极值求函数32824−+−=y xy x z 的极值点和极值.首先用diff 命令求z 关于x,y 的偏导数>>clear;syms x y;>>z=x^4-8*x*y+2*y^2-3;>>diff(z,x)>>diff(z,y)结果为ans =4*x^3-8*yans =-8*x+4*y 即.48,843y x yz y x x z +−=∂∂−=∂∂再求解正规方程,求得各驻点的坐标。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 函数
一、实验目的
1、掌握函数声明、定义和调用的方法
2、了解函数调用的实参与形参的传递,以及参数默认值的设置
3、掌握重载函数的实现方法
4、理解递归和嵌套函数的概念、定义与调用
二、实验要求
1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成
实验内容的预习准备工作;
2、能认真独立完成实训内容;
3、实验后做好实验总结,根据实验情况完成总结报告。
三、实验学时
4学时
四、实验内容
1、编程求由键盘输入的三个数中最大值。
(用函数调用来实现。
)
#include<iostream>
using namespace std;
int max(int x,int y,int z)
{
int k;
k=x>y?x:y;
return (k>z?k:z);
}
int main()
{
int a,b,c;
cout<<"请输入任意三个数:";
cin>>a>>b>>c;
cout<<"最大数为:"<<max(a,b,c)<<endl;
return 0;
}
2、编写一个默认参数值的函数。
该函数求x的n次方,其中x,n由键盘输入或n由默认
值确定。
(用函数调用来实现。
)
#include<iostream>
using namespace std;
int fac(int x, int n)
{
if (n==1)
return x;
else
return x*fac(x,n-1);
}
int main()
{
int x,n;
cout<<"请输入X,n:";
cin>>x>>n;
cout<<"结果:X^n="<<fac(x,n)<<endl;
}
3、编程求1!+2!+……+15!的值。
(用函数调用来实现。
)
#include<iostream>
using namespace std;
int fac(int n)
{
if(n==1)
return 1;
else
return(n*fac(n-1));
}
int main()
{
int s=0;
for(int i=1;i<=15;i++)
s+=fac(i);
cout<<"The result is :"<<s<<endl;
return 0;
}
4、通过函数调用编写程序,求 要求:
(1) 能检查输入数据的合法性,要求n>=m ;
(2)用递归完成程序设计;
#include<iostream>
using namespace std;
long fun(int m,int n)
{
if(m==n||m==0) return 1;
else
return n*fun(n-1,m)/(n-m);
}
int main()
{
int m,n;
cout<<"Tnput m,n:";
cin>>m>>n;
cout<<"c(m,n)="<<fun(m,n)<<endl;
return 0;
}
5、编写程序,求两个自然数m 和n 的最大公约数和最小公倍数。
(用函数调用来实现。
) #include<iostream>
using namespace std;
int hcf(int m,int n)
{
)!(!!m n m n C m
n -=
int t,k;
while(m!=n)
{
if(m>n)
m=m-n;
else if(n>m)
n=n-m;
}
return n;
}
int lcd(int m,int n)
{
return m*n/hcf(m,n);
}
int main()
{
int m,n;
cout<<"Input two number:";
cin>>m>>n;
cout<<"最大公约数:"<<hcf(m,n)<<endl;
cout<<"最小公倍数:"<<lcd(m,n)<<endl;
return 0;
}
6、使用内联函数计算圆锥的表面积和体积。
#include<iostream>
using namespace std;
inline double Cone(double radius)
{
return 3.14*radius*radius;
}
int main()
{
double r(1.0),h,l;
cout<<"请输入圆锥的高,母线长:";
cin>>h>>l;
cout<<"圆锥的表面积为:"<<Cone(r)+3.14*r*l<<endl;
cout<<"圆锥的体积为:"<<(Cone(r)*h)/3<<endl; return 0;
}
7、使用重载函数分别求两个整数和实数的最大值#include<iostream>
using namespace std;
int max(int x,int y)
{
int t;
t=x>y?x:y;
return t;
}
float max(float a,float b)
{
float k;
k=a>b?a:b;
return k;
}
int main()
{
int x,y;
cin>>x>>y;
cout<<max(x,y)<<endl;
float a,b;
cin>>a>>b;
cout<<max(a,b)<<endl;
return 0;
}
8、定义函数模板,通过主函数调用分别求两整形、两单精度实形、两双精度实形的差。
#include<iostream>
using namespace std;
template <class T1,class T2>
T1 sub(T1 x,T2 y)
{
cout<<"("<<sizeof(T1)<<","<<sizeof(T2)<<")\t";
return x-y;
}
int main()
{
cout<<sub(9,8)<<endl;
cout<<sub(9,8)<<endl;
cout<<sub(9.0,8.0)<<endl;
return 0;
}
9、编程输出1000以内的所有亲密数对,并输出所有完数之和(用函数调用
来实现。
)
注:亲密数:若自然数m的所有因子(包括1但不包括自身)之
和为n,而n的所有因子之和为m,则m,n为一对亲密数。
完数:若自然数m等于它的所有因子(包括1但不包括自身)
之和,则m为完数。
(选作题)
10、寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
(选作题)
注:回文:各位数字左右对称的整数。
(选作题)
例如:11满足上述条件
#include<iostream>
using namespace std;
void main()
{
int i,k=0;
for(i=11;i<=999;i++)
if(i<100)
{
if(i/10==i%10)
cout<<i<<'\t';
}
else
{
if(i/100==i%10)
cout<<i<<'\t';
}
cout<<endl;
}
11、编写程序用公式:π=16arctan(1/5)-4 arctan(1/239)求π。
其中:arctan(x)=x/1-x3/3+ x5/5+‥‥+(-1)n x2n+1/(2n+1)+‥‥直到级数某项绝对值不大于10-15为止;π和x均为double型。
(选作题)。