[高等教育]C++.doc

上传人:音乐台 文档编号:1994086 上传时间:2019-01-29 格式:DOC 页数:37 大小:191KB
返回 下载 相关 举报
[高等教育]C++.doc_第1页
第1页 / 共37页
[高等教育]C++.doc_第2页
第2页 / 共37页
[高等教育]C++.doc_第3页
第3页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[高等教育]C++.doc》由会员分享,可在线阅读,更多相关《[高等教育]C++.doc(37页珍藏版)》请在三一文库上搜索。

1、第六章 指针练习题知识点:1掌握指针、地址、指针类型、空指针(NULL)等概念;2掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;3掌握指针与数组、函数、字符串等的联系;4掌握引用参数的使用。一、选择题1.若有以下定义,则说法错误的是( )。int a=100,*p=&a ;A声明变量p,其中*表示p是一个指针变量B变量p经初始化,获得变量a的地址C变量p只可以指向一个整形变量D变量p的值为1002. 若有以下定义,则赋值正确的是( )。int a ,b , *p;float c, *q;Ap=&c Bq=p Cp=NULL Dq=new int3.

2、如果x是整型变量,则合法的形式是( )。A(x+5) B*x C&*x D*&x4. 若有语句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;则( )不是对a数组元素的正确引用(其中0i10)。Api B*(*(a+i) Cap-a D*(&ai)5. 以下程序的输出结果是( )。#include int main() int a3=10,15,20; int *p1=a,*p2=&a1; *p1=*(p2-1)+5; *(p1+1)=*p1-5; couta1endl;A5 B10 C15 D206. 执行以下程序段后,m的值为 ( )。int a23=1,2,3,4,5,

3、6;int m,*p=&a00;m=(*p)*(*(p+2)*(*(p+4);A15 B14 C13 D127. 以下程序的输出结果是( )。#include void fun(int x,int y,int *cp,int *dp) *cp=x+y; *dp=x-y; int main() int a,b,c,d;a=30,b=50;fun(a,b,&c,&d);coutc,dendl;A50,30 B30,50 C80,20 D80,208. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。Afuna(int *x,int *y) Bfunb(

4、int x,int y) int *p=new int ; int t; *p=*x; t=x; *x=*y; x=y; *y=*p; y=t; Cfunc(int *x,int *y) Dfund(int x,int y) *x=*y; *x=*x+*y; *y=*x; *y=*x-*y; *x=*x-*y; 9. 以下程序的输出结果是( )。#include int main() char *s=12134211;int v1=0,v2=0,v3=0,v4=0;for (int k=0;sk;k+)switch(sk) default:v4+;case 1:v1+;case 3:v3+;c

5、ase 2:v2+;coutv1,v2,v3,v4endl;A4,2,1,1 B4,9,3,1 C5,8,6,1 D8,8,8,810. 若有如下语句:int *pp,*p,a=10,b=20;pp=&p; p=&a; p=&b; cout*p”,”*ppendl; 则输出结果是( )。A10,20 B10,10 C20,10 D20,2011.若有以下定义,则变量p所占内存空间的字节数是()。float *p;A.1 B.2 C.4 D.812.若有以下定义,则赋值错误的是()。int a,*p,*q;A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q13. 下

6、列程序运行结果是()。#includeint main() int a=10,*q;if(q=NULL) cout#endl;else q=&a;cout*qendl;A. # B.10 C. 有语法错误 D.*q14. 若程序段char line=”Visual C+”; char *point=line;则point的值为( )。A. ”Visual C+” B. line的首地址C. Visual D. 015. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是()。A. 数组名代表的地址不变,指针变量存放的地址可变。B. 数组名代表的存储空间不变,指针变量指向的存储空间长度

7、可变。C. A和B的说法均正确。D. 没有差别。16. 若有以下定义,则下列操作错误的是()。int a5=1,3,5,7,9,*p=new int 5; A.p=a; B.*p=a; C.*(p+1)=a1; D.*p=*a17. 若有以下定义,则释放指针所指内存空间的操作是()。 int *p=new int 10;A.delete p; B.delete *p C.delete p; delete p18. 若有以下定义,下列值为6的表达式是()。int a35=1,2,2,4,6,8,10,20,30,40,50;A.*(a+2)+3 B.a23 C.*(*(a+1)+2) D.*(*

8、(a+2)+3)19. 执行下列程序段后,字符串str1的值是()。char str18 , str2=”AA0BB”;strcpy(str1,str2);A. AA0BB B. AA BB C. AA D.AA0BB0二、写出下列程序运行结果:1 #includeint main() int *pn, n=10,m=20;float *pf, px=3.14159,py=2.71828;pn=&n;*pn+=m;cout”n 现在的值是: ”*pnendl;pf=&px;py+=5*(*pf);cout”py现在的值是:”pyendl;2. 写出下列程序运行结果:#includeint ma

9、in() int I,*p,a=10,20,30,40,50,60;p=a;for(I=0;I5;I+)cout”a“I”=”aIt”*(a+”I”)=”*(a+I)t”*(p+”I”)=”*(p+I)t”p“I”=”pIendl;3. 写出下列程序运行结果:#includeint main() int x=100,y=200;int *p=&x;(*p)+;p=&y;*p=x;coutx,*pendl;4. 写出下列程序运行结果:#includeint main() int a=10,20,30,40,50,60,70,80,90,100;int i,*p,sum=0;p=a;for(i=1

10、;i10;i=i+2)sum+=pi;coutsum= sumendl;5. 写出下列程序运行结果:#includeint main() float b4=1.0,2.0,1.2,3.0,4.0,3.1,1.6,1.7,1.8,1.9,2.0,2.1;float *p,sum=1.0;int i;p=&b01;for(i=0;i3;i+) sum=sum*(*(p+i);coutsum= sumendl;6. 写出下列程序运行结果:#includeint main() char *b=sunday, monday, tuesday, wednesday;char *p;p=b2;cout*pt

11、*bendl;7. 写出下列程序运行结果:#includeint main() int i,a=10,20,30,40,*p4,*q;for(i=0;i4;i+)pi=a+i;q=p;cout*+qendl;cout*+*qendl;cout+*qendl;cout*q-aendl;8. 写出下列程序运行结果:#includeconst int N= 5;int main() char* course=Mathematics, English, Data structure,C+ Programming , Internet ;int i,j,k;char *temp;for(i=0;iN-1

12、;i+) k=i;for(j=i+1;j0) k=j;if(k!=i) temp=coursei;coursei=coursek;coursek=temp;for(i=0;iN;i+)coutcourseiendl;三、填空题1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。#includevoid change( ) /1int i=0;for(i=0; ;i+) /2if(ai=a&ai=z); /3int main() char p80;cout n;cin.getline(p,80) ; /读一行字符,中间可以有空格change(p);coutpendl;如

13、程序运行时得到以下结果:请输入一行字符:This is a book.THIS IS A BOOK.2. 下列函数swap实现数据交换功能功能,请填空。#includevoid swap(int *p,int *q) int temp;temp=*p; /1; /2int main() int a,b;int *p1,*p2;coutab;p1=&a;p2=&b;swap(p1,p2);cout结果a和b的值:a,bendl;如程序运行时得到以下结果:请输入两个正数:10 20结果a和b的值:20,103. 下列函数sort实现对字符串按字典顺序由小到大排序,请填空。#includevoid

14、sort( ) /1 char ; /2int i,j;for(i=0;in-1;i+)for(j=0;jn-1-i;j+)if(strcmp( ) /3 temp=pj; /4pj+1=temp;int main() char *a5=student,worker,cadre,soldier,apen;sort(a,5);for(int i=0;i5;i+) coutaiendl; 程序运行结果如下:apencadresoldierstudentworker4.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。

15、#include#includeconst int N=10;int find(int *p,int n,int x) /1 int i ; / 2*(p+n)=x; /3while(*p+i!=x) /4i+; /5if(i!=n) /6return 1; /7else return -1; /8int main() int i,pos,x;int *p=new int N;for(i=0;iN;i+)*(p+i)=rand()%50;for(i=0;iN;i+)cout*(p+i)t;coutx;pos=find(p,N,x);if(pos!=-1)coutindex= pos ,valu

16、e= *(p+pos)endl;else coutNo find!endl;第六章 指针编程11.编写一个函数求字符串的长度length(char *p)。在main函数中输入字符串,调用该函数,输出长度。不能用strlen()函数。1.#include int length(char *p) int n=0;while(*p+!=0)n+;return n;void main() char str80; int t; cinstr; t=length(str); cout Length of the string is : t endl;2.编写一个函数sor(int *a,int *b,i

17、nt *c ),要求使用指针,将三个数从小到大排序。main函数输入三个数,调用该函数,然后输出排好的数。2.#include void sor(int *a, int *b, int *c)int p;if( *a *b) /保证a指向的数据比b指向的数据小 p=*a; *a=*b; *b=p;if( *a *c) /保证a指向的数据比c指向的数据小 p=*a; *a=*c; *c=p;if( *b *c) /保证b指向的数据比c指向的数据小 p=*b; *b=*c; *c=p;void main()int x,y,z;cout x ;cout y;cout z ;sor(&x,&y,&z)

18、;cout Sorted numbers are : x ends y ends z endl;第六章 指针编程21.编程:将一个字符串中的数字字符删除掉。例如:字符串“akdj823ksdj”,删除数字字符后变成“akdjksdj”。实现删除功能的函数原型为: void dele(char *p); 其中*p获得字符数组首地址。主函数main()实现功能:输入字符串,调用dele()函数,然后输出字符串。1.#include #include void dele(char *p) int i,j=0;for(i=0;i=0&pi=9)pj+=pi;pj=0;void main() char

19、str80; coutstr; dele(str); coutstr;2.编程:两个字符串的比较。不能用strcmp( )函数。比较函数原型为:int comp(char *p1,char *p2); 两个串内容相同,函数返回值为0,不相等,则为两个串中第一个不相等的字符的ascii码差。主函数main()实现功能:输入字符串,调用comp()函数,然后输出比较结果。2.#include #include int comp(char *p1,char *p2)while(*p1!=0&*p2!=0)if(*p1!=*p2)break;p1+;p2+;return *p1-*p2;void ma

20、in() char s180, s280; couts1; couts2; coutcompare resulut :comp(s1,s2)endl; 第七章 编程作业以及课件设计一个日期结构体,然后定义一个日期类型的变量,输入日期数据,计算这一天是该年的第几天,要考虑闰年。方案一:利用switch 的执行特点#include struct date int year; int month; int day;void main()date ddd;int n=0;cout请输入年:月:日ddd.yearddd.monthddd.day;switch(ddd.month-1)case 11: n

21、+=30;case 10: n+=31;case 9: n+=30;case 8: n+=31;case 7: n+=31;case 6: n+=30;case 5: n+=31;case 4: n+=30;case 3: n+=31;case 2: n+=28;case 1: n+=31;case 0: n+=ddd.day; if(ddd.year%4=0&ddd.year%100!=0|ddd.year%400=0)&ddd.month=3)n+=1;cout今天是这一年的第n天endl;方案二:#include struct date int year; int month; int

22、day;void main()date ddd;int i,n=0;cout请输入年:月:日ddd.yearddd.monthddd.day; n=ddd.day;for(i=1;i=ddd.month-1;i+)switch(i)case 1: n=n+31; break;case 2: if(ddd.year%4=0&ddd.year%100!=0|ddd.year%400=0)n=n+29; else n=n+28;break;case 3: n+=31; break;case 4: n+=30; break;case 5: n+=31; break;case 6: n+=30; bre

23、ak;case 7: n+=31; break;case 8: n+=31; break;case 9: n+=30; break;case 10: n+=31; break;case 11: n+=30; break;case 12: n+=31; break; cout今天是这一年的第n天endl;方案三:#include struct date int year; int month; int day;void main()date ddd;int i,n=0;int s13=0,31,28,31,30,31,30,31,31,30,31,30,31;cout请输入年:月:日ddd.ye

24、arddd.monthddd.day; n=ddd.day;for(i=1;i=3)n+=1; cout今天是这一年的第n天endl;第八章 作业以及第八章课件检查下面程序,找出错误并且修改。不能将类修改为结构体。#include using namespace std;class Time void set time(void); void show_time(void); int hour; int minute; int sec; ;Time t;int main()set_time();show_time();return 0; int set_time(void) cint.hour

25、; cint.minute; cint.sec;int show_time(void) coutt.hour:t.minute:t.secendl;#include using namespace std;class Time public: void set_time(); void show_time();private: int hour; int minute; int sec; ;Time t;int main()t.set_time();t.show_time();return 0; void Time: set_time(void) cinhour; cinminute; cin

26、sec;void Time: show_time(void) couthour:minute:secendl;第8章 第8章 类与对象81 知识要点1 1 掌握类与对象的概念和定义方法,掌握类成员的访问属性。2 2 掌握构造函数的概念、定义方法和使用方法。3 3 掌握析构函数的概念、定义方法和使用方法。4 4 掌握拷贝构造函数的概念、定义方法和使用方法。5 5 掌握包含对象成员的类构造函数的定义方法。6 6 掌握静态成员的概念、定义方法、作用和特点。7 7 掌握友元的概念、定义方法、作用和特点。8 8 掌握类模板的定义格式与使用方法。82典型例题分析与解答例题1:下列有关类的说法不正确的是(

27、)。A A 对象是类的一个实例B B 任何一个对象只能属于一个具体的类C C 一个类只能有一个对象D D 类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。例题2:下面( )项是对构造函数和析构函数的正确定义。Avoid X:X(), void X:X()BX:X(参数), X:X()CX:X(参数), X:X(参数)Dvoid X:X(参数), void X:X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。例题3:( )的功能是对象进行初始化。 A析构

28、函数 B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C+编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C+编译系统自动调用析构函数注销该对象并进行善后工作;例题4:下列表达方式正确的是( )。Aclass P B class Ppublic: public:int x=15; int x; void show()coutx; void show()coutx; ; C class P D. class P int f; public: ; int a; f=25; void Seta (int x) a=x;答案:D分析:在类体内不

29、可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。例题5: 拷贝构造函数具有的下列特点中,( )是错误的。A A 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B B 拷贝构造函数只有一个参数,并且是该类对象的引用C C 拷贝构造函数是一种成员函数D D 拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。例题6:关于静态成员的描述中,( )是错误的。A A 静态成员

30、可分为静态数据成员和静态成员函数B B 静态数据成员定义后必须在类体内进行初始化C C 静态数据成员初始化不使用其构造函数D D 静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。例题7:关于友元的描述中,( )是错误的。A A 友元函数是成员函数,它被说明在类体内B B 友元函数可直接访问类中

31、的私有成员C C 友元函数破坏封装性,使用时尽量少用D D 友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。例题8:设有如下程序结构:class Box ;void main()Box A,B,C; 该程序运行时调用 (1) 次构造函数;调用 (2) 次析构函数。答案:(1)3 (2)3分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象

32、释放时,分别调用析构函数,所以析构函数共调用了三次。例题9:设A为test类的对象且赋有初值,则语句test B(A); 表示 。答案:将对象A复制给对象B。分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B对象。例题10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 (1) 的成员;若要访问其他成员变量,需要通过 (2) 函数或 (3) 函数。答案:(1) public (2) 成员函数 (3)友元函数分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函

33、数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#includeclass one int a1,a2; public:one(int x1=0, x2=0);void main()one data(2,3); coutdata.a1endl; coutdata.a2endl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。改正后的程序如下: #include class one int a1, a2; publi

34、c: one(int x1=0, int x2=0) a1=x1;a2=x2; int geta1() return a1; int geta2() return a2; ;void main()one data(2,3); coutdata.geta1()endl; coutdata.geta2()endl;例题12:分析以下程序的错误原因,给出修改方案使之能正确运行。#include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float

35、gain(); Amplifier:float gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutgain()endl;分析:成员函数在类体外定义格式是:函数返回类型 类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); float Amplifier:gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutamp.gain()endl;例题13:下列程序的运行结果是 。#include class point int x,y;public:poin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1