2010年北京理工大学计算机考研复试上机真题回忆版.docx
2010 年北京理工大学计算机考研复试上机真题回忆版2010 年机试真题1输入一串整数,输入命令排序!输入 a t 在这串整数后面添加整数 t,输入 cmn 有 n 替换 m,输入 d t 删除 t,输入 s 排序。#include #include #include #include using namespace std; int main() vector data; vector:iterator i; string t; coutt; while(t!=“#“) int r=0,j=0; while(tj!=0) r=r*10+tj-0; j+; data.push_back(r); cint; / 操作 coutt) / 添加的情况 if(t0=a) int num; cinnum; / 在末尾添加数字 data.push_back(num); / 修改的情况 else if(t0=c) int j=2,num1=0,num2=0; / 提取数字 while(tj!=) num1=num1*10+tj+-0; j+; while(tj!=0) num2=num2*10+tj+-0; / 替换 for(i=data.begin();i!=data.end();i+) if(*i=num1) data.erase(i); data.insert(i,num2); / 删除的情况 else if(t0=d) int num; cinnum; for(i=data.begin();i!=data.end();i+) if(*i=num) data.erase(i); / 排序的情况 else if(t0=s) sort(data.begin(),data.end(); else cout #include #include #include using namespace std; /* 输入中缀表达式,转化为计算机可以计算的后缀表达式,即逆波兰表达式。* 定义运算符的优先级次序依次是+ 、- 、*、/、(、),权值越大,优先级越高* 在栈顶时的优先级别* int op_pri_s6=1,1,2,2,0,0;* 在字符串中的优先级别* int op_pri_q6=1,1,2,2,3,0;*/ /* ()输入是英文的符号,记得调好输入法,我因为这个调了半个小时bug*/ / 判定栈顶优先级权值的函数 int psta(string opt) char op6=+,-,*,/,(,); int op_pri_s6=1,1,2,2,0,0; for(int i=0;i s; queue q; string data; cindata; / 转后缀表达式 int i=0; while(datai!=0) string t=“; / 如果是运算符时 if(datai=+|datai=-|datai=*|datai=/|datai=(|datai=) / 栈空,直接压栈 if(s.empty() t+=datai+; s.push(t); t=“; / 栈顶运算符优先级较高 else if(psta(s.top()=pstr(datai) / *可能多次弹栈,直到字符串的运算符,优先级较高 while(psta(s.top()=pstr(datai) if(datai=) q.push(s.top(); s.pop(); / 防止栈空,造成空指针异常 if(s.empty() break; / 括号匹配的情况, !s.empty()防止栈空,造成空指针异常if(!s.empty() s.pop(); else t+=datai+; s.push(t); t=“; / 字符串运算符优先级较高 else t+=datai+; s.push(t); t=“; / 如果是数字 else / 提取数字 while(datai!=+ / 直接入队 q.push(t); t=“; / 把栈弹空 while(!s.empty() q.push(s.top(); s.pop(); / 测试输出后缀表达式 /*while(!q.empty()cout st; while(!q.empty() string d=q.front(); q.pop(); if(d=“+“) b=st.top(); st.pop(); a=st.top(); st.pop(); st.push(a+b); else if(d=“-“) b=st.top(); st.pop(); a=st.top(); st.pop(); st.push(a-b);