实验6 PLSQL程序设计

实验6  PLSQL程序设计
实验6  PLSQL程序设计

课程:Oracle 同组者:实验日期:2017.5.16

实验6 PL/SQL程序设计

1 实验目的

(1)掌握PL/SQL程序开发方法。

(2)掌握存储过程、函数、触发器、包的创建于调用。

2 实验要求

(1)根据图书销售系统业务要求创建特定的存储过程、函数、触发器。

(2)根据图书销售系统业务要求将图书销售系统相关的函数、存储过程封装到包里。

3 实验步骤

以bs用户登录BOOKSALES数据库,利用PL/SQL程序编写下列功能模块。

(1)创建一个存储过程,输出不同类型图书的数量、平均价格。

SQL> create or replace procedure proc_category_static

2 as

3 --定义游标,获取当前有哪些图书种类

4 cursor c_all_category is select distinct category from books;

5 --图书的平均价格

6 v_avg_cost number;

7 begin

8 --保存图书种类

9 for v_each_category in c_all_category LOOP

10 select avg(retail) into v_avg_cost from books where

课程:Oracle 同组者:实验日期:2017.5.16

category=v_each_category.category group by category;

11 dbms_output.put_line('种类为:'||v_each_category.category||',平均价格为:'|| v_avg_cost);

12 END LOOP;

13 end proc_category_static;

14 /

(2)创建一个存储过程,以客户号为参数,输出该客户订购的所有图书的名称与数量。create or replace procedure proc_get_orderinfo(

2 p_customer_id customers.customer_id%type)

3 as

4 --声明游标存储客户的订单号

5 cursor c_orderid is select order_id from orders where customer_id=p_customer_id;

6 v_orderid orders.order_id%type;

7 --声明游标存储订单信息

8 cursor c_orderitem is select ISBN, sum(quantity) totalnum from orderitem where order_id=v_orderid group by ISBN;

9 --保存图书的书名

10 v_title books.title%type;

11

12 begin

13 open c_orderid;

14 LOOP

15 fetch c_orderid into v_orderid;

课程:Oracle 同组者:实验日期:2017.5.16

16 exit when c_orderid%NOTFOUND;

17 for v_orderitem in c_orderitem LOOP

18 select title into v_title from books where ISBN=v_orderitem.ISBN;

19 DBMS_OUTPUT.PUT_LINE(p_customer_id||'订购'||v_title||'的数量是'||v_orderitem.totalnum);

20 end LOOP;

21 end LOOP;

22 close c_orderid;

23 end proc_get_orderinfo;

24 /

exec proc_get_orderinfoo(1001);

(3)创建一个存储过程,以订单号为参数,输出该订单中所有图书的名称、单价、数量。create or replace procedure proc_get_orderinfoo(

p_order_id orderitem.order_id%type)

as

--声明游标存储订单号的ISBN

cursor c_ISBN is select ISBN from orderitem where order_id=p_order_id;

v_ISBN orderitem.ISBN%type;

--声明游标存储订单信息

课程:Oracle 同组者:实验日期:2017.5.16

cursor c_orderitem is select ISBN,sum(quantity) totalnum from orderitem where ISBN=v_ISBN ;

v_title books.title%type;

v_retail books.retail%type;

begin

open c_ISBN;

LOOP

fetch c_ISBN into v_ISBN;

exit when c_ISBN%NOTFOUND;

for v_orderitem in c_orderitem LOOP

select title,retail into v_title,v_retail from books where ISBN=v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE(p_order_id||v_title||v_retail||v_orderitem.totalnum);

end LOOP;

end LOOP;

close c_ISBN;

end proc_get_orderinfoo;

/

课程:Oracle 同组者:实验日期:2017.5.16

(4)创建一个存储过程,以名为参数,输出该出版的所有图书的名称、ISBN、批发价格、零售价格信息。

create or replace procedure proc_get_name(

p_title books.title%type)

as

cursor c_orderid is select order_id from orders where customer_id=p_customer_id;

v_orderid orders.order_id%type;

cursor c_orderitem is select ISBN, sum(quantity) totalnum from orderitem where order_id=v_orderid group by ISBN;

v_title books.title%type;

begin

open c_orderid;

LOOP

fetch c_orderid into v_orderid;

exit when c_orderid%NOTFOUND;

for v_orderitem in c_orderitem LOOP

select title into v_title from books where ISBN=v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE(p_customer_id||''||v_title||'的数量是'||v_orderitem.totalnum);

end LOOP;

end LOOP;

close c_orderid;

end proc_get_orderinfo;

/

set serveroutput on

declare

v_customer number;

begin

v_customer :=&x;

proc_get_orderinfo(v_customer);

课程:Oracle 同组者:实验日期:2017.5.16

end;

/

(5)创建一个存储过程,输出每个客户订购的图书的数量、价格总额。

create or replace procedure proc_category_static

as

cursor c_all_category is select distinct category from books;

v_sum_cost number;

begin

for v_each_category in c_all_category LOOP

select sum(retail) into v_sum_cost from books where category=v_each_category.category group by category;

dbms_output.put_line('种类为:'||v_each_category.category||',总价格为:'|| v_sum_cost);

END LOOP;

end proc_category_static;

/

set serveroutput on

exec proc_category_static;

/

课程:Oracle 同组者:实验日期:2017.5.16

(6)创建一个存储过程,输出销售数量前3名的图书的信息及销售名次。

create or replace procedure proc_category_static

as

cursor c_all_category is select distinct category from books;

v_sum_retail number;

begin

for v_each_category in c_all_category LOOP

select sum(cost) into v_sum_retail from books where category=v_each_category.category group by category;

dbms_output.put_line('种类为:'||v_each_category.category||',数量为:'|| v_sum_retail);

END LOOP;

end proc_category_static;

/

set serveroutput on

exec proc_category_static;

课程:Oracle 同组者:实验日期:2017.5.16

(7)创建一个存储过程,输出订购图书数量最多的客户的信息及订购图书的数量。

(8)创建一个存储过程,输出各类图书中销售数量最多的图书的信息及销售的数量。

(9)创建一个包,实现查询客户订购图书详细信息的分页显示。

create or replace procedure proc_title_static

as

cursor c_all_title is select distinct title from books;

v_sum_retail number;

begin

for v_each_title in c_all_title LOOP

select sum(cost) into v_sum_retail from books where title=v_each_title.title group by title;

dbms_output.put_line('信息为:'||v_each_title.title||',数量为:'|| v_sum_retail);

END LOOP;

课程:Oracle 同组者:实验日期:2017.5.16

end proc_title_static;

/

(10)创建一个包,利用集合实现图书销售排行榜的分页显示。

(11)创建一个包,包含一个函数和一个过程。函数以图书类型为参数,返回该类型图书的平均价格。过程输出各种类型图书中价格高于同类型图书平均价格的图书信息。

create or replace package pkg_book

as

function get_book_avgcost(p_book_category BOOKS.category%type) return number;

procedure pro_showbook(p_book_category BOOKS.category%type);

end;

/

create or replace package body pkg_book

as

function get_book_avgcost(p_book_category BOOKS.category%type)

return number

as

v_ISBN BOOKS.ISBN%type;

cursor c_books is select retail from BOOKS where ISBN=v_ISBN;

v_sumcost number(6,2):=0;

v_count number(6) :=0;

v_avgcost number :=0;

v_book_category varchar2(10);

begin

select ISBN into v_ISBN from BOOKS where category=v_book_category;

for v_retail in c_books LOOP

v_count:=v_count+1;

v_sumcost:= v_sumcost+v_retail.retail;

end LOOP;

v_avgcost:=v_sumcost/v_count;

DBMS_OUTPUT.PUT_LINE(v_book_category|| '--'||v_avgcost);

return v_avgcost;

end;

课程:Oracle 同组者:实验日期:2017.5.16

procedure pro_showbook(p_book_category BOOKS.category%type)

as

v_book_category varchar2(10);

cursor c_books is select * from BOOKS where retail>=get_book_avgcost(v_book_category); begin

for v_books in c_books loop

dbms_output.put_line(v_books.ISBN||' '||v_books.title||' '||v_books.author||'

'||v_books.pubdate||' '||v_books.publisher_id||' '||v_books.retail);

end loop;

end;

end;

/

set serveroutput on

declare

p_book_category BOOKS.category%type;

avgcost number;

begin

p_book_category:='管理';

avgcost:=pkg_book.get_book_avgcost(p_book_category);

pkg_book.pro_showbook('管理');

end;

/

课程:Oracle 同组者:实验日期:2017.5.16

(12)创建一个触发器,当客户下完订单后,自动统计该订单所有图书价格总额。create or replace package order_total_cost

as

v_order_id orders.order_id%type;

end;

/

create or replace trigger trg_before_order

before insert on ORDERS

for each row

begin

order_total_cost.v_order_id:=:new.order_id;

end;

/

set serveroutput on

create or replace trigger trg_order

after insert on ORDERitem

declare

cursor c_orderitem is select ISBN, quantity from orderitem where

order_id=order_total_cost.v_order_id;

v_ISBN orderitem.ISBN%type;

v_quantity orderitem.quantity%type;

课程:Oracle 同组者:实验日期:2017.5.16

v_cost books.cost%type;

v_sumcost number(6,2):=0;

begin

for v_orderitem in c_orderitem LOOP

if v_orderitem.quantity >10 then

select cost into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('1----'||v_cost||':'||v_orderitem.ISBN);

elsif v_orderitem.quantity<=10 then

select retail into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('2----'||v_cost||':'||v_orderitem.ISBN);

else

DBMS_OUTPUT.PUT_LINE('number of book is error!');

end if;

v_sumcost:= v_sumcost+v_orderitem.quantity*v_cost;

DBMS_OUTPUT.PUT_LINE('3*****'||'now v_sumcost is'||v_sumcost);

end LOOP;

end;

/

(13) 创建一个触发器,禁止客户在非工作时间(早上8:00之前,晚上17:00之后)下订单。

课程:Oracle 同组者:实验日期:2017.5.16

(14) 创建一个函数,以客户号为参数,返回该客户订购图书的价格总额。

create or replace function get_sumcost(

v_customer_id customers.customer_id%type)

return number

as

cursor c_orderid is select order_id from orders where customer_id=v_customer_id;

v_orderid orders.order_id%type;

cursor c_orderitem is select ISBN, quantity from orderitem where order_id=v_orderid;

v_ISBN orderitem.ISBN%type;

v_quantity orderitem.quantity%type;

v_cost books.cost%type;

v_sumcost number(6,2):=0;

begin

open c_orderid;

LOOP

fetch c_orderid into v_orderid;

exit when c_orderid%NOTFOUND;

for v_orderitem in c_orderitem LOOP

if v_orderitem.quantity >10 then

select cost into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('1----'||v_cost||v_orderitem.ISBN);

elsif v_orderitem.quantity<=10 then

select retail into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('2----'||v_cost||v_orderitem.ISBN);

else

DBMS_OUTPUT.PUT_LINE('number of book is error!');

end if;

v_sumcost:= v_sumcost+v_orderitem.quantity*v_cost;

DBMS_OUTPUT.PUT_LINE('3*****'||v_sumcost);

end LOOP;

end LOOP;

close c_orderid;

return v_sumcost;

end get_sumcost;

/

set serveroutput on

declare

课程:Oracle 同组者:实验日期:2017.5.16

v_totalMoney BOOKS.cost%type;

v_customer number;

begin

v_customer :=&x;

v_totalMoney:=get_sumcost(v_customer);

dbms_output.put_line(v_customer||'的购买总额是'||v_totalMoney);

end;

/

(15)创建一个函数,以订单号为参数,返回该订单订购图书的价格总额。

课程:Oracle 同组者:实验日期:2017.5.16

(16)创建一个函数,以名为参数,返回该出版的图书的平均价格。

create or replace function get_pub_avgcost(

v_pub_name https://www.360docs.net/doc/5412480156.html,%type)

return number

as

v_pub_id publishers.publisher_id%type;

cursor c_books is select retail from books where publisher_id=v_pub_id;

课程:Oracle 同组者:实验日期:2017.5.16 v_sumcost number(6,2):=0;

v_count number(6) :=0;

begin

select publisher_id into v_pub_id from publishers where name=v_pub_name;

for v_retail in c_books LOOP

v_count:=v_count+1;

v_sumcost:= v_sumcost+v_retail.retail;

DBMS_OUTPUT.PUT_LINE(v_count|| '--'||v_sumcost);

end LOOP;

return v_sumcost;

end get_pub_avgcost;

/

set serveroutput on

declare

v_avgMoney BOOKS.cost%type;

v_pubname https://www.360docs.net/doc/5412480156.html,%type;

begin

v_pubname :=&x;

v_avgMoney:=get_pub_avgcost(v_pubname);

dbms_output.put_line(v_pubname||'的出版图书的平均价格是'||v_avgMoney);

end;

/

课程:Oracle 同组者:实验日期:2017.5.16

(17)创建一个函数,以客户号为参数,返回该客户可以获得的礼品名称。

create or replace function get_gift(

v_customer_id customers.customer_id%type)

return number

as

cursor c_orderid is select order_id from orders where customer_id=v_customer_id;

v_orderid orders.order_id%type;

cursor c_orderitem is select ISBN, quantity from orderitem where order_id=v_orderid;

v_ISBN orderitem.ISBN%type;

v_quantity orderitem.quantity%type;

v_cost books.cost%type;

v_gift number(6,2):=0;

begin

open c_orderid;

课程:Oracle 同组者:实验日期:2017.5.16

LOOP

fetch c_orderid into v_orderid;

exit when c_orderid%NOTFOUND;

for v_orderitem in c_orderitem LOOP

if v_orderitem.quantity >10 then

select cost into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('1----'||v_cost||v_orderitem.ISBN);

elsif v_orderitem.quantity<=10 then

select retail into v_cost from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('2----'||v_cost||v_orderitem.ISBN);

else

DBMS_OUTPUT.PUT_LINE('number of book is error!');

end if;

v_gift:= v_gift+v_orderitem.quantity*v_cost;

DBMS_OUTPUT.PUT_LINE('3*****'||v_gift);

end LOOP;

end LOOP;

close c_orderid;

return v_gift;

end get_gift;

/

set serveroutput on

declare

v_totalMoney BOOKS.cost%type;

v_customer number;

begin

v_customer :=&x;

v_totalMoney:=get_sumcost(v_customer);

dbms_output.put_line(v_customer||'的礼物是'||v_totalMoney);

end;

/

课程:Oracle 同组者:实验日期:2017.5.16

(18)创建一个函数,以图书号为参数,统计该图书被订购的总数量。

create or replace function get_sumnum(

v_customer_id customers.customer_id%type)

return number

as

cursor c_orderid is select order_id from orders where customer_id=v_customer_id;

v_orderid orders.order_id%type;

cursor c_orderitem is select ISBN, quantity from orderitem where order_id=v_orderid;

v_ISBN orderitem.ISBN%type;

课程:Oracle 同组者:实验日期:2017.5.16 v_quantity orderitem.quantity%type;

v_retail books.retail%type;

v_sumnum number(6,2):=0;

begin

open c_orderid;

LOOP

fetch c_orderid into v_orderid;

exit when c_orderid%NOTFOUND;

for v_orderitem in c_orderitem LOOP

if v_orderitem.quantity >10 then

select retail into v_retail from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('1----'||v_retail||v_orderitem.ISBN);

elsif v_orderitem.quantity<=10 then

select retail into v_retail from books where ISBN = v_orderitem.ISBN;

DBMS_OUTPUT.PUT_LINE('2----'||v_retail||v_orderitem.ISBN);

else

DBMS_OUTPUT.PUT_LINE('number of book is error!');

end if;

v_sumnum:= v_sumnum+v_orderitem.quantity*v_retail;

DBMS_OUTPUT.PUT_LINE('3*****'||v_sumnum);

end LOOP;

end LOOP;

close c_orderid;

return v_sumnum;

end get_sumnum;

/

set serveroutput on

declare

v_totalMoney BOOKS.cost%type;

v_customer number;

begin

v_customer :=&x;

v_totalMoney:=get_sumnum(v_customer);

dbms_output.put_line(v_customer||'的数量是'||v_totalMoney);

end;

/

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

c语言实验报告4 循环结构程序设计

《C程序设计》课程实验报告 学院:班级:姓名:学号: 实验设备:计算机1台实验日期:2011年3月1日 实验项目名称循环结构程序设计 实验目的 掌握使用三种循环语句实现循环结构的方法。 实验要求:能用while~ do~while for 三种循环语句实现循环结构,编写简单的程序,掌握这三种循环语句。 实验内容(包括步骤):1.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半另一个,以后每天早晨都吃剩下的一半另一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。 要求:分别用三种语句编写程序。 2.编写程序验证下列结论:任何一个自然数n的立方都等于n个连续奇数之和。例如:13=1;23=3+5;33=7+9+11;43=13+15+17+19。 要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0时止。 3.编写程序,求1-3+5-7+…-99+101的值。 4.编写程序,求e的值。e ≈ 1+1/1!+1/2!+1/3!+1/4!+…+1/n! (1)用for循环,计算前50项。 (2)用while循环,要求直至最后一项的值小于10-6。 5.编写程序,输出从公元1600年至2000年所有闰年的年号。每输出5个年号换一行。判断公元年是否为闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。 (2)公元年数如能被400整除也是闰年。 6.编写程序,打印以下图形: * *** ***** ******* ***** *** * 7.输入一行字符,统计输入的字符中字母‘a’出现的次数(包括大小写)。 8.我国1991年有11.6亿人口,要求根据人口平均年增长率,计算从1991年算起经过多少年后我国的人口增加到15亿。 9.有一个四位数F=BBAA,前二位数相同,后二位数相同,此数又是某个自然数T的平方,求此数。 10.分解一个正整数的所有质因数 调试与结果测试:部分程序出现错误经过调整后调试正常,达到题目要求的结果,运行正常。

实验6PLSQL程序的设计说明

实验6 PL/SQL程序设计 1 实验目的 (1)掌握PL/SQL程序开发方法。 (2)掌握存储过程、函数、触发器、包的创建于调用。 2 实验要求 (1)根据图书销售系统业务要求创建特定的存储过程、函数、触发器。 (2)根据图书销售系统业务要求将图书销售系统相关的函数、存储过程封装到包里。 3 实验步骤 以bs用户登录BOOKSALES数据库,利用PL/SQL程序编写下列功能模块。 (1)创建一个存储过程,输出不同类型图书的数量、平均价格。 SQL> create or replace procedure proc_category_static 2 as

3 --定义游标,获取当前有哪些图书种类 4 cursor c_all_category is select distinct category from books; 5 --图书的平均价格 6 v_avg_cost number; 7 begin 8 --保存图书种类 9 for v_each_category in c_all_category LOOP 10 select avg(retail) into v_avg_cost from books where category=v_each_category.category group by category; 11 dbms_output.put_line('种类为:'||v_each_category.category||',平均价格为:'|| v_avg_cost); 12 END LOOP; 13 end proc_category_static; 14 / (2)创建一个存储过程,以客户号为参数,输出该客户订购的所有图书的名称与数量。

C语言程序设计实验实验指导书及答案

实验一熟悉C程序运行环境 班级学号姓名成绩 一、实验目的 1. 熟悉C语言Visual C++调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include <> int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include <> int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果:

项目3. 调试并运行下面程序,并写出运行结果: #include <> int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果:

实验四分支和循环程序设计实验(精)

实验四分支和循环程序设计实验 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言分支程序基本指令的使用方法; 3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法; 4.了解汇编语言循环程序设计的基本流程; 5.熟悉汇编语言循环基本指令的使用方法; 6.掌握利用汇编语言的循环指令完成循环程序设计方法。 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。 1.无条件转移指令 JMP 无条件转移指令 JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。 2.条件转移指令 JXX 条件转移指令可分为三大类: 1).简单条件转移指令指令。根据单个标志位的状态判断转移条件。标志位指令转移条件意义 CF JC CF=1 有进位/借位 JNC CF=0 无进位/借位 ZF JE/JZ ZF=1 相等/等于 0 JNE/JNZ ZF=0 不相等/不等于 0 SF JS SF=1 是负数 JNS SF=0 是正数 OF JO OF=1 有溢出 JNO OF=0 无溢出 PF

JP/JPE PF=1 有偶数个 1 JNP/JPO PF=0 有奇数个 1 2).无符号数条件转移指令。 假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是 A-B,其转移指令如下: 指令转移条件意义 JA/JNBE CF=0 AND ZF=0 A>B JAE/JNB CF=0 OR ZF=1 A>=B JB/JNAE CF=1 AND ZF=0 AB JGE/JNL SF=OF OR ZF=1 A>=B JL/JNGE SF OF AND ZF=0 A

实验3 子程序设计

实验3子程序设计实验 [实验目的] 1.掌握利用堆栈传递参数的子程序调用方法。 2.掌握子程序递归调用方法。 3.过程调用伪指令: PROC,ENDP,NEAR和FAR。 4.8088指令: CALL,RET,RET n。 5.利用RET指令退出EXE文件的方法。 [实验重点和难点] 1.利用堆栈传递参数的子程序调用方法; [实验课时] 2学时 [实验仪器] 联想启天2400微型计算机。 [实验原理] 1.参考教材的汇编语言程序设计 2. [实验内容与步骤] 1.利用堆栈传递参数的子程序调用(求累加和) 程序内容: STACK SEGMENT STACK DB 256 DUP(0) STACK ENDS DATA SEGMENT ARY1 DB 1,2,3,4,5,6,7,8,9,10 COUNT1 EQU $-ARY1 SUM1 DW ? ARY2 DB 10,11,12,13,14,15,16,17,18 COUNT2 EQU $-ARY2 SUM2 DW ? DATA ENDS MAIN SEGMENT ASSUME CS:MAIN,DS:DATA,SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,COUNT1 PUSH AX LEA AX,ARY1 PUSH AX CALL FAR PTR SUM MOV AX,COUNT2 PUSH AX LEA AX,ARY2 PUSH AX CALL FAR PTR SUM RET START ENDP MAIN ENDS PROCE SEGMENT ASSUME CS: PROCE SUM PROC FAR MOV BP,SP MOV CX,[BP+6] MOV BX,[BP+4] XOR AX,AX ADN: ADD AL,[BX] ADC AH,0 INC BX LOOP ADN MOV [BX],AX RET 4 SUM ENDP PROCE ENDS END START 操作步骤: (1)输入,汇编并将此程序连接成EXE文件。

实验五PLSQL高级编程

实验4 PL/SQL高级编程 开发语言及实现平台或实验环境: Oracle 10g 实践目的 (1) 掌握存储过程、存储函数、包、触发器高级数据库对象的基本作用。 (2) 掌握存储过程、存储函数、包、触发器的建立、修改、查看、删除操作。实验要求 (1) 记录执行命令和操作过程中遇到的问题及解决方法,注意从原理上解释原因。 (2) 掌握存储过程、存储函数、包、触发器的命令。 实验内容 1.创建存储过程 (1) 将下列的未命名的PL/SQL,转换成存储过程,存储过程名自己设定,注意比较未命名的PL/SQL 与命名的PL/SQL 的差别,如没有where current of 是什么情况。 declare cursor emp_cursor is select * from emp where deptno=10 for update; begin for emp_record in emp_cursor loop dbms_output.put_line(emp_record.sal); update emp set sal=sal*1.1 where current of emp_cursor; end loop; end; / (2)(3)任选一个 (2) 创建存储过程“dept_count_pro”,通过传入参数传入部门号deptno(如10),显示员工表“emp”中不同部门的员工人数,并执行该存储过程。 (3) 创建存储过程“num_pro”,通过传入参数传入3个数,完成3 个数的从小到大排序,通过 3 个传出参数保存排序后的 3 个数,并执行该存储过程,显示排序结果。 2.查看存储过程 (1) 利用SQL*Plus 或iSQL*Plus 从user_source 数据字典中查看存储过程。 3.删除存储过程 (1) 利用SQL*Plus或iSQL*Plus删除某个存储过程。 4.创建函数 (1) 创建存储函数“emp_fun”,通过传入参数传入员工的编号,根据传入的员工编号,检查该员工是否存在。如果存在,则返回员工的姓名,否则返回“此员工不存在“,并执行该存储函数。 (2) 创建存储函数“dept_count_fun”,利用传入参数传入部门号(如10),返回员工表“emp”中不同部门的员工人数,并执行该存储函数,注意比较与存储过程“dept_count_pro”的差别。 5.查看存储函数 (1) 从user_source 数据字典中查看存储函数。

高级语言程序设计实验C

陕西理工大学 学号: 姓名:

目录 实验一:C开发环境与顺序结构程序设计 (1) 1.实验目的: (1) 2.实验环境: (1) 3.实验步骤: (1) 41 58 9 1.9 2.9 3.9 4.17 18 1.18 2.18 3.18 4.19 19 1.20 2.实验内容: (20) 3.实验总结 (23)

实验一:C开发环境与顺序结构程序设计 1 Array 2 3 4.实验内容: 4.1 输入并运行下列程序,查看程序运行的结果。 #include

void main() { printf(“* * * * * * * * * *\n”); printf(“Programing in c A Labrtry Maual\n”); printf(“* * * *\n”); printf(“*\n”); } 4.2查看程序运行的结果 #include void main() { int i,j,m,n; i=8; j=10; m=++i; n=j--; printf(“%d,%d,%d,%d\n”,i,j,m,n); } 4.3找出下列程序中的错误,改正后写出程序运行结果. #include void main() { Int x,y=z=5,aver; x=7; AVER=(x+y+z)/3 printf(“AVER=%d\n”,aver); }

4.4输入参考程序。在下划线处分别填入不同的变量定义、表达式、输出格式控制符号。 #include void main() { int a,b,x; //数据类型定义 a=5; b=10; x=a+10; //表达式 printf(“%d”,x); //格式控制符 } 该程序的执行结果为:15 当数据类型说明符为int 时,对应的格式控制符为%d ; 当数据类型说明符为long 时,对应的格式控制符为%l ;; 当数据类型说明符为float 时,对应的格式控制符为%f ; 当数据类型说明符为double 时,对应的格式控制符为%lf ; 当数据类型说明符为char 时,对应的格式控制符为%c ; 仅当表达式更改为1/2*a*b 时,程序执行结果为0 ; 仅当表达式更改为0.5*a*b 时,程序执行结果为25 (2)求从键盘上输入的两个整数之和,完成程序并将结果输出。 源程序: #include void main( ) { int x,y,z; scanf("%d%d",&x,&y);

循环结构程序设计实验报告

嘉应学院计算机学院 实验报告 课程名称程序设计基础实验名称实验地点 指导老师实验时间提交时间 班级姓名座号 一、实验目的和要求 (1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 二、实验环境和方法 实验方法: (一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错, 及时改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”, 根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果 是否正确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容:编译以下题目的程序并调试运行。 (1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。 编写程序如下: #include int main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:\n"); while((c=getchar())!='\n')

C语言循环结构程序设计实验报告

甘肃政法学院 本科生实验报告 ( 五) 姓名:赵明翔 学院:公安技术学院 专业:安全防范工程 班级: 2015级安全防范工程班 实验课程名称:程序设计 实验日期:2016年月日 开课时间:2015学年第二学期

(2)输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字李方和等于该数本身。例如,153是水仙花数,因为153=12+53+33程序如下: #include int main() { int i,j,k,n; printf("paicissus numbers are"); for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d",n); } printf("\n"); return 0; } 运行结果: (3)猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又

多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下了1个桃子了。求第一天共摘了多少桃子。 程序如下: #include int main() { int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0; } 运行结果: (4)①用牛顿迭代法求方程0634223=-+-x x x 在1.5附近的根. #include #include int main() {double x1,x0,f,f1; x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1;

宏指令及子程序设计实验

实验五:宏指令及子程序设计实验 院系名称:电子工程学院 学生姓名:李倩(33) 专业名称:电子信息工程 班级:电子0808

宏指令及子程序设计实验 5.5.1 实验目的 1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。 2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。 3、了解宏指令与子程序的异同以及各自的适用场合。 5.5.2 实验预习要求 1、复习宏指令的定义与调用方法。 2、复习过子程序的定义与调用方法。 3、根据“2.5.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 4、从“2.5.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 5.5.3 实验内容 从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在 屏幕上显示出来。 要求: ①在屏幕上显示字符串提示信息的 功能由宏指令DSTRING实现; ②将键盘输入的十进制数转换成二 进制数由子程序DTOB实现; ③在N个无符号字节型二进制数中 找出最大数的功能由子程序FMAX实现; ④将一个无符号字节型二进制数转 换为十进制数并在屏幕上显示的功能由子 程序BTOAD实现。 程序运行结果如右图所示。 1、编程指导 (1)显示提示信息的宏指令DSTRING的编写 宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。 下面给出实现提示信息显示的宏指令的定义: DSTRING MACRO STRING PUSH DX PUSH AX MOV DX,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM 请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存器赋值指令之

PLSQL程序设计语言

PL/SQL:是过程化/sql的缩写,是Oracle在sql的基础之上扩展来的一种数据库编程语言,在兼容sql的基础之上,扩充了许多新功能,是面向过程化语言和sql的结合。 PL/SQL特点: ·除了基本的sql之外,包含了控制结构和异常处理,从而具有了sql语句的简洁性和过程性。 ·每个sql语句的请求处理,都会引起一次网络的传输,用户量一旦大量增加,可能会导致网络堵塞,而PLSQL是将整个语句块发送给数据库服务器,减少了网络通信的数量,提高了应用程序的运行效率。 ·PLSQL语句是存储在Oracle服务器上,可以被其他的PLSQL程序或者sql调用。具有很高的重用性。 ·PLSQL程序语言是一种块结构语言,PLSQL的基本代为是块。 PLSQL程序块有两种: ·匿名块:没有名称,只用一次,不能存储在数据库中 ·命名块:指的是保存在数据库中的PLSQL程序块,比如我们的存储过程、函数和触发器 块的基本结构: ·匿名块的基本结果

declare:声明部分,用来声明程序中的变量、类型、游标等等。 begin:是PLSQL程序的主体部分,一般使用sql语句或者过程化语言来处理特定的操作。 exception:异常的处理部分,用来检查和处理异常或者错误。 块中的每一条语句都需要以分号结束,一条sql可以分成多行来写,但是最终只需要一个分号。 注释:在PLSQL中,注释分为两种,一种单行注释“--”,两外就是多行注释”/* 需要注释的内容*/” 范例:向表中插入一笔数据并且提交。

声明常量和变量 ·声明常量:常量名constant 类型(长度) := 值 constant:表示的就是固定不变的,就是我们说的常量。声明之后不允许改变。 ·声明变量:变量名类型(长度) (not null)(default | := ) 声明变量和常量中一些规则: ·一行只能声明一个变量或者常量 ·变量时存储值的内存区域,用来处理程序中的值,变量名称不能重复,也不能使用系统关键字。 ·变量名称以字母开头(不区分大小写),可以由字母,数字,下划线组成。 ·变量名称的长度不能超过30个字符

C语言程序设计实验报告(完整版)

报告编号:YT-FS-4244-21 C语言程序设计实验报告 (完整版) After Completing The T ask According To The Original Plan, A Report Will Be Formed T o Reflect The Basic Situation Encountered, Reveal The Existing Problems And Put Forward Future Ideas. 互惠互利共同繁荣 Mutual Benefit And Common Prosperity

C语言程序设计实验报告(完整版) 备注:该报告书文本主要按照原定计划完成任务后形成报告,并反映遇到的基本情况、实际取得的成功和过程中取得的经验教训、揭露存在的问题以及提出今后设想。文档可根据实际情况进行修改和使用。 实验名称计算出1000以内10个素数之和 实验目的 1、熟练掌握if、if…else、if…else if语句和 witch语句格式及使用方法,掌握if语句中的嵌套关 系和匹配原则,利用if语句和switch语句实现分支 选择结构。 2、熟练掌握while语句、do…while语句和for 语句格式及使用方法,掌握三种循环控制语句的循环 过程以及循环结构的嵌套,利用循环语句实现循环结 构。 3、掌握简单、常用的算法,并在编程过程中体验 各种算法的编程技巧。进一步学习调试程序,掌握语 法错误和逻辑错误的检查方法。

实验内容 计算并输出1000以内的10个素数以及它们的和。 要求: 在程序内部加必要的注释。 由于偶数不是素数,可以不考虑对偶数的处理。 虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。 输出形式为:素数1+素数2+素数3+…+素数10=总和值。 算法描述流程图 Main函数: 判断素数: 源程序 #include #include int sushu(int n)/* 判断素数的函数 */ { int t,i;

循环程序设计实验

循环程序设计实验 实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 实验预习要求 复习比较指令、条件转移指令和循环指令。 复习循环程序的结构、循环控制方法等知识。 读懂“实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。 根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 从“实验习题”中任选一道题目,编写源程序,以便上机调试。 实验内容 计算1+2+……n=,其中n通过键盘输入。要求在屏幕上提供如下信息: Please input a number(1627): ;出现此信息后通过键盘输入一个小于628的无符号整数 1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。编程指导 键盘输入的十进制数如 368在计算机中是以 33H,36H,38H形式存 放的,如何将它们转换 为一个二进制数0B,以 便对累加循环的循环次 数进行控制是本程序首 先要解决的问题。将键 盘输入的十进制数转换为二进制数的程序清单如下: DATA SEGMENT INF1 DB "Please input a number (0-65535):$" IBUF DB 7,0,6 DUP() DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV A X, DATA MOV DS, AX MOV DX, OFFSET INF1 MOV AH, 09H INT 21H MOV DX, OFFSET IBUF ;键入一个十进制数(<65535) MOV AH, 0AH INT 21H MOV CL, IBUF+1 ;十进制数的位数送CX MOV CH, 0 MOV SI, OFFSET IBUF+2 ;指向输入的第一个字符(最高位)

oracle PLSQL 程序设计

PL/SQL 程序设计 一、实验目的 1.掌握PL/SQL的编写方法; 2.掌握PL/SQL的基本语法、控制结构、游标、异常处理和存储 子程序。 二、实验内容和要求 1、教程第363页,实训题第1到8小题(写出所有命令); 三、实验步骤 (1) DECLARE CURSOR c_emp IS select * from emp; BEGIN FOR v_emp IN c_emp LOOP DBMS_OUTPUT.PUT_LINE(v_emp.ename||' '||v_emp.empno||' '||v_emp.deptno||' '||v_emp.sal); END LOOP; END;

(2) DECLARE v_emp emp%ROWTYPE; BEGIN SELECT * INTO v_emp FROM EMP WHERE ename='SMITH'; DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.sal||' '||v_emp.deptno); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO) VALUES(2007,'SMITH',1500,10); WHEN TOO_MANY_ROWS THEN FOR v IN (SELECT * FROM EMP WHERE ENAME='SMITH') LOOP DBMS_OUTPUT.PUT_LINE(v.empno||' '||v.sal||' '||v.deptno); END LOOP; END;

C语言程序设计实验手册

实验手册使用及要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。现将实验报告撰写的有关内容说明如下: 1、实验前按实验要求手写程序或程序填空,并走查代码,有疑问处标记,上机时在C语言集成开发环境下输入并调试手写程序,分析运行结果。 2、实验结束后填写通过后的源程序和对实验的总结。 3、通过后的源程序可以手写也可以打印粘贴。 实验项目一览表

实验一熟悉C语言编程环境 实验目的: 1.熟悉C语言编程环境(VC++、Cfree、Turboc2.0等) 2.了解C程序的基本框架 3.理解程序调试的思想,能找出并改正C程序中的错误 实验内容: 1.1 建立自己的文件夹:在磁盘上建立一个文件夹,用于存放自己的C程序 1.2 编程示例 在屏幕上显示一个短句“Programming in C is fun!”(教师示例,学生模仿并创新,如输出汉字、特除字符等。学会使用编程环境VC++,启动、编辑、编译、运行、保存、关闭、打开)1.3 编程 在屏幕上显示如下网格。 +---+---+ | | | | | | +---+---+ 1.4 调试示例 改正下列程序中的错误,在屏幕上显示“Welcome to You !”。(掌握找错、改错的方法) 源程序: # include int mian(void) { printf(Welcome to You! \n") getchar(); return 0; } 注:需要修改的语句直接在程序上标注并修改 实验总结:

循环程序设计实验

2.4 循环程序设计实验 2.4.1 实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 2.4.2 实验预习要求 1、复习比较指令、条件转移指令和循环指令。 2、复习循环程序的结构、循环控制方法等知识。 3、读懂“2.4.3 实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。 4、根据“2.4.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 5、从“2.4.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.4.3 实验内容 计算1+2+……n=?,其中n通过键盘输入。要求在屏幕上提供如下信息: Please input a number(1 627): ;出现此信息后通过键盘输入一个小于628的无符号整数 1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和 程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示 的范围)。 1、编程指导 (1)键盘输入的十进 制数如368在计 算机中是以 33H,36H,38H 形式存放的,如 何将它们转换为 一个二进制数 101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。将键盘输入的十进制数转换为二进制数的程序清单如下: DA TA SEGMENT INF1 DB "Please input a number (0-65535):$" IBUF DB 7,0,6 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET INF1 MOV AH, 09H INT 21H MOV DX, OFFSET IBUF ;键入一个十进制数(<65535) MOV AH, 0AH INT 21H MOV CL, IBUF+1 ;十进制数的位数送CX MOV CH, 0

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

java程序设计语言实验

实验名称实验四字符串与位操作 一.实验目的 1、了解和掌握汇编语言中字符串操作; 2、了解和掌握汇编语言中位操作; 3、了解和掌握汇编语言中条件设置字节指令; 二.实验内容 1、请简述IA-32系列处理器提供字符串操作指令的原因。 2、请简述IA-32系列处理器新增条件设置字节指令的原因。 3、常用的串操作指令有哪几类?除此之外还有什么类型的串操作指令? 4、串操作指令能够操作哪几种尺寸的字符? 5、字符串操作指令的源操作数和目标操作数在哪里?编写一个C程序,由用户输入一个十进制 整数,统计其各位中7出现的次数,并输出统计结果。采用一个子程序进行统计。根据5.1.1说明的VC2010的编译配置选项,生成对应汇编语言形式的目标代码,观察分析主函数main 和子程序对应的目标代码。 6、字符串传送指令功能上相当于先后执行了字符串装入和字符串存储2条指令,请问两种方法 有什么区别? 7、请说明DF标志的作用以及改变DF标志的方法。(除了采用CLD和STD指令外,还有其他 方法吗?) 8、请举例说明重复前缀的用途。 9、请说明指令“LODSD”与如下程序片段的异同: MOV EAX,[ESI] ADD ESI, 4 10、条件设置指令和条件指令有何异同? 下列编程题,除了输入和输出操作之外,请采用嵌入汇编的形式实现: 11、请编写程序ex41实现如下功能:由用户从键盘输入一个字符串;然后,统计该字符串中各个 英文字母出现的个数;最后,输出这些统计结果。 12、请编写程序ex42实现如下功能:由用户从键盘输入两个字符串str1和str2;然后,确定str2 在str1中出现的起始位置(如果不出现,则起始位置是-1);最后,显示输出起始位置。 13、请编写程序ex43实现如下功能:由用户从键盘输入两个字符串str1和str2;然后,确定str1 中的首个没有在str2中出现的字符位置(如果都出现,则位置为-1);最后,显示输出位置。(12、13任选一题) 14、请充分运用字符串操作指令编写程序ex44实现如下功能:由用户从键盘输入一个字符串;然 后,过滤掉其中可能出现的标点符号;最后,显示输出过滤后的字符串。 15、请充分运用字符串操作指令和重复前缀编写程序ex45实现如下功能:由用户从键盘输入两个 字符串;然后,把两个字符串合并到一起;最后,显示输出合并后的字符串。请采用子程序实现两个字符串的合并。 16、请编写程序ex46实现如下功能:由用户从键盘分别输入一个字符ch和一个数值n;然后, 生成一个由字符ch构成的n个字符的字符串;最后,显示输出该字符串。请采用子程序实现生成 第1页,共2页 教务处制

微机原理与汇编语言_实验3_循环程序设计实验汇总

微机原理与汇编语言 实验报告 姓名x x x学号xxxxxx 专业班级计科x班 课程名称微机原理与汇编语言实验日期2014.10.22 实验名称循环程序设计实验成绩 一、实验目的 1、掌握循环程序的设计方法。 2、掌握比较指令、转移指令和循环指令的使用方法。 3、进一步掌握调试工具的使用方法。 二、实验内容 1、实验原理 (1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题 (2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数 2、实验步骤 (1)流程图 (2)实验源码 .model small .stack ;定义堆栈段 .data ;定义数据段 inf1 db "Please input a number(1-627):$" inf2 db 0ah, 0dh, "1+2+......+$" ibuf db 7, 0, 6 dup(0) obuf db 6 dup(0) .code start: mov ax, @data mov ds, ax mov dx, offset inf1 ;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中 mov ah, 09h int 21h mov dx, offset ibuf mov ah, 0Ah int 21h mov cl, ibuf+1 mov ch, 0 mov si, offset ibuf+2 mov ax, 0 loop1: mov dx, 10 mul dx and byte ptr [si], 0Fh add al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中 开始 结束 素、、 (CX)-1=0 累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和) BX送1(BX存放每次循环累加的数,每循环一次,BX值加1) ADD AX,BX INC BX 累加和(在AX中)转换为十进制数并 显示 Y N