当前位置:文档之家› 实验6+过程_函数和程序...

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

实验6+过程_函数和程序...
实验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你好

给出运行结果:

(2)-- in out类型参数

create or replace procedure mp(name_in in varchar2,

name_out out varchar2,

name_in_out in out varchar2) is

begin

dbms_output.put_line(name_in);

name_out := '返回的参数name_out是' || name_in;

name_in_out := 'name_in_out是' || name_in || name_in_out;

end;

给出运行结果:

(3)定义一个返回多个值的存储过程。

create or replace procedure p_test(name out varchar2,age out number,sex out varchar2,sal out number)

is

begin

name:='scott';

age:=26;

sex:='男';

sal:=8000;

end;

declare

v_name varchar2(20);

v_age number(10);

v_sex varchar2(5);

v_sal number(10);

begin

p_test(v_name,v_age,v_sex,v_sal);

dbms_output.put_line(v_name);

dbms_output.put_line(v_age);

dbms_output.put_line(v_sex);

dbms_output.put_line(v_sal);

end;

给出运行结果:

3.练习:根据测试表完成下列程序的编写,并给出测试结果:

(1)已知有如下表和相应的数据,请根据要求完成实验。

create table departments(

DEPARTMENT_ID NUMBER(4) primary key,

DEPARTMENT_NAME V ARCHAR2(30),

MANAGER_ID NUMBER(6),

LOCATION_ID NUMBER(4)

);

insert into departments values(1,'技术部',1,1);

insert into departments values(2,'人事部',2,2);

insert into departments values(3,'市场部',3,3);

insert into departments values(4,'财务部',4,4);

根据上表结构编写存储过程,实现以下功能,并给出测试结果。

1)根据指定的部门更新指定部门名(DEPARTMENT_NAME)的管理者(MANAGER_ID)id。

2)根据部门ID(DEPARTMENT_ID)删除指定部门

(2)编写给雇员增加工资的存储过程CHANGE_SALARY,通过IN类型的参数传递要增加工资的雇员编号和增加的工资额。(操作数据库表为EMP).

1)编写存储过程CHANGE_SALARY,给出程序代码:

2)调用存储过程:EXECUTE CHANGE_SALARY(7788,80)

6.2.函数

1.最简单的函数:

--简单函数

(1)创建函数

create function f(name in varchar2)return varchar2

is

begin

return name;

end;

(2)调用函数

declare

v_name varchar2(10);

begin

v_name:=f('scott');

dbms_output.put_line(v_name);

end;

给出运行结果:

2.稍微复杂的函数

--编写函数

create or replace function salarylevel(salary number) return varchar2 is

begin

if alary < 1000 then

return '工资太低了,要加油了';

elsif salary <3000 then

return '还可以,但是也要努力啊';

elsif salary <5000 then

return '这个还可以';

else

'你的工资现在来说,是比较高了';

end if;

end;

--调用函数

declare

v_salarylevel varchar2(50);

begin

v_salarylevel := salarylevel(1000);

dbms_output.put_line(v_salarylevel);

end;

给出运行结果:

3.函数练习:

(1). 定义一个函数接收三个参数,算出最大值。而后调用该函数,给出测试结果。

给出求三个数最大值函数getMax(num1,num2,num3)程序源码:

--调用测试:

declare

v_max number(10,2);

begin

v_max:= getMax(10.2,34.4,34.6);

dbms_output.put_line(v_max);

end;

给出运行结果:

(2).根据房屋的相关数据(长,宽),编写函数find_area,根据公式求出其建筑面积和使用面积,并写入到数据库表中,完成后,使用Select 语句查询表中数据,以确认程序编写的正确性。

1)创建表:建立房屋表House(房屋名称,长,宽,建筑面积,使用面积);

给出相应代码:

2)插入三行记录测试,插入值时忽略建筑面积和使用面积

'1号机房',20,5.5

'2号机房',25,5.5

'卧室',200,5.5

给出相应代码:

3)利用find_area函数,更新建筑面积和使用面积字段

--建筑面积=长* 宽+ 2.5

--使用面积=长* 宽

给出相应代码:

4)在select查询表中数据。

给出运行结果:

6.3.包的声明和使用

阅读以下程序,理解包的声明和使用。

-----------包的声明和使用1-------------------------

DROP TABLE Exam_Emps;

CREATE TABLE Exam_Emps(

id number(5) primary key,

name varchar2(30),

commission_pct number(3,2 )

);

insert into Exam_Emps values (1,'张一',0.13);

insert into Exam_Emps values (2,'张二',0.23);

insert into Exam_Emps values (3,'张三',0.33);

insert into Exam_Emps values (4,'张四',0.43);

commit;

select * from Exam_Emps;

--创建包头

CREATE OR REPLACE PACKAGE comm_package

IS

g_comm NUMBER := 0.10;

PROCEDURE reset_comm (p_comm IN NUMBER);

END comm_package;

/

--创建包体

CREATE OR REPLACE PACKAGE BODY comm_package

IS

-------------在包体中定义的局部函数--------------

/*

如果输入的参数p_comm大于Exam_Emps表中最大的commission_pct 字段,则函数返回FALSE,否则函数返回TRUE

*/

FUNCTION validate_comm (p_comm IN NUMBER)

RETURN BOOLEAN

IS

v_max_comm NUMBER;

BEGIN

SELECT MAX(commission_pct)

INTO v_max_comm

FROM Exam_Emps;

IF p_comm > v_max_comm THEN

RETURN FALSE ;

ELSE

RETURN TRUE ;

END IF;

END validate_comm;

---------在包体中定义的局部函数:结束------------

------------完成在包体中声明的过程--------------

PROCEDURE reset_comm (p_comm IN NUMBER)

IS

BEGIN

IF validate_comm(p_comm) THEN

g_comm:=p_comm;

ELSE

RAISE_APPLICATION_ERROR(-20210, '不合理的表达式');

END IF;

END reset_comm;

----------完成在包体中声明的过程:结束------------

END comm_package;

--测试包

EXECUTE comm_package.reset_comm(1);

EXECUTE comm_package.reset_comm(.33);

给出运行结果:

begin

comm_package.reset_comm(0.15);

dbms_output.put_line('g_comm = ' || comm_package.g_comm );

end;

/

给出运行结果:

-----------包的声明和使用2-------------------------

drop table Exam_Emp;

create table Exam_Emp(

id number (5),

name varchar2(30),

salary number(8,2)

);

insert into Exam_Emp values(1,'张一',3000); insert into Exam_Emp values(2,'张二',3400); insert into Exam_Emp values(3,'张三',5600); commit;

create or replace package tax_pkg as

function tax(v_value in number) return number; end tax_pkg;

/

create or replace package body tax_pkg

as

-------------包体中的函数执行部分--------------- function tax(v_value in number) return number is

begin

if v_value < 1000 then

return (v_value * 0);

elsif v_value < 5000 then

return (v_value * 0.10);

elsif v_value <10000 then

return (v_value * 0.15);

else

return (v_value * 0.20);

end if;

end tax;

-------------包体中的函数:结束-----------------

end tax_pkg;

/

-- 测试包中定义的函数

select salary,tax_pkg.tax(salary) from Exam_Emp;

给出运行结果:

6.4 作业与思考练习题

以为实验中用到的表除作特殊说明外,均为scott模式下的表,如Emp表,请在实验时,连接到scott模式。

1.创建一个存储过程show_emp(),以员工号为参数,输出该员工的工资。

执行测试结果应如下:

(1)请给出程序源码:

create or replace procedure show_emp(v_empno in number)

is

v_sal number;

begin

select sal into v_sal

from emp

where empno=v_empno;

dbms_output.put_line(v_empno||'的工资是:'||v_sal);

end;

/

(2)请给出测试结果:

2.创建一个存储过程,以员工号为参数,修改该员工的工资:若该员工属于10号部门,

则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;若属于其他部门,则工资增加300.

(1)请给出程序源码:

(2) 完成后,请执行存储过程,并查询表中数据确认是否完成规定要求。

3.创建一个存储过程maxSal( ),以一个整数为参数,输出工资最高的前几个(以参数值

为标准)员工的信息。

执行测试结果应如下:

(1)请给出程序源码:

create or replace procedure hig_sal(num in number)

is

cursor c1 is select * from emp order by sal desc;

v_emp c1%rowtype;

begin

open c1;

loop

fetch c1 into v_emp;

dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' '||v_emp.sal);

exit when c1%rowcount=num;

end loop;

end;

(2)请给出测试结果:

4.创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工信息。

执行测试结果应如下:

(1)请给出程序源码:

reate or replace procedure inf(num1_sal in number,num2_sal in number)

is

cursor c1 is select * from emp

where sal between num1_sal and num2_sal

order by sal desc;

v_emp c1%rowtype;

begin

open c1;

loop

fetch c1 into v_emp;

dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' '||v_emp.sal);

exit when c1%notfound;

end loop;

end;

C语言程序设计(第3版)何钦铭-颜-晖-第10章--函数与程序结构

第10章函数与程序结构 【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。试编写相应程序。 解答: 递归式子: sum(i) = sum(i-1) + i; 递归出口: sum(i) = 0; 【练习10-2】请完成下列宏定义: ① MIN(a,b) 求 a,b 的最小值 ② ISLOWER(c) 判断 c 是否为小写字母 ③ ISLEAP(y) 判断 y 是否为闰年 ④ CIRFER(r) 计算半径为 r 的圆周长 解答: ① MIN(a, b):求a,b的最小值。 #define MIN(a,b) (a='a'&&c<='z') ③ ISLEAP(y):判断y是否为闰年。 #define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0) ④ CIRFER(r):计算半径为r的圆周长。 #define PI 3.14159 #define CIRFER(r) 2*PI*(r) 【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。 解答: (1)函数实现 int max(int x,int y,int z) { int t; if(x>=y) if(x>=z) t=x; else t=z; else if(y>=z) t=y; else t=z; return t; } (2)宏实现 #define MAX( x, y, z ) x>=y? (x>=z? x:z) : (y>=z? y:z)两者在定义形

实验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 语言程序设计 实验报告 专业 信息安全 班级 1103 日期 成绩 实验组别 第 1次实验 指导教师 学生姓名 严志颖 学号 U201114113 同组人姓名 实验名称 函数与程序结构实验 一、实验目的 1.熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。 2.熟悉和掌握不同存储类型变量的使用。 3.熟悉多文件编译技术。 二、实验任务 1.源程序改错题 下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 #include "stdio.h" void main(void) { int k; for(k=1;k<6;k++) printf("k=%d\tthe sum is %ld\n",k,sum_fac(k)); } long sum_fac(int n) { long s=0; int i; long fac; for(i=1;i<=n;i++) fac*=i; s+=fac; return s; } 2.源程序修改替换题 (1)修改第1题中sum_fac 函数,使其计算量最小。 (2)修改第1题中sum_fac 函数,计算! 1!31!211n s ++++= 。 3.跟踪调试题 计算fabonacci 数列前n 项和的程序如下: 其中,long sum=0,*p=∑声明p 为长整型指针并用&sum 取出sum 的地址对p 初始化。*p 表示引用p 所指的变量(*p 即sum )。 void main(void) {

C语言程序设计实验报告(实验大纲+过程)之欧阳家百创编

《C程序设计》实验教学大纲 欧阳家百(2021.03.07) 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分: 4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解C 语言的特点,熟练掌握C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 五、实验项目与学时分配

注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。 2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每

实验三 顺序及选择结构程序设计

实验三顺序及选择结构程序设计 一、实验目的 1、掌握顺序结构程序的设计方法。 2、掌握赋值语句、注释语句、InputBox()函数、MsgBox语句与函数的使用方法。 3、掌握Print方法、Tab函数、字体类型、打印机输出的使用。 4、掌握简单块If语句、多分支块If语句、行If语句、IIf()函数的使用。 5、掌握情况语句(Select Case)的使用。 二、实验内容 要求:实验一、实验二中选做一个,实验三、实验四中选做一个 1、实验一。 2、实验二。 3、实验三。 4、实验四。 三、实验指导 1、实验一。 用InputBox()函数输入弧度值,将弧度值转换为角度值(度、分、秒)的形式,然后在窗体上打印出来。 【提示】利用InputBox()函数输入弧度值后,首先把弧度值转换为原始角度值,然后取整,结果就为角度值中的度值,然后把原始角度值减去度值,把结果转化为分值,采用类似思维即可求出结果。 【参考代码】 Private Sub Cmd1_Click() Dim s As Single, a As Integer, b As Integer, c As Integer Const pi As Single = 3.14159 s = Val(InputBox("请输入弧度值:")) s = s * 180 / pi a = Int(s) s = s - a s = s * 60 b = Int(s) s = s - b c = s * 60 Print "对应的角度值为:"; a & "度" & b & "分" & c & "秒。" End Sub 程序运行界面如图4.1所示。

实验05 函数程序设计

计算两个复数之积(调试示例error05_1)程序填空,不要改变与输入输出 有关的语句。 分别输入两个复数的实部与虚部,编程调用函数实现计算两个复数之积。 若两个复数分别为:c1=x1+(y1)i, c2=x2+(y2)i,则: c1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i 输入输出示例:括号内是说明 输入 1 2 (x1=1, y1=2) -2 3 (x2=-2, y2=3) 输出 product of complex is (-5.000000)+(1.000000)i #include /*---------*/ int main(void) { float imag1, imag2, real1, real2; scanf("%f%f", &real1, &imag1); scanf("%f%f", &real2, &imag2); complex_prod(real1, imag1, real2, imag2); printf("product of complex is (%f)+(%f)i\n", result_real, result_imag); return 0; } /*---------*/ 使用函数求1! + 2! + … + m!(改错题error05_2)程序填空,不要改 变与输入输出有关的语句。 求1! + 2! + … + 10!,要求定义并调用函数fact(n)计算 n!,函数形参 n 的类型是int,函数类型是double。 输入输出示例:括号内是说明 输出: 1!+2!+...+10! = 4037913.000000 #include

(完整版)Matlab实验5选择结构程序结构

实验五、选择与循环结构 一、实验目的: 1、 掌握建立和执行M 文件的方法。 2、 掌握利用if 语句实现选择结构的方法。 3、 掌握利用switch 语句实现多分支选择结构的方法。 4、 掌握try 语句的使用。 5、 掌握利用for 语句实现循环结构的方法。 6、 掌握利用while 语句实现循环结构的方法。 7、 熟悉利用向量运算来代替循环的操作方法。 二、实验内容: 1、 列分段函数的值。 ?? ???--≠≠<≤+--≠<-+=其他且且,632,100,6530,6222x x x x x x x x x x x y 要求: (1) 用if 语句实现,分别输出x =-0.5,-3.0,1.0,2.0,2.5,3.0,5.0时的y 值。 提示:x 的值从键盘输入,可以是向量。 %homework_5_1_1.m x=input('请输入x 的值:x='); if (x<0 & x~=-3) y= x.*x + x - 6 elseif (x>=0 & x<10 & x~=2 & x~=3) y=x.*x-5.*x+6 else y=x.*x-x-6 end >> homework_5_1 请输入x 的值:x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] y = -5.2500 6.0000 -6.0000 -4.0000 -2.2500 0 14.0000 (2) 用逻辑表达式实现上述函数。 %homework_5_1_2.m x=input('请输入x 的值:x=') y=(x<0 & x~=-3).*(x.*x+x-6)... +(x>=0 & x<10 &x~=2 &x~=3).*(x.*x-5.*x+6)... +(x>=10 | x==-3 | x==3 | x==2).*(x.*x-x-6) >> homework_5_1_2 请输入x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] x = -0.5000 -3.0000 1.0000 2.0000 2.5000 3.0000 5.0000 y = -6.2500 6.0000 2.0000 -4.0000 -0.2500 0 6.0000

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

函数与程序结构实验

C 语言程序设计实验报告 实验名称 函数与程序结构实验 一、实验目的 1.熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。 2.熟悉和掌握不同存储类型变量的使用。 3.熟悉多文件编译技术。 二、实验任务 1.源程序改错题 下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 #include "stdio.h" void main(void) { int k; for(k=1;k<6;k++) printf("k=%d\tthe sum is %ld\n",k,sum_fac(k)); } long sum_fac(int n) { long s=0; int i; long fac; for(i=1;i<=n;i++) fac*=i; s+=fac; return s; } 2.源程序修改替换题 (1)修改第1题中sum_fac 函数,使其计算量最小。 (2)修改第1题中sum_fac 函数,计算! 1!31!211n s ++++= 。 3.跟踪调试题 计算fabonacci 数列前n 项和的程序如下: 其中,long sum=0,*p=∑声明p 为长整型指针并用&sum 取出sum 的地址对p 初始化。*p 表示引用p 所指的变量(*p 即sum )。 void main(void) { int i,k; long sum=0,*p=∑

scanf("%d",&k); for(i=1;i<=k;i++){ sum+=fabonacci(i); printf("i=%d\tthe sum is %ld\n",i,*p); } } long fabonacci(int n) { if(n==1 || n==2) return 1; else return fabonacci(n-1)+fabonacci(n-2); } 单步执行程序,观察p,i,sum,n值。 (1)刚执行完scanf("%d",&k);语句,p,i值是多少? (2)从fabonacci函数返回后光条停留在哪个语句上? (3)进入fabonacci函数,watch窗口显示的是什么? (4)当i=3,从调用fabonacci函数到返回,n值如何变化? 4.编程设计题 (1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。同时以单步方式执行该程序,观察递归过程。 (2)编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。 编写一个程序证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。例如,如果BEGIN为10,END为20,程序的输出应为: GOLDBACH'S CONJECTURE: Every even number n>=4 is the sum of two primes. 10=3+7 12=5+7 …… 20=3+17 5.选做题 1、设file1.c如下: #include int x,y; /* 外部变量的定义性说明 */ char ch; /* 外部变量的定义性说明 */ void main(void) { x=10; y=20; ch=getchar(); printf("in file1 x=%d,y=%d,ch is %c\n",x,y,ch); func1(); } file2.c如下:

matlab实验四函数编写与程序设计

实验四:函数编写与程序设计 一、实验目的1 . 掌握M文件的创建。 2.掌握函数的编写规则。 3.掌握函数的调用。 4 . 掌握基本的输入输出函数以及显示函数的用法。 5.会用Matlab程序设计实现一些工程算法问题。 二、实验内容 1 . 设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,显示相应的结果,并要求结果显示类似于“a=x+y=34”。a=input('请输入一个数: ')

b=input('请输入一个数:'); fuhao=input('请输入一个运算符号(+-*/):','s'); switch fuhao case {'+'} he=a+b; disp(['和=',num2str(a),'+',num2str(b),'=',num2str(he)]); case {'-'} he=a-b; disp(['减=',num2str(a),'-',num2str(b),'=',num2str(he)]) case {'*'} he=a*b; disp(['乘=',num2str(a),'*',num2str(b),'=',num2str(he)]) case {'/'} he=a/b; disp(['除=',num2str(a),'/',num2str(b),'=',num2str(he)]) otherwise disp('请输入正确的符号'); end 2 . 求下列分段函数的值 2 2 2 6,0 56, 1, y χχχχ χχχχχ χχ ?+-<≠ ? =-+≤≠≠? ?-- ? 且-3 0<10,2且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语言 函数与程序结构

第三章函数与程序结构 3.1 概述 C语言的程序除主函数外,还可以有若干个其他函数—块状结构。 一般把其中相对独立的算法和功能定义成一个独立的函数,以供需要的地方调用。 优点: (1)减少代码的重复现象。 (2)便于分工合作。 (3)便于阅读。 (4)便于独立算法的代码移植。

3.2函数的定义和调用 举例说明: 对于求两个数中的最大值,有三个步骤:(1)从键盘输入两个数给a和b。 (2)求a和b中的最大值。 (3)输出结果。 把求最大值的算法部分定义成一个独立的函数:

函数类型函数名函数参数(形参) int max(int x,int y) main() {int z;{int a,b,c; if(x>y)z=x;scanf(“%d%d”,&a,&b); else z=y;c=max(a,b); return(z);printf(“%d”,c); }} x y z a b c 35

说明: (1)程序由两个函数组成,它们逻辑上相互独立(功能、变量)。 (2)程序的执行总是从主函数开始,主函数总是被执行一次,其他函数只有在被调用时才获得控制。 (3)函数调用有两个作用:转移控制权和传递参数。 (4)return的作用也有两个:交回控制权和返回结果。 (5)实参可以是常量、变量或表达式,但类型要一致。

定义一个函数除考虑算法外就是:如何设计函数的参数,通过何种途径交回结果。例:求自然数1—100中的素数之和。 ?prime(?)main(){int i;{int i,s=0;for(i=2;i

大学生C语言程序设计(第四版 谭洪强)实验7 答案

实验七 参考答案(参考答案) (1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。 注意:n 的值要求不大于100。 算法分析: 使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。注意:i 的倒数要表示成:1.0/i; 参考子函数如下: double fun(int n) { double sum=0; int i; for(i=5;i<=n;i++) if(i%5==0||i%9==0) sum=sum+1.0/i; return sum; } (2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。 n s ?++++?++++++=321132112111 例如:若n 的值为11时,函数的值为1.83333 算法分析: 等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。 参考子函数如下: float fun(int n) { float sum=1; //sum 中已经累加了第一项的值 int i,m=1; //m 表示每项的分母; for(i=2;i<=n;i++) { m=m+i; sum=sum+1.0/m; } return sum; }

(3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12,调用该函数后,c=5241。 算法分析: 对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。 参考子函数如下: long fun(int a, int b) { long c=0; c=a%10*1000+a/10*10+b/10+b%10*100; return c; } (4) (sy7-4.c)请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567, 则函数返回1234.570000;实型数为1234.564, 则函数返回1234.560000。 算法分析: 先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。 参考自定义函数如下: float fun ( float h ) { long w ; w = h * 100 + 0.5 ; return (float) w / 100 ; } (5) (sy7-5.c)请编写一个函数unsigned fun ( unsigned w ),w 是一个大于10的无符号整数,若w 是n (n ≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。 例如:w 值为5923,则函数返回923;w 值为923 则函数返回23。 算法分析: 首先应求出w的位数,有一位,i就乘以10(如果有4位,i就等于10000);然后通过求模运算舍弃最高位; 参考子函数如下: unsigned fun ( unsigned w ) { int i=1;//i用来存放整数的位数

实验2顺序结构与逻辑运算

实验2顺序结构与逻辑运算

实验2 顺序结构与逻辑运算 1.实验目的和要求 (1)掌握数据输入/输出函数的使用,能正确使用各种格式转换符。 (2)熟悉顺序结构程序中语句的执行过程,并学会基本调试程序方法。 (3)能够正确使用逻辑运算符和逻辑表达式。(4)学会运用逻辑表达式或关系表达式等表示条件。 (5)熟练掌握if语句和switch语句,掌握条件表达式构成的选择结构。 (6)熟练掌握跟踪调试程序,针对具体数据组织输入测试数据,观察程序运行能否得到预期的输出结果。 (7)学会编写简单程序。 2.实验内容:实验指导书中的实验三和实验四 3.实验步骤及结果 实验三部分: 3-1-1 该程序正确的源程序代码(或窗口截图):

程序运行结果画面如下: 3-1-2该程序正确的源程序代码(或窗口截图): 程序运行结果画面如下:

3-2-1该程序完整的源程序代码(或窗口截图): 程序运行结果画面如下: 3-2-2该程序完整的源程序代码(或窗口截图):

程序运行结果画面如下: 3-3 注意:这道程序我们不按书中提示进行,而在VC环境下进行调试。 语法错误和逻辑错误的区别何在? 答: 如何启动单步调试? 答: 要使程序运行到“ss=(k…”这一行暂停下来,该如何操作? 答: 怎样终止调试状态(程序复位)? 答: 单步调试状态下,向下运行一条语句的操作方法(分两种情况回答,第一种,跟踪到自定义函数内部,第2种,不跟踪到自定义函数内部):答:

在本题中,假设要在运行第2条语句(即scanf 语句后),要马上观察i,j,k,ss,m,n的变量的值,操作方法:在此填入入答案,请把观察这些变量时的画面粘贴到下面: 通过这道题单步调试,你对i++和++i及i—和—i 应该有了更直观的理解,他们的区别在于:答: 3-4 请回答书中问题 问题(1)字符型 问题(2) 问题(3) 程序运行结果画面如下: 3-5: 运行结果画面:

实验六 函数

实验六 函数 一、实验目的 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;

函数程序设计 -C语言程序实验报告

安徽工程大学 高级语言程序设计实验报告 班级姓名同组者/ 成绩 日期2019\11\21 指导教师 实验名称函数程序设计 一、实验目的 1.掌握定义函数的方法。 2.掌握函数实参与形参的对应关系,体会“值传递”的方式。 3.掌握函数的嵌套调用和递归调用的方法。 4.掌握全局变量和局部变量、动态变量和静态变量的概念与使用方法。 5.理解数组作为函数参数的传递方式。 6.理解宏的概念,掌握宏的定义。 7.了解文件包含的概念,掌握其用法。 二、实验内容 1.完成程序,求解n! 具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。 2.计算s=1的k次方+2的k次方+3的k次方+……+N的k次方。 具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。 3.写出下面3个程序的输出结果,说明每个程序中的各个x有何不同。 4.阅读程序,理解程序的功能,写出预期结果并上机验证。 5.编程并上机调试运行。 (1)编写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。(2)输入一个整数,将它逆序输出。要求定义并调用函数rverse(number),它的功能是返回number的逆序数。如reverse(12345)的返回值是54321。 (3)用递归法求n阶勒让德多项式的值,递归公式为 P(x)=1,n=0;P(x)=x,n=1;P(x)= [(2n-1)*x-Pn-1(x)-(n-1)Pn-2(x)]/n, n>1 (4)编写一函数,由实参传递一个字符串,统计此字符串中字母、数字、空格和其他

字符的个数,在主函数中输入字符串并输出上述结果。 (5)带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出交换后的两个值。 (6)编写函数,实现两个字符串的连接,在主函数中输入两个字符串并输出连接后的结果(不要使用库函数中的strcat函数)。 (7)请编写函数fun,它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在a所指的数组中,通过n返回这些数的个数,在主函数中输出这些整数,并给出统计的总数。 (8)设有未完成的函数: char GetChar(char c) { char s[]="9038571426"; …… } 字符串s中无序地存储了10个数字字符,没有重复。函数的功能是: 如果字符c不是数字字符,函数原样返回该字符;否则,在s中查找字符C,并返回其在s 中的前一个字符。如果该字符位于s的最前面(字符'9') ,则返回最后一个字符6'。 如GetChar(4)得到字符'I', GetChar(T)得到字符T。请完成该函数并在主函数中调用。*思考题 1.请分析不返回值的函数定义与有返回值的函数定义有什么不同,思考这两类函数在实际编程中的作用。 2.请观察本次实验中使用的函数都有几个返回值,当个函数需要有多个返回值时,应该如何处理? 3.数组作为函数参数有哪几种方式?这些方式中有没有能解决之前“函数多值返回问题”的方法? 4.请分析下面程序的作用。 /*format.h*/ #define DIGIT(d) printf("整数输出:%d\n",d) #define FLOAT(f) printf("实数输出:%10.2f\n",f) #define STRING(s) printf("字符串输出:?号s\n",s) /*user's program*/

高级语言程序设计(下)实验编程题

函数编程题 (1)编写一个程序实现如下功能:编写两个函数,其功能分别为: ①求N个整数的最大值和次大值。 ②求两个整数的最大公约数和最小公倍数。主函数调用这两个函数(程序以文件名sy6_7.c存盘)。 #include #define N 10 void max(int b[],int n) //求最大数和次大数 {int i,max,max2; max=max2=b[0]; for(i=1;i

实验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)理解函数的概念,区分系统函数和用户自定义函数的使用方法,包括:1)函数定义 2)函数声明 3)函数调用 (2)掌握整型数据在函数间传递的方法。 实验内容 任务一:改错 1.打开程序文件error1-6.cpp。 void main() { printstar; sayHello(void); printstar; } printStar(void) {printf(“*******”); } void sayHello(void) {printf(“hello world!”); } 2.程序的功能是输出三行文本,请根据VC++6的compile和link错误信息改正错误,并给出运行结果。输出格式如下所示: ******* hello world! ******* 任务二:改错 1.打开程序文件error05-1.cpp。 #include int main(void)

{ int n; double f; printf(“Input n:”); scanf(“%d”,&n); f=fact(m); //设置调试断点 printf(“%d!=%f\n”,n,f); return 0; //设置调试断点 } double fact(m) {int i; double product; for(i=1;i<=m;i++) product= product*i; return 0; //设置调试断点 } 2. 程序的功能是调用fact(n) 函数,计算n!。 1)请根据VC++6的compile和link错误信息改正语法错误 (提示:截一个错误信息,对应一个正确语句) 2)请按注释要求设置3个调试断点,纠正程序逻辑错误,使其能正确输出n!。 3)设计2个测试用例测试程序,并给出运行结果。 任务三画简图ex01_04.cpp 打开sample01_03.cpp,增加画小房子和小男孩的函数定义,并在main函数中调用输出。/*画小女孩sample01_03.cpp*/ #include /* Function prototypes */ void draw_circle(void); /* Draws a circle */ void draw_intersect(void); /* Draws intersecting lines */ void draw_base(void); /* Draws a base line */ void draw_triangle(void); /* Draws a triangle */ void draw_parallel(void); /* Draw a parallel*/ void draw_girl(void); /* Draw a girl*/ int main(void)

相关主题
文本预览
相关文档 最新文档