Java表达式求值、杨辉三角实验报告

Java表达式求值、杨辉三角实验报告
Java表达式求值、杨辉三角实验报告

一.实验目的

实现杨辉三角和表达式的封装

二.实验软件环境

本实验是在MyEclipse 9.01M1编写和运行的

三.实验内容

(一)实验要求

1. 输出杨辉三角前N项,N为参数

2. 表达式求值:输入一个表达式,输出它的值,其中要用到java.util.Stack (二)实验代码

程序代码:

1)杨辉三角:

/**

*功能:用二维数组实现杨辉三角

*时间:2011-05-01

**/

package https://www.360docs.net/doc/758690075.html,b1;

import java.io.*;

public class Pascal{

public Pascal(){

play();

}

public void play(){

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.print("请输入n值:");

int n = 0;

try {

n = Integer.parseInt(br.readLine());

} catch (NumberFormatException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

int array[][] = new int[n][2*n-1];

//判断是否为奇数

if( n%2 == 1 ){

for(int i=1; i<=n; i++){

for(int j=1; j<=2*n-1 ;j++){

//首先给前5-i个元素赋值0

if(j<=n-i)

array[i-1][j-1] = 0;

//输出第一个“1”和最后一个“1”

else if((j==(n-i+1))||(j==n+i-1))

array[i-1][j-1] = 1;

else if((j < n+i-1)&&(j > n-i+1)){

if((j-i)%2 == 1)

array[i-1][j-1] = 0;

else

array[i-1][j-1] = array[i-2][j-2] + array[i-2][j];

}

}

}

}

//为偶数所进行的操作

else{

for(int i=1; i<=n; i++){

for(int j=1; j<=2*n-1; j++){

//首先给前5-i个元素赋值0

if(j<=n-i)

array[i-1][j-1] = 0;

//输出第一个“1”和最后一个“1”

else if((j==(n-i+1))||(j==n+i-1))

array[i-1][j-1] = 1;

else if((j < n+i-1)&&(j > n-i+1)){

if((j-i)%2 == 0)

array[i-1][j-1] = 0;

else

array[i-1][j-1] = array[i-2][j-2] + array[i-2][j];

}

}

}

}

/*输出数组*/

for(int i=1; i<=n; i++){

for(int j=1; j<=2*n-1; j++){

if(array[i-1][j-1] == 0){

System.out.print(" ");

}

else

System.out.print(array[i-1][j-1]);

System.out.print(" ");

}

System.out.println();

}

}

public static void main(String argc[]){

Pascal p = new Pascal();

}

}

2)表达式求值,代码如下:

1)Stack类:用来存储表达式子元素的类,代码如下:

package https://www.360docs.net/doc/758690075.html,btwo;

public class Stack {

private int maxLen;

private int size;

private char c[];

public Stack(int maxLen) {

this.maxLen = maxLen;

c = new char[maxLen];

size = 0;

}

public void push(char v){

c[size++] = v;

}

public char pop(){

return c[--size];

}

public boolean isEmpty(){

return size == 0;

}

}

2)ExplainPostfix类:实现将输入的表达式转成后缀表达式,代码如下:

package https://www.360docs.net/doc/758690075.html,btwo; public class ExplainPostfix {

String in; String out = "";

Stack s;

public ExplainPostfix(String in){

System.out.println("计算表达式

为:"+in);

this.in = in;

}

public void display(){

System.out.println("后缀表达式

为:"+out);

}

//转换成后缀表达式

public void toPraser(){

s = new Stack(in.length());

for(int i=0;i

char c = in.charAt(i);

switch(c){

case'+':

case'-':

getOpter(c,1);

break;

case'*':

case'/':

getOpter(c,2);

break;

case'(':

s.push(c);

break;

case')':

getParen();

break;

default:

out = out + c;

}

}

while(!s.isEmpty()){

out = out + s.pop();

}

}

public void getOpter(char c,int prec1){ out = out + 'a';

while(!s.isEmpty()){

char optop = s.pop();

if(optop == '('){

s.push(optop);

break;

}

else{

int prec2 = 0;

if(optop == '+' || optop

== '-'){

prec2 = 1;

}

else{

prec2 = 2;

}

if(prec1>prec2){

s.push(optop);

break;

}

else{

System.out.println("o

p:"+optop);

out = out + optop;

}

}

}

s.push(c);

}

public void getParen(){

while(!s.isEmpty()){

char c = s.pop();

if(c == '(')

break;

else

out = out + c;

}

}

public static void main(String[] args) {

ExplainPostfix p = new

ExplainPostfix("(11+2)*5");

p.toPraser();

p.display();

}

}

3)CalculateExpression类:功能实现将后缀表达式进行计算,代码如下:

package https://www.360docs.net/doc/758690075.html,btwo;

public class CalculateExpression {

String in;

Stack s; public CalculateExpression(String in) { this.in = in;

}

public CalculateExpression(){

play();

}

public static void main(String args[]){

ExplainPostfix p1 = new

ExplainPostfix("(21+4)*(1+3*2)");

p1.toPraser();

p1.display();

CalculateExpression p = new

CalculateExpression(p1.out);

p.doPraser();

p.display();

}

//开始计算后缀表达式

public void doPraser(){

while(true){

int a,b,c,d;

a = in.indexOf("+");

b = in.indexOf("-");

c = in.indexOf("*");

d = in.indexOf("/");

int n = Math.max(a, b);

n = Math.max(n, c);

n = Math.max(n, d);

if(a != -1){

n = a;

}

if(b

n = b;

}

if(c

n = c;

}

if(d

n =d;

}

if(a == -1 && b == -1 && c == -1 && d == -1){

break;

}

String s1 = charAt(n-1);

String s2 =

charAt(n-2-s1.length());

int v = 0;

if(n == a){

v = Integer.parseInt(s1) +

Integer.parseInt(s2);

}

else if(n == b){

v = Integer.parseInt(s2) -

Integer.parseInt(s1);

}

else if(n == c){

v = Integer.parseInt(s2) *

Integer.parseInt(s1);

}

else{

v = Integer.parseInt(s2) /

Integer.parseInt(s1);

}

String s = ""+v;

if(s.equals("0")){

s = "";

}

else{

s = s +"a";

}

in =

in.substring(0,https://www.360docs.net/doc/758690075.html,stIndexOf(s2))

+v+

in.substring(n+1,in.length());

}

}

public void display(){

System.out.println("结果为:"+in);

}

public String charAt(int i){

String str = "";

char c = in.charAt(i);

if(c == '+' || c == '-' || c == '*' || c == '/'){

str = str + c;

return str;

}

else{

while(c != 'a'){

str = c + str ;

if(i == 0){

break;

}

c = in.charAt(--i);

if(c == '+' || c == '-' || c == '*' || c == '/'){

break;

}

}

}

return str;

}

}

四.实验的结果及分析

1. 杨辉三角结果:

2. 算术表达式结果:

五.实验心得体会

试验后熟悉封装思想,使用基本Java算法。

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

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

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

杨辉三角的规律以及推导公式

杨辉三角的规律以及定理 李博洋 摘要杨辉三角中的一些规律 关键词杨辉三角幂二项式 引言 杨辉是我国南宋末年的一位杰出的数学家。在他所着的《详解九章算法》一书 中,画了一张表示二项式展开后的系数构成的三角图形,称做“开方做法本源”,现 在简称为“杨辉三角”,它是世界的一大重要研究成果。我们则来对“杨辉三角”的 规律进行探讨和研究。 内容 1二项式定理与杨辉三角 与杨辉三角联系最紧密的是二项式乘方展开式的系数规律,即。 杨辉三角我们首先从一个二次多项式(a+b)2的展开式来探讨。 由上式得出:(a+b)2=a2+2ab+b2此代数式的系数为:121 则(a+b)3的展开式是什么呢?答案为:a3+3a2b+3ab2+b3由此可发现,此代数式的系数 为:1331但似乎没有什么规律,所以让我们再来看看(a+b)4的展开式。 展开式为:a4+4a3b+6a2b2+4ab3+b4由此又可发现,代数式的系数为: 14641似乎发现了一些规律,就可以发现以下呈三角形的数列: 1(110) 11(111) 121(112) 1331(113)

14641(114) 15101051(115) 1615201561(116) 因此可得出二项式定理的公式为: (a+b)n=C(n,0)a^n*b^0+C(n,1)a^(n-1)*b^1+...+C(n,r)a^(n-r)*b^r...+C(n,n)a^0*b^n 因此,二项式定理与杨辉三角形是一对天然的数形趣遇,它把带进了。求二项式展开式系数的问题,实际上是一种组合数的计算问题。用系数来计算,称为“式算”;用杨辉三角形来计算,称作“图算”。 2杨辉三角的幂的关系 首先我们把杨辉三角的每一行分别相加,如下: 1(1) 11(1+1=2) 121(1+2+1=4) 1331(1+3+3+1=8) 14641(1+4+6+4+1=16) 15101051(1+5+10+10+5+1=32) 1615201561(1+6+15+20+15+6+1=64) …… 相加得到的数是1,2,4,8,16,32,64,…刚好是2的0,1,2,3,4,5,6,…次幂,即杨辉三角第n行中n个数之和等于2的n-1次幂 3杨辉三角中斜行和水平行之间的关系 (1) 1(2)n=1 11(3)n=2 121(4)n=3 1331(5)n=4

显示杨辉三角实验报告

显示杨辉三角实验报告 姓名:许严班级:计122 学号:1213023050 1.问题描述 杨辉三角如图2.4.3所示,其特点是两个腰上数值是1,其他位置上的每一个整数都是它的上一行相邻两个整数之和。问题是:对于指定的最大行数rmax,要求从第一行到第rmax逐行显示杨辉三角形的所有元素。 2.基本要求 ⑴设计输出形式,尽量反映杨辉三角的特点。 ⑵设计计算杨辉三角形各行数值的方法。 ⑶输入:rmax从键盘输入。 ⑷输出:屏幕输出杨辉三角形. 3.实现提示 ⑴存储设计 计算杨辉三角形第i行时,如果在第i-1行两侧各添加一个0,则第i行的第j个元素等于第i-1行的第j-1个元素与第j个元素的和。计算如图2.4.4所示。第i行计算完,第i-1行的数据就没有用了,依据第i行数据可计算第i+1行的数据。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … 图2.4.3 杨辉三角形 从上述计算中不难看出,第i行的元素从左往右依次可被求得,求解过程中也是从左往右依次使用地i-1行的数据,显然,具有先入先出的特点。所以,可借助一个队列存放计算过程中所需的数据,如图2.4.5所示。 但随着航数的增加,队列会很长。所以,可以设置一循环队列,队长不少于rmax+2,边计算边出队。 (2)算法设计 计算各行元素的算法步骤如下。 Step1:队列初始化,0、1入队。队头ftont指向0处,队尾指向1后。 Step2:i从1到rmax,循环执行下列操作,求第i行数据。 2.1 0入队。 2.2 从队首起直到队尾,每出队两元素,求和后入队。 输出时注意0不输出。

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

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

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

C++实验报告 (1)

2013-2014年度C++实验报告 学院:机械学院 专业:机械设计制造及其自动化学号:1240202414 姓名:陆响明

第三章: 习题1.编写程序,求从键盘输入的3个数中的最大数。#include void main() { float a,b,c,d; cout<<"请输入3个整数:"<<'\n'; cin>>a>>b>>c; if(a>b)d=a; else d=b; if(d>c)cout<<"最大数为:"< void main() { cout<<"请输入10个数:"<<'\n'; float a=0,b; for(int i=0;i<10;i++){ cin>>b; a+=b; } a/=10; cout<<"它们的平均值为:"<

习题6.计算s=1+2+3+......+i,累加到s大于1000,并输出s和i的值。 #include void main() { int s=0; for(int i=0;s<=1000;i++) s+=i; i--; cout<<"s="< void main() { int a[10]={3,5,2,7,6,1,7,4,7,5}; int *p,i,k,max=0; for(i=0;i<10;i++){ p=&a[i]; if (max<*p){ max=a[i]; k=i; } } cout<<"最大元素为:"<

数据结构实验指导书

《数据结构》实验指导书 实验一顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求: (1)设数据元素为整数,实现线性表的顺序存储表示。 (2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。 (3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。 2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求: (1)数据元素为学生成绩(含姓名、成绩等字段)。 (2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。(这里用于比较的字段为分数) 实验二链表 实验目的: 熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容: 1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下: (1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。 (2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表 并带有头结点。(用于比较的字段为分数)。 (3)输入关键字值x,打印出表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (4)输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。(用于比较的字段为分数)。 实验三栈的应用 实验目的: 熟悉栈的逻辑特性、存储表示方法和栈的基本操作。 实验要求: 了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。 实验内容: (1)判断一个表达式中的括号(仅有一种括号,小、中或大括号) 是否配对。编写并实现它的算法。 (2)用不同的存储方法,求解上面的问题。 (3)* 若表达式中既有小括号,又有大括号(或中括号),且允许 互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算 法。如 2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、 2+3*(4-[5+2 * 3)为不合法。

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

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

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}

《C语言程序设计》实验报告(实验1-11) 2013.3

《C语言程序设计》 实验报告 2012~2013学年第二学期 班级 姓名 学号 指导教师

实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入并运行下面的程序: #include int main( ) { printf("This is a C program.\n"); return 0; } 2. 在Visual C++ 6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序 无语法错误,然后运行程序,并观察分析运行结果。 #include int main( ) { int a,b,sum a=3; b=4; sun=a+b; print(“%d+%d=%d\n”,a,b,sum); return 0; } 四、实验结果: 1. 运行结果(或截图):

2. (1) 改正后的源程序: (2) 运行结果(或截图): 五、思考题: 1. 一个C程序上机的步骤有哪些? 答: 2. 组成C程序的基本单位是函数,一个函数包括哪几个部分? 答: 成绩指导教师签名

实验二 实验项目名称:数据类型、运算符和表达式 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.掌握整型、实型与字符型这三种基本类型的概念; 2.掌握常量及变量的使用方法; 3. 掌握基本算术运算符及其表达式的使用方法; 4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。 二、预习内容: 教材《C语言程序设计教程》第2章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。 main( ) { char m,n; m=280; n=320; printf(“%d\t%d\n”,m,n); printf(“%c\t%c\n”,m,n); } 2. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。 #include int main( ) { int a=3,b=4,c=8; float d,e; d=a+b/c; e=a+(float)b/c; printf("d=%f,e=%f\n",d,e); } 3. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。 #include main( ) { int a,b,c,d,i,j,m,n; a=b=c=d=3; i=a++; j=++b;

杨辉三角队列实现

网上看了许多杨辉三角队列实现的代码,结果运行时都或多或少有点小问题,为此我提供一份自己运行正确的。 程序无误,细心做一下 注意,这是做成三个文件运行的 第一个文件命名 stdafx.h #include #include #define Max 50 struct queue { int *base; int front; int rear; }; typedef struct queue *SqQueue; SqQueue InitQueue();//队列的初始化 int EnQueue(SqQueue Q,int e);//数据进队(从队尾传值) int DeQueue(SqQueue Q);//数据出队(返回队头) void YHPrint(SqQueue Q,int n);//打印杨辉三角 void jiemian();//界面函数,方便调用(个人习惯) 第二个文件命名为 stdafx.c #include "stdafx.h"

int GetQueueFirstData(SqQueue Q) { return Q->base[Q->front]; } int isEmptyQueue(SqQueue Q) { if(Q->front=Q->rear) return 1; else return 0; } SqQueue InitQueue() { SqQueue Q; Q=(SqQueue)malloc(sizeof(struct queue)); if (Q==NULL) return NULL; Q->base=(int *)malloc(Max*sizeof(int)); if(Q->base==NULL) return NULL; Q->front=Q->rear=0; return Q; } int EnQueue(SqQueue Q,int e) { if((Q->rear+1)%Max==Q->front) return 0; Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%Max; return 1; } int DeQueue(SqQueue Q) { int e; if(Q->front==Q->rear) return 0; e=Q->base[Q->front]; Q->front=(Q->front+1)%Max; return e; }

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

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

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

计算机实验报告

实验指导 实验一 Visual C++开发环境使用 大气科学专业实验日期 4月 18日姓名:学号 1.实验目的 (1)熟悉Visual C++集成开发环境。 (2)掌握C语言程序的书写格式和C语言程序的结构。 (3)掌握C语言上机步骤,了解C程序的运行方法。 (4)能够熟练地掌握C语言程序的调试方法和步骤 2. 实验内容 输入如下程序,实现两个数的乘积。 #include ; int main() { x=10,y=20 p=prodct(x,t) printf("The product is : ",p) int prodct(int a ,int b ) int c c=a*b return c } (1)在编辑状态下照原样键入上述程序。 (2)编译并运行上述程序,记下所给出的出错信息。 (3)再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。 3.分析与讨论 (1)记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论成功或失败的原因。(2)总结C程序的结构和书写规则。 实验心得: 通过本次实验,我了解到C语言的特点,初步认识程序设计方法和程序设计一般步骤,掌握C语言程序编译、链接和运行过程,为我进一步学好C语言打下了基础。

实验二数据类型、运算符和表达式 大气科学专业实验日期4 月 25日姓名:刘园园学号327 1.实验目的 (1)理解常用运行符的功能、优先级和结合性。 (2)熟练掌握算术表达式的求值规则。 (3)熟练使用赋值表达式。 (4)理解自加、自减运算符和逗号运算符 (5)掌握关系表达式和逻辑表达式的求值 2.实验内容 (1)整数相除 #include<> int main() { int a=5,b=7,c=100,d,e,f; d=a/b*c; e=a*c/b; f=c/b*a; printf("d=%d , e=%d ,f=%d\n",d,e,f); return 0; } (2)自加、自减运算 #include<> int main() { int a=5,b=8; printf("a++=%d\n",a++);

计10--数据结构专题实验rev2

上机实验要求及规范 《数据结构》课程具有比较强的理论性,同时也具有较强的可应用性和实践性,因此上机实验是一个重要的教学环节。一般情况下学生能够重视实验环节,对于编写程序上机练习具有一定的积极性,但是容易忽略实验的总结,忽略实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程,而是应该按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略,逐一地解决子问题。具体步骤如下: 1.问题分析与系统结构设计 充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),然后设计有关操作的函数。在每个函数模块中,要综合考虑系统功能,使系统结构清晰、合理、简单和易于调试。最后写出每个模块的算法头和规格说明,列出模块之间的调用关系(可以用图表示),便完成了系统结构设计。 2.详细设计和编码 详细设计是对函数(模块)的进一步求精,用伪高级语言(如类C语言)或自然语言写出算法框架,这时不必确定很多结构和变量。 编码,即程序设计,是对详细设计结果的进一步求精,即用某种高级语言(如C/C++语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。 3.上机准备 熟悉高级语言用法,如C语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。 4.上机调试程序 调试最好分块进行,自底向上,即先调试底层函数,必要时可以另写一个调用驱动程序,表面上的麻烦工作可以大大降低调试时所面临的复杂性,提高工作效率。 5.整理实验报告 在上机实验开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析,写出实验报告。

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

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

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

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

2016年C语言实验报告

通知 各位老师: 本学期非计算机专业《计算机程序设计基础(C语言)》课实验报告要求: 1.统一用《武汉科技大学实验报告》本写。本学期交三次实验报告。 ①循环结构程序设计。 ②数组。 ③函数。 要求学生在完成以下实验报告,参考《C语言程序设计课程实验与题解》中的要求认真完成。 实验1 循环结构程序设计 一、实验目的 1.熟悉用while语句,do-while语句和for语句实现循环的方法。 2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。 3.熟悉break语句和continue语句用法的不同之处。 二、实验内容 【例】以下程序,输出下三角形状的乘法九九表。 #include void main() { int i,j; for (i=1;i<=9;i++) /* 打印表头*/ printf(" %4d",i); printf("%c",'\n'); for (i=0;i<=50;i++) printf("%c",'_'); printf("%c",'\n'); for (i=1;i<=9;i++) /* 循环体执行一次,打印一行*/ { for (j=1;j<=i;j++) printf(" %4d",i*j); /* 循环体执行一次,打印一个数据*/ printf("%c",'\n'); /* 每行尾换行*/ } printf("%c",'\n'); } 输入并执行该程序,观察输出结果,试着修改程序打印上三角形状的乘法九九表。 三、编程序并上机调试运行。 1.打印出所有“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和正好等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。 解题思路:根据题目要求只要分别求出一个三位数的个位、十位、百位上的数字,然后判断是否满足(某一三位数a=a的百位的立方+a的十位的立方+a的个位的立方)这个公式,满足这个三位数就是“水仙花数”。 2.李先生岁数的平方与他的夫人的岁数之和是1053,而他的夫人的岁数的平方与他

数据结构实验题目

实验一:顺序表的基本操作。 编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。 (1)建立一个顺序表,含有n个数据元素。 (2)输出顺序表及顺序表的长度。 (3)在顺序表中删除值为x的结点或者删除给定位置i的结点。 (4)将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,a n)逆置为(a n,a n-1,...,a1)。 (5)将顺序表按升序排序。 (6)设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。 (7)将两个顺序有序表A和B合并为一个有序表C。 (8)在主函数中设计一个简单的菜单,分别测试上述算法。 实验二:单链表的基本操作 编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。 (1)建立一个带头结点的单链表。 (2)计算单链表的长度,然后输出单链表。 (3)查找值为x的直接前驱结点q。 (4)删除值为x的结点。 (5)把单向链表中元素逆置(不允许申请新的结点空间)。 (6)已知单链表中元素递增有序,请写出一个高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,他们的值可以和表中的元素相同,也可以不同)。 (7)同(6)的条件,试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法时间复杂度。(8)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 (9)在主函数中设计一个简单的菜单,分别测试上述算法。 实验三:双向链表的基本操作 1.利用尾插法建立一个双向链表。 2.遍历双向链表。 3.实现双向链表中删除一个指定元素。 4.在非递减有序双向链表中实现插入元素e仍有序算法。 5.判断双向链表中元素是否对称若对称返回1否则返回0。 6.设元素为正整型,实现算法把所有奇数排列在偶数之前。 7.在主函数中设计一个简单的菜单调试上述算法。 实验四:栈和队列的基本操作 (1)采用链式存储实现栈的初始化、入栈、出栈操作。

表达式求值实验报告

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

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

杨辉三角

杨辉三角 教学设计思想: 这节课是高三数学(选修II )的研究性课题,是在高二学过的“二项式定理”的基础上,进一步探讨和研究杨辉三角的性质,实质上就是二项展开式的二项式系数即组合数的性质。 (1)让学生在教师设计的问题情境中,自己根据已经学过的知识去发现问题→提出问题→解决问题,即观察、猜想、归纳杨辉三角横行、竖向、斜向的数字各数之间的大小关系、组合关系及各数字之间的联系等规律。 (2)在学生自主探究知识的发生发展过程中从中体会到数学世界的神奇和有趣,激发他们对数学的热爱之情。培养他们的交流与协作的能力。 (3)通过向他们介绍杨辉三角的有关历史,让他们了解中国古代数学的伟大成就,增强他们的民族自豪感。 教学 目标: 1 使学生了解杨辉及杨辉三角的有关历史,掌握杨辉三角的基本性质,并能认识到中国古代的数学的辉煌成就。 2 让学生在老师的启发下自己去探讨杨辉三角中行、列的数字的特点, 发现杨辉三角的有关的性质,培养学生由特殊到一般的归纳猜想能力。 3通过讨论,培养学生发现问题、提出问题、解决问题的能力。在交流中培养学生的协作能力,形成探究知识、建构知识的研究型学习习惯及合作化学习的团队精神,为进一步学习作好准备。 教学过程: 一 引入 今天我们在高二学过的杨辉三角的基础上,进一步探索杨辉三角数字中横 向、竖向、斜向…中蕴含的有趣的数量关系。(幻灯片:出示杨辉三角的前3行,余下的让学生补充完整) 二 杨辉简介 杨辉,中国南宋时期杰出的数学家 和数学教育家。在13世纪中叶活动于 苏杭一带,其著作甚多。其中《详解九章算术》 中的“开方作法本源图”,曾被称为“杨辉三角”, 杨辉指明次系贾宪(约11世纪)所用. 三 探讨杨辉三角的性质 ? ??++++++=++++++=+++++=++++=+++=++=+=+6 43223245665 432234554 3223443 22332 221061520156)(510105)(464)(33)(2)()(1)(b ab b a b a b a b a a b a b ab b a b a b a a b a b ab b a b a a b a b ab b a a b a b ab a b a b a b a b a

实验报告1

南京工程学院 实验报告 程序设计语言-JA V A 开课院系:经济管理学院 实验:() 班级:K信管101 学生姓名:顾永晨 学号:240103824

JAVA语言课程实验报告

一、实验目的及要求 熟悉JDK环境,掌握Jcreator的使用方法,理解Java 应用程序的运行原理和方法。 二、实验设备(环境)及要求 JDK;Jcreator;Windows 操作系统 三、实验内容与步骤 1、编辑、编译、运行以下程序,说出程序的功能。改变变量n的初值,观察运行结果有何变化。 public class Sum10_for { public static void main(String args[]) { int i=1,n=10,s=0; System.out.print("Sum("+n+") = "); for (i=1;i int main() { int a=5,b=8; printf("a++=%d\n",a++); printf("a=%d\n",a); printf("++b=%d\n",++b); printf("b=%d\n",b); return 0; } (3)关系运算和逻辑运算 #include int main() { int a=5,b=8,c=8; printf("%d,%d,%d,%d\n",a==b&&a==c,a!=b&&a!=c,a>=b&&a>=c,a<=b&& a<=c); printf("%d,%d\n",a<=b||a>=c,a==b||b==c); printf("%d,%d,%d,%d\n",!(a==b),!(a>=b),!(a>=c),!(a<=b)); return 0; } (1)在编辑状态下输入上述程序。 (2)编译并运行上述程序。 3.分析与讨论 (1)整数相除有什么危险?应如何避免这种危险? (2)分析a++和++a的区别。 (3)条件表达式和逻辑表达式的意义是什么,它们取值如何? (4)如何比较两个浮点数相等?为什么? 实验三格式化输入输出函数的使用 1.实验目的 (1)掌握格式字符使用的方法。 (2)掌握printf()进行格式化输出的方法。 (3)掌握scanf()进行格式化输入的方法。

相关文档
最新文档