C++经典编程题.docx
- 文档编号:5383161
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:76
- 大小:683.67KB
C++经典编程题.docx
《C++经典编程题.docx》由会员分享,可在线阅读,更多相关《C++经典编程题.docx(76页珍藏版)》请在冰豆网上搜索。
C++经典编程题
1.(算术表达式求值)输入一个由数字、+,-,*,/及括号组成的算术表达式,
求其值。
一、不带括号的计算程序。
#include
#include
#include
#include
usingnamespacestd;
intSuanshu(char*p)
{
inti=0,j,k1=0,k2=0,k3=0,n;
list
vector
n=strlen(p);
while(i { if(p[i]=='+'||p[i]=='-') { k2=i; k3=0; for(j=k1;j k3=(k3*10+(p[j]-48)); pp.push_back(k3); jiajian.push_back(pp.size()); pp.push_back(p[i]); k1=i+1; } elseif(p[i]=='*'||p[i]=='/') { k2=i; k3=0; for(j=k1;j k3=((k3*10)+(p[j]-48)); pp.push_back(k3); chenchu.push_back(pp.size()); pp.push_back(p[i]); k1=i+1; } elseif(i==n-1) { k2=i; k3=0; for(j=k1;j<=k2;j++) k3=((k3*10)+(p[j]-48)); pp.push_back(k3); k1=i+1; } i++; } while(! chenchu.empty()) { k1=chenchu.front(); k2=pp[k1-1]; k3=pp[k1+1]; if(pp[k1]=='*') j=k2*k3; else j=k2/k3; pp[k1-1]=j; for(i=k1;i pp[i]=pp[i+2]; pp.pop_back(); pp.pop_back(); list : iteratorpos=chenchu.begin(); while(pos! =chenchu.end()) { *pos=*pos-2; ++pos; } pos=chenchu.begin(); chenchu.erase(pos); list : iteratortra=jiajian.begin(); for(;tra! =jiajian.end();tra++) { if(*tra>k1) { while(tra! =jiajian.end()) { *tra=*tra-2; ++tra; } break; } } } while(! jiajian.empty()) { list : iteratorpos=jiajian.begin(); k1=jiajian.front(); k2=pp[k1-1]; k3=pp[k1+1]; if(pp[k1]=='+') j=k2+k3; else j=k2-k3; pp[k1-1]=j; for(i=k1;i pp[i]=pp[i+2]; pp.pop_back(); pp.pop_back(); while(pos! =jiajian.end()) { *pos=*pos-2; ++pos; } pos=jiajian.begin(); jiajian.erase(pos); } if(pp.size()==1) returnpp[0]; else return-11111111111; } 计算结果为: 2.带括号的计算程序 intSuanshu2(char*p) { inti=0,j,k1=0,k2=0,k3=0,n; vector vector n=strlen(p); while(i { if(p[i]=='+'||p[i]=='-') { k2=i; k3=0; for(j=k1;j k3=(k3*10+(p[j]-48)); if(k1==k2) { jiajian.push_back(pp.size()); pp.push_back(p[i]); } else { pp.push_back(k3); jiajian.push_back(pp.size()); pp.push_back(p[i]); } k1=i+1; } elseif(p[i]=='*'||p[i]=='/') { k2=i; k3=0; for(j=k1;j k3=((k3*10)+(p[j]-48)); if(k1! =k2) { pp.push_back(k3); chenchu.push_back(pp.size()); pp.push_back(p[i]); } else { chenchu.push_back(pp.size()); pp.push_back(p[i]); } k1=i+1; } elseif(p[i]=='(') { k1=i+1; leftkuo.push_back(pp.size()); pp.push_back(p[i]); } elseif(p[i]==')') { k2=i; k3=0; for(j=k1;j k3=((k3*10)+(p[j]-48)); if(k1==k2) { rightkuo.push_back(pp.size()); pp.push_back(p[i]); } else { pp.push_back(k3); rightkuo.push_back(pp.size()); pp.push_back(p[i]); } k1=i+1; } elseif(i==n-1) { k2=i; k3=0; for(j=k1;j<=k2;j++) k3=((k3*10)+(p[j]-48)); pp.push_back(k3); k1=i+1; } i++; } if(leftkuo.size()! =rightkuo.size()) return-11111111111; while(! leftkuo.empty()) { n=rightkuo[0]; k3=leftkuo[0]; for(j=leftkuo.size()-1;j>=0;j--) if(leftkuo[j] { k3=leftkuo[j]; break; } i=0; //while(n) { intm1,m2,m3=0; for(j=k3+2;j { if(pp[j]=='+'||pp[j]=='-') jiajian2.push_back(j); elseif(pp[j]=='*'||pp[j]=='/') chenchu2.push_back(j); } while(! chenchu2.empty()) { m1=chenchu2[0]-1; m2=chenchu2[0]+1; if(pp[chenchu2[0]]=='*') m3=pp[m1]*pp[m2]; else m3=pp[m1]/pp[m2]; pp[m1]=m3; //移°? 动¡¥整? 体¬? 表À¨ª达ä? 式º? for(j=chenchu2[0];j pp[j]=pp[j+2]; pp.pop_back(); pp.pop_back(); //移°? 动¡¥chenchu2 for(j=0;j chenchu2[j]=chenchu2[j+1]-2; chenchu2.pop_back(); //移°? 动¡¥jianjian2 m2=strlen(p); for(j=0;j if(jiajian2[j]>(m1+1)) { m2=j; break; } for(j=m2;j jiajian2[j]=jiajian2[j]-2; //移°? 动¡¥jiajian m2=strlen(p); for(j=0;j if(jiajian[j]>(m1+1)) { m2=j; break; } for(j=m2;j jiajian[j]=jiajian[j]-2; //移°? 动¡¥chenchu m2=strlen(p); for(j=0;j { if(chenchu[j]==(m1+1)) { m2=j; break; } } for(j=m2;j chenchu[j]=chenchu[j+1]-2; chenchu.pop_back(); //移°? 动¡¥左Á¨®括¤¡§号? leftkuo m2=strlen(p); for(j=0;j if(leftkuo[j]>(m1+1)) { m2=j; break; } for(j=m2;j leftkuo[j]=leftkuo[j]-2; //移°? 动¡¥右®¨°括¤¡§号? m2=strlen(p); for(j=0;j if(rightkuo[j]>(m1+1)) { m2=j; break; } for(j=m2;j rightkuo[j]=rightkuo[j]-2; } while(! jiajian2.empty()) { m1=jiajian2[0]-1; m2=jiajian2[0]+1; if(pp[jiajian2[0]]=='+') m3=pp[m1]+pp[m2]; else m3=pp[m1]-pp[m2]; pp[m1]=m3; //移°? 动¡¥整? 体¬? 表À¨ª达ä? 式º? for(j=jiajian2[0];j pp[j]=pp[j+2]; pp.pop_back(); pp.pop_back(); //移°? 动¡¥jianjian m2=strlen(p); for(j=0;j if(jiajian[j]==jiajian2[0]) { m2=j; break; } for(j=m2;j jiajian[j]=jiajian[j+1]-2; jiajian.pop_back(); //移°? 动¡¥jiajian2 for(j=0;j jiajian2[j]=jiajian2[j+1]-2; jiajian2.pop_back(); //移°? 动¡¥chenchu m2=strlen(p); for(j=0;j { if(chenchu[j]>(m1+1)) { m2=j; break; } } for(j=m2;j chenchu[j]=chenchu[j]-2; //移°? 动¡¥左Á¨®括¤¡§号? leftkuo m2=strlen(p); for(j=0;j if(leftkuo[j]>(m1+1)) { m2=j; break; } for(j=m2;j leftkuo[j]=leftkuo[j]-2; //移°? 动¡¥右®¨°括¤¡§号? rightkuo m2=strlen(p); for(j=0;j if(rightkuo[j]>(m1+1)) { m2=j; break; } for(j=m2;j rightkuo[j]=rightkuo[j]-2; } //此ä? 时º¡À就¨ª是º? 一°? 对? 括¤¡§号? 包㨹含? 一°? 个? 数ºy字Á? 了¢? ? ê? ? ê? ? ê? ? ê? k1=k3; k2=rightkuo[0]; if(k1+2==k2) { //移°? 动¡¥整? 体¬? 表À¨ª达ä? 式º? pp[k1]=pp[k1+1]; for(j=k1+1;j pp[j]=pp[j+2]; pp.pop_back(); pp.pop_back(); //移°? 动¡¥jianjian m2=strlen(p); for(j=0;j if(jiajian[j]>k2) { m2=j; break; } for(j=m2;j jiajian[j]=jiajian[j]-2; //移°? 动¡¥chenchu m2=strlen(p); for(j=0;j { if(chenchu[j]>k2) { m2=j; break; } } for(j=m2;j chenchu[j]=chenchu[j]-2; //移°? 动¡¥左Á¨®括¤¡§号? leftkuo m2=strlen(p); for(j=0;j if(leftkuo[j]==k1) { m2=j; break; } for(j=m2;j leftkuo[j]=leftkuo[j+1]-2; leftkuo.pop_back(); //移°? 动¡¥右®¨°括¤¡§号? rightkuo m2=strlen(p); for(j=0;j if(rightkuo[j]==k2) { m2=j; break; } for(j=m2;j rightkuo[j]=rightkuo[j+1]-2; rightkuo.pop_back(); } else { return-000; } } } //括¤¡§号? 执¡ä行D结¨¢束º? 了¢? ,ê? 开a始º? 执¡ä行D乘? 除y运? 算? while(! chenchu.empty()) { k1=chenchu[0]; k2=pp[k1-1]; k3=pp[k1+1]; if(pp[k1]=='*') j=k2*k3; else j=k2/k3; pp[k1-1]=j; //移°? 动¡¥整? 体¬? 表À¨ª达ä? 式º? for(i=k1;i pp[i]=pp[i+2]; pp.pop_back(); pp.pop_back(); //移°? 动¡¥chengchu表À¨ª达ä? 式º? for(i=0;i chenchu[i]=chenchu[i+1]-2; chenchu.pop_back(); //移°? 动¡¥jiajian表À¨ª达ä? 式º? j=strlen(p); for(i=0;i if(jiajian[i]>k1) { j=i; break; } for(i=j;i jiajian[i]=jiajian[i]-2; } while(! jiajian.empty()) { k1=jiajian[0]; k2=pp[k1-1]; k3=pp[k1+1]; if(pp[k1]=='+') j=k2+k3; else j=k2-k3; pp[k1-1]=j; for(i=k1;i pp[i]=pp[i+2]; pp.pop_back(); pp.pop_back(); for(i=0;i jiajian[i]=jiajian[i+1]-2; jiajian.pop_back(); } if(pp.size()==1) returnpp[0]; else return-000; } 实验结果为: 2.打印一个N*N的方阵,N为每边 N=15打印出下面图形 字符的个数(3<N<20=,要求最 TTTTTTTTTTTTTTT 外一层为"T",第二层为"J",从第三层 TJJJJJJJJJJJJJT 起每层依次打印数字1,2,3,... TJ11111111111JT (右图以N为15为例) TJ12222222221JT TJ12333333321JT TJ12344444321JT TJ12345554321JT TJ12345654321JT TJ12345554321JT TJ12344444321JT TJ12333333321JT TJ12222222221JT TJ11111111111JT TJJJJJJJJJJJJJT TTTTTTTTTTTTTTT 实验程序为: #include #include #include #include #include #include #include usingnamespacestd; voidprintN(intN) { inti,j,k1,k2,m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 经典 编程