java编写的atm机项目结题报告_结题报告 - Java教程 - 找一找教程网

题目:点此

8c922f6ed880a5d1e84ca5fa8083193e.png

思路:{

利用两个栈,一个存数据(v、f),一个存运算符(&&、||、!、(、))。

读到数据压入数据栈。

读到!:直接压栈。

读到运算符:{

如果符号栈栈顶的优先级没此运算符高,直接压栈。

否则取出数据栈栈顶和数据栈新的栈顶进行运算,符号栈出栈,再判断一遍栈顶优先级有没有此运算符高。

}

读完后把剩下的运算算完,栈顶是结果。

}

其实布尔表达式与普通表达式没什么区别,只是优先级不一样,数字换成了真假。参见普通表达式结题报告。

犯的错误:{

1.第四十二行的if里没加continue,也就是如果进了if就会执行后面的语句,这不是我们想要的。

2.在写 读入字符串的方法 时,为了告诉你们该包哪个头文件时,此代码的半成品被用作试验品,试验好了以后没把代码复原。

3.粘贴普通表达式的代码时,没对代码进行修改。

4.因考虑的不周全,表示优先级的二维表打错了。

5.没考虑空格。

6.遇到括号应该出栈,而不是结束循环。

}

收获:{

1.最好老老实实地打if-else,以防漏continue(if…else…=if…continue; …)。

2.试验完了之后别忘了复原。

3.最好老老实实的写,不要复制粘贴。

4.二维表一定要认真考虑之后再打。

5.要考虑周全,为防止错,可以用if…else if…else…。

6.不要想当然。

7.读多行的方法:

string line;

while(getline(cin,line)){

for(int i=0;i

{ 。。。。。。。。。。。}

while(){

............................}

}

}

题目AC代码:

1 #include

2 #include

3 #include

4 using namespace std;

5 int b[5][6];

6 stack data;

7 stack symbol;

8 int change(char a){

9 switch(a){

10 case '&':return 0;

11 case '|':return 1;

12 case '!':return 2;

13 case '(':return 3;

14 case ')':return 4;

15 case '@':return 5;

16 }

17 }

18 int main(){

19 memset(b,0,sizeof(b));

20 for(int i=4;i>=0;i--){

21 b[i][3]=1;

22 b[i][5]=1;

23 b[i][4]=1;

24 b[3][i]=1;

25 }

26 b[4][4]=0;

27 b[0][1]=1;

28 string a;

29 symbol.push('@');

30 data.push(false);

31 while(getline(cin,a)){

32 for(int i=0;i

33 if(a[i]==' '){

34 continue;

35 }

36 if(a[i]=='V'||a[i]=='F'){

37 if(a[i]=='V'){

38 data.push(true);

39 }

40 else{

41 data.push(false);

42 }

43 }

44 else{

45 if(a[i]=='!'){

46 symbol.push(a[i]);

47 continue;

48 }

49 int symbol_index;

50 symbol_index=change(a[i]);

51 while(b[symbol_index][change(symbol.top())]==0){

52 bool b=data.top();

53 data.pop();

54 bool a=data.top();

55 data.pop();

56 switch(symbol.top()){

57 case '&': data.push(a&&b);break;

58 case '|':data.push(a||b);break;

59 case '!':data.push(a);data.push(!b);break;

60 }

61 symbol.pop();

62 }

63 if(a[i]==')'){

64 if(symbol.top()=='('){

65 symbol.pop();

66 }

67 continue;

68 }

69 symbol.push(a[i]);

70 }

71 }

72 while(symbol.top()!='@'){

73 if(symbol.top()=='('||symbol.top()==')'){

74 symbol.pop();

75 continue;

76 }

77 bool b=data.top();

78 data.pop();

79 bool a=data.top();

80 data.pop();

81 switch(symbol.top()){

82 case '&':data.push(a&&b);break;

83 case '|':data.push(a||b);break;

84 case '!':data.push(a);data.push(!b);break;

85 }

86 symbol.pop();

87 }

88 if(!data.top()){

89 cout << "F\n";

90 }

91 else{

92 cout << "V\n";

93 }

94 }

95 data.pop();

96 return 0;

97 }

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[结题报告]http://www.zyiz.net/tech/detail-98665.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值