一.实验目的
实现杨辉三角和表达式的封装
二.实验软件环境
本实验是在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小时内删除。
发表评论