解题思路:
注意事项:
参考代码:
一开始编了个程序,不知咋的指针越界。正确程序:
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<bits/stdc++.h> using namespace std; char st[1001],a[1000]; string st1; int ans1,ans2,b[1000],atop,btop,num[1000],n; int pow1(int x,int y)//计算幂次方 { int hh=x; for (int i=2;i<=y;++i) { x*=hh; x%=32767; } return x; } void js()//四个运算(运算内容为数字栈的顶上两个数和运算符栈的顶上的运算符) { if (a[atop]=='+') b[btop-1]+=b[btop]; if (a[atop]=='-') b[btop-1]-=b[btop]; if (a[atop]=='*') b[btop-1]*=b[btop]; if (a[atop]=='^') b[btop-1]=pow1(b[btop-1],b[btop]); b[btop]=0; --btop; b[btop]%=32767; a[atop]='\0'; --atop; } void doit(){ int i,x; atop=0;//符号 btop=0;//数字 gets(st); for (i=0;i<=strlen(st)-1;++i) { // if (st[i]==' ') continue; if (st[i]=='(') a[++atop]='(';//左括号则符号入栈 if (st[i]==')'&&atop>=1)//右括号则清空左到右括号间的内容 { while (a[atop]!='('&&atop>=1) js(); a[atop]='\0'; --atop; } if (st[i]=='+'||st[i]=='-'||st[i]=='*'||st[i]=='^')//若是运算符且该运算符的运算优先级比前一个低就把前一个先算出来 { while (num[st[i]]<=num[a[atop]]&&atop>=1) js(); a[++atop]=st[i]; } if (st[i]=='a') b[++btop]=3;//将a代入一个数(3) if (st[i]>=48&&st[i]<=57)//可能数字是多位数 { int x=0; while (st[i]>=48&&st[i]<=57) { x=x*10+st[i]-48; ++i; } --i; b[++btop]=x; } } while (atop!=0&&a[atop]!='('&&a[atop]!=')')//将未运算完的内容运算完 js(); ans2=(b[1]+32767)%32767; } int main() { int x,i; num['^']=3; num['*']=2; num['+']=num['-']=1;//num表示运算符优先级 doit(); ans1=ans2;//ans1表示题干表达式的结果,ans2表示选项表达式的结果 cin>>n;getchar();//如果少了getchar本地过不了 for (i=1;i<=n;++i) { doit(); if (ans1==ans2) cout<<char(i+64); } }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题10.7 (C++代码)(都说了scanf和gets一般不要混着用)浏览:1148 |
陶陶摘苹果 (C语言代码)浏览:1652 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1152 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:711 |
C语言训练-斐波纳契数列 (C语言代码)浏览:3015 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:701 |
【密码】 (C语言代码)浏览:350 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1215 |
众数问题 (C语言代码)浏览:911 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |