C++与数据结构 哈理工习题集.docx
- 文档编号:29347097
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:32
- 大小:53.95KB
C++与数据结构 哈理工习题集.docx
《C++与数据结构 哈理工习题集.docx》由会员分享,可在线阅读,更多相关《C++与数据结构 哈理工习题集.docx(32页珍藏版)》请在冰豆网上搜索。
C++与数据结构哈理工习题集
C++
第一章
整型int字符型char浮点型floatdouble布尔型bool空类型void
/取整%取余&与|或
++i前置自增i++后置自增–i前置自减i—后置自减
e1?
e2:
e3e1为1时取e2,e1为0时取e3
练习1
1.开发一个c++程序需要哪几个阶段?
编辑,编译,预处理,链接,装入,执行
2.关系运算符和赋值运算符哪个优先级高?
关系运算符
3.选择题
1.设有定义:
intx=0,y=5;表达式y+=x/5+4;的值是D
A.0B.5C.4D.9
2.设有定义:
intm=8,i,j;doublex=1.42,y=5.2;以下符合c++语法的表达式是D
A.x+y%=mB.(m-2)++C.i=j*5=3D.m+=m-=2*(j=3)
3.设有定义:
inta=5,b=2;以下值为1的表达式是B
A.!
(b==a/2)B.b!
=aC.a!
=b‖a>=bD.a>0&&b<2
4.设有定义:
intx=2,y=3,z=4;以下能正确表示1/xyz的表达式是C
A.1/x*y*zB.1/(x*y*z)C.1.0/x/y/zD.1/x/y/(float)z
5.设有定义:
inta,b;表达式(a=3,b=5,a>b)?
a++:
b++,a+b的值是C
A.3B.8C.9D.10
6.设有定义:
charc1=’a’,c2=’A’;表达式c1 c1: c2+32的值是C A.0B.1C.’a’D.’A’ 4.写出下类程序运行结果 1.#include usingnamespacestd; voidmain() {intm (1),n (2),k; k=++m; cout<<"k="< k=m+n++; cout< k=--n-m; cout< k=(m>=n); cout< } k=22342201 2.#include #include usingnamespacestd; voidmain() {inta (2),b(3); doublec,d; c=-0.5; d=8.123456; cout< cout< cout< } 5*********68.1235-4.062 3.#include usingnamespacestd; intmain() {floatx=12.345; inty=100; cout< y=x*y; cout< return0; } 1234.51234 4.#include usingnamespacestd; voidmain() {inta,b,c,sum; cin>>a>>b>>c; int&resum=sum; resum=a+b+c; cout< } 18 5.编写程序 将输入的一个三维正整数的各位数字分3行输出。 Eg: 输入456输出6 5 4 第2章 for(e1;e2;e3)先计算e1,判断e2的值e2为1,执行循环进行e3再判断e2 while先判断再执行do-while先执行再判断 练习2 写出运行结果 1.#include usingnamespacestd; voidmain() {inta=2,b=-3,c=3; if(a=b+c)cout<<"####"< elsecout<<"****"< } “****” 4.#include usingnamespacestd; voidmain() {inti=0,s=0; for(;;) {i+=2; if(i>8){cout< if(i==6)continue; s+=i; } } 14 2.#include usingnamespacestd; voidmain() {inta=5; if(a++>5)cout< elsecout< } 6 5.#include usingnamespacestd; voidmain() {intn,sum; do{cin>>n;sum=0; for(inti=0;i<5;i++) {sum+=n%10;n=n/10; if((i==4)||(n==0))break; }cout<<"sum="< if(sum==0)break; }while (1); } 输入5238316240输出sum=18sum=10sum=6sum=0 3.#include usingnamespacestd; voidmain() {for(intk=1,ints=0;k<=10;k++); s+=k; cout<<"s="< } s=11 2.编写程序,用公式π/4=1-1/3+1/5-1/7+…求π的近似值,直到最后一项的绝对值小于10^-6为止 第3章 字符型数组定义长度有’\0’要比字符个数多1 Eg: 输入一个字符串存入数组a中,对该字符串中的每个字符用+3的方法进行加密后送入数组am输出加密后结果 #include voidmain() {chara[80],am[80]; inti=0; cout<<"输入一串字符: ";cin>>a; while(a[i]! ='\0'){am[i]=a[i]+3;i++;} am[i]='\0'; cout<<"加密后结果: "< } 输入一串字符: string加密后结果: vwulqj 练习3 1.指针的两个运算符&和*的作用 &取变量地址*指针变量所指向的对象的内容 2.写出运行结果 1.#include voidmain() {inta[10]={2,5,8,-3,-6,9,12,10}; inti=1; while(i<9) {cout< i+=2; } cout< } 288-6-6121209 2.#include voidmain() {intbx[]={1,3,5,7,9,11,13,15}; for(int*pb=&bx[7];pb>=bx;pb--)cout<<*pb<<""; cout< } 15131197531 3.#include intmain() {charstr[]="abcdefghijklmnopqrstuvwxyz"; char*ps="**********"; for(inti=1;i<3;i++) {cout< for(intj=0;j<26;j++)cout<<*(str+j)<<""; cout< } return1; } “************************” abcdefghijklmnopqrstuvwxyz “************************” abcdefghijklmnopqrstuvwxyz 4.#include voidmain() {int*p1; double*p2; p1=newint(4); p2=newdouble[3]; p2[0]=1.5;p2[1]=2.5;p2[2]=3.5; for(intn=0;n<3;n++) cout< } 61014 3.编写程序 1.输入10个学生一门课的成绩,分别统计大于平均值的人数和小于60分的人数。 2.任意输入一个字符串,统计其中英文字母“a”和“i”的个数,并将该字符串输出。 第4章 字符串长度函数strlen()字符串拷贝函数strcpy()字符串连接函数strcat() 第5章 面向对象程序设计方法的基本特征抽象性封装性继承性多态性 构造函数可以重载,析构函数不能重载 Eg: 1.日期类的定义实例 #include classDate { public: voidSetDate(inty=2006,intm=1,intd=1) {year=y;month=m>0&&m<13? m: 1;day=d;} intIsleapYear() {return(year%400==0)||(year%4==0&&year%100! =0);} intGetYear(){returnyear;} intGetMonth(){returnmonth;} intGetDay(){returnday;} voidPrint(){cout< private: intyear,month,day; }; 2.学生成绩类的定义实例 #include #include #include classStudent {intexamstaken; float*marks; public: char*name; voidSetStudent(inte,float*m){examstaken=e;marks=m;} floataveragemark(); voidformat(); voidPrint(); }; floatStudent: : averagemark() {foattotal=0; for(inti=0;i returntotal/examstaken; } voidStudent: : format() {cout< "< } voidStudent: : Print() {cout<<"学生: ";format(); cout< } 练习 1.单选 1.以下叙述中不正确的是A A.类中的数据成员可以是私有或公有的,而类中的成员函数必须是共有的 B.拷贝构造函数的作用是使用一个已经存在的对象去初始化一个新的同类的对象 C.类中的构造函数可以重载,而析构函数不能重载 D.构造函数和析构函数都应是类的共有成员函数 2.以下关于类和对象的叙述正确的是A A.一般只有通过具体的对象才能访问类的成员函数 B.类和对象之间没有联系 C.对象是抽象的,而类是具体实现 D.一个类的成员函数可以任意被调用 3.D不是构造函数的特征 A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置缺省函数 D.构造函数必须指定类型说明 4.下类函数中C不能重载 A.成员函数B.非成员函数C.析构函数D.构造函数 5.下类函数中,A不是类的成员函数 A.有原函数B.拷贝构造函数C.析构函数D.构造函数 6.类A的成员函数为voidSet(A&a),其中A&a含义为A A.a是类A的对象引用,用作函数Set()的形参 B.将a的函数地址赋给函数Set() C.变量A与a按位相“与”作为函数Set(的形参) D.指向类A的指针为a 2.写出一下程序的输出结果 1.#include classAA {public: AA(inti,intj) {A=i;B=j; cout<<"Constructing("< } ~AA(){cout<<"Destructed("< voidprint(){cout< private: intA,B; }; voidmain() {AA*a1,*a2; a1=newAA(1,2); a2=newAA(5,6); a1->print();a2->print(); deletea1;deletea2; } Constructing<1,2> Constructing<5,6> 1,2 5,6 Destructed<1,2> Destructed<5,6> 2.#include classA{ staticintcount; public: A(){++count;} ~A(){--count;} staticintf(){returncount;} }; intA: : count=0; voidmain() {cout< : f()<<","; Aa; A*p=newA; cout< : f()<<","; deletep; cout< : f(); } 0,2,1 3.程序填空 1.下面的程序输出小于2000的素数,且每行最多输出10个素数 #include #include classPrime{ intp; public: Prime(intn){if(n<3)p=3;elsep=n;} voidRun(); }; voidPrime: : Run() {intk,j,flag,line=0; for(j=2;j {flag=1; for(k=2;k if(j%k==0)flag=0; if(flag) {cout< line++; if(line/10==0)cout< } } cout< } voidmain(){Primeobj(200);cout< j 4.扩充日期类Date的定义,增加一个成员函数NumberOfDays(),计算当前对象中的日期是其年份的第几天,并编写一个主函数用来测试这个成员函数。 #include classDate { public: voidSetDate(inty=2006,intm=1,intd=1) { year=y; month=m>0&&m<13? m: 1; day=d; } intIsLeap_Year() { if((year%400==0)||(year%4==0&&year%100! =0))return1; return0; } intGetYear() { returnyear; } intGetmonth() { returnmonth; } intGetDay() { returnday; } voidPrint() { cout< } intNumberOfDays() { intdays[]={31,28,31,30,31,30,31,31,30,31,30,31}; intdays_leap[]={31,29,31,30,31,30,31,31,30,31,30,31}; intSumDays=day; if(IsLeap_Year()==1) { for(inti=0;i } else { for(inti=0;i } returnSumDays; } private: intyear,month,day; }; intmain() { Date*date=newDate(); date->SetDate(2008,11,28); date->Print(); cout<<"Itisthe"< } 5.定义一个名为Integer的证书类,具有数据成员d和以下成员函数,成员函数包括GetD()获取d的值,SetD(int)设置d的值,IsOdd()判断d是否为一个偶数,IsPrime()判断d是否为一个素数,并涉及主函数用一个对象分别设置d的值为15和31,编写一个主函数测试这个类。 #include classInteger { intd;//题目说数据成员为d,所以在类的声明中都应该是d,下面我 //都给你改了 public: Integer(inta)//我看你测试函数写了Integera(15);这是要调用构造函数的 {d=a;}//而你没有写构造函数,我就帮你写了一个 intGetD() {returnd;} voidSeD(inta) {d=a;} voidIsOdd() { if(d%2==0) cout<<"d"<<"是偶数"< else cout<<"d"<<"不是偶数"< } voidIsPrime() { inttemp=0; for(inti=2;i { if(d%i==0){temp=1;break;} } if(temp==1) cout<<"d"<<"不是素数"< else cout<<"d"<<"是素数"< }; }; voidmain() { Integera(15);//类的实例化的名称不能是一样的。 就像变量名,不同的变 //量不能用相同的变量名 a.IsOdd();cout< a.IsPrime();cout< Integerb(31); b.IsOdd();cout< b.IsPrime();cout< } 第6章 练习 1.以下叙述中不正确的是B A.在公有继承这种,基类的public和protected成员的访问属性在派生类中不变,而基类的private成员不可访问 B.对于保护继承,基类的public,protected和private成员在派生类中的访问属性同A C.对于私有继承,基类的public,protected成员都以private成员的身份出现在派生类中,而基类的private成员为不可访问成员 D.对于保护继承,基类的public,protected成员在类外通过派生类的对象都不能访问 2.如果一个函数说明为一个类的友元,则D A.该类可以使用该函数的局部变量 B.该函数可以使用该类中成员函数的局部变量 C.该函数只能使用该类的数据成员 D.该函数可以使用该类的任意成员 3.在派生类的构造函数的成员初始化列表中,不能包含B A.基类的构造函数 B.派生类中子对象的初始化 C.基类的子对象的初始化 D.派生类中数据成员的初始化 4.设类B是由类A继承的。 当创建一个类B的对象时,构造函数的调用顺序是A A.先调用类A的构造函数,然后调用类B的构造函数 B.先调用类B的构造函数,然后再调用类A的构造函数 C.不调用类A的构造函数 D.是定义时类A和类B出现的位置 5.如果某类是从另一个类继承来的,则析构函数的调用顺序是D A.鱼类的继承关系无关 B.先调用基类的析构函数,在调用本类的析构函数 C.不调用基类的析构函数 D.先调用本类的析构函数,在调用基类的析构函数 2.写出程序运行结果 1.#include classBase{ public: voidseti(intx){i=x;} intgeti(){returni;} protected: inti; }; classDerived: Base{ public: Base: : seti; voidsetj(intx){j=x;} intgetij(){return(j--)*(++i);} protected: intj; }; intmain() {Derivedobj; obj.seti(5); obj.setj(7); cout< return1; } 42 2.#include classA{ public: A(inti,intj){a=i,b=j;} voidMove(intx,inty){a+=x;b+=y;} voidShow(){cout<<"("< private: inta,b; }; classB: publicA{ public: B(inti,intj,intk,intl): A(i,j),x(k),y(l){} voidShow(){cout< voidfun(){Move(3,5);} voidf1(){A: : Show();} priva
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+与数据结构 哈理工习题集 C+ 数据结构 理工 习题集