数组与指针习题

上传人:飞*** 文档编号:54067432 上传时间:2018-09-07 格式:PDF 页数:20 大小:117.38KB
返回 下载 相关 举报
数组与指针习题_第1页
第1页 / 共20页
数组与指针习题_第2页
第2页 / 共20页
数组与指针习题_第3页
第3页 / 共20页
数组与指针习题_第4页
第4页 / 共20页
数组与指针习题_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数组与指针习题》由会员分享,可在线阅读,更多相关《数组与指针习题(20页珍藏版)》请在金锄头文库上搜索。

1、数组与指针习题1 数组与指针习题一、.基本概念与基础知识自测题1 填充题1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2) 。按元素在数组中的位置进行访问,是通过(3) 进行的,称为(4) 或 (5) 访问。为了使数组声明中数组的大小修改更为方便,总是将(6) 用于声明数组长度。答案: (1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量1.2 C/C+中的多维数组用的是一个(1)的定义, 即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。答案: (1)嵌套(2)以数组作为元素(3)二维数组1.3 计算机内存是一维编址的,多维数组在内存中的存

2、储(1) ,C/C+ 多维在内存中的排列是(2) 方式,即越(3) 的下标变化(4) 。设数组 a 有 m 行 n 列,每个元素占内存u 个字节,则aij 的首地址为(5) + (6)。答案: (1)必须要转化为一维方式,(2)按行方式(3)右(4)越快(5)a 数组的首地址(6)(i*n+j)*u 1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查( 2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。答案: (1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维1.5 指针变量保存了另一变量的( 1)值,不可以任意给指

3、针变量赋一个地址值,只能赋给它(2) 和 (3) 的地址。使用变量名来访问变量,是按( 4) 来直接存取变量称为(5) 方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。答案: (1)地址(2)NULL 数组与指针习题2 (3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问1.6 固定指向一个对象的指针,称为( 1) ,即(2) ,定义时const 放在(3) 。而指向“常量”的指针称为(4) ,指针本身可以指向别的对象,但(5) ,定义时const 放在(6) 。答案: (1)指针常量(2)指针本身是常量(3)const 放在类型说明之后,变量名之前

4、(4)常量指针(5)不能通过该指针修改对象(6)const 放在类型说明之前1.7 数组名在表达式中被自动转换为指向(1) 的指针常量,数组名是地址,但数组名中放的地址是(2) ,所以数组名(3) 。这样数组名可以由( 4) 来代替, C+这样做使用时十分方便,但丢失了数组的另一要素(5) ,数组名是指向数组( 6)的指针,而不是指向数组(7)的。编译器按数组定义的大小分配内存,但运行时对 (8) 不加检测,这会带来无法预知的严重错误。答案: (1)数组第一个元素(2)不可改变的(3)称指针常量(4)指针(5)数组元素的数量(6)元素(7)整体(8)对数组的边界不加检测1.8 有一个三维数组:

5、int z3d234; 给出指向三维数组第i 行第 j 列第 k 页元素的指针的三种表达方式(1) , ( 2),(3) 。再给出这些元素的三种表达方式(4),(5), (6)。答案: (1)z3dij+k或 是否建立了一个字符串,并把” it s a book.” 作为其初值?随后又有语句:*ps=” It s a car” ; 这又代表什么?是否正确。答:没有建立字符串,只是让ps 指向一个放在代码区中的特殊字符串,而该字符串所在内存是不可写的。后一条语句要求把字符串赋给不可写的字符串空间是错的。二、编程与综合练习题5.3 打印杨辉三角形(10 行) 。使用二维数组并利用每个系数等于其肩上

6、两系数之和。解:好的 算法无特例, 二维数组 共用 11 列,第 1 列全 0,方便计算#include using namespace std; int main() int a1011=0,1,i,j; /初始化时写好第1行,其余各行全0 for(i=1;i #include using namespace std; void inverse(int , int , int,int);/注意数组最高维可缺省,例5.5因初学未省void multi( int , int , int , int,int,int); void output( int , int,int); int main()

7、 数组与指针习题5 int middle6*3, result6*4;/注意写作 6*3等可清楚看出矩阵的行列int matrix13*6=8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6; int matrix23*4=3,2,1,0,-1,-2,9,8,7,6,5,4; output(matrix1,3,6); inverse(matrix1,middle,3,6); output(middle,6,3); output(matrix2,3,4); multi(middle,matrix2,result,6,3,4); output(result,6,4)

8、; return 0; void inverse(int matrix1_1, int middle_1, int a,int b) int i,j; for (i=0;i using namespace std; int atoi(char s) 数组与指针习题6 int temp=0,f=1,i=0; while(si!=0/去除串前部无效字符if(si=-) /读负号f=-1; i+; if(si9) cout=0 数组与指针习题7 int main() int *ip,ival=100; double *dp,dval=99.9; char *cp,cval=A; ip= dp= cp

9、= cout using namespace std; char* strcat1( char* s,const char* ct) char* st=s; while(*s) s+; /*s作为条件 ,等效 *s!=0 while(*s+=*ct+); return st; int strlen1(const char* s) int i=0; while(*s+) i+; return i; char* reverse (char* s) char temp,* temp1=s,* temp2=s; while(*temp2) temp2+; temp2-; /指针移回串尾while(te

10、mp2-temp10) /注意此处 ,从串两头的指针同时向中间移动,重合或交错时停止temp=*temp1; *temp1=*temp2; *temp2=temp; temp1+; temp2-; return s; char* strchr( const char*cs,char c) while(*cs!=c if(*cs=0) cs=NULL; /未找到返回 NALL return (char*)cs; char *strstr ( const char *cs1,const char *cs2) char *temp; char *temp1=( char*)cs2; while(*c

11、s1) /只要主串还有字符未查,则继续while(*cs1!=*cs2 /找到主串含有子串的第一个字符,或主串查完停止temp=(char*)cs1; temp1=(char*)cs2; if(*cs1) /核对子串其他字符while (*cs1+=*temp1+|*temp1); if (*temp1=0) return temp; /找到子串返回数组与指针习题9 return NULL; /未找到返回 NAL int main() char a40=“ 李明 “; char b20=“ 是东南大学学生“; char c40=“Southeast University“; char *cp;

12、 cout using namespace std; char* reverse (char* s) char temp,* temp1=s,* temp2=s; while(*temp2) temp2+; temp2-;/指针移回串尾while(temp2-temp10) /注意此处 ,从串两头的指针同时向中间移动,重合或交错时停止temp=*temp1; *temp1=*temp2; *temp2=temp; temp1+; temp2-; 数组与指针习题11 return s; char *itoa ( int n,char *string) char *temp=string; if(

13、nnum; coutnum; cout 中定义一个日期时间的结构:数组与指针习题12 struct tm int tm_sec; /秒int tm_min; /分int tm_hour; /时int tm_mday; /日int tm_mon; /月int tm_year; /年,实际放的是与1970 年的差,如1990 年为 20 int tm_wday; /星期int tm_yday; /一年中的第几天int tm_isdst; /是否夏时制; 函数time_t time(time_t *tp) 是提取当前时间,time_t 即长整型, 代表从 1970 年 1 月 1日 00:00:00

14、 开始计算的秒数(格林尼治时间),放在首地址为tp 的单元内。函数tm *localtime(const time_t *tp) 将 tp地址单元中的时间转换为日期时间结构的当地时间;(函数tm *gmtime(const time_t *tp) 转换为日期时间结构的格林尼治时间;)函数char *asctime(tm *tb) 将 tb 地址单元中的tm 结构的日期时间转换为字符串(供显示) ,它有固有格式,如:Sun Sep 16 01:03:52 1973 利用以上资源,重新设计一个日期时间类(DataTime) ,要求定义对象时取当前时间进行初始化,显示时重取显示时刻的时间并显示出来。

15、解:#include #include using namespace std; class datatime tm *timedata; long allsecond; char *tmp; public: datatime() time( timedata=localtime( tmp=asctime(timedata); coutch; if(ch=y|Y) dt.gettime(); return 0; 5.11 完善自定义字符串类mystring ,函数包括:构造函数、拷贝构造函数、析构函数,并重载运算符 , =(分别用mystring 和 C 字符串拷贝),+ (strcat) ,+=, using namespace std; const int n=256; class mystring char strn; /存放字符串的数组容器int maxsize; /最大可用元素数,可防止数组出界,提高健壮性int last; /已用元素最大下标public: mystring() last=0; maxsize=n; str0=0; coutlast) last=i; /下标运算符,可添加长度但不查边界return stri; mystring operator=(mystring mystring /这里重载的 =是把 C风格字符

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号