文档库 最新最全的文档下载
当前位置:文档库 › 函数设计与应用实验

函数设计与应用实验

函数设计与应用实验
函数设计与应用实验

函数设计与应用实验

一、实验目的和要求

1.掌握系统函数的调用方法;

2.掌握函数的定义方法;

3.理解不同的存储类型在函数中的不同作用;

4.理解重载函数;

5.掌握缺省参数的函数;

6.成员函数的定义;

7.掌握函数的应用。

二、实验内容

任务1:程序调试

(1)下列程序有问题吗?请调试。

#include

void main()

{

cout<< f(2,3);

}

int f(int x,int y)

{

return x+y;

}

(2)下列程序有问题吗?请调试。

#include

void main()

{

int f(x,y);

cout<< f(2,3);

}

int f(int x,int y)

{

return x+y;

}

(3)下列程序有问题吗?请调试。

#include

void main()

int f(int , int );

cout<< f(2,3);

}

int f(int x,int y)

{

return x+y;

}

(4)下列程序有问题吗?请调试。

#include

int f(int x,int y)

{ return x+y;

}

void main()

{

cout<< f(2,3);

}

(5)下列程序应用系统函数进行计算,其功能是如果a为2,b为3,则输出为8,

如果a为-2,b为3,则输出为0.125,程序有多处错误,请改正(文件包含、参数类型,分号等)。

#include

double f(int x,int y);

{

double z;

if(x>0)

z=pow(x,y);

else

z=pow(x,-y);

return z;

}

int main()

{

double a,b,c;

cin>>a>>b;

c=f(a,b);

cout<

return 0;

任务2:程序设计

设计一个程序,调用有关字符串的系统函数strlen\strcat\strcpy\strcmp对字符串进行长度测试、连接、拷贝、比较操作。

任务3:程序设计

循环计算算术运算a*sin(x)+b*x y,每次运算前都询问用户”是否继续计算(y/n)?”,根据回答确定是否继续计算?

任务4:程序调试

#include

#include

class str

{

private:

char x[80],y[80];

char ch;

public:

str(char a[],char b[],char c)

{

strcpy(x,a);

strcpy(y,b);

ch=c;

}

void opre( )

{

switch(ch)

{

case '+':strcat(x,y);cout<

case 'l':cout<<"x length="<

cout<<"y length="<

break;

}

}

};

int main()

{

str A("abcd","12345",'+');

A.opre();

str B("abcd","12345",'l');

B.opre();

}

调试程序,写出程序的运行结果。

任务5:程序设计

仿照任务5,补充下列功能,重写程序。设定:用字符’+’表示两个字符串的连接,用字符’m’表示两个字符串的比较,用字符’c’表示字符串的拷贝,用字符’l’表示测试字符串的长度。调试程序并运行结果。

任务6:实现任务4同样的功能,完成类的定义,在构造函数中只有两个字符串的参数,函数opre有一个字符参数(+、l、c、m)并且含有switch语句,用main函数进行测试。

任务7:程序设计

设计一个程序,调用一个函数add,可以完成整型数、双精度型及它们混合型数的加法,如果是字符串即表示两个字符串的连接,函数的原型如下:

int add(int,int);

double add(int,double);

double add(double,double);

double add(int,double,double)

char add(char *,char *);

完成所有函数的定义,并用main函数进行测试。

任务8:程序设计

定义一个类date

class date

{

private:

int year;

int month;

int day;

public:

……

请补充完整类中成员函数的定义,其中main函数为:

int main()

{

date A;

A.print();

date B(2011);

B.print();

date C(2010,9);

C.print();

date D(2010,10,1);

D.print();

return 0;

}

要求输出为:

今天是2010年2月14日

今天是2011年2月14日

今天是2010年9月14日

今天是2010年10月1日

Press any key to continue

任务9:程序设计

编程:main函数中读入一个整型数组,编写二个同名的函数inv,其中之一是反序所有的元素并输出,另一个反序前n个元素,请把类补充完整,并调试程序。

#include

class Reverse

{

private:

int a[10];

public:

Reverse (int x[]);

void inv( );

void inv(int n);

void print( );

};

Reverse::Reverse(int x[])

{

for(int i=0;i<10;i++)

a[i]=x[i];

}

void Reverse::print( )

{

for(int i=0;i<10;i++)

cout<

cout<

}

int main()

{

int x[10];

for(int i=0;i<10;i++)

cin>>x[i];

Reverse A(x);

A.print();

A.inv();

A.print();

int n;

cin>>n;

A.inv(n);

A.print();

return 0;

}

任务10:程序设计

设计一个程序,在main()中输入一个字符串,然后再输入一个字符,调用一个函数void del_char(char *p,char x),删除在字符串中的这个字符。

任务11:程序设计

调试下列程序,观察程序输出结果,总结程序的功能。

#include

class data

{

private:

int x,y;

char ch;

public:

void init(int a,int b,char c)

{

x=a;y=b;ch=c;

}

void opre( )

{

switch(ch)

{

case '+':cout<

x.opre();

}

按以下要求改写程序,能运算+、-、*、/、%能对除数为0的情况进行判断。任务12:程序设计

仿照例5,实现同样的功能,完成类的定义,并用main函数进行测试。

class data

{

private:

int x,y;

char ch;

public:

void init(int a,int b,char c)

{

x=a;y=b;ch=c;

}

int opre( );

void print( )

{

cout<

select * from Exam_Table; 给出执行的最后结果: 2.参数的使用:in/out/in out参数 阅读以下程序,理解不同类型参数使用的不同,运行程序,给出运行结果。 (1) 用两个参数:in ,out 传入一个姓名,输出:某某人你好: create or replace procedure mp(v_in varchar2,v_out out varchar2) is begin v_out:=v_in||'你好'; end; declare v_name varchar2(10); begin mp('scott',v_name); dbms_output.put_line(v_name); end;--输出:scott你好 给出运行结果:

实验2:函数的应用

实验项目:函数的应用 实验目的: (1)掌握函数的定义和调用方法 (2)练习重载函数的使用 (3)练习使用系统函数 (4)使用debug调试功能,使用step into追踪到函数内部。 实验任务: 1.编写重载函数MAX1可分别求取两个整数,三个整数,两个双精度,三个双精度数的最大值。 2.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 实验步骤: 1.分别编写四个同名的函数max1,实现函数重载,在main()中测试函数功能。 int max1(int x, int y) { return (x>y?x:y); } int max1(int x, int y, int z) { int temp1=max1(x,y); return (y>z?y:z); } double max1(double x, double y) { return (x>y?x:y); } double max1(double x, double y, double z) { double temp1=max1(x,y); return (y>z?y:z); } void main() { int x1, x2; double d1, d2; x1 = max1(5,6); x2 = max1(2,3,4); d1 = max1(2.1, 5.6); d2 = max1(12.3, 3.4, 7.8); cout << "x1=" <=1000) {printf("please enter the num again! (num>=100&&num<1000) \n"); scanf("%d",&num);} if(fun(num)==1) printf(" yes \n"); else printf(" no \n");} 编写函数ss(n), 判断n是否为素数,是返回1,否返回0。编写main函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。 #include "stdio.h" int ss(int n) {int i; for(i=2;i=n) return(1); else return(0);} main() { int num; scanf("%d",&num); if(ss(num)==1) printf(" yes \n"); else printf(" no \n");} 编写一个函数fun(n),计算n!,并编写main函数测试,在main函数中输入num,调用fun(num),输出计算的结果。 #include "stdio.h" long fun(int n) {long s=1; int i; for(i=1;i<=n;i++) s=s*i; return(s);}

excel基础应用实验报告

Excel电子表格实验报告 姓名(学号):________201302020112____ 年级(专业):_____ 电商1301 ________成绩:________ 实验时间:_______________________ _实验地点:__________________________ _ 实验1-1: 一、实验目的: 掌握使用Excel进行电子表格处理的基本操作,编辑与格式化工作表和单元格。 二、实验内容: 1.在Excel中新建一个空白工作簿,文件名为“学号.xls”,保存在文件夹“实验4”中; 学号姓名性别班级平时成绩期中成绩期末成绩 男一班85 72 80 女一班86 68 72 男二班76 80 84 女二班89 82 80 女一班92 94 91 女二班98 96 92 男二班60 59 60 女一班90 82 88 男一班71 74 70 65 58 54 男 二班 3.在工作表“成绩1”的最右侧插入两列,标题依次为“总评成绩”、“等级”; 4.调整“学号”、“姓名”、“性别”、“班级”、“等级”列的列宽为80个像素,调整“平时成绩”、“期中成绩”、“期末成绩”、“总评成绩”列的列宽为85个像素; 5.设置“平时成绩”只能为[60-100]的整数,“期中成绩”和“期末成绩”只能为[0-100]的整数; 6.设置标题行:行高为20磅,水平居中,垂直居中,字体为新宋体,字形为加粗,字号为12磅,底纹图案为25%灰色,颜色为浅橙色; 7.在工作表“成绩1”顶部插入一行,输入“学生成绩表”,字体为黑体,字号为20磅,颜色为蓝色,跨列居中(使它位于所制作表格的上方中央位置)。 8.为表格添加表格框线,内部为单实线,外部为双实线。 9.在“学号”列从上到下依次填充文本数据“2009001”至“2009010”,要求水平居中。10.在“姓名”列从上到下依次填充文本数据“某一”至“某十”,要求水平居中。11.要求“期末成绩”列能自动识别高于90分的成绩,并将其显示成蓝色粗体。 12.保存修改后的文件。 三、实验步骤:(学生自己填写) 1.桌面——右键——新建——文件夹——改名为“实验1”——Excel空白工作簿——改名为“20091060257”;

实验二 函数的应用

实验二函数的应用 一、实验目的 1、掌握函数的定义和调用方法。 2、掌握函数实参与形参的对应关系。 3、掌握函数嵌套调用和递归调用的方法。 二、实验内容与步骤 1、写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。 2、编写重载函数Max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。 3、递归函数与非递归函数。 编写一个函数,求从n个不同的数中取r个数的所有选择的个数。其个数值为:n! C r n= r!*(n-r)! 其中:n!=n*(n-1)*(n-2)* (1) 要求: (1)分别用递归和非递归两种方式完成程序设计; (2)主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入0 0时,程序结束; (3)能检查输入数据的合法性,要求n>=1并且n>=r; (4)注意整数能存放的数据范围有限,如何解决? 提示: (1)可以用double数据类型来存放函数的计算结果。 (2)递归结束条件: 如果r=0,则C(n,r)=1; 如果r=1, 则C(n,r)=n。 测试数据: 输入:5 3 输出:10 输入:10 20 输出:Iput Invalid1 输出:50 3 输出:19600 输入:0 0 程序结束 思考问题:

(1)对各种数据类型的字长是否有了新的认识? (2)递归函数的书写要点是什么? (3)递归和非递归函数各有哪些好处? 4、求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个函 数求最小公倍数。 要求: 两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。

实验6函数习题及答案

实验6 函数 班级:学号: 姓名:日期: 一、实验目的 (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系,以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法; (5)学习对多文件的程序编译和运行。 二、实验内容 1.阅读下面程序,写出程序运行结果,并且上机进行验证。 (1)a1.cpp 变量的虚实耦合,实现的是值传递,是单向传递 #include "stdio.h" int swap(int a,int b) { int c,s; c=a; a=b; b=c; s=a+b; return s; } void main() { int a,b,s; a=3;b=4; s=swap(a,b); printf("a=%d b=%d s=%d\n",a,b,s); } (2)a2.cpp

将十进制数26的各位数字相乘 #include "stdio.h" int fun(int num) { int k=1; do { k*=num %10; / num/=10; }while(num); return(k); } void main() { int n=26; printf("%d\n",fun(n)); } (3)a3.cpp 变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽#include "stdio.h" int a=3,b=5,c; void f(int b) { c=a+b; printf("%d %d %d\n",a,b,c); } void main() { int a=8; f(3); printf("%d %d %d\n",a,b,c); } (4)a4.cpp 递归,将十进制11转换为二进制 #include "stdio.h" void dtob(int n) { int i;

实验六 高层绘图操作答案

实验六 高层绘图操作 实验目的: 1. 掌握绘制二维图形的常用函数 2. 掌握绘制三维图形的常用函数 3. 掌握绘制图形的辅助操作 实验内容: 1. 1. 设x x x y cos 2^1sin 35.0????? ? ++=,在π 2~ 0=x 区间取101点,绘制函数曲 线。 x=0:pi/100:2*pi; y=(0.5+3*sin(x)./(1+x..^2)).*cos(x); plot(x,y); 2. 已知2 1x y = ,)2cos(2x y =,213y y y ?=,完成下列操作: (1) 在同一坐标系下用不同的颜色和线型绘制三条曲线。 (2) 以子图形式绘制三条曲线。 (3) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。 (1).在同一坐标系下用不同的颜色和线型绘制三条曲线。 x=0:pi/1000:2*pi; y1=x.^2; y2=cos(2*x); y3=y1.*y2;

plot(x,y1,'r',x,y2,'b-.',x,y3,'k--'); (2). 以子图形式绘制三条曲线。 x=0:pi/10:2*pi; y1=x.^2; subplot(2,2,1);plot(x,y1,'r'); title('y1=x^2'); y2=cos(2*x); subplot(2,2,2);plot(x,y2,'b-.'); title('y2=cos(2*x)'); y3=y1.*y2; subplot(2,2,3);plot(x,y3,'k--'); title('y3=y1.*y2'); (3). 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。x=0:pi/10:2*pi; y1=x.^2; subplot(2,2,1);bar(x,y1,'r'); title('y1=x^2'); subplot(2,2,2);stairs(x,y1,'r'); title('y1=x^2'); subplot(2,2,3);stem(x,y1,'r'); title('y1=x^2'); subplot(2,2,4);fill(x,y1,'r');

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

实验4-1 函数的应用的答案

实验4 函数的应用 【实验目的】 1掌握函数声明、定义和调用的方法; 2了解函数调用的实参与形参的传递,以及参数默认值的设置。 3掌握重载函数的实现方法。 4理解递归和嵌套函数的概念、定义与调用。 【实验内容】 ⒈分别输入整数半径和实数半径,使用函数重载计算圆的面积。 #include #define PI 3.14 int area(int); float area(float); void main() { int r1; cout<<"Input a integer r="; cin>>r1; cout<<"area="< void fun (int x,int y ); main() {int x=5,y=3; fun(x,y); printf("%d,%d\n",x,y); } void fun (int x,int y ) { x=x+y; y=x-y;

x=x-y; printf("%d,%d\n",x,y); 3.#include int f (int a); main() { int s[ 8 ] = {1,2,3,4,5,6} ,i, d=0; for (i=0; f( s[i] ) ; i++) d+=s[i]; printf("%d\n",d); } int f(int a) { return a%2; } 4.#include long f( int g) { switch(g) { case 0:return 0; case 1: case 2: return 1; } return ( f(g-1)+ f(g-2)); } main ( ) { long int k; k = f(7); printf("\nk= %d\n",k); }

实验八 函数含答案

实验八函数 【目的与要求】 1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 【上机内容】 【一般示例】 【例1】将打印18个"*"组成星形线定义为一个返回值和形参列表都为空的函数,通过主函数调用它。 #include void Star(void) //画星形线。函数没有返回值,形参列表也为空 { int i; for(i=1;i<=18;i++) printf("*"); //18个"*"组成星形线 printf("\n"); return ; //返回值类型为void,return后不带表达式,此句可省略 } int main() { Star( ); //单独的函数调用语句,实参表为空,但必须保留括号 printf("I love C language!\n"); Star( ); return 0; } 【例2】调用prime 函数以每行5个素数的格式输出100到200之间的所有素数。

#include #include int prime(int m) //判断素数函数定义 { int i,k,f=1 ; //函数内定义3个变量 if (m==1) //形参若为1 f=0 ; //形参若为1,非素数 k=(int)sqrt(m); for (i=2; i<=k;i++) if (m%i==0) //m被某除数整除 f=0 ; //则不是素数 return f ; //用return语句返回 } //函数体结束 int main( ) { int i,count=0; for (i=101;i<200;i=i+2) //用i作为循环控制变量,从101开始,步长为2 if (prime(i)) //对每一个i,调用prime函数判断它是否为素数 { printf("%5d",i); //如果是素数,输出该素数i count++ ; //素数个数加1 if (count%5==0 ) //每输出5个素数换一行 printf("\n"); }

matlab 实验6 函数及其调用

数学实验练习六:函数 一、1)写一个 MATLAB 函数 piFun01.m 来计算下列级数: f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...) 其中 n 为函数的输入,代表上述级数的项数,级数和 f(n) 则是函数的输出。 解:function f=pifun01(n) f=0; for i=1:n f=f+4*(-1)^(i+1)/(2*i-1); end >> piFun01(100000) ans = 3.1416 2)使用 tic 和 toc 指令来测量 piFun01(100000) 的计算时间。如果你不知道如何使用这两个指令,请使用 help tic 及 help toc 来查出它们的用法。我的旧计算机是 Pentium 450MHz,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。

解:function f=pifun01(n) tic f=0; for i=1:n f=f+4*(-1)^(i+1)/(2*i-1); end f=toc 二、写一个 MATLAB 的递归函数 fibo.m 来计算 Fibonacci 数列, 其定义如下: fibo(n+2) = fibo(n+1)+fibo(n) 此数列的启始条件如下: fibo(1) = 0, fibo(2) = 1. a) fibo(25) 的返回的值是多少? 解:function f=fibo(n) if n==1 f=0; elseif n==2

f=1; else f=fibo(n-1)+fibo(n-2); end >> clear >> fibo(25) ans = 46368 b)使用 tic 和 toc 指令来测量 fibo(25) 的计算时间。我的计 算机是 Pentium 2GHz,所得的计算时间约为 3.35 秒。请说明你的计算机规格以及其计算时间。 解: function f=fibo(n) tic if n==1 f=0; elseif n==2 f=1; else f=fibo(n-1)+fibo(n-2); end

MATLAB程序设计实验报告

MATLAB实验报告 一、实验名称 实验4图形绘制(1) 二、实验目的: 熟悉和掌握MA TLAB基本的二维图形绘制函数。 三、实验内容: 1.绘制简单的二维图形 2.一个坐标系绘制多幅图形 3.图形标识和坐标控制 4.交互式图形指令 四、回答问题: (本次实验未预留问题) 五、遇到的问题及解决: 遇到了求y=lnx时,输入“y=ln(x)”不被软件识别的问题,查看常用数学函数表后改为y=log(x)成功解决。 在求10x时不知道用什么函数,函数表里也查不到,在老师的点拨下用“y=10.^x”解决。 在绘图时发现默认线型不够明显,查表后使用尖三角、叉号代替默认线型。 六、体会: 本次实验我学会了利用MATLAB绘制图形的基本方法,以及相应的备注方法。 难点是了解各种函数的具体作用并熟练掌握。 体会是:多学多练,孰能生巧,日积月累,必有提高。

思考题: 1.在同一坐标系绘制t3,-t2,t2sint在[0,2π]内的曲线图。 x=0:pi/50:2*pi; y1=t.*t.*t; y2=-t.*t; y3=t.*t.*sin(t); plot(t,y1,'^k',t,y2,'.k',t,y3,'xk'); legend('\ity=t^3','\ity=-t^2','\itt^2*sint'); 2.在一幅图中画出4幅子图,分别绘制sin2x,tanx,lnx,10x的图形,并加上适当的图形注释。注意:把函数变成MATLAB对应的形式。 x=0:pi/50:2*pi; y1=sin(2*t); y2=tan(x); y3=log(x); y4=10.^x; subplot(2,2,1) plot(x,y1); legend('y=sin2x'); subplot(2,2,2) plot(x,y2) legend('y=tanx'); subplot(2,2,3) plot(x,y3)

C语言:函数的应用实验报告

课程名称:结构化程序设计与C语言开课实验室:年月日 一、实验目的 用C语言编写和调试函数的程序。从而对函数的定义、调用、全局变量的灵活运用有比较深入的了解。 二、内容及结果 1、程序一素数函数 1)程序要求:写一个判断是否是素数的函数,在主函数输入一个整数,调用它后输出结果。2)代码: #include #include int prime(int n) { int i,k; k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0) break; if(i<=k) return 0; else

return 1; } int main() { int prime(int n); int n; printf("Please enter n:"); scanf("%d\n",&n); if(prime(n)==1) printf("%d is a prime number",int(n)); else printf("%d is not a prime number",int(n)); } 3)运行截图: 2、程序二用递归方法求n阶勒让德多项式的值 1)程序要求: 递归公式为: 当n=0,= ) (x P n 1 当n=1, = ) (x P n x; 当n>=1, = ) (x P n((2n-1)x-P n-1(x)-(n-1)P n-2 )x))/n 2)代码: #include

#include int p(int n,int x); void main() { int n,x; scanf("%d",&x); for(n=0;n<=10;n++) printf("p(%d,%d)=%d\n",n,x,p(n,x)); } int p(int n,int x) { if(n==0) return 1; else if(n==1) return x; else return((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n; } 3)运行截图:

实验六、用窗函数法设计FIR滤波器分析解析

实验六 用窗函数法设计 FIR 滤波器 一、实验目的 (1) 掌握用窗函数法设计FIR 数字滤波器的原理和方法。 (2) 熟悉线性相位FIR 数字滤波器特性。 (3) 了解各种窗函数对滤波特性的影响。 二、实验原理 滤波器的理想频率响应函数为H d (e j ω ),则其对应的单位脉冲响应为: h d (n) = ?-π π ωωωπ d e e H n j j d )(21 窗函数设计法的基本原理是用有限长单位脉冲响应序列h(n)逼h d (n)。由于h d (n)往往是无 限长序列,且是非因果的,所以用窗函数。w(n)将h d (n)截断,并进行加权处理: h(n) = h d (n) w(n) h(n)就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数H(e j ω )为: H(e j ω ) = ∑-=-1 )(N n n j e n h ω 如果要求线性相位特性,则h (n )还必须满足: )1()(n N h n h --±= 可根据具体情况选择h(n)的长度及对称性。 用窗函数法设计的滤波器性能取决于窗函数w(n)的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。 三、实验步骤 1. 写出理想低通滤波器的传输函数和单位脉冲响应。 2. 写出用四种窗函数设计的滤波器的单位脉冲响应。 3. 用窗函数法设计一个线性相位FIR 低通滤波器,用理想低通滤波器作为逼近滤波器,截止频率ωc =π/4 rad ,选择窗函数的长度N =15,33两种情况。要求在两种窗口长度下,分别求出h(n),打印出相应的幅频特性和相频特性曲线,观察3dB 带宽和阻带衰减; 4 用其它窗函数(汉宁窗(升余弦窗)、哈明窗(改进的升余弦窗)、布莱克曼窗) 设计该滤波器,要求同1;比较四种窗函数对滤波器特性的影响。 四、实验用MATLAB 函数 可以调用MATLAB 工具箱函数fir1实现本实验所要求的线性相位FIR-DF 的设计,调用一维快速傅立叶变换函数fft 来计算滤波器的频率响应函数。

C++语言程序设计实验答案-函数的应用

C++语言程序设计实验答案-函数的应用

实验03函数的应用(2学时) (第3章函数) 一、实验目的 (1) 掌握函数的定义和调用方法。 (2) 练习重载函数的使用。 (3) 练习使用系统函数。 (4) 学习使用Visual Studio 2010的调试功能,使用“逐语句”追踪到函数内部。 二、实验任务 3_1(习题3-8)编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。 3_2 编写重载函数Max1可分别求取2个整数、3个整数、2个双精度数、3个双精度数的最大值。 3_3 使用系统函数pow(x, y)计算x y的值,注意包含头文件cmath。 3_4(习题3-13)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

三、实验步骤 1.(编程,习题3-8)把华氏温度转换为摄氏温度。 编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法 C=(F-32)*5/9,在main()函数中实现输入、输出。程序名:lab3_1.cpp。 ★程序及运行结果:(注意:定义的函数头是float Convert(float TempFer)) //lab3_1(习题3-8) #include using namespace std; float Convert(float TempFer); void main(){ float f; cout<<"输入一个华氏温度值:"; cin>>f; cout<<"华氏温度"<

度的值是"< using namespace std; int Max1(int a,i n t b){

相关文档
相关文档 最新文档