一.实验目的
实现杨辉三角和表达式的封装
二.实验软件环境
本实验是在MyEclipse 9.01M1编写和运行的
三.实验内容
(一)实验要求
    1.    输出杨辉三角前N项,N为参数
    2.    表达式求值:输入一个表达式,输出它的值,其中要用到java.util.Stack
(二)实验代码
程序代码:
    1)杨辉三角:
    /**
    *功能:用二维数组实现杨辉三角
        *时间:2011-05-01
    **/
package com.lab1;
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.adLine());
        } 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 com.labtwo;
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 com.labtwo;
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<in.length();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("op:"+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 com.labtwo;
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)");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。