实验6过程_函数和程序包

实验6过程_函数和程序包
实验6过程_函数和程序包

实验6 过程、函数和程序包

姓名:学号:

专业:软件工程(金融)班级:

同组人:无实验日期:2013/7/19

【实验目的与要求】

?掌握过程的创建与调用

?掌握PL/SQL函数的编写与调用

?熟悉程序包的使用

【实验内容与步骤】

6.0.实验准备工作:PL/SQL程序文件的编辑与执行

1.使用文档编辑器编辑以下文件,并保存为aa.sql:

2.以scott身份登录,在SQL 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 VARCHAR2(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 salary < 1000 then

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

elsif salary <3000 then

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

elsif salary <5000 then

return '这个还可以';

else

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

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

给出相应代码:

房屋名称:housename

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(s_empno emp.empno%type)

as

v_sal emp.sal%type;

v_empno emp.empno%type;

begin

select sal,empno into v_sal,v_empno

from emp

where empno = s_empno;

dbms_output.put_line(v_sal|| '该员工的员工号:'||v_empno);

end;

(2)请给出测试结果:

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

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

(1)请给出程序源码:

create or replace procedure p_changesal(p_empno emp.empno%type)

as

v_deptno emp.deptno%type;

v_increment emp.sal%type;

v_sal emp.sal%type;

begin

select deptno into v_deptno

from emp

where empno = p_empno;

case

when v_deptno=10 then v_increment :=150;

when v_deptno=20 then v_increment :=200;

when v_deptno=30 then v_increment :=250;

else v_increment :=300;

end case;

select sal into v_sal

from emp

where empno = p_empno;

dbms_output.put_line(v_sal+v_increment);

end;

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

执行前:

执行后:

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

为标准)员工的信息。

执行测试结果应如下:

(1)请给出程序源码:

create or replace procedure maxsal(num in number)

is

cursor v_sal

is

select * from emp

order by sal desc;

v_emp v_sal%rowtype;

begin

open v_sal;

loop

fetch v_sal into v_emp;

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

||v_emp.deptno);

exit when v_sal%rowcount=num;

end loop;

end;

(2)请给出测试结果:

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

执行测试结果应如下:

(1)请给出程序源码:

create or replace procedure select_emp(num1 in number,num2 in number)

is

cursor v_sal

is

select * from emp

where sal between num1 and num2 order by sal desc;

v_emp v_sal%rowtype;

begin

open v_sal;

loop

fetch v_sal into v_emp;

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

||v_emp.deptno);

exit when v_sal%notfound;

end loop;

end;

(2)请给出测试结果:

5.编写一个存储过程checkSal( ),用以检查所指定雇员,传入员工工号作为参数,检查

该员工的薪水是否在有效范围内。不同职位的薪水范围为:

Designation Raise

Clerk 1500-2500

Salesman 2501-3500

Analyst 3501-4500

Others 4501 and above.

如果薪水在此范围内,则显示消息"Salary is OK",否则,更新薪水为该范围内的最低值。

请给出程序源码:

create or replace procedure checkSal(no emp.empno%type)

as

v_job emp.job%type;

v_sal emp.sal%type;

v_mesg varchar2(50);

begin

select job,sal into v_job,v_sal

from emp where empno = no;

if v_job = 'CLERK' then

if v_sal>=1500 and v_sal<=2500 then

v_mesg:='salary is ok';

else

v_sal:=1500;

v_mesg:='have updated your salary to'||to_char(v_sal);

end if;

elsif v_job='SALESMAN' then

if v_sal>=2501 and v_sal<=3500 then

v_mesg:='salary is ok';

else

v_sal:=2501;

v_mesg:='have updated your salary to'||to_char(v_sal);

end if;

elsif v_job='ANALYST' then

if v_sal>=3501 and v_sal<=4500 then

v_mesg:='salary is ok';

else

v_sal:=3501;

v_mesg:='have updated your salary to'||to_char(v_sal);

end if;

else

if v_sal>=4501 then

v_mesg:='salary is ok';

else

v_sal:=4501;

v_mesg:='have updated your salary to'||to_char(v_sal);

end if;

end if;

update emp

set sal=v_sal

where empno=no;

dbms_output.put_line(v_mesg);

end;

请给出程序运行结果:

6.编写一个PL/SQL函数count_by_Salary,接受传入参数Salary_min和Salary_max,

据此统计并返回薪水值在Salary_min和Salary_max之间的员工人数。

请给出程序源码:

create or replace function count_by_Salary(Salary_min in number,Salary_max in number)

return number

as

num number:=0;

begin

select count(*) into num

from emp

where sal between Salary_min and Salary_max order by sal desc;

return num;

end;

请给出程序运行结果:

7.创建一个函数getAveSal(),以员工号为参数,返回该员工所在部门的平均工资。

请给出程序源码:

create or replace function getAveSal(p_empno emp.empno%type)

return emp.sal%type

as v_sal emp.sal%type;

begin

select avg(sal) into v_sal from emp where deptno =

(select deptno from emp where empno=p_empno);

return v_sal;

end;

请给出程序运行结果:

8.创建一个包pkg_emp,包中包含一个函数和一个存储过程。函数以部门号为参数,返回

该部门员工的最高工资;过程以部门号为参数,输出该部门中工资最高的员工名、员工号。

要求完成后,可以以如下方式调用包:

(1)调用包中函数:

(2)调用包中存储过程

(1)请给出程序源码:

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程序的选择结构 一、实验目的和要求 (1)了解 C 语言表示逻辑量的方法(以0 代表“假”,以非0 代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if 语句的使用(包括if 语句的嵌套)。 (4)熟练掌握多分支选择语句—switch 语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。 二、、实验软硬件配置 1.硬件配置 电脑 2.软件配置 Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0 集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时 改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提 示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正 确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容: 本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。 x x 1 (1)有一函数:y 2x 1 1 x 10 3x 11 x 10 写程序,输入x 的值,输出y 相应的值。用scanf 函数输入x 的值,求y 的值。程序如下:#include int main() {float x,y; int i; while(i<1000) { printf(" 请输入x 的值:"); scanf("%f",&x); if(x<1) y=x; else if(1<=x&&x<10)

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

实验三顺序及选择结构程序设计 一、实验目的 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所示。

实验六 高层绘图操作答案

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

计算机组成实验报告汇总

计算机组成与体系结构 实验报告

实验项目一 一、实验目的 通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。 二、实验要求: 在VC6.0中创建下列源程序 #include void main() { inti=100; int j=-1; int k; k=i+j; printf("%d",k); } 然后对该程序进行编译、链接,最终生成可执行目标代码。 三、实验报告 1.给出做实验的过程. 关键代码如下:

2.给出源程序(文本文件)的内容(用十六进制形式表示)。 3.给出可执行目标文件(二进制文件)的内容(用十六进制形式表示)。

4.VC6.0调试环境:设置断点、单步运行、变量的值(十进制、十六进制)、变量的地址、变量的存储。 断点设置如下:

变量的值十进制: 变量的值十六进制: 变量的地址:

5.VC 6.0反汇编:查看源程序对应的汇编程序、可执行目标程序的二进制编码、了解如何给变量分配内存、系统函数程序段的调用。 6.分析或回答下列问题。 (1)分析同一个源程序在不同机器上生成的可执行目标代码是否相同。 不相同。因为不同的机器硬件的组成不同,因此同一个源程序在不同的机器上生成的目标文件不同。 (2)你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。 不能。因为源程序中的printf函数在可执行文件中已转换为机器语言。被翻译的机器语言中有printf函数,但是不知道是从哪一段开始翻译的。 (3)为什么源程序文件的内容和可执行目标文件的内容完全不

(完整版)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

计算机系统结构实验报告

计算机系统结构实验报告 一.流水线中的相关 实验目的: 1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点; 2. 加深对计算机流水线基本概念的理解; 3. 进一步了解DLX基本流水线各段的功能以及基本操作; 4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响; 5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。 实验平台: WinDLX模拟器 实验内容和步骤: 1.用WinDLX模拟器执行下列三个程序: 求阶乘程序fact.s 求最大公倍数程序gcm.s 求素数程序prim.s 分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察 CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。 2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相 关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的 百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。 3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的 总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。 1. 求阶乘程序 用WinDLX模拟器执行求阶乘程序fact.s。这个程序说明浮点指令的使用。该程序从标准 输入读入一个整数,求其阶乘,然后将结果输出。 该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。 实验结果: 在载入fact.s和input.s之后,不设置任何断点运行。 a.不采用重新定向技术,我们得到的结果

函数与程序结构实验

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如下:

实验六、用窗函数法设计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

实验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;

实验四循环结构大全语言程序设计实验报告

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和内存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验内容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示: 四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:+。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序汇编(翻译)后生成二进制目标程序,文件名为 (3)目标程序需要经连接生成可执行程序,文件名为 2)汇编环境

最基本的汇编环境只需要两个文件:和。将这两个文件拷入到已经建好的文件夹(例如huibian)中,并将文件夹huibian放在硬盘根目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入 数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数 据为13,0,59,900,587,1,657,234,34,48) 六、实验心得 通过本次循环结构汇编语言程序设计的实验,我初步了解了汇编语言的基本语法,利用汇编语言的循环结构实现了对于数组A中元素的排序以及求得元素中的最大值最小值。另外,在实验过程中,我也了解到了,我们要时刻细心严谨,认真做好每一步,避免出现低级错误。 七、汇编语言代码 1、利用冒泡排序实现求最大值最小值的代码 data segment mes1 db 'the max:$' mes2 db 'the min:$' a dw 13,0,59,900,587,1,657,234,34,48 data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax ;以下是起泡排序核心代码 mov cx,10 dec cx loop1: mov di,cx mov bx,0

实验六 自定义函数

实验六自定义函数 实验目的:熟悉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)])

c语言程序设计实验报告1--顺序结构

福建农林大学金山学院实验报告 系(教研室):专业:年级: 实验课程: C语言程序设计姓名:学号:实验室号:_ 计算机号:实验时间:指导教师签字:成绩: 实验1:顺序结构程序设计 一、实验目的和要求 1.了解Visual C++ DEV_C++的基本操作方法 2.掌握C程序设计的基本步骤:编辑、编译、连接和运行 3.掌握各种类型数据的输入输出方法 4.能够编写一个简单的程序 二、实验内容和原理 1. 输入并运行一个简单、正确的程序。 # include <> int main( ) { printf ("This is a c program!\n"); return 0; } 2. 要使下面程序的输出语句在屏幕上显示:A,B,34,则从键盘输入的数据格式应为AB34__________ 。 #include<> int main() { char a, b; int c;

scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%d\n",a,b,c); return0; 问题1:要使上面程序的键盘输入数据格式为a=A,b=B,34,输出语句在屏幕上显示的结果也为A,B,34,则应修改程序中的哪条语句怎样修改 scanf( “a=%c,b=%c,%d”,&a,&b,&c ); 问题 2:要使上面程序的键盘输入数据格式为A,B,34,而输出语句在屏幕上显示的结果为“A”,“B”,34,则应修改程序中的哪两条语句怎样修改 scanf( “%c,%c,%d”,&a,&b,&c); printf(“\”%c\”,\”%c\”,%d\n”,a,b,c); 3、编程求一个圆的周长和面积。用scanf输入圆半径,输出保留两位小数。 4、输入一个华氏温度F,要求输出摄氏温度C。公式为 c=5/9(F-32),取两位小数。 5、编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf 函数输出这两个字符。 6. 计算定期存款本利之和。 设银行定期存款的年利率rate为%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital 均由键盘输入。(提示:pow为幂函数:pow(2,3)表示23)。 #include <> #include <> int main() { } 三、实验环境

实验二_C语言逻辑结构程序设计

实验二C语言逻辑结构程序设计 一、实验内容 1.用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。 2.编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。 3.编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。 4. 学有余力的同学完成附加题。 二、实验目的和要求 1. 进一步掌握关系表达式和逻辑表达式的使用。 2. 熟悉选择结构程序设计。 3. 熟练使用if语句进行程序设计。 4. 使用switch语句实现多分支选择结构。 三、预习要求 熟悉选择结构程序设计语句和方法。 四、实验设备(软、硬件) 硬件设备:PC机 软件环境:Turboc 2.0 五、实验方法与步骤 1.用scanf函数输入一个年份year,计算这一年2月份的天数days,然后 用输出函数printf输出days。 实验步骤与要求: (1)有变量定义为整型。 (2)输入前要加提示语句。 (3)输出结果前要有必要的文字说明。 说明: (1)闰年的条件是:year能被4整除但不能被100整除,或者year能被400 整除。

(2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。 2.编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。实验步骤与要求: (1) 输入一组数据3,4,8,观察程序运行结果,并与实验二中程序2做比较 (2) 另外再输入几组数据进行测试: 3,4,5 3,3,3 3,3,5 (3)如果程序有误,可采用“跟踪打印”的调试方法,确定错误的出处。 3.编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。 奖金税率 a<500 0.00 500≤a<1000 0.05 1000≤a<2000 0.08 2000≤a<5000 0.10 5000≤a 0.15 实验步骤与要求: (1) 用if语句编程,自变量和函数值均为双精度类型 (2) 用scanf函数输入奖金数a,输出结果采用以下形式: a=具体值 rate=税率值 tax=应缴税款 profit=实得奖金数 (3) 分别输入a=280,512,1000,4250,5100,运行该程序 (4) 用if~else if语句和switch语句编程,其它同上。 六、实验报告要求 1.每次实验后撰写一份实验报告; 2.实验报告采用学校统一的“中国人民公安大学计算机课实验报告”纸; 3.学生按照实验报告纸上的内容认真填写每一项,实验过程一项中要求填写要求上机调试的程序和调试程序的步骤程序;

C++实验六 函数

实验名称:实验六函数 班级学号姓名 实验地点完成日期成绩 (一)实验目的与要求 1.掌握高级语言中定义和使用函数的方法; 2.掌握通过“值传送”调用函数的方法; 3. 掌握函数的嵌套调用和递归函数的设计方法; 4.进一步练习阅读检查与调试修改高级语言程序的方法。 (二)实验内容 1.调试运行如下二程序,分析调用函数前后程序1中a,b这二个变量的值是否发生改变?为什么?程序2中数组a的二个元素的值是否发生改变?为什么? 程序1(变量作函数实参) int main( ) { int a=3,b=6; printf("a=%d,b=%d¥n",a,b); exchange1(a,b); printf("a=%d,b=%d¥n",a,b); return 0; } void exchange1(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d¥n",x,y); } 程序2(数组名作函数实参) int main( ) { void exchange2(int x[2]); static int a[2]={3,6};

printf("a[0]=%d,a[1]=%d¥n",a[0],a[1]); exchange2(a); printf("a[0]=%d,a[1]=%d¥n",a[0],a[1]); return 0; } void exchange2(int x[2]) { int t; t=x[0];x[0]=x[1];x[1]=t; printf("x[0]=%d,x[1]=%d¥n",x[0],x[1]); } 2. 写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。 本程序应当准备以下测试数据:17、2、1。分别输入数据,运行程序并检查结果是否正确。 3. 编写转换函数,将十进制整数n(-2^31<=n<=2^31-1)转换成k(2<=k<=16)进制数。字母请使用大写。(HLOJ 8001) (三)实验具体步骤 1.调试运行如下二程序,分析调用函数前后程序1中a,b这二个变量的值是否发生改变?为什么?程序2中数组a的二个元素的值是否发生改变?为什么? 程序1(变量作函数实参) int main( ) { int a=3,b=6; printf("a=%d,b=%d¥n",a,b); exchange1(a,b); printf("a=%d,b=%d¥n",a,b); return 0; } void exchange1(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d¥n",x,y); }

相关文档
最新文档