2012年 浙工大考研计算机专业课试题C++(学硕)
个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。
1读程序写结果(5*9=45)
1-1
// zgdyjs.cpp : 定义控制台应用程序的入口点。
//
#include "StdAfx.h"
#include "stdlib.h "
#include
using namespace std;
void other();
int main()
{
intx=0,y=3;
other();
cout< other(); } void other() { staticint x=2; inty=6; x+=2; cout< } 结果 4 6 6 6 1-2 #include "StdAfx.h" #include "stdlib.h " #include using namespace std; void other(); int main() { inta[]={2,4,6,8,10}; inty=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); cout< } 结果 19 1-3 #include "StdAfx.h" #include "stdlib.h " #include using namespace std; int s=10; int func(int a) { intc; c=a+s; returnc; } int main() { intx=9,y=9,t; t=func((x+y,x--,y++)); cout< } 结果 19 1-4 #include "StdAfx.h" #include "stdlib.h " #include using namespace std; class Sample { intx; public: Sample() { x=0; } Sample(inta) { cout<<(x=a); } ~Sample() { cout<<++x; } voiddisp() { cout< } }; void main() { Samples1(2); s1.disp(); s1.~Sample(); system("pause"); } 结果: 2234 1-5 #include "StdAfx.h" #include "stdlib.h " #include using namespace std; class Class { intx,y; public: Class(intn=6,int m=7); ~Class(); voidSet(int n,int m) { x=n;y=m; } }; Class::Class(int n,int m) { Set(n,m); cout<<"Construct:x="< } Class::~Class() { cout<<"Destruct:x="< } int main() { Classa(5); Classb=Class(1,3); cout<<"exiting...\n"; system("pause"); } 结果 Construct:x=5,y=7 Construct:x=1,y=3 exiting... Destruct:x=1,y=3 Destruct:x=5,y=7 2改错(3*10=30分) 2-1 下述程序按公式:1/k(k=1;k<=10;k++)求累加和。 main() { int k; //改为 doublek; double s; for(k=1;k<=10;k++) s+=1/k; cout<<"sum"< } 结果: sum2.92897 2-2 下列程序的功能是从键盘上输入若干个字符(以回车键为结束)组成一个字符串存入一个字符数组,然后输出该数组中的字符串,请补充全程序画线的部分。 #include using namespace std; int main() { char str[81],*ptr; int i; for(i=0;i<80;i++) { str[i]=getchar(); if(str[i]=='\n')break; } str[i]=________; //str[i]='\0'; ptr=str; while(*ptr) putchar(________);//putchar(*ptr++); } 2-3 指出下面程序中有错误的地方,解释错误原因并改正。 #include using namespace std; class A { int i,j; public: void get(); } class B:public A { int k; public: void make(); }; void b::make() { k=i*j; } 改正: class A { public: inti,j; voidget(); }; class B:public A { public: intk; intmake(int m,int n); }; int B::make(int m,int n) { i=m,j=n; k=i*j; returnk; }; void main() { Bb; cout< } 3,编程题(3*25=75分) 3-1 按要求输出一些斜纹布似的字符方块。斜纹布是指每一行的每一个字符出现在下一行的最后一个字符上,而第二个字符出现在下一行的第一个字符上,而第三个字符出现在下一行的第二个字符上,等等。例如,输入为“abcd”,则输出为 abcd bcda cdab dabc #include "StdAfx.h" #include "stdlib.h " #include #include #include using namespace std; void main() { stringstr; strings2; cout<<"请输入一些字符"; cin>>str; intnum=str.size(); for(int n=0; n { for(int j=0; j { inti=(n%num)+j; s2+=str[i>(num-1)?i-num:i]; } printf(s2.c_str()); printf("\n"); s2=""; } } 或者: int main() { string t; cout<<"请输入一些字符"; cin>>t; for(string::size_type i = 0; i < t.size(); ++i) { cout< t = t.substr(1, t.size() - 1) + t[0]; } return 0; } 3-2 编写程序,从键盘输入一行字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。 #include "StdAfx.h" #include "stdlib.h " #include #include using namespace std; #define N 50 void main(){ chars[N]; inti=0; printf("输入字符串:\n"); scanf("%s",&s); while(s[i]!='\0') { if(s[i]>='a'&&s[i]<='z') s[i]-=32; i++; }; ofstream fs("c:\\test"); fs< fs.close(); } 3-3 银行允许开设多种不同类型的账户,并且针对取款交易,制定了不同的手续费规则,客户可以支付一定的费用,从一个账户取款,并将款项转账到另一个账户,请编写一个程序,为一个银行账户定义一个基类Account,并定义两个派生类Saving和Checking,分别代表储蓄和支票。为提高软件的可重用性,所以决定采用抽象类的方法来编写。再写一个主程序来创建2种账户,然后测试转账函数。 #include "StdAfx.h" #include "stdlib.h " #include #include #include using namespace std; class Account//账户 { public: doublefeeTotal;//总资金 doublefeeLast;//剩余资金 doublezMon;//转账金额 stringname;//账户名 virtualdouble ZhuanZhang(double Mon)=0;//转账纯虚函数,子类必须实现它 }; class Saving:Account//储蓄 { public: doublefeeSav; doublerate;//转账费率 Saving(stringstr,double fee) { name=str; feeTotal=fee; } double ZhuanZhang(double Mon) { rate=0.1; zMon=Mon; feeSav=zMon*rate; feeLast=feeTotal-feeSav; return feeLast; } }; class Checking:Account//支票 { public: doublefeeAcc; doublerate;//转账费率 Checking(stringstr,double fee) { name=str; feeTotal=fee; } double ZhuanZhang(double Mon) { rate=0.15; zMon=Mon; feeAcc=zMon*rate; feeLast=feeTotal-feeAcc; return feeLast; } }; void main() { stringstr1, str2; doublet1,t2; doublez1,z2; cout<<"输入储蓄账户名:"; cin>>str1; cout<<"存入储蓄账户金额为:"; cin>>t1; cout<<"输入转账金额为:"; cin>>z1; cout< cout<<"输入支票账户名:"; cin>>str2; cout<<"存入支票账户金额为:"; cin>>t2; cout<<"输入转账金额为:"; cin>>z2; Savingsav(str1,t1); Checkingche(str2,t2); cout< cout<<"储蓄账户:"< cout<<"支票账户:"< } undoner