收藏 分享(赏)

第7章C++习题课.ppt

上传人:11xg27ws 文档编号:8949109 上传时间:2019-07-18 格式:PPT 页数:33 大小:256KB
下载 相关 举报
第7章C++习题课.ppt_第1页
第1页 / 共33页
第7章C++习题课.ppt_第2页
第2页 / 共33页
第7章C++习题课.ppt_第3页
第3页 / 共33页
第7章C++习题课.ppt_第4页
第4页 / 共33页
第7章C++习题课.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、第7章,习题课,1. 有关指针的说法中, 是错误的。 A. 赋予一个指针变量的值只能是一个在有效范围内的地址 B. 只有先定义一个基本类型的变量,然后才能定义指向该变量的指针 C. 一个指针变量的值可以是NULL D. 对指针变量可以进行关系运算和逻辑运算 2. 对于函数void count(int w, int &x, int &y),以下叙述正确的是 。 A. 定义函数时,参数表中出现&符是非法的 B. 带有&符的虚参在函数中被分配静态内存单元 C. 对于带有&符的虚参,其变量值在函数中不能被修改 D. 使用多个带有&符的虚参,通过对应的实参可以将多个变量值传回上层调用函数,B,D,3下列

2、关于指针的操作中,错误的是 。 A. 两个同类型的指针可以进行比较运算 B. 可以用一个空指针值赋给某个指针变量 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加 4设有如下定义: int data=32767; int *pd; float *fp;则以下 是正确的。 Apd=,D,A,5. 在用new运算符建立一个三维数组15*30*10时,使用了3个下标运算符“”,与之对应,用delete运算符注销这个三维数组时使用了 个下标运算符。 A1 B2 C3 D0 6设有说明int b44,以下不能等价元素b33的是 。 A*&b33 B(*(*(b+3)+3) C*(B3+

3、3) D*(*(b+3)+3),A,B,7设有以下说明语句:int a43=1,2,3,4,5,6,7,8,9,10,11,12; int (*prt)3=a,*p=a0; 能够正确表示数组元素a12的表达式是 。 A*(*prt+1)2) B*(*(p+5)C(*prt+1)+2 D*(*(a+1)+2) 8有关内存分配的说法中, 是错误的。A. 指针变量可以保存动态分配的存储空间B. 用new为指针变量分配的存储空间在堆区C. 数据元素存储在堆区的数组在建立时就被初始化(清零)D. 指向静态变量的指针不必用delete释放,D,C,9设有如下的函数定义 int f(char*s)if(!(

4、*s) return 0;else return 1+f(s+1); 若在主程序中用下面的语句调用上述函数,则输出为 。 coutf(“goodbye!”)endl; A1 B6 C8 D0,C,10若有以下的说明和语句: int t32,*pt3,k; for(k=0;k3;k+)ptk=tk; 则数组元素pt2表示: 。 A. t数组第2行的行指针,指向第2行 B. t数组第2行的元素地址,指向第2行0列 C. t数组的第2个元素 D. t数组第2行第0个元素,B,1设有定义:int a34,(*p)4;p=a;则请列出3种用指针p表示a23的方法。 答:1. p23、 (*(p+2)3、

5、*(*(p+2)+3) 2若有函数声明int fun(*int(*f)(float a ,char b),int n);则函数调用时实参和形参之间的传递方式是什么? 第一个参数的属性是什么?按什么方式传递?第二个参数按什么方式传递? 答:传地址和传值;第一个参数是指向型如函数( int * (float,char)的指针,按地址传递的方式传递;第二个参数按值传递。,3使用new运算符为变量或对象分配存储空间和为数组分配存储空间,方法上有何不同?而在使用delete运算符释放内存,方法又有何不同? 答:用new分配数组空间时,需要用指明数组的大小;delete运算符释放内存时,如果是数组空间,需

6、要用delete 的形式。,4阅读以下程序,回答问题: #include void main()char*p=“BOOL”,”OPK”,”H”,”SP”;int i;for (i=3;i=0;i-,i-)cout*pi; /Acoutendl; 问题一:变量p是什么数据类型 问题二:表达式*pi等效于A、B中的哪一个A. *(Pi) B. (*p)i 问题三:当i值为3时,如果执行语句cout*p+i;输出结果是什么 问题四:程序输出是什么 问题五:当将A行语句改为:cout(*p)i;后,输出结果是什么,答:本题印刷有误,应为for(i=3;i=0;i-,i-) 一、变量p是指针数组; 二、

7、B 三、L 四、SO 五、LO,5设有以下说明,请根据说明语句的顺序回答以下问题: const float a=1; float 问题一:以上正确的说明语句是:_ 问题二:含有正确表示引用类型说明的语句是:_ 问题三:正确的常量说明语句是:_,答: 一、1、3、4、5、7 二、3、4 三、1、5、7,三、阅读程序,回答问题 1. 写出以下程序的输出。 #include void main()int a6=10,20,30,40,50,60;int i=5,*p= ,答: *p:60 60,50,40,30,20, 20,30,40,50,60, *p:30,2. 写出执行下面程序的输出结果。

8、#include int take(int *a, int *b, int n, void (*g)(int*,int) )int i=0, j=n-1;int s=0;while(in)s+=ai;i+;*b=s;g(b, 4);return i=j; ,void pt1(int *w,int n)cout“sum=“*wendl; void pt2(int *w,int n)for(int j=0;jn-1;j+) coutwj,;coutwn-1endl; ,void main()int aa34=3,9,6,12,8,4,7,15,4,5,2,10;int tt6, int i,*p;

9、void (*f)(int *w,int n)=pt1;p=tt;for(i=0;i9;i+) tti=0;for(i=0;i3;i+) take(*(aa+i),p+2*i,4,f);f=pt2; p=tt; f(p,3);p=tt+4; f(p,3); ,答:将程序中for(i=0;i9;i+)改为for(i=0;i6;i+),则输出为:Sum=30Sum=34Sum=21;30,0,3421,0,3,1主函数调用sort()函数,将一组无序数排列成降序,然后输出这组数。提示:排序过程需要两层循环,函数利用递归算法来实现外层循环#includevoid sort(int *x, (1) )

10、int j,t;if( (2) ) return;for(j=1;jn;j+)if(x0xj) t=x0;x0=xj;xj=t;sort( (3) ,n-1); ,void main() int a12=5,3,7,4,2,9,8,32,54,21,6,43,k;sort( (4) ,12);for(k=0;k12;k+) coutakt;coutendl; 答:int nn=1x+1a,2下面程序的功能是:主函数定义了一个整型数组data,从键盘上输入一个数x,调用函数fsum()判断该数X是否在数组data中。如果x在数组中,则得到x在data中第一次出现时的下标值p,同时求出下标从0到P

11、之间所有元素之和,函数返回X的下标值p;否则,x不在数组中,函数fsum()返回-1,主函数提示相应信息。主函数输出计算结果。请完善之。 #iinclude int fs(int*a,int n,int x,int &sum)sum=0;for(int i=0;in;i+)sum= (9) if(x=ai) (10) return-1; ,void main()int data=12,31,16,28,7,29,35,18,40;int x,s,index;coutx;index=fs( (11) );if( (12) ) coutx”不在数组中”endl;elsecout (13) ”是数组

12、中下标为”index“的元素。”;cout“数组中前” (14) ”项之和为:”s endl;return; ,答: sum+ai; return i; data,sizeof(data)/4,x,s或data,9,x,s index=-1 dataindex或x index+1,1. 编写程序,输入2个字符串分别存入两个一维字符数组,将其连接后存入第3个一维字符数组后输出,要求用指向一维数组的指针变量来处理其中的字符,不能使用字符串函数strcat。 #include #include void catlog(char *s1, char *s2,char *s3) while(*s3+=*

13、s1+);s3-;while(*s3+=*s2+); ,void main() char s1=“I am a student,“;char s2=“You are a teacher!“;int n=strlen(s1)+strlen(s2)+1;char *p=new char n;catlog(s1,s2,p);coutpendl;delete p; ,2. 设计一个通用的插入排序函数,参数为指向实型的指针(指向一个已经排序的数组)和一个实数,将该实数插入到已经排好序的数组中,使得插入后数组仍然有序。主函数输入一个数组和一个实数,调用插入排序函数插入实数,并输出插入后的数组。,#incl

14、ude void insert(float * else ,p1=new floatn; for(int i=n-2;i=0;i-)if(x=pi)for(int j=0;j=i;j+)p1j=pj;p1i+1=x;for(j=i+2;jn;j+)p1j=pj-1;delete p;p=p1;return ; for(i=1;in;i+)p1i=pi-1; p10=x; delete p; p=p1; return; ,void main()float *p;float x;int n=0;coutx;while(x!=-1)n+;insert(p,x,n);coutx;for(int j=0

15、;jn;j+)coutpjendl;delete p; ,3. 编写程序,输入一个由纯字母组成的字符串,统计其中26个字母出现的次数。统计时,假定不区分大小写,即A和a被认为是同一个字母。若一个字母出现的次数大于0次,则输出其统计次数。例如,输人字符串“Banana”,则输出:a=3b=1 n=2,#include void main()int num26=0;char str100;cinstr;int i=0;while(stri)if(stri97)stri+=32;numstri-97+;i+;for(i=0;i26;i+)if(numi)coutchar(i+97)=numiendl

16、; ,4. 本章7.11.1节所创建的是无序链表,现要求在其基础上添加一个函数,对无序链表按学号升序排序,排序后的链表仍然用head指向。 答:本排序算法为:1. 定义一个空的指针head1;2. 从head链取下一个节点p;3. 将p插入到head1中去4. 重复2、3,直到head为空。,student *ssort(student *head) student *head1=NULL,*p,*p1,*p2;while(head) p=head; p-next=NULL; head=head-next; /取下head链首结点if(head1=NULL) head1=p;else p1=p2=head1;while(p2 ,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报