实验5 子程序设计
实验5LL(1)语法分析程序的设计与实现(C语言)

实验五LL(1)文法识别程序设计之宇文皓月创作一、实验目的通过LL(1)文法识别程序的设计理解自顶向下的语法分析思想。
二、实验重难点FIRST集合、FOLLOW集合、SELECT集合元素的求解,预测分析表的构造。
三、实验内容与要求实验内容:1.阅读并理解实验案例中LL(1)文法判此外程序实现;2.参考实验案例,完成简单的LL(1)文法判别程序设计。
四、实验学时4课时五、实验设备与环境C语言编译环境六、实验案例1.实验要求参考教材93页预测分析方法,94页图5.11 预测分析程序框图,编写表达式文法的识别程序。
要求对输入的LL(1)文法字符串,程序能自动判断所给字符串是否为所给文法的句子,并能给出分析过程。
表达式文法为:E→E+T|TT→T*F|FF→i|(E)2.参考代码为了更好的理解代码,建议将图5.11做如下标注:/* 程序名称: LL(1)语法分析程序 *//* E->E+T|T *//* T->T*F|F *//* F->(E)|i *//*目的: 对输入LL(1)文法字符串,本程序能自动判断所给字符串是否为所给文法的句子,并能给出分析过程。
/********************************************//* 程序相关说明 *//* A=E' B=T' *//* 预测分析表中列号、行号 *//* 0=E 1=E' 2=T 3=T' 4=F *//* 0=i 1=+ 2=* 3=( 4=) 5=# *//************************************/#include"iostream"#include "stdio.h"#include "malloc.h"#include "conio.h"/*定义链表这种数据类型拜见:http://wenku.百度.com/link?url=_owQzf8PRZOt9H-5oXIReh4X0ClHo6zXtRdWrdSO5YBLpKlNvkCk0qWqvFFxjgO0KzueVwEQcv9aZtVKEEH8XWSQCeVTjXvy9lxLQ_mZXeS###*/struct Lchar{char char_ch;struct Lchar *next;}Lchar,*p,*h,*temp,*top,*base;/*p指向终结符线性链表的头结点,h指向动态建成的终结符线性链表节点,top和base分别指向非终结符堆栈的顶和底*/ char curchar; //存放当前待比较的字符:终结符char curtocmp; //存放当前栈顶的字符:非终结符int right;int table[5][6]={{1,0,0,1,0,0},{0,1,0,0,1,1},{1,0,0,1,0,0},{0,1,1,0,1,1},{1,0,0,1,0,0}};/*存放预测分析表,1暗示有发生式,0暗示无发生式。
北京理工大学汇编实验五实验报告概要

本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。
.段内调用与返回:调用子程序指令与子程序同在一个段内。
因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。
3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。
一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。
2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
操作系统实验5 进程调度模拟程序设计

一、实验内容进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)或者时间片轮转法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
等待I/O的时间以时间片为单位进行计算,可随机产生,也可事先指定。
每个进程的状态可以是就绪R(Ready)、运行R(Run)、等待(Wait)或完成F(Finish)四种状态之一。
就绪进程获得CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、等待进程以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
用C或C++二、实验目的与要求在采用多道程序设计的设计中的系统中,往往有若干个进程同时处于就绪状态。
当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度工作。
三、实验环境Visual+C++6.0四、实验步骤1、实验准备知识处理器调度总是选对首进程运行。
采用动态改变优先数的办法,进程每运行一次优先数就减“1”。
由于本次实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数—1要求运行时间—1来模拟进程的一次运行。
进程运行一次后,若要求运行时间≠0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间≠0,则把它的状态修改成“结束”,且结束队列。
《Java程序设计》上机实验报告 实验五 流、文件及基于文本的应用

信息科学与工程学院《Java程序设计》上机实验报告专业班级姓名学号主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)2.编写一个程序,能将一个源程序中的空行及注释去掉,并将处理后的内容写到目标文件中。
(源文件名称和目标文件名称均要求以命令行参数形式输入)import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class CopyFile {static String delComm(String s){if(s==null)return s;int pos=s.indexOf("//"); //去掉以//开始的注释if(pos<0)return s;return s.substring(0,pos);}public static void main(String args[]){String infname="CopyFile.java";String outfname="CopyFile.txt";if(args.length>=1)infname=args[0];if(args.length>=2)outfname=args[1];try{File fin=new File(infname);File fout=new File(outfname);BufferedReader in = new BufferedReader(new FileReader(fin));PrintWriter out = new PrintWriter(new FileWriter(fout));int cnt=0;String s = in.readLine(); //写字符串while(s != null){主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)cnt ++;s=delComm(s); //去掉以//开始的注释out.println(cnt+":\t"+s);//写出s=in.readLine(); //读入}in.close(); //关闭缓冲读入流及文件读入流的连接out.close();}catch (FileNotFoundException e1){System.out.println("File not found");}catch(IOException e2){e2.printStackTrace();}}}主要问题的出错现象:1)运行程序后,无对应的输出结果出现2)源程序编写过程中,出现方法和类的调用无法完成.出错原因:1)函数调用时候,相关函数输入变量错误2)方法名的书写不符合规范,使得方法变为变量.解决方法及效果:1) 编写和调用类的方法时,注意参数的类型和数量的对应.2)规范命名.常量用大写字母,变量用小写字母开始,类以大写字母开始.实验小结:1) 为每个类分配正确的职责.尽量保持类功能单一. 不要在一个类中做太多事.2) BufferedReader的方法:readLine():String ,当他的返回值是null时,就表示读取完毕了。
C++语言程序设计形考二实验五

上机实验5:数组应用程序设计一、实验内容有如下程序:#include <iostream>using namespace std;int main(){__________________ //定义具有6个元素的整形数组dint data,i=0; // data用于暂存每一个输入数据,i记录已插入数据的个数。
cout<<"请输入6个整数:";do{ //输入并处理6个数据cin>>data;int j=i; //j是候选的插入位置while(j>0){ //若j==0,它就是第一个数据的插入位置,无需进入循环。
if(data>=d[j-1]) __________; //若找到插入位置,退出循环。
d[j]=d[j-1]; //否则数据后移一个位置j--;}d[j]=data; //数据插入到位置j处i++; //i记录已插入数据的个数}while(________); //若不足6个数据,继续输入。
for(_______________________) cout<<d[i]<<' ';//显示数组中的6个数据cout<<endl;return 0;}此程序输入6个整数保存到一维数组d 中,使得输入的数据在数组中始终按从小到大的顺序排列,最后顺序输出数组中的数据。
例如,若输入是5 7 4 29 3,程序的输出是:2 3 4 5 7 9。
二、实验要求读懂程序,补充程序中下划线处缺失的部分,上机测试,直至产生正确的输出结果。
三、实验结果截图(请将实际上机运行的结果截图并上传)。
C语言实验五最简单的C语言程序设计

C语⾔实验五最简单的C语⾔程序设计实验5:最简单的C语⾔程序设计⼀、实验⽬的:(1)掌握C语⾔中使⽤最多的⼀种语句——赋值语句的使⽤⽅法。
(2)掌握各种类型数据的输⼊输出的⽅法,能正确使⽤各种格式转换符。
(3)进⼀步掌握编写程序和调试程序的⽅法。
⼆、实验内容和步骤:1、通过下⾯的程序掌握各种格式转换符的正确使⽤⽅法。
(1)输⼊以下程序:/* Note:Your choice is C IDE */# includeint main( ){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61,b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3157.890121;g=0.123456789;m=50000;n=-60000;p=32768;q=40000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d\np=%u,q=%u\n",f,g,m,n,p,q);显⽰结果:(2)运⾏此程序并分析结果。
(3)在此基础上,将程序第10~14⾏改为c1=a,c2=b;f=3157.890121;g=0.123456789;d=f;e=g;运⾏程序,分析结果。
/* Note:Your choice is C IDE */#include"stdio.h"int main(){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61;b=62;c1=a;c2=b;f=3157.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q);}显⽰结果:(4)⽤sizeof运算符分别检测程序中各类型的数据占多少字节。
实验五 循环结构程序设计

//③
}
}
(3)下列程序的功能为:从键盘上输入123,输出结果是54656。请纠正程序中存在错误,使程序实现其功能。
#include<stdio.h>
main()
{intc;//①
while(c=getchar() !='\n')//②
{ switch(c-1)
{ case '0':
“辗转相除法”求两个正整数的最大公约数的算法提示如下:
①将两数中大的那个数放在m中,小的放在n中。
②求出m被n除后的余数。
③若余数为0则执行步骤⑦;否则执行步骤④。
④把除数作为新的被除数;把余数作为新的除数。
⑤求出新的余数。
⑥重复步骤③到⑤。
⑦输出n,n即为最大公约数。
#include <stdio.h>
nY++;
if(nY > 3) break;
}
printf(“x = %d\n”,nX);
if(nY == 4) continue;
nX--;
}while(!nX);
}
运行结果:
(7)三重循环的使用。
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码如下:
printf("%d %d %d % d\n",a,b,c,d );
}
题目
⑴输入某课程的成绩(学生人数未知,以负数作为输入结束,大于100视为无效成绩),求课程成绩的平均分。
实验设计方案范文(5篇)

实验设计方案范文(5篇)实验设计方案 1一、实验原理(1)鉴定实验设计的理念:某些化学试剂 + 生物组织中有关有机化合产生特定的颜色反应。
(2)具体原理:①可溶性还原糖+ 斐林试剂→砖红色沉淀。
②脂肪小颗粒 + 苏丹Ⅲ染液→橘黄色小颗粒。
③蛋白质 + 双缩脲试剂→紫色反应。
二、目标要求初步掌握鉴定生物组织中可溶性还原糖、脂肪、蛋白质的基本方法。
三、重点、难点1.重点①初步掌握鉴定生物组织中可溶性还原糖、脂肪、蛋白质的基本方法。
②通过实验的操作和设计培养学生的动手能力,掌握探索实验设计技巧,从而培养创新思维能力。
2.难点根据此实验方法、原理,设计实验来鉴定常见食物的成分。
四、实验材料1.可溶性还原糖的鉴定实验:选择含糖量较高、颜色为白色或近白色的植物组织,以苹果、梨为最好。
2.脂肪的鉴定实验:选择富含脂肪的种子,以花生种子为最好(实验前浸泡3h~4h)。
3.蛋白质的鉴定实验:可用浸泡1d~2d的黄豆种子(或用豆浆、或用鸡蛋蛋白)。
五、仪器、试剂1.仪器:剪刀,解剖刀,双面刀片,试管,试管架,试管夹,大小烧杯,小量筒,滴管,玻璃漏斗,水浴锅,研钵,石英砂,纱布,载玻片,盖玻片,毛笔,吸水纸,显微镜。
2.试剂:①斐林试剂(0.1g/L的NaOH溶液+ 0.05g/mL的CuSO4溶液);②苏丹Ⅲ染液;③双缩脲试剂;④ 体积分数为50%的酒精溶液;⑤蒸馏水。
六、方法步骤1.制备试剂。
2.可溶性还原糖的鉴定、方法、步骤。
3.脂肪的鉴定、方法、步骤。
4.蛋白质的鉴定、方法、步骤。
七、实验过程新课引入:我们在化学中学习过物质的鉴定,其原理是被鉴定的物质与所用的化学试剂要么发生颜色反应,要么产生沉淀,我们生物学上也采用此原理,在生物学中物质鉴定的理念是:某些化学试剂能够使生物组织中的有关有机化合物产生特定的颜色反应。
新课教学:(具体原理)①可溶性还原糖+ 斐林试剂→砖红色沉淀。
(水浴加热)②脂肪小颗粒 + 苏丹Ⅲ染液→橘黄色小颗粒。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五子程序结构设计
一、实验目的
1、加深对子程序的理解,掌握子程序的结构。
2、掌握子程序的设计、编写及调试方法。
二、实验内容
1、已知在内存数据段中GRADE开始单元连续存放着10个学生的成绩,试
采用子程序结构编程实现以下功能:
(1)找到最高成绩,将其偏移地址存放在内存单元MAX中。
(2)统计不及格的人数,存放在内存单元COUNT中。
(3)计算平均成绩(只取整数部分)。
(4)在屏幕上显示平均成绩。
要求:将以上功能分别写成子程序,数据区定义如下
DSEG SEGMENT
GRADE DB 76,68,54,80,45,92,63,58,94,85
MAX DW ?
COUNT DB ?
DSEG ENDS
答:源程序:
DATAS SEGMENT
GRADE DB 76,68,54,80,45,92,63,58,94,85
MAX DW?
COUNT DB?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
MAIN PROC FAR
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,datas
MOV DS,AX
CALL MAXGRADE
CALL BUJIGE
CALL AVGRADE
RET
MAIN ENDP
MAXGRADE PROC FAR
push ax
push cx
push si
mov cx,10
mov ax,0
mov si,ax
start_loop:
mov ax,word ptr grade[si]
cmp ax,word ptr grade[si+1] jge big
mov ax,word ptr grade[si+1] big: inc si
loop start_loop
mov max,ax
pop si
pop cx
pop ax
ret
MAXGRADE ENDP
BUJIGE PROC FAR
PUSH SI
PUSH CX
PUSH AX
MOV AX,0
MOV COUNT,0
MOV CX,10
LOOP_START2:
MOV AX,WORD PTR GRADE[SI]
CMP AX,60
JG SMALL2
INC COUNT
SMALL2:
INC SI
LOOP LOOP_START2
POP AX
POP CX
POP SI
RET
BUJIGE ENDP
AVGRADE PROC FAR
push ds
sub ax,ax
push ax
mov ax,DATAS
mov ds,ax
mov cx,10
mov bx,0
mov dx,0
avg_grade_1:
mov al,grade[bx] cbw
add dx,ax
inc bx
loop avg_grade_1
mov ax,dx
mov bl,10
div bl
sub ah,ah
div bl
push ax
add al,30h
mov dl,al
mov ah,02
int 21h
pop ax
add ah,30h
mov dl,ah
mov ah,02
int 21h
mov ah,4ch
int 21h
ret
AVGRADE ENDP CODES ENDS
END
运行结果:
2、编写程序实现十进制数的加减运算。
数据段可照如下设置(也可自己定义格式):DA TA SEGMENT
mes1 db 'please input the first operand:$' ;请输入第一个数
mes2 db 'please input the second operand:$' ;请输入第二个数
mes3 db 'please input the operator:$' ;请输入操作符
mes4 db 'output the Calculated Results:$' ;输出计算结果
DA TA ENDS
下面的结果截图仅供参考:(以输入任意非十进制字符作为输入结束)
(做减法若结果为负数要输出负号)
答:源程序:
datas segment
x1 dw 0
y1 dw 0
z1 dw 0
mess1 db' please input the first operand:$ ' mess2 db' please input the second operand:$ ' mess3 db' pleade input the operaor:$ '
mess4 db' output the Calculated Result:$ ' datas ends
codes segment
assume cs:codes,ds:datas
main proc far
push ds
sub ax,ax
push ax
START:
MOV AX,DATAS
MOV DS,AX
call input
call crlf
call input2
call crlf
call jiajian
call crlf
call jieguo
ret
main endp
multily macro mess
local newchar,exit1
lea dx,mess
mov ah,09
int 21h
newchar:
mov ah,1
int 21h
mov dl,al
sub al,30
jl exit1
cmp al,9d
jg exit1
cbw
xchg ax,bx
add bx,ax
jmp newchar
exit1:
ret
endm
input proc near
multily mess1
mov x1,bx
ret
input endp
input2 proc far
multily mess2
mov y1,bx
ret
input2 endp
defmac macro fuhao,operator fuhao macro x,y,z
push ax
mov ax,x
operator ax,y
mov z,ax
pop ax
endm
endm
jia proc near
defmac addition,add
ret
jia endp
jian proc near
defmac subtract,sub
ret
jian endp
jiajian proc near
lea dx,mess3
mov ah,09
int 21h
mov ah,1
int 21h
mov ax,bx
cmp al,2bh
je add1
cmp al,2dh
je sub1
jmp next
add1:
call jia
addition x1,y1,z1 mov bx,z1
jmp next
sub1:
call jian
subtract x1,y1,z1 mov bx,z1
mov ax,bx
int 21h
next:
ret
jiajian endp jieguo proc near
lea dx,mess4
mov ah,09
int 21h
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl print
add al,7h
print:
mov dl,al
mov ah,2
int 21h
ret
jieguo endp
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,02h
int 21h
ret
crlf endp
mov ah,4ch
int 21h
codes ends
end main
运行结果:
三、实验报告要求:
1、画出程序框图说明程序的基本结构,写出各个模块说明。
2、写出调试过程,并分析结果,说明程序存在的问题。
3、说明子程序结构的使用场合。