东南大学非电类C++指针的习题课_第1页
东南大学非电类C++指针的习题课_第2页
东南大学非电类C++指针的习题课_第3页
东南大学非电类C++指针的习题课_第4页
东南大学非电类C++指针的习题课_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第7章章习题课习题课 1. 有关指针的说法中,有关指针的说法中, 是错误的。是错误的。 A. 赋予一个指针变量的值只能是一个在有效范围内的地址赋予一个指针变量的值只能是一个在有效范围内的地址 B. 只有先定义一个基本类型的变量,然后才能定义指向该变只有先定义一个基本类型的变量,然后才能定义指向该变量的指针量的指针 C. 一个指针变量的值可以是一个指针变量的值可以是NULL D. 对指针变量可以进行关系运算和逻辑运算对指针变量可以进行关系运算和逻辑运算 2. 对于函数对于函数void count(int w, int &x, int &y),以下叙,以下叙述正确的是述正确的是

2、。 A. 定义函数时,参数表中出现定义函数时,参数表中出现&符是非法的符是非法的 B. 带有带有&符的虚参在函数中被分配静态内存单元符的虚参在函数中被分配静态内存单元 C. 对于带有对于带有&符的虚参,其变量值在函数中不能被修改符的虚参,其变量值在函数中不能被修改 D. 使用多个带有使用多个带有&符的虚参,通过对应的实参可以将多个变符的虚参,通过对应的实参可以将多个变量值传回上层调用函数量值传回上层调用函数BD 3下列关于指针的操作中,错误的是下列关于指针的操作中,错误的是 。A. 两个同类型的指针可以进行比较运算两个同类型的指针可以进行比较运算B. 可以用一个

3、空指针值赋给某个指针变量可以用一个空指针值赋给某个指针变量C. 一个指针可以加上两个整数之差一个指针可以加上两个整数之差D. 两个同类型的指针可以相加两个同类型的指针可以相加 4设有如下定义:设有如下定义: int data=32767; int *pd; float *fp;则以下则以下 是正确的。是正确的。 Apd=&data ; B*pd=& data; Cfp=(fload) &data; Dfp=(*fload) &data;DA 5. 在用在用new运算符建立一个三维数组运算符建立一个三维数组15*30*10时,使用了时,使用了3个下标运算符个下标运

4、算符“”,与之对应,用与之对应,用delete运算符注销这个三维数运算符注销这个三维数组时使用了组时使用了 个下标运算符。个下标运算符。 A1 B2 C3 D0 6设有说明设有说明int b44,以下不能等价元素以下不能等价元素b33的是的是 。 A*&b33 B(*(*(b+3)+3) C*(B3+3) D*(*(b+3)+3)AB 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*(

5、*(p+5) C(*prt+1)+2D*(*(a+1)+2) 8有关内存分配的说法中,有关内存分配的说法中, 是错误的。是错误的。 A. 指针变量可以保存动态分配的存储空间指针变量可以保存动态分配的存储空间 B. 用用new为指针变量分配的存储空间在堆区为指针变量分配的存储空间在堆区 C. 数据元素存储在堆区的数组在建立时就被初始化(清零)数据元素存储在堆区的数组在建立时就被初始化(清零) D. 指向静态变量的指针不必用指向静态变量的指针不必用delete释放释放DC 9设有如下的函数定义设有如下的函数定义 int f(char*s) if(!(*s) return 0; else retur

6、n 1+f(s+1); 若在主程序中用下面的语句调用上述函数,若在主程序中用下面的语句调用上述函数,则输出为则输出为 。 coutf(“goodbye!”)endl; A1B6C8D0C 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设有定义:

7、设有定义:int a34,(*p)4;p=a;则请列则请列出出3种用指针种用指针p表示表示a23的方法。的方法。 答:答:1. p23、 (*(p+2)3、*(*(p+2)+3) 2若有函数声明若有函数声明int fun(*int(*f)(float a ,char b),int n);则函数调用时实参和形参之间的传则函数调用时实参和形参之间的传递方式是什么?递方式是什么? 第一个参数的属性是什么?第一个参数的属性是什么?按什么方式传递?第二个参数按什么方式传按什么方式传递?第二个参数按什么方式传递?递? 答:传地址和传值;第一个参数是指向型如答:传地址和传值;第一个参数是指向型如函数(函数(

8、 int * (float,char)的指针,按地)的指针,按地址传递的方式传递;第二个参数按值传递。址传递的方式传递;第二个参数按值传递。 3使用使用new运算符为变量或对象分配存储运算符为变量或对象分配存储空间和为数组分配存储空间,方法上有何空间和为数组分配存储空间,方法上有何不同?而在使用不同?而在使用delete运算符释放内存,运算符释放内存,方法又有何不同?方法又有何不同? 答:用答:用new分配数组空间时,需要用分配数组空间时,需要用指明指明数组的大小;数组的大小;delete运算符释放内存时,运算符释放内存时,如果是数组空间,需要用如果是数组空间,需要用delete 的形式。的形

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

10、:当将A行语句改为:行语句改为:cout=0;i-,i-) 一、变量一、变量p是指针数组;是指针数组; 二、二、B 三、三、L 四、四、SO 五、五、LO 5设有以下说明,请根据说明语句的顺序设有以下说明,请根据说明语句的顺序回答以下问题:回答以下问题: const float a=1; float &x=a; float b3,&t=b2; int &top=*new int3; const int *p=∑ char *const s1; const float *const s2=b; 问题一:以上正确的说明语句是:问题一:以上正确的说明语句是:_

11、 问题二:含有正确表示引用类型说明的语句问题二:含有正确表示引用类型说明的语句是:是:_ 问题三:正确的常量说明语句是:问题三:正确的常量说明语句是:_ 答:答: 一、一、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=&ai;cout*p:*pa0)i-;cout*p-,;coutendl;while(i5)i+;cout*(+p),;coutendl;cout*p:*(p-3)

12、endl;答:答:*p:6060,50,40,30,20,20,30,40,50,60,*p:30 2. 写出执行下面程序的输出结果。写出执行下面程序的输出结果。 #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)coutsum=*wendl; void pt2(int *w,int n)for(int j=0;jn-1;j+) coutwj,;c

13、outwn-1endl; void main()int aa34=3,9,6,12,8,4,7,15,4,5,2,10;int tt6,int i,*p;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=30 Sum=34 Sum=21; 30,0,34 21,0,3

14、1主函数调用主函数调用sort()函数,将一组无序数排列成降序,然函数,将一组无序数排列成降序,然后输出这组数。后输出这组数。 提示:排序过程需要两层循环,函数利用递归算法来实提示:排序过程需要两层循环,函数利用递归算法来实现外层循环现外层循环 #include void sort(int *x, (1) ) int j,t; if( (2) ) return; for(j=1;jn;j+) if(x0 xj) 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( (

15、4) ,12); for(k=0;k12;k+) coutakt; coutendl; 答:答:int n n=1 x+1 a 2下面程序的功能是:主函数定义了一个整型数组下面程序的功能是:主函数定义了一个整型数组data,从键盘上输入一个数从键盘上输入一个数x,调用函数,调用函数fsum()判断该数判断该数X是否是否在数组在数组data中。如果中。如果x在数组中,则得到在数组中,则得到x在在data中第一中第一次出现时的下标值次出现时的下标值p,同时求出下标从,同时求出下标从0到到P之间所有元素之间所有元素之和,函数返回之和,函数返回X的下标值的下标值p;否则,;否则,x不在数组中,函数不在

16、数组中,函数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;

17、 else cout (13) ”是数组中下标为是数组中下标为”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+11. 编写程序,输入编写程序,输入2个字符串分别存入两个一维个字符串分别存入两个一维字符数组,将其连接后存入第字符数组,将其连接后存入第3个一维字符数组个一维字符数组后输出,要求用指向一维数组的指针变量来处后输出,要求用指向一维数

18、组的指针变量来处理其中的字符,不能使用字符串函数理其中的字符,不能使用字符串函数strcat。#include #include void catlog(char *s1, char *s2,char *s3)while(*s3+=*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. 设计一个通

19、用的插入排序函数,参数为设计一个通用的插入排序函数,参数为指向实型的指针(指向一个已经排序的数指向实型的指针(指向一个已经排序的数组)和一个实数,将该实数插入到已经排组)和一个实数,将该实数插入到已经排好序的数组中,使得插入后数组仍然有序。好序的数组中,使得插入后数组仍然有序。主函数输入一个数组和一个实数,调用插主函数输入一个数组和一个实数,调用插入排序函数插入实数,并输出插入后的数入排序函数插入实数,并输出插入后的数组。组。 #include void insert(float * &p,float x,int n) float *p1; if(n=1)p1=new floatn;p1n-1=x;p=p1;return; 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论