文档视界 最新最全的文档下载
当前位置:文档视界 › 数据结构算术表达式求值实验报告

数据结构算术表达式求值实验报告

数据结构算术表达式求值实验报告
数据结构算术表达式求值实验报告

软件技术基础实验报告

实验名称:表达式计算器

系别:通信工程

年级:

班级:

学生学号:

学生姓名:

《数据结构》课程设计报告

题目简易计算表达式的演示

【题目要求】

要求:实现基本表达式计算的功能

输入:数学表达式,表达式由整数和“+”、“-”、“×”、“/”、“(”、“)”组成输出:表达式的值

基本操作:键入表达式,开始计算,计算过程和结果记录在文档中

难点:括号的处理、乘除的优先级高于加减

1.前言

在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。

算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/、=,用#表示结束。

算法输出:表达式运算结果。

算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。

2.概要设计

2.1 数据结构设计

任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top 指示栈顶元素在顺序栈中的位置,base 为栈底指针,在顺序栈中,它始终指向栈底,即top=base 可作为栈空的标记,每当插入新的栈顶元素时,指针top 增1,删除栈顶元素时,指针top 减1。

2.2 算法设计

为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR ,用以寄存运算符,另一个称做OPND ,用以寄存操作数或运算结果。

1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;

2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。

2.3 ADT 描述 ADT Stack{ 数据对象:D={

i

a |i a

∈ElemSet,i=1,2,…,n, n ≧0}

数据对象:R1={<

1

,-i i a a >|

1-i a ,D a i ∈,i=2,…,n}

约定n a端为栈顶,i a端为栈底。

基本操作:

InitStack(&S)

操作结果:构造一个空栈S。

GetTop(S)

初始条件:栈S已存在。

操作结果:用P返回S的栈顶元素。

Push(&S,ch)

初始条件:栈S已存在。

操作结果:插入元素ch为新的栈顶元素。

Pop(&S)

初始条件:栈S已存在。

操作结果:删除S的栈顶元素。

In(ch)

操作结果:判断字符是否是运算符,运算符即返回1。

Precede(c1, c2)

初始条件:c1,c2为运算符。

操作结果:判断运算符优先权,返回优先权高的。

Operate(a,op,b)

初始条件:a,b为整数,op为运算符。

操作结果:a与b进行运算,op为运算符,返回其值。

num(n)

操作结果:返回操作数的长度。

EvalExpr()

初始条件:输入表达式合法。

操作结果:返回表达式的最终结果。

}ADT Stack

2.4 功能模块分析

1.栈的基本功能。

InitStack(Stack *s) 和InitStack2(Stack2 *s)分别构造运算符栈与构造操作数栈,

Push(Stack *s,char ch) 运算符栈插入ch为新的栈顶元素,

Push2(Stack2 *s,int ch) 操作数栈插入ch为新的栈顶元素,

Pop(Stack *s) 删除运算符栈s的栈顶元素,用p返回其值,

Pop2(Stack2 *s)删除操作数栈s的栈顶元素,用p返回其值,

GetTop(Stack s)用p返回运算符栈s的栈顶元素,

GetTop2(Stack2 s) 用p返回操作数栈s的栈顶元素。

2.其它功能分析。

(1)In(char ch) 判断字符是否是运算符功能,运算符即返回1,该功能只需简单的一条语句即可实现,return(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='#')。

(2) Precede(char c1,char c2) 判断运算符优先权功能,该函数判断运算符c1,c2的优先权,具体优先关系参照表1。

(3) Operate(int a,char op,int b)操作数用对应的运算符进行运算功能。运算结果直接返回。

(4) num(int n) 求操作数的长度功能,需要用itoa函数把int型转换成字符串型,strlen函数可求字符长度。

(5) EvalExpr()主要操作函数运算功能。分析详细见“3.详细设计…3.2”。

3.详细设计

3.1 数据存储结构设计

因为表达式是由操作符,运算符和界限符组成的。如果只用一个char类型栈,不能满足2位以上的整数,所以还需要定义一个int类型的栈用来寄存操作数。

/* 定义字符类型栈*/

struct stacklifei1 //数字栈的定义

{

double *base;

double *top;

}s1;/

struct stacklifei2 //运算符栈的定义

{

char *base;

char *top;

}s2;

3.2 计算功能的实现

void jisuan() // 该函数对数字栈的前两个栈顶

//元素与符号栈的栈顶元素完成一次运算操作{

double a,b;

b=*(s1.top-1);

s1.top--;

if(s1.top==s1.base)

{

error=1;

return ;

}

a=*(s1.top-1);

switch(*(s2.top-1))

{

case '+':a=a+b;break;

case '-':a=a-b;break;

case '*':a=a*b;break;

case '/':if(b==0){error=2;s2.top=s2.base;return ;}//除数不为0

else a=a/b;break;

default :error=1;

}

fprintf(file,"%lf %c %lf= %lf\n",*(s1.top-1),*(s2.top-1),b,a);

*(s1.top-1)=a; //将运算结果入栈

s2.top--;

return ;

}

3.3函数表达式求值功能的实现

void qiuzhi(char *cr)

该函数完成对表达式的处理

{

int i=0,k,h,flag,fuhao=0;

double sum,j;

s1.base=s1.top=shuzhi;

s2.base=s2.top=fuha;

*(s2.top)='#';

s2.top++;

while(s2.top!=s2.base)

{

sum=0;

flag=0;

k=10;j=1;h=1;

while(cr[i]>='0'&&cr[i]<='9'||cr[i]=='.')

//若当前的字符是数字,就将char型的数据转换为double型{

if(cr[i]=='.')

{

if(cr[i-1]<'0'||cr[i-1]>'9'||i==0||cr[i+1]<'0'||cr[i+1]>'9')

{error=1;break;}

else

{k=1;h=10;}

}

else

{

flag=1;j=j*h;

sum=sum*k+(cr[i]-48)/j;

}

i++;

}

3.4对函数表达式每个字符的操作

switch(cr[i])

{

case '-':if(cr[i-1]=='('||i==0){fuhao=1;i++;break;}

//判断是不是负号,若不是则进行与加号相同的操作

//当'-'出现在表达式第一位或是'('后第一位,则应将其判为负号case '+':

//加、减号的优先级只比'('和'='高,若栈顶元素为这两者之一

//就将其入栈,否则执行运算操作

if(*(s2.top-1)=='('||*(s2.top-1)=='#')

{

*(s2.top)=cr[i];

s2.top++;

i++;

}

else jisuan();break;

case '*':

case '/':

//乘、除号的优先级只比'*'、'/'和'^'低,若栈顶元素为这三者之一

//就执行运算操作,否则将其入栈

if(*(s2.top-1)=='*'||*(s2.top-1)=='/')jisuan();

else

{

*(s2.top)=cr[i];

s2.top++;

i++;

}break;

case '(': *(s2.top)=cr[i]; s2.top++;i++;break;

//未入栈时'('的优先级最高,所以它一定要入栈

//但一入栈其优先级就应降为最低

case ')':

//注意:由于'()'运算优先级最高故我直接进行运算,

//直到栈顶元素为'('后将'('出栈,故符号栈中一定没有')',

//这也是我进行以上优先级判断的前提

if(*(s2.top-1)=='(')

{

s2.top--;

i++;

}

else jisuan();break;

case '=':

//表达式结束,若符号栈栈顶元素不为'#',进行运算

//否则退栈,结束

if(*(s2.top-1)=='#')

{

s2.top--;

}

else jisuan();break;

default :i++; //清除空格及未定义符号

}

3.5主菜单页面的实现

void main()

{

char cr[60];

char c='a';

file=fopen(outfile,"w+");

//使用提示

printf("****************************************************************** *************\n");

printf("*********************************李斐计算器

************************************\n");

printf("四则简易计算器\n\n");

printf("输入表达式例如2+4= \n\n");

printf("最后按# 键则会退出保存\n\n");

printf("谢谢使用\n\n");

printf("------------------------------------------------------------------------------\n");

printf("****************************************************************** ************\n");

//循环输入表达式,按'#'键退出

while(c!='#')

{

error=0;

printf("输入表达式:\n");

gets(cr);

fprintf(file,"表达式:%s\n",cr);

qiuzhi(cr);

printf("任意键继续,按# 键退出:\n");

c=getch();

}

fclose(file);

}

【附加一】算符间的优先关系如下:

4.软件测试

1.运行成功后界面。

2.输入正确的表达式后。

3.更改表达式,带括号输出

5.心得体会

这次课程设计让我再一次加了解大一学到的C和这个学期学到的数据结构。课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力和更加了解编程思想和编程技巧。

这次课程设计让我有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨,如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据类型上。就一点小小的错误也耽误了我几十分钟,所以说细节很重要。

程序设计时,也不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获,感觉课程设计很有意思。在具体操作中这学期所学的数据结构的理论知识得到巩固,达到课程设计的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机的重要作用,特别算术表达式有了深刻的理解。

最后,感谢老师在这门数据结构课程的悉心指导,祝老师和助教身体健康,万事如意!

【参考文献】

1.《数据结构(C语言版)》严蔚敏清华大学出版社

2.《C程序设计》谭浩强清华大学出版社

【附录】

程序源代码:

#include

#include

#include

#include

struct stacklifei1 //数字栈的定义

{

double *base;

double *top;

}s1;

struct stacklifei2 //运算符栈的定义

{

char *base;

char *top;

}s2;

double shuzhi[40]; //数字栈

char fuha[40]; //符号栈

int error; //出错标识符

FILE *file;

char outfile[30]="\lifeijisuanqi.txt";

void jisuan() // 该函数对数字栈的前两个栈顶

//元素与符号栈的栈顶元素完成一次运算操作{

double a,b;

b=*(s1.top-1); //取数字栈栈顶元素

s1.top--;

if(s1.top==s1.base)

{

error=1;

return ;

} //若栈空,出错

a=*(s1.top-1); //取数字栈栈顶元素

switch(*(s2.top-1))

{

case '+':a=a+b;break;

case '-':a=a-b;break;

case '*':a=a*b;break;

case '/':if(b==0){error=2;s2.top=s2.base;return ;}//除数不为0 else a=a/b;break;

default :error=1;

}

fprintf(file,"%lf %c %lf= %lf\n",*(s1.top-1),*(s2.top-1),b,a);

*(s1.top-1)=a; //将运算结果入栈

s2.top--; //运算符退栈

return ;

}

void qiuzhi(char *cr)

// qiuzhi();该函数完成对表达式的处理

{

int i=0,k,h,flag,fuhao=0;

double sum,j;

s1.base=s1.top=shuzhi;

s2.base=s2.top=fuha; //数字栈与符号栈初始化

*(s2.top)='#'; //将'#'入栈,方便循环

s2.top++;

while(s2.top!=s2.base)

{

sum=0;

flag=0;

k=10;j=1;h=1;

while(cr[i]>='0'&&cr[i]<='9'||cr[i]=='.')

//若当前的字符是数字,就将char型的数据转换为double型{

if(cr[i]=='.')

{

if(cr[i-1]<'0'||cr[i-1]>'9'||i==0||cr[i+1]<'0'||cr[i+1]>'9')

//判断小数点是否出错

{error=1;break;}

else

{k=1;h=10;}

}

else

{

flag=1;j=j*h;

sum=sum*k+(cr[i]-48)/j;

}

i++;

}

if(flag) //flag不为0表明有数据需要入栈

{

if(fuhao){sum=-sum;fuhao=0;}

//fuhao是个标志记号,值不为0表明刚才转换的值为负数

*(s1.top)=sum;

s1.top++;

}

else

{

switch(cr[i])

{

case '-':if(cr[i-1]=='('||i==0){fuhao=1;i++;break;}

//判断是不是负号,若不是则进行与加号相同的操作

//当'-'出现在表达式第一位或是'('后第一位,则应将其判为负号case '+':

//加、减号的优先级只比'('和'='高,若栈顶元素为这两者之一

//就将其入栈,否则执行运算操作

if(*(s2.top-1)=='('||*(s2.top-1)=='#')

*(s2.top)=cr[i];

s2.top++;

i++;

}

else jisuan();break;

case '*':

case '/':

//乘、除号的优先级只比'*'、'/'和'^'低,若栈顶元素为这三者之一//就执行运算操作,否则将其入栈

if(*(s2.top-1)=='*'||*(s2.top-1)=='/')jisuan();

else

{

*(s2.top)=cr[i];

s2.top++;

i++;

}break;

case '(': *(s2.top)=cr[i]; s2.top++;i++;break;

//未入栈时'('的优先级最高,所以它一定要入栈

//但一入栈其优先级就应降为最低

case ')':

//注意:由于'()'运算优先级最高故我直接进行运算,

//直到栈顶元素为'('后将'('出栈,故符号栈中一定没有')',

//这也是我进行以上优先级判断的前提

if(*(s2.top-1)=='(')

{

s2.top--;

i++;

}

else jisuan();break;

//表达式结束,若符号栈栈顶元素不为'#',进行运算

//否则退栈,结束

if(*(s2.top-1)=='#')

{

s2.top--;

}

else jisuan();break;

default :i++; //清除空格及未定义符号

}

}

if(error)break;

}

if(error||s1.top-1!=s1.base)

//若运行出错或是数字栈中的元素不是一个,就进行出错提醒{

if(error==2)

{

printf("除数不能为0!\n");

fprintf(file,"%s\n","除数不能为0!");

}

else

{

printf("表达式错误!\n");

fprintf(file,"%s\n","表达式错误!");

}

}

else

//结果输出,输出小数点后六位,

{

fprintf(file,"结束\n");

printf("%.6lf\n",*(s1.base));

fprintf(file,"%.6lf\n",*(s1.base));

}

return ;

}

void main()

{

char cr[60];

char c='a';

file=fopen(outfile,"w+");

//使用提示

printf("****************************************************************** *************\n");

printf("*********************************李斐计算器************************************\n");

printf("四则简易计算器\n\n");

printf("输入表达式例如2+4= \n\n");

printf("最后按# 键则会退出保存\n\n");

printf("谢谢使用\n\n");

printf("------------------------------------------------------------------------------\n");

printf("****************************************************************** ************\n");

//循环输入表达式,按'#'键退出

while(c!='#')

{

error=0;

printf("输入表达式:\n");

gets(cr);

fprintf(file,"表达式:%s\n",cr);

qiuzhi(cr);

printf("任意键继续,按# 键退出:\n");

c=getch();

}

fclose(file);

}

数据结构表达式求值实验报告

竭诚为您提供优质文档/双击可除数据结构表达式求值实验报告 篇一:数据结构实验二——算术表达式求值实验报告 《数据结构与数据库》 实验报告 实验题目算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系pb0920603 姓学 邮名:李维谷号:pb09206285箱: liwg@https://www.docsj.com/doc/0b9048187.html,指导教师:贾伯琪 实验时间:20XX年10月10日 一、需要分析 问题描述: 表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。

问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个(:数据结构表达式求值实验报告)算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)#

图形学实验报告

山东建筑大学测绘地理信息学院 实验报告 (2016—2017学年第一学期) 课程:计算机图形学 专业:地理信息科学 班级:地信141 学生姓名:王俊凝 学号:20140113010 指

实验一直线生成算法设计 一、实验目的 掌握基本图形元素直线的生成算法,利用编程语言C分别实现直线和圆的绘制算法。 二、实验任务 在TurboC环境下开发出绘制直线和圆的程序。 三、实验仪器设备 计算机。 四、实验方法与步骤 1 运行TurboC编程环境。 2 编写Bresenham直线绘制算法的函数并进行测试。 3 编写中点圆绘制算法的函数并进行测试。 4 增加函数参数,实现直线颜色的设置。 提示: 1. 编程时可分别针对直线和圆的绘制算法,设计相应的函数,例如void drawline(…)和void drawcircle(…),直线的两个端点可作为drawline的参数,圆的圆心和半径可作为drawcircle的参数。 2. 使用C语言编写一个结构体类型用来表示一个点,结构体由两个成员构成,x和y。这样,在向函数传入参数时,可使用两个点类型来传参。定义方法为:

typedef struct{ int x; int y; }pt2; 此处,pt2就是定义的一个新的结构体数据类型,之后就可用pt2来定义其他变量,具体用法见程序模板。 3. 在main函数中,分别调用以上函数,并传入不同的参数,实现对直线的绘制。 4. 线的颜色也可作为参数传入,参数可采用TurboC语言中的预设颜色值,具体参见TurboC图形函数。 五、注意事项 1 代码要求正确运行,直线和圆的位置应当为参数,实现可配置。 2 程序提交.c源文件,函数前和关键代码中增加注释。 程序模板 #include #include typedef struct{ int x; int y; }pt2; /*declare your drawing functions.*/ void drawline(pt2 startpt,pt2 endpt,int color); void drawcircle(pt2 centerpt,int radius,int color); void circlePlotPoints(pt2 centerpt,int x,int y,int color); int main() { int color,radius;

数据结构实验二——算术表达式求值实验报告

《数据结构与数据库》 实验报告 实验题目 算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系PB0920603 姓名:李维谷 学号:PB09206285 邮箱:liwg@https://www.docsj.com/doc/0b9048187.html, 指导教师:贾伯琪 实验时间:2010年10月10日 一、需要分析 问题描述:

表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。 问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)# 输出结果:194.4

《8位算术逻辑运算实验》

3.2 算术逻辑运算部件 1位全加器 n 位并行加法器 ALU 单元 乘、除 法器 运算器 3.2.1 加法单元 若:+1101,+1111 两数相加,且分别放入A 、B 两个寄存器。 0 0 1 1 0 1 (补码、双符号位表示) +) 0 0 1 1 1 1 0 1 1 1 0 0 第3位:输入量: Ai(1),Bi(1), C i-1(1) 本位进位 C i ∑i C i-1 A i B i 低位进位 本位操作数 输入、输出量之间的关系式: Σi =(A B i C i-1 (1) C i = A i B i A B i )C i-1 (2) 根据上式,得出一位全加器的逻辑电路图: 根据(1)式得: 如果三个输人中1的个数为奇数,则本位和为1,否则为0。 根据(2)式得: 当本位的两个输入A i 、B i 均为1时,不管低位有无进位C i-1传来,都必然产生进位C i ;若C i-1为1,只要A i 、B i 中有一个为1,也必然产生进位。 i-1 i-1 i i i i (a ) (b ) 进位链 选择逻 辑控制 移位器 寄存器组 选择器

3.3.1 2并行加法器与进位逻辑结构 一、串行加法器 1.定义:如果每步只求一位和,将n 位加分成n 步实现,这样的加法器称为串行 加法器。 2.组成: 1 个一位全加器 1个移位寄存器:从低到高串行提供操作数相加; 1个寄存器 1个触发器 3.特点:结构简单,速度极慢。 二、并行加法器 1.定义:如果用n 位全加器一步实现n 位相加,即n 位同步相加,这样的加法器称为并行加法器。 2.组成: n 位加法器 并行加法器 串行进位链 进位链 并行进位链 根据(指C i-1 )输入量提供时间的不同,将进位链分为带串行进位链的并行加法器,带并行进位链的并行加法器。 加法器的运算速度不仅与全加器的运算速度有关,更主要的因素是取决于进位传递速度。 3.进位信号的基本逻辑: C i = A i B i +(A i )C i-1 令Gi= A i B i 进位产生函数 Pi = A i ,进位传递函数 4.串行进位链 (1)定义:各级进位信号直接依赖于低一级的进位信号 (2)关系式: C 1 = G 1 + P 1C 0 C 2 = G 2 + P 2C 1 C 3 = G 3 + P 3C 2 。。。。。。。。。 C n = G n + P n C n-1 (3)结构图:

《建筑结构试验》实验报告

《建筑结构试验》实验报告 班级: 学号: 姓名: 南昌航空大学土木工程试验中心 二○一○年四月

目录 试验一电阻应变片的粘贴及防潮技术试验二静态电阻应变仪的使用及接桥试验三电阻应变片灵敏系数的测定 试验四简支钢筋混凝土梁的破坏试验

试验一电阻应变片的粘贴及防潮技术 姓名:学号:星期第讲第组 实验日期:年月日同组者: 一、实验目的: 1.掌握电阻应变片的选用原则和方法; 2.学习常温用电阻应变片的粘贴方法及过程; 3.学会防潮层的制作; 4.认识并理解粘贴过程中涉及到的各种技术及要求对应变测试工作的影响。 二、实验仪表和器材: 1.模拟试件(小钢板); 2.常温用电阻应变片; 3.数字万用表; 4.兆欧表; 5.粘合剂:T-1型502胶,CH31双管胶(环氧树脂)或硅橡胶; 6.丙酮浸泡的棉球; 7.镊子、划针、砂纸、锉刀、刮刀、塑料薄膜、胶带纸、电烙铁、焊锡、焊锡膏等小工具; 8.接线柱、短引线 三、简述整个操作过程及注意事项: 1.分选应变片。在应变片灵敏数K相同的一批应变片中,剔除电阻丝栅有形状缺陷,片内有气泡、霉斑、锈点等缺陷的应变片,将电阻值在120±2Ω范围内的应变片选出待用。 2.试件表面处理。去除贴片位置的油污、漆层、锈迹、电镀层,用丙酮棉球将贴片处擦洗干净,至棉球洁白为止,以保证应变片能够牢固的粘贴在试件表面。 3.测点定位。应变片必须准确地粘贴在结构或试件的应变测点上,而且粘贴方向必须是要测量的应变方向。 4.应变片粘贴。注意分清应变片的正、反面,保证电阻栅的中心与十字交叉点对准。应变片贴好后,先检查有无气泡、翘曲、脱胶等现象,再用数字万用表的电阻档检查应变片有无短路、断路和阻值发生突变(因应变片粘贴不平整导致)的现象。 5.导线固定。接线柱粘帖不要离应变片太远,接线柱挂锡不可太多,导线挂锡一端的裸露线芯不能过长,以31mm为宜。引出线不要拉得太紧,以免试件受到拉力作用后,接线柱与应变片之间距离增加,使引出线先被拉断,造成断路;也不能过松,以避免两引出线互碰

数据结构算术表达式求值实验报告

软件技术基础实验报告 实验名称:表达式计算器 系别:通信工程 年级: 班级: 学生学号: 学生姓名: 《数据结构》课程设计报告 题目简易计算表达式的演示 【题目要求】 要求:实现基本表达式计算的功能 输入:数学表达式,表达式由整数和“+”、“-”、“×”、“/”、“(”、“)”组成输出:表达式的值 基本操作:键入表达式,开始计算,计算过程和结果记录在文档中 难点:括号的处理、乘除的优先级高于加减

1.前言 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/、=,用#表示结束。 算法输出:表达式运算结果。 算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。 2.概要设计 2.1 数据结构设计 任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top 指示栈顶元素在顺序栈中的位置,base 为栈底指针,在顺序栈中,它始终指向栈底,即top=base 可作为栈空的标记,每当插入新的栈顶元素时,指针top 增1,删除栈顶元素时,指针top 减1。 2.2 算法设计 为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR ,用以寄存运算符,另一个称做OPND ,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。 2.3 ADT 描述 ADT Stack{ 数据对象:D={ i a |i a ∈ElemSet,i=1,2,…,n, n ≧0} 数据对象:R1={< 1 ,-i i a a >| 1-i a ,D a i ∈,i=2,…,n}

嵌入式--计算器--实验报告

计算器设计实验报告 一、实验设计主要分工 04009320 文斌:算法设计,LCD显示。 04** 张希:界面(按钮控件)设计,文件内容读取。 共同调试、完善设计。 二、程序设计实现功能效果 (1)支持整数、小数基本加减乘除运算; (2)有优先级的判别计算。优先级由高到低一次为括号运算、乘除运算、加减运算。(3)支持键盘输入和触摸屏输入; (4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。 程序任务开始后,等待键盘或触摸屏的输入。输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter'='键、‘.’小数点键。 每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD 屏幕上显示相应字符。当输入'del'键时,屏幕显示去掉最后一位字符。当输入'='号后,得出计算结果,结果显示于表达式的下一行。若是除零错误,则结果显示为“/0ERROR!”。若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。当输入'clear'键时,情况显示区域。当输入'read'键时,从指定目录文本文件中读取表达式并计算。将表达式内容和计算结果显示在LCD上。 三、程序算法实现 1、计算算法 首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中, 表达为中缀表达式。用void str2repol()函数,将输入字符串cal[number]转换成逆波 兰表达式并存于全局数组char repol[maxs]中。str2repol()函数中缀表达式转成逆波兰 后缀表达式算法如下: (1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的 原则。

16位算术逻辑运算实验

16 位算术逻辑运算实验 一、实验内容 1、实验原理 实验中所用16位运算器数据通路如图3-3所示。其中运算器由四片74LS181以并/串形成16位字长的ALU构成。低8位运算器的输出经过一个三态门74LS245(U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUS1~6中的任一个相连,低8位数据总线通过LZD0~LZD7显示灯显示;高8位运算器的输出经过一个三态门74LS245(U33`)到ALUO1`插座,实验时用8芯排线和高8位数据总线BUSD8~D15插座KBUS1或KBUS2相连,高8位数据总线通过LZD8~LZD15显示灯显示;参与运算的四个数据输入端分别由四个锁存器74LS273(U29、U30、U29`、U30、)锁存,实验时四个锁存器的输入并联后用8芯排线连至外部数据总线EXD0~D7插座EXJ1~EXJ3中的任一个;参与运算的数据源来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,输入的数据通过LD0~LD7显示。

本实验用到6个主要模块:⑴低8位运算器模块,⑵数据输入并显示模块,⑶数据总线显示模块,⑷功能开关模块(借用微地址输入模块),⑸高8位运算器模块,⑹高8位(扩展)数据总线显示模块。根据实验原理详细接线如下(接线⑴~⑸同实验一): ⑴ALUBUS连EXJ3; ⑵ALUO1连BUS1; ⑶SJ2连UJ2; ⑷跳线器J23上T4连SD; ⑸LDDR1、LDDR2、ALUB、SWB四个跳线器拨在左边(手动方式); ⑹AR跳线器拨在左边,同时开关AR拨在"1"电平; ⑺ALUBUS`连EXJ2;

四则运算表达式求值实验报告

HUNAN UNIVERSITY 课程实习报告 题目:四则运算表达式求值 学生姓名: 学生学号: 专业班级: 指导老师: 完成日期:

一、需求分析 四则运算表达式求值,将四则运算表达式用中缀表达式表示,然后转换为后缀表达式,并计算结果。 本程序要求利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值。 在字符界面上输入一个中缀表达式,回车表示结束。如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。 测试数据 输入: 21+23*(12-6) 输出: 21 23 12 6 -*+ 二、详细设计 输入和输出的格式 输入 本程序可以将输入的四则运算表达式(中缀表达式)转换为后缀表达式 输出 后缀表达式为://输出结果的位置 表达式的值为://输出结果的位置 三、调试分析 本次实验的难点主要是在建立二叉树的问题上。关于如何把中缀表达式存入二叉树中,我参考了网上的一些方法,成功实现了目标,但是却遇到了一个问题,那就是不能处理小数,甚至两位或两位以上的整数。因为如果采用字符数组来存储操作数,运算符合一位整数还可以处理,但对于两位数就就会出问题,最后我改进采用字符串数组来存储操作数,成功解决了问题。 另外在处理输入的非法表达式问题中,我也费了很大功夫,但总体问题不大。 四、测试结果 五、用户使用说明(可选) 1、运行程序时 提示输入四则运算表达式 本程序可以将中缀表达式转化为后缀表达式,并计算结果 请输入四则运算表达式: 输出 后缀表达式为: 表达式的值为: 程序源代码(c++) #include #include #include #include

算术表达式语法检查实验报告

中南民族大学计算机科学学院本科课程设计 任务书 设计名称:算术表达式语法检查 指导教师:下达时间: 2015-5-8 学生姓名:学号: 专业: 一、课程设计的基本要求 根据所学知识,编写指定题目的C++语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C++面向对象程序设计》课程所学知识的理解,熟练掌握和巩固C++语言的基本知识和语法规范,掌握C++语言的基础知识,理解面向对象系统的封装性、继承性和多态性;熟练使用C语言中的函数、数组、指针、链表和字符串等基本知识;掌握类的定义、标准String类和向量;理解掌握友元函数和重载操作符,动态数组;理解掌握继承和多态性;掌握模版的使用;能够进行程序调试过程中的异常处理;进一步掌握利用C++进行类的定义和操作方法;进一步掌握类的继承和派生方法;进一步理解虚函数和多态;综合利用上述知识,学习设计并编写面向对象的C++简单应用程序;培养解决复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。 学会编制结构清晰、风格良好、数据结构适当的C++语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 具体要求如下: 1、采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。 2、系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。 3、程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。 4、编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等); 5、写出规范的课程设计报告,具体要求见相关说明文档。

计算机组成原理实验指导书

实验一8位算术逻辑运算实验 一、实验目的 1、掌握算术逻辑运算器单元ALU(74LS181)的工作原理。 2、掌握简单运算器的数据传送通路组成原理。 3、验证算术逻辑运算功能发生器74LSl8l的组合功能。 4、按给定数据,完成实验指导书中的算术/逻辑运算。 二、实验内容 1、实验原理 实验中所用的运算器数据通路如图1.1所示。其中运算器由两片74LS181以并/串形成8位字长的ALU构成。运算器的输出经过一个三态门74LS245 (U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUSl~6中的任一个相连,内部数据总线通过LZDO~LZD7显示灯显示;运算器的两个数据输入端分别由二个锁存器74LS273(U29、U30)锁存,两个锁存器的输入并联后连至插座ALUBUS,实验时通过8芯排线连至外部数据总线EXD0~D7插座EXJl~EXJ3中的任一个;参与运算的数据来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,通过数据开关输入的数据由LD0~LD7显示。 图1.1中算术逻辑运算功能发生器74LS18l(U3l、U32)的功能控制信号S3、S2、Sl、S0、CN、M并行相连后连至SJ2插座,实验时通过6芯排线连至6位功能开关插座UJ2,以手动方式用二进制开关S3、S2、S1、S0、CN、M来模拟74LSl8l (U31、U32)的功能控制信号S3、S2、S1、S0、CN、M;其它电平控制信号LDDRl、LDDR2、ALUB’、SWB’以手动方式用二进制开关LDDRl、LDDR2、ALUB、SWB 来模拟,这几个信号有自动和手动两种方式产生,通过跳线器切换,其中ALUB’、SWB’为低电平有效,LDDRl、LDDR2为高电平有效。 另有信号T4为脉冲信号,在手动方式下进行实验时,只需将跳线器J23上T4与手动脉冲发生开关的输出端SD相连,按动手动脉冲开关,即可获得实验所需的单脉冲。 2、实验接线

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

《数据结构课程设计》表达式求值实验报告

实验课程名称 专业班级 学生姓名 学号 指导教师 20 至 20 学年第学期第至周

算术表达式求值演示 一、概述 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。 二、系统分析 1.以字符列的形式从终端输入语确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。 2.一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。 3.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。 4.程序执行时的命令: 本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊

的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误)5. 测试数据。 三、概要设计 一个算术表达式中除了括号、界限符外,还包括运算数据和运算符。由于运算符有优先级别之差,所以一个表达式的运算不可能总是从左至右的循序执行。每次操作的数据或运算符都是最近输入的,这与栈的特性相吻合,故本课程设计借助栈来实现按运算符的优先级完成表达式的求值计算。 算法设计 程序包含三个模块 (1) 主程序模块,其中主函数为 void main{ 输入表达式; 根据要求进行转换并求值; 输出结果; } (2) 表达式求值模块——实现具体求值。 (3) 表达式转换模块——实现转换。 各个函数之间的调用关系

表达式求值实验报告

淮海工学院计算机工程学院 课程设计报告 设计名称:数据结构课程设计 选题名称:表达式求值 姓名:学号: 专业班级: 系(院):计算机工程学院 设计时间: 设计地点:软件工程实验室、教室 指导教师评语: 成绩: 签名: 年月日

1.课程设计目的 1、训练学生灵活使用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。 2.课程设计任务和要求: 任务 根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择使用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。 设计题目从任务书所列选题表中选取,每班每题不得超过2人。 学生自选课题 学生原则上可以结合个人爱好自选课题,要求课题有一定的深度和难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。 要求: 1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备和否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。 3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释; 4、每位同学需提交可独立运行的程序; 5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算); 6、课程设计实践作为培养学生动手能力的一种手段,单独考核。 3.课程设计说明书

试验二16位算术逻辑运算试验

实验三16位算术逻辑运算实验 一、实验目的 1、掌握16位运算器的数据传送通路组成原理。 2、进一步验证算术逻辑运算功能发生器74LS181的组合功能。 3、按要求和给出的数据完成几种指定的算术逻辑运算。 二、实验内容 1、实验原理 16位运算器数据通路如图2-1所示,其中运算器由四片74LS181以并/串形成16位字长的ALU构成。低8位运算器的输出经过一个三态门74LS245(U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUS1~6中的任一个相连,低8位数据总线通过LZD0~LZD7显示灯显示;高8位运算器的输出经过一个三态门74LS245(U33`)到ALUO1`插座,实验时用8芯排线和高8位数据总线BUSD8~D15插座KBUS1或KBUS2相连,高8位数据总线通过LZD8~LZD15显示灯显示;参与运算的四个数据输入端分别由四个锁存器74LS273(U29、U30、U29`、U30、)锁存,实验时四个锁存器的输入并联后用8芯排线连至外部数据总线EXD0~D7插座EXJ1~EXJ3中的任一个;参与运算的数据源来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,输入的数据通过LD0~LD7显示。 2、实验接线 本实验需用到6个主要模块: ①低8位运算器模块;②数据输入并显示模块;③数据总线显示模块; ④功能开关模块(借用微地址输入模块);⑤高8位运算器模;, ⑥高8位(扩展)数据总线显示模块。 根据实验原理详细接线如下(接线①~⑤同实验一): ①ALUBUS连EXJ3; ②ALUO1连BUS1; ③SJ2连UJ2; ④跳线器J23上T4连SD; ⑤LDDR1、LDDR2、ALUB、SWB四个跳线器拨至左侧(手动方式); ⑥AR跳线器拨至左侧,同时开关AR拨至“1”电平; ⑦ALUBUS`连EXJ2; ⑧ALUO1`连KBUS1;

工程结构试验与检测实验报告

实验一静态应变测量原理 在电阻应测量中,如在电桥中仅接入一个电阻应变片,则实际测量值中含有由于温度变化时构件产生的应变,这是实验中所不希望的,通过适当的接线方式,可消除温度的影响,在课本中有许多不同的接线方式,主要分为两大类,一是设置专门温度补偿片,这种方式又可分为公共补偿与单片补偿两种,二是通过工作片间互相补偿,称为互相补偿或自补偿,接线要有一定的技巧。掌握电阻应变测量中的温度补偿方式及不同接线方式的测量结果的区别是很重要的。 一、实验目的 1、熟悉电阻应变仪的操作规程; 2、掌握电阻应变仪测量的基本原理; 3、学会用电阻应变片作半桥测量的方法; 4、掌握温度补偿的基本原理。 二、实验设备及仪表 1、DH3819型静态电阻应变仪; 2、等强度梁; 3、电阻应变片,导线。 三、实验内容 进行两种电阻应变测量接线方法的实验,掌握电阻应变测量的不同接线基本原理,以及消除温度影响的方法,根据实验结果分析两种接线不同测量数值理论依据。 四、试验方法 1、1/4桥接线+公共补偿:

单片补偿接线方法:将应变片R1接于应变仪1组,Eg、接线柱,温度补偿片R2接于、0接线柱,则构成外半桥,另内半桥由应变仪内部两个标准电阻构成。输入应变片灵敏度系数,导线电阻,应变片电阻。 公共补偿接线方法:断开补偿组的连线,将公共补偿接线连接于该组,将等强度梁的上侧应变片R1接于1组的Eg、接线柱,将等强度梁下侧应变片R3接、0接线柱。 2、半桥接线 按应变仪的设计原理更换公共补偿端的接线方式,然后在每个测量桥路中接入两个电阻应变片。本试验中,在一个测量桥路中按半桥方式接入等强度梁的上下测应变片。 五、实验步骤 1、接上述接桥方法分别接通桥路; 2、将电阻应变仪调平衡; 3、作预加载1公斤,检查仪表和装置; 4、正式试验,每级加载1公斤,加三级,记取读数,重复三次。 六、试验报告 1、实验方案; 2、实验过程; 3、整理出实验数据,试验数据填入应变记录表。(表格见下表) 4、比较两种接线方法,分析原因,给出结论。 5、写出试验操作方法和体会。 6、回答后面的思考题。

C语言程序设计实验报告实验数据类型运算符和表达式

凯里学院C 语言程序设计实验报告 ×××××专业××年级××班,学号××××××姓名××成绩 合作者实验日期年月日 指导教师评阅日期年月日 实验二数据类型、运算符和表达式 一、实验目的: (1)掌握C 语言数据类型,熟悉如何定义一个整型、字符型、实型变量、以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。 (2)学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。 (3)掌握C 语言的输入和输出函数的使用 (4)进一步熟悉C 程序的编辑、编译、连接和运行的过程,学会使用stepbystep 功能。 (5)认真阅读教材数据类型,算术运算符和表达式,赋值运算符和表达式部分内容。 二、实验内容: (1)输人并运行下面的程序 #include voidmain() { charc1,c2; c1='a'; c2='b'; 装 订 线 装 订 线

printf("%c%c\n",c1,c2); } (2)按习题3.7的要求编程序并上机运行 该题的要求是: 要将“China”译成密码,密码规律是:用原来字母后面的第4个字母代替原来的字母。 例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre"。 请编一程序,用赋初值的方法使。cl,c2,c3,c4,c5五个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’,经过运算,使cl,c2,c3,c4,c5分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。 三、实验步骤: (1)输人并运行下面的程序 #include voidmain() { charc1,c2; c1='a'; c2='b'; printf("%c%c\n",c1,c2); } ①运行此程序。 程序结果为:

16位算术逻辑运算实验 共5页

16位算术逻辑运算实验 、实验内容 1、实验原理 实验中所用16位运算器数据通路如图3-3所示。其中运算器由四片74LS181以并/串形成16位字长的ALU构成。低8位运算器的输出经过一个三态门74LS245( U33)到ALUO1插座,实验时用8芯 排线和内部数据总线BUSDO?D7插座BUS1?6中的任一个相连,低 8位数据总线通过LZD0?LZD7显示灯显示;高8位运算器的输出经 过一个三态门74LS245 ( U33')到ALUO1'插座,实验时用8芯排线 和高8位数据总线BUSD8?D15插座KBUS1或KBUS2相连,高8 位数据总线通过LZD8?LZD15显示灯显示;参与运算的四个数据输入端分别由四个锁存器74LS273( U29、U30、U29'、U30、)锁存,实 验时四个锁存器的输入并联后用8芯排线连至外部数据总线EXDO D7插座EXJ1?EXJ3中的任一个;参与运算的数据源来自于8位数 据开并KD0?KD7,并经过一三态门74LS245 (U51)直接连至外部 数据总线EXD0?EXD7,输入的数据通过LD0?LD7显示。

输入模块),⑸高8位运算器模块,⑹高8位(扩展)数据总线显示 模块。根据实验原理详细接线如下(接线⑴?⑸同实验一) ALUBUS 连 EXJ3; ALUO1 连 BUS1; SJ2连 UJ2; 跳线器J23上T4连SD ; LDDR1、LDDR2、ALUB 、SWB 四个跳线器拨在左边 (手动方式); ⑹ AR 跳线器拨在左边,同时开关 AR 拨在"1"电平; 2、实验接线 I- UUCF rN7L-H-3 一 i w 讥弟-丄= …… Bpkb w-1 Sr. iL 軋. 吧 n “H ■■ : U X ““期扣甫 LU ^ — —^1 ■ B ■ H- I ■ J I ■E; K Kppn L Kr 本实验用到6个主要模块: ⑴低8位运算器模块,⑵数据输 入并显示模块,⑶数据总线显示模块, ⑷功能开关模块(借用微地址 竺誥壬 巨

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif #include using namespace std; #include "" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0;

算术表达式求值-数据结构实验报告

清华大学数据结构课程实验报告(20 -20 学年第学期) 报告题目:算术表达式求值 任课老师: 专业: 学号: 姓名: 二0一年月日

摘要:现代科学技术高速发展,各种高科技产品频频问世,而各种技术的基础都离不开基本的表达式求值,它虽然简单,但却是任何复杂系统的基本执行操作。栈是一种重要的线性结构,从数据结构的角度看,它是一种特殊的线性表,具有先入先出的特点。而算符优先法的设计恰巧符合先入先出的思想。故我们基于栈这种数据结构,利用算符优先法,来实现简单算术表达式的求值。 关键字:算符优先法;算术表达式;数据结构;栈 一、课题概述 1、问题描述 一个算术表达式是由运算数、运算符、界限符组成。假设操作数是正整数,运算符只含有加“+”、减“-”、乘“*”、除“/”四种二元运算符,界限符有左括号“(”、右括号“)”和表达式起始、结束符“#”。利用算符优先法对算术表达式求值。 2、设计目的 (1)通过该算法的设计思想,熟悉栈的特点和应用方法; (2)通过对算符优先法对算术表达式求值的算法执行过程的演示,理解在执行相应栈的操作时的变化过程。 (3)通过程序设计,进一步熟悉栈的基本运算函数; (4)通过自己动手实现算法,加强从伪码算法到C语言程序的实现能力。3、基本要求: (1)使用栈的顺序存储表示方式; (2)使用算符优先法; (3)用C语言实现; (4)从键盘输入一个符合要求的算术表达式,输出正确的结果。 4、编程实现平台 Microsoft Visual C++ 6.0 二、设计思路及采取方案 1、设计思路: 为了实现算符优先法,可以使用两个工作栈。一个称做OPTR,用以寄存运

DVCC-C8JH计算机组成原理实验指导书print

计算机组成原理实验指导书 李翠玉主编 沈阳工业大学 2010年8月

前言 计算机组成原理是计算机科学与技术及相关专业的一门专业基础课,是工程性、技术性和实践性都非常强的一门课程,不仅在开展理论教学中讲授计算机的基本组成与工作原理的基础知识的同时,还要重视实践教学环节以训练学生一定的硬件实践动手能力。 计算机组成原理实验是利用中大规模集成电路等器件,对组成计算机的各相关部件进行逻辑设计、连线及测试。在实验过程中,通过对各部件的实现原理进行逻辑设计,经过对器件的选择及连线、编译、仿真等工作后,对于设计出的各个部件进行正确性测试。 本实验实践环节在课程教学内容基础上提出基础实验和深度更广、综合性更强的设计性实验,要求学生通过基本实验验证运算器的算术逻辑运算、存储器的读写操作和寄存器、存储器、外设之间的数据传送通路等内容。在设计性实验中给出设计要求和设计思路,由学生自行设计和调试,独立完成,加深学生对计算机的组成原理和指令在计算机中运行过程的理解,学生可体验设计一个简单计算机模型的方案、通过微指令、微程序的设计实现计算机的基本功能、不断调试最终达到设计要求的全过程。课程实验环节的目的是帮助学生系统地掌握计算机中的运算器、寄存器、译码电路、存储器、和存储微指令的控制存储器等硬件组成的相关知识,实现知识融会贯通的目的。 通过实验使学生在实际操作中加深对计算机硬件组成与设计、指令的调试和运行维护等多方面的技能,同时训练一定的实验动手能力。也使学生系统科学地受到分析问题和解决问题的训练,制定了一些实验项目。 本书由李翠玉主编,由于作者水平有限,加之时间紧迫,书中难免有疏漏之处,请广大读者批评指正。 作者 2010年8月

相关文档