文档库 最新最全的文档下载
当前位置:文档库 › 实验七___函数的定义及调用

实验七___函数的定义及调用

实验七___函数的定义及调用

实验七函数的定义及调用

一、目的与要求

1.掌握C语言函数定义及调用的规则。

2.理解参数传递的过程。

3.掌握数组名作为参数的函数调用

二、实验内容与步骤

1.上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

void main()

{

int,y;

printf(“%d\n”,sum(x+y));

int sum(a,b)

{

int a,b;

return(a+b);

}

}

2.编写一个程序,包括主函数和如下子函数。

(1) 输入10个无序的整数;

(2) 用起泡方法从大到小排序;

(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。

三、分析讨论

1.针对以上实验内容写出相应的参数传递过程并分析结果。

2.讨论参数的传递的几种形式。

C语言 第七章 函数

第七章函数 一、选择题 1.【B】 分析:函数返回值的隐含类型是整型。 2.【B】 分析:main函数可以在任何地方出现。它是程序的入口。 3.【D】 分析:函数的调用有一个返回值或者实现一定的功能,因此可以作为独立的语句存在,也可以出现在表达式中,可以作为一个函数的实参(返回值是一个实际的值)。4.【B】 分析:实参与形参之间的数据传递,只能是实参传给形参,单向传递。 5.【B】 分析:任何函数(除了main函数)的使用通过调用实现。普能的函数都能被单独编译(一定要能过调用才能运行),不能在一个函数中嵌套定义另一个函数。 6.【CD】 分析:C选项程序就是由若干个函数组成,无论是否有其他函数,主函数一定得存在。每个程序都必须有且仅有一个主函数,但不是每个程序文件都必须有main()函数。因为一个程序可能包含多个程序文件。函数不能嵌套定义。 7.【D】 分析:函数调用时实参必须与形参在个数,类型,顺序上相同。A选项中的"abc"是字符串,所以错误。C选项中'65'本身就是错误的。函数的返回值为空,不能用于赋值运算,所以B选项错误。D选项的第二个32在传给形参时可以转换为实型,正确。8.【A】 分析:实参都是用逗号隔开,第二个实参是个加法表达式,第三个实参是个逗号表达式。9.【C】 分析:fl函数功能返回较大的值,f2函数的功能返回较小的值。f1(a,b)返回为4,f2(a,b)返回为3。 10.【C】 分析:void *fun();的含义是fun函数的返回值是无值型的指针类型。 11.【C】 分析:函数在调用时不会出现类型说明符,所以A,D错误。函数的返回值为空,不能用于赋值运算,所以B选项错误。 12.【D】 分析:fun函数的功能选择两个数中较大的一个作为返回值。x为3,y为8,z为6以实参传到形参中,所以fun(fun(x,y), 2*z)等价于fun(fun(3,8), 2*6)等价于fun(8, 12),最后r被赋12。答案选D。 13.【B】 分析:fun函数功能返回两个数之和。此题就是函数调用作为函数实参。a为2,b为5,c 为8传到fun((int)fun(a+c,b),a-c))中那么它等价于fun(15,-6)。所以答案选B。14.【C】 分析:此题关键的一点就是实参与形参数据是单向传递的,a为31以实参传到函数中或者说传到形参z中,而函数体z=x*x+y*y会使z发生改变,形参改变了,但是实参是不

C++程序设计实验七_参考答案

广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005

三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。

实验6+过程_函数和程序...

实验6过程、函数和程序包 姓名:学号: 专业:班级: 同组人:无实验日期:2013/7/21 【实验目的与要求】 ?掌握过程的创建与调用 ?掌握PL/SQL函数的编写与调用 ?熟悉程序包的使用 【实验内容与步骤】 6.0.实验准备工作:PL/SQL程序文件的编辑与执行 1.使用文档编辑器编辑以下文件,并保存为aa.sql: 2.以scott身份登录,在SQ L Plus中执行@aa命令运行程序: 注:测试时,文件名请用全名(即包含路径,如:@c:\aa) 给出运行结果:

6.1.存储过程 1.最简单的存储过程编写与执行 (1)创建测试表 drop table Exam_Table; create table Exam_Table( e_id number(5), e_name varchar2(20), e_salary number(8,2) ); (2)创建存储过程 create or replace procedure insert_salary (v_id number,v_name varchar2,v_salary number) is begin insert into Exam_Table values (v_id,v_name,v_salary); commit; dbms_output.put_line('数据插入成功'); end; / (3) 执行(调用)存储过程 exec insert_salary(6,'g',2000); (4)查询执行结果

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你好 给出运行结果:

C++第七章 动态内存分配习题解答

第七章动态内存分配习题 一、基本概念与基础知识自测题 7.1 填空题 7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。 答案:(1)代码区,存放程序代码; (2)全局变量与静态变量区,存放全局变量或对象(包括静态); (3)局部变量区即栈(stack)区,存放局部变量; (4)动态存储区,即堆(heap)区或自由存储区(free store)。 7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动 态建立对象的初始化是通过(3)来(4)。 答案:(1)命名对象 (2)无名对象 (3)初始化式(initializer) (4)显式初始化 7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。如果new返回的指针丢失, 则所分配的堆空间无法收回,称为(2)。这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。 答案:(1)返回一个空指针(NULL) (2)内存泄漏 (3)重新启动计算机后 (4)并不依赖于建立它的作用域 7.1.5 按语义的缺省的构造函数和拷贝构造赋值操作符实现的拷贝称(1),假设类对象 obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。 答案:(1)浅拷贝 (2)同一个堆对象 7.2简答题(以下习题题号可能和教材不一致!) 7.2.1用delete删除p所指向的无名对象时,p指针也同时被删除了,对不对?为什么?答:不对。注意这时释放了p所指向的无名对象占用的内存空间,也就是撤销了该无名对象,称动态内存释放(dynamic memory deallocation),但指针p本身并没有撤销,它仍然存在,该指针所占内存空间并未释放。 7.2.2为什么动态建立类对象数组时,类的定义一定要有缺省的构造函数? 答:new后面类(class)类型也可以有参数。这些参数即构造函数的参数。但对创建数组,没有参数,只能调用缺省的构造函数。 7.2.3要实现深拷贝,自定义的拷贝构造函数应该怎样设计? 答:如果类中有一个数据成员为指针,该类的一个对象中的这个指针p,指向了动态分配的一个堆对象。深拷贝时要给新建立的对象独立分配一个堆对象。这时拷贝的构造函数应

【实验指导书】实验7:指针 (1)

(2014~2015学年-第1学期) 1. 理解指针、地址和数组间的关系。 2. 掌握通过指针操作数组元素的方法; 3. 掌握数组名作为函数参数的编程方式。 4. 掌握通过指针操作字符串的方法。 5. 了解掌握使用断点调试程序的方法。 二、实验环境: 操作系统:Window 8 编译环境:CodeBlock 13.02 三、实验要求及内容(根据实验要求,将整个实验过程需要的数据和截屏记录于此,并整理成实验步骤。): 1.设计一个程序计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2,float *psum,float *pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。 解: (1)流程图如图1所示: 图1 程序7-1的流程图

图2 实验7-1实验源代码 (3)运行结果(测试用例) 实验7-1运行结果如图3所示 图3 实验7-1运行结果 2. 输入n 个正整数,使用选择法将它们从小到大排序后输出。要求:利用所学指针的内容实现。 提示:在指针这一章所学的冒泡排序算法基础上改写。 解: (1)流程图如图1所示: 图1 程序7-2的流程图

图2 实验7-2实验源代码(3)运行结果(测试用例)实验7-2运行结果如图3所示 图3 实验7-2运行结果

3. 输入10个整数存入数组a ,再输入一个整数x ,在数组a 中查找x ,若找到则输出相应的下标,否则显示“Not found ”。要求定义和调用函数seach(int list[],int n ,int x),在数组list 中查找元素x ,若找到则返回相应的下标,否则返回-1,参数n 代表数组list 中元素的数量。试编写相应程序。 解:(1)流程图如图1 7-3的流程图 (2)源代码 源代码如图2所示

答案第七章函数..(可编辑修改word版)

第七章函数 一、选择题 1.以下函数声明正确的是: C 。(02~03 第一学期试题) A)double fun(int x, int y) B) double fun(int x; int y) C) double fun(int x, int y) ; D) double fun(int x , y) 2.C 语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。(0 级) A)地址传递;B)单向值传递; C)双向值传递;D)由用户指定传递方式 3.以下关于C语言程序中函数的说法正确的是: B 。(0 级) A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和点用都可以嵌套。 4.以下正确的函数形式是: D 。(1 级) A)double fun(int x,int y) B)fun (int x,y) {z=x+y;return z;} {int z;return z;} C)fun(x,y) D)double fun(int x,int y) {int x,y ; double z; {double z; z=x+y; return z;} z=x+y; return z;} 5.以下说法不正确的是: B 。(1 级) C 语言规定A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)形参应与其对应的实参类型一致 6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。(0 级) A)float 型B) int 型C)long 型D)double 型 7.以下错误的描述是 D 。(0 级) 函数调用可以 A)出现在执行语句中B)出现在一个表达式中C) 做为一个函数的实参D)做为一个函数的形参 8.若用数组名作为函数调用的实参,传递给形参的是 A 。(0 级) A)数组的首地址B)数组第一个元素的值 C)数组中全部元素的值D)数组元素的个数 9.以下正确的说法是 A 。(0 级) 如果在一个函数中的复合语句中定义了一个变量,则该变量 A)只在该复合语句中有效B)在该函数中有效C) 在本程序范围内有效D)为非法变量 10.以下不正确的说法为 D 。(0 级) A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量

C语言实验习题

实验七:指针程序设计 实验内容 以下均用指针方法编程: 1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++) { printf("%d",*p++); if(j%4 == 0) printf("\n"); } } 调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。 2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。 3. 自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t 时返回-1,s等于t?时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。 4.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。 要求用函数指针调用这两个函数,结果在主函数中输出。 main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b); p=sum; *p(a,b,c); p=swap;

*p(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } sum(int a,int b,int c) { c=a+b; } swap(int a;int b) { int t; t=a; a=b; b=t; } 调试程序时注意参数传递的是数值还是地址。 5.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。 例如:输入:123 输出:1+2+3=6→ June 输入:139 输出:1+3+9=13→ *** 用指针数组记录各月份英文单词的首地址。 6.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。

实验六 高层绘图操作答案

实验六 高层绘图操作 实验目的: 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');

实验7 指针及其运算

实验七指针及其运算 实验目的 理解指针的概念,会定义和使用指针变量,掌握指针的运算规则,学会使用数组的指针和指向数组的指针变量。 要点提示 1.变量在内存单元的地址称为该变量的“指针”。 2.指针变量是用来存放其它变量地址的变量。 3.指针变量定义的一般形式: 类型标识符*指针变量名; 4.指针运算符 &(取变量地址运算符)和*(取值运算符)是互逆的运算符,右结合。 ++,--,+,- 运算符是按地址计算规则进行的。 5.用指针作为函数参数,可以实现“调用函数改变变量的值,在主调函数中使用这些改变的值。 6.数组的指针是指数组的起始地址(首地址),数组元素的指针是指数组元素的地址。数组名代表数组的首地址,是地址常量。 实验内容 1.指针变量的说明,初始化和使用。 2.指针作为函数参数。 3.数组的指针和指针数组的指针变量的说明和使用 4. 数组名作为函数参数 实验步骤 读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入) 1. 输入a和b两个整数,按先大后小的顺序输出。 算法提示:不交换变量的值,而是交换两个指针变量的值,使p1指向较大的数,p2指向较小的数。 #include using namespace std; main() { int *p1,*p2, 【】;/* 变量说明语句*/ int a, b; cout<<"\n Please input a and b:"; cin>>a>>b; p1=&a; p2=&b; if (a

实验7-指针

《C语言程序设计》实验报告实验序号:7 实验项目:指针 一、实验目的及要求 1、通过实验掌握指针的定义和使用指针变量; 2、掌握使用指针对数组和字符串进行操作; 3、掌握函数中指针类型参数的使用; 4、要求采用指针方法完成。 二、实验设备(环境)及要求 使用Turbo C 或Visual C++ 6.0;windows系列操作系统的环境。 三、实验内容与步骤 1.输入运行下面这个程序,观察并分析结果: #include "stdio.h" void main() { int a[]={2,3,4,5,6}; int *p1; char *p2="computer\n"; p1=a; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); p1=a+2; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); printf(p2+2); printf("%s",p2+2); } 运行结果截图:

2.以下程序调用invert 函数按逆序重新放置a 数组中的值,a 数组中的值在main 函数中读入,请填空。 #include "stdio.h" void invert(int *s,int i,int j) { int t; if(i

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

实验7 指针习题及参考答案

上机实验十指针 一.目的要求 1.掌握指针的基本概念; 2.掌握指针变量的定义和初始化; 3.掌握用下标、数组名或指针等不同方式引用数组元素; 4.掌握数组名作函数参数的方法; 5.请添加签名,本实验均用指针方法处理。 二.实验内容 【实验题1】 1)程序填空,交换指针p1,p2所指向的变量。(10 分) # include void main ( ) { int a=1,b=2, *p1, *p2, pt; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); pt=p1 ; p1=p2 ; p2=pt ;//交换指针变量p1,p2所指向的变量printf(“*p1=%d, *p2=%d \n”,*p1,*p2); } 运行结果: 2)程序填空,交换指针p1,p2所指变量的值。 # include void main ( ) { int a=1,b=2, *p1, *p2, temp; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); temp=*p1 ; *p1=*p2 ; *p2=temp ;///交换指针p1,p2所指变量的值 printf(“*p1=%d, *p2=%d \n”, *p1,*p2); } 运行结果: 【实验题2】程序填空:输入三个整型变量i,j,k的值。请设置三个指针变量p1,p2,p3,分别指向i,j,k。

然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。输出交换后i,j,k的值。(10 分) i j k 分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序: #include void main ( ) { int i,j,k,temp, *p1=&i ,*p2=&j,*p3= &k ; printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k //i-->j-->k-->i temp=*p1 ; *p1=*p3 ; *p3=*p2 ; *p2= temp; printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k } 输入:1 2 3 输出: 【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。(10 分) # include void main ( ) { int a,b,c, *p1, *p2, *p3; scanf(“%d%d%d”,&a,&b,&c); // 令p1指向最大值 p1=(a>b)?&a:&b ; //p1指向a,b中较大者 if(*p1c ) p2=&c; printf(“max=%d, min=%d”, *p1,*p2 ); printf("Hello,c\n" ); }

实验六、用窗函数法设计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 来计算滤波器的频率响应函数。

第七章自定义函数

第七章自定义函数 7.1,概述 用户自定义函数(User-Defined Functions,即UDFs)可以提高FLUENT程序的标准计算功能。它是用C语言书写的,有两种执行方式:interpreted型和compiled型。Interpreted 型比较容易使用,但是可使用代码(C语言的函数等)和运行速度有限制。Compiled型运行速度快,而且也没有代码使用范围的限制,但使用略为繁琐。 我们可以用UDFs来定义: a)边界条件 b)源项 c)物性定义(除了比热外) d)表面和体积反应速率 e)用户自定义标量输运方程 f)离散相模型(例如体积力,拉力,源项等) g)代数滑流(algebraic slip)混合物模型(滑流速度和微粒尺寸) h)变量初始化 i)壁面热流量 j)使用用户自定义标量后处理 边界条件UDFs能够产生依赖于时间,位移和流场变量相关的边界条件。例如,我们可以定义依赖于流动时间的x方向的速度入口,或定义依赖于位置的温度边界。边界条件剖面UDFs用宏DEFINE_PROFILE定义。有关例子可以在5.1和6.1中找到。源项UDFs可以定义除了DO辐射模型之外的任意输运方程的源项。它用宏DEFINE_SOURCE定义。有关例子在5.2和6.2中可以找到。物性UDFs可用来定义物质的物理性质,除了比热之外,其它物性参数都可以定义。例如,我们可以定义依赖于温度的粘性系数。它用宏DEFINE_PROPERTY定义,相关例子在6.3中。反应速率UDFs用来定义表面或体积反应的反应速率,分别用宏DEFINE_SR_RATE和DEFINE_VR_RA TE定义,例子见6.4。离散相模型用宏DEFINE_DPM定义相关参数,见5.4。UDFs还可以对任意用户自定义标量的输运方程进行初始化,定义壁面热流量,或计算存贮变量值(用用户自定义标量或用户自定义内存量)使之用于后处理。相关的应用见于5.3,5.5,5.6和 5.7。 UDFs有着广泛的应用,本文并不能一一叙述。如果在使用中遇到问题,可以联系FLUENT技术支部门要求帮助。在此推荐一个网站,上面有FLUENT论坛,可进行相关询问和讨论。 7.1.1 书写UDFs的基本步骤 在使用UDFs处理FLUENT模型的过程中,我们一般按照下面五步进行: 1.概念上函数设计 2.使用C语言书写 3.编译调试C程序 4.执行UDF 5.分析与比较结果 第一步分析我们所处理的模型,目的是得到我们要书写的UDF的数学表达式。第二步将数学表达式转化成C语言源代码。第三步编译调试C语言源代码。第四步在FLUENT 中执行UDF。最后一步,将所得到的结果与我们要求的进行比较,如果不满足要求,则需要重复上面的步骤,直到与我们期望的吻合为止。

实验7指针

实验七、指针---10071 求平均成绩 1、【问题描述】某班期末考试后要统计本班某门课程得平均成绩、最高成绩与最低成绩,您 得任务就是编程序实现 这一功能。一个班得人数不超过30人,要求实现求最高成绩,最低成绩与平均成绩得功能用一个 函数完成,并用参数返回最高成绩,最低成绩与平均成绩。?【输入形式】一组测试数据,第一行为一个整数N,表示本班有N个人(N<=30),接下来得N行中每行一个整?数,表示一个人得成绩。?【输出形式】输出一行。该行包含三个数,分别就是:最高成绩、最低成绩与平均成绩。成绩之间由空格分隔,?其中平均成 ?8 90 绩为实数,并精确到小数点后两位。?【样例输入】5? 85 3?76? 62?【样例输出】906279、20 【样例说明】某班有5个学生,她们得成绩分别就是90、83、76、85、62。?该班得最高成绩、最低成绩与平均成绩分别为90、62以及79、20。?【评分标准】本题共2个测试点,每个测试点1、0分,共2、0分。 #include #define MAX 30 int max_all(int score[]); intmin_all(int score[]); int max(int a,int b); int min(int a,int b); float average(int score[]); int i,number; int main(void) { ?int score[MAX]; scanf("%d",&number); for(i=0;i

实验六 函数

实验六 函数 一、实验目的 1.掌握自定义函数的一般结构及定义函数的方法。 2.掌握形参、实参、函数原型等重要概念。 3.掌握函数声明、函数调用的一般方法。 4. 了解函数的嵌套调用以及函数的递归调用的格式。 二、实验预习 1 .理解为什么要在程序中引入函数?函数的引入对程序的整体结构有什么样的影响? 2. 函数的定义格式,理解函数的类型说明符根据什么来确定? 3. 充分理解函数实参和形参的联系和区别,掌握单向值传递的意义。 4. 了解针对不同返回类型的函数返回值的应用,尤其是有无return 语句的区别。 5. 掌握函数调用与函数声明的格式,了解什么情况下需要进行函数声明?什么情况下不需要? 6. 了解函数嵌套调用和递归调用的原理及使用原则。 三、实验内容 (一)阅读并调试下列程序,根据要求给出程序结果。 1.求三角形面积函数。 ⑴ 编程分析 ① 设三角形边长为a 、b 、c ,面积area 的算法是s=(a+b+c)/2, area=))()((c s b s a s s --- ,其中 显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数据类型应为实型。 ② 尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。 ⑵ 参考程序 /* 定义和使用求三角形面积函数的程序 */ #include "math.h" #include "stdio.h" float area(float,float,float); /*函数的声明*/ void main() { float a,b,c; printf("请输入三角形的三个边长值:\n") scanf("%f,%f,%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0) printf("Area=%-7.2f\n",area(a,b,c)); /* 以下是计算任意三角形面积的函数 */ float area(float a,float b,float c) { float s,area_s; s=(a+b+c)/2.0;

实验7 指针

实验7 指针 【实验目的】 ①掌握指针的概念,会定义及使用指针变量、指针数组、行指针; ②掌握指针的运算,会采用指针方法访问一维、二维数组;理解指针和数组的关系; ③掌握指针作为函数参数,设计通用的函数;实现对一维数组的排序、查找,矩阵运 算;及常用的字符串处理函数;熟悉动态分配内存方法; 【实验7.1】在10个元素的数组中找出与平均值最接近的元素,并输出该元素的值(要求用数组指针访问一维数组)。 【指导】 算法分析: 本题要解决两个问题: (1)计算10个元素的平均值; (2)找出与平均值最接近的数组元素。 对于第(2)个问题,可以将第一个元素与平均值的差为基准,然后依次计算其余各个元素与平均值的差,并与基准进行比较(注意要按绝对值进行比较),从而找出最小值,它所对应的元素就是与平均值最接近的元素。 参考程序: #include #include void main() { int i,k; float a[10],aver=0,b,diff,*p=a; for(i=0;i<10;i++) scanf("%f",p+i); //输入原始数据存入数组 for(i=0;i<10;i++) aver+=p[i]; //计算累加和 aver/=10; //计算平均值 k=0; diff=fabs(p[0]-aver); //计算第一个元素与平均值的差的绝对值 for(i=1;i<10;i++) { b=fabs(p[i]-aver); if(b #include void main() {

实验六 自定义函数

实验六自定义函数 实验目的:熟悉Matlab自定义函数的定义和调用方法 实验内容: 2. 编写程序,在主程序中提示用户输入一组数字,编写子程序文件 find_div2.m找出能被2整除的数字,find_max_min.m找出输入数字中的最大值和最小值之和,find_averag求出输入数字的平均值,sort_number对数字进行排序,在主程序中调用子程序并且把上述结果输出。例如输入的数字为1,2,3,4,5,要求输出格式为:输入数字中能被2整除的数为:2,4 输入数字中最大值与最小值之和为:5+1=6 输入数字的平均值为:3 输入数字从大到小排序为:5,4 3,2,1 主程序: clear,clc s=input('请输入一组数字:','s'); x=str2num(s); find_div2(x); find_max_min(x); find_averag(x); sort_number(x);

子程序: function find_div2(x) b=length(x); for i=1:b A(i)=x(i); end c=find(rem(A,2)==0); A=A(c); disp(['输入数字中能被2整除的数为:',num2str(A)]) 子程序: function find_max_min(x) a=max(x); b=min(x); c=a+b; disp(['输入数字中最大值与最小值之和为:',num2str(a),'+',num2str(b),'=',num2str(c) 子程序: function find_averag(x) a=mean(x); disp(['输入数字的平均值为: ',num2str(a)]) 子程序: f unction sort_number(x) a=sort(x); b=fliplr(a); disp(['输入数字从大到小排序为:',num2str(b)])

实验七 指针

实验七指针(1) 一、实验目的 1.掌握指针变量的定义与引用 2.掌握指针与变量、指针与数组的关系 3.掌握用数组指针作为函数参数的方法。 4.熟悉TC集成环境的调试指针程序的方法 二、实验内容 以下均用指针方法编程: 1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++) { printf("%d",*p++); if(j%4 == 0) printf("\n"); } } 调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。 2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。 三、实验要求 1.复习指针的定义与使用方法。 2.编写程序,运行程序并记录运行结果。 3.将源程序、目标文件、可执行文件和实验报告存在软盘上。 实验八指针(2) 一、实验目的 1.掌握C语言中函数指针的使用方法。 2.掌握C语言中指针数组的使用方法。 3.熟悉TC集成环境的调试指针程序的方法 二、实验内容 1.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。 要求用函数指针调用这两个函数,结果在主函数中输出。 main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b);

相关文档