指针和链表复习题.docx

上传人:b****6 文档编号:7956514 上传时间:2023-01-27 格式:DOCX 页数:15 大小:22.41KB
下载 相关 举报
指针和链表复习题.docx_第1页
第1页 / 共15页
指针和链表复习题.docx_第2页
第2页 / 共15页
指针和链表复习题.docx_第3页
第3页 / 共15页
指针和链表复习题.docx_第4页
第4页 / 共15页
指针和链表复习题.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

指针和链表复习题.docx

《指针和链表复习题.docx》由会员分享,可在线阅读,更多相关《指针和链表复习题.docx(15页珍藏版)》请在冰豆网上搜索。

指针和链表复习题.docx

指针和链表复习题

一、选择题(共20分。

每题1分)

1.若有char*p="Hello",则以下选项中错误的是:

()

A.char&a=*p;B.char*s=*p;C.char*q=p+2;D.p=p+2;

2.设有说明intx[5]={1,2,3,4,5},*p=x;输出值不是5的是:

A.cout<

B.cout<

C.cout<

D.cout<

(1)<<'\n';

3.设有说明语句:

char*s[]={"Student","Teacher","Father","Mother"},*ps=s[2];

执行语句:

cout<<*s[1]<<','<

A.T,Father,FB.Teacher,F,Father

C.Teacher,Father,FatherD.语法错,无输出

4.设有语句

chars[]="246",*ptr=s;

cout<<(char)(*(ptr+1)+1)<<'\n';

执行以上语句后输出:

A.46B.6C.5D.53

5.设有说明语句:

floatfun(int&,char*);

intx;chars[200];

对以下函数fun的调用中正确的调用格式是

A.fun(&x,s)B.fun(x,s)C.fun(x,*s)D.fun(&x,*s)

6、设s和t分别为指向两个长度相同的字符数组指针,则循环语句while((7))可以正确实现字符串t到s的完整复制功能。

A)*s=*t&&t!

=0B)s++=t++&&*t!

=0

C)*(++s)=*(++t)D)*s++=*t++

7、当数组名为函数的实参时,它传递给函数的是(10)。

A)数组的首地址B)数组名

C)数组第一个元数值D)数组全部元数

8、有关内存分配的说法中,是错误的。

A、指针变量可以保存动态分配的存储空间

B、数据元素存储在堆区的数组在建立时就被初始化(清零)

C、用new为指针变量分配的存储空间可以是一个数组。

D、指向静态变量的指针不必用delete释放.

9、以下语句中不正确的是。

A)int*p=0;B)floatp=(float)50;

C)int*p=new50;D)float*p=newfloat[50];

10、设有说明:

chars1[10],*s2=s1;则以下正确的语句是:

A.s1[]=”computer”;B.s1[10]=”computer”;

C.s2=”computer”;D.*s2=”computer”;

11、设有说明intb[4][4],以下不能等价表示元素b[3][3]的是:

A.*&b[3][3]B.(*(*(b+3))+3)C.*(b[3]+3)D.*(*(b+3)+3)

12、设有以下说明语句:

chars1[20]=”hello”,s2[20]=”China”,constchar*ptr=s1;

以下语句中不符合C++语法规则的语句是

A.strcpy(s2,ptr)B.ptr=s2C.ptr=ptr+4D.*ptr=*s2

13、设有如下定义:

   intnum=20406;

int*np;

float*mp;

则以下  是正确的。

A.np=&numB.*np=&numC.mp=&npD.mp=floatnp

14、设一程序中声明了两个数组inta[20][30];intb[600];现要将数组a中的元素按行序为主的顺序(一行接一行)复制到b数组中,例如用赋值语句b[k]=a[i][j]; 则k值的计算应为  。

A.k=i*20+jB.k=i*30+jC.k=j*20+i+1D.k=i*30+j+1

15、已知某函数有如下定义:

intdata[4][3]={1,3,5,7,9,2,4,6,8,10,11,12};int(*p)[3];

p=data;

则:

*(p+2) 表示  。

A.数组data的元素4的地址;

B.数组data的元素5的地址;

C.数组data的元素8的地址;

D.数组data的元素9的地址。

16.以下程序执行后a的值是__

A)4B)1C)0D)a无定值,运行时出错

#include

voidmain()

{inta,k=4,m=6,*p1=&k,*p2=&m;

a=p1==&m;

cout<

}

17.设有说明:

inta[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);

则值为9的表达式是:

A.p+=3,*p++B.p+=4,*(p++)C.p+=4,*++pD.p+=4,++*p

18.以下枚举类型定义中,正确的是__

A.enumdata{f1=5,f2=3,s1,s2,a=0,b,c};

B.enumdata{f1,‘f2’,‘s1’,‘s2’,a=0,b,c};

C.enumdata{‘x’,‘y’,‘z’,s2,a,b,c};

D.enumdata{5,3,s1,s2,a,b,c};

19.设有说明:

char(*p)[10];和语句:

p=newchar[5][10];则语句delete[5]p;表示释放二维数组_(37)_

A)第0行所占空间B)所占的所有空间

C)第10行所占空间D)第5行所占空间

20.设有说明:

float*p;执行语句:

p=newfloat;*p=1.5;后,再执行deletep;表示释放_(38)_

A)动态分配的空间,但不释放指针pB)动态分配的空间,同时释放指针p

C)动态分配的数据1.5,但不释放指针pD)动态分配的数据1.5,同时释放指针p

二.阅读程序(第1-25题,每空1分,第26-35题每空2分。

共45分)

1.统计一行英文文字的单词个数。

#include

#include

voidmain(void)

{

chars[200];

intcount,i,j;

cout<<”输入一行字符串:

\n”;

cin.getline(s,200);

for(count=0,j=strlen(s),i=0;i

{

while(s[i]==‘‘&&i

if(i

while(s[i]!

=’‘&&i

}

cout<<”字符串中包含的单词数为:

”<

}

程序中单词的个数是通过变量

(1)输出的;

统计工作的结束条件是

(2);

字符串的长度是通过库函数(3)获得的,其头文件为(4);该函数的参数可以是(5)也可以是(6)

A行while语句的功能是(7);

C行while语句的功能是(8);

A行与C行可否互换,为什么?

(9)

B行中的if条件不存在,会出现(10)错误结果。

2.统计全班的C++成绩。

#include

structstudent{

intid

charname[10];

floatcScore;

}

studentInput(studentx)

{

cout<<”输入学号、姓名、C++成绩:

”;

cin>>x.id>>x.name>>x.cScore;

returnx;

}

voidOutput(student&x)//A

{cout<

voidmain(void)

{

studentsts[30];//B

inti,n=averageC=sum=0;

cout<<”请输入全班人数:

”;

cin>>n;”

for(i=0;i

for(i=0;i

averageC=sum/n;

for(i=0;i

cout<<”AverageofC++scoreis:

”<

}

A行的形参为(11)类型的结构体变量。

B行定义了一个(12),其数组元素有(13)个,每个元素均为(14)型变量,包含有(15)、(16)、(17)三个数据成员。

完成数据输入的是函数(18),其参数是(19)型变量,其形参与实参的结合是(20)传递,如果将函数定义改为(21),程序的运行效率何以提高,且(22)行可以简略为(23)

D行是通过(24)运算符,将每位学生的C++成绩计入sum变量计算(25);

3.设有以下说明,请根据说明语句的顺序回答以下问题:

1)constfloata=1;

2)float&x=a;

3)floatb[3],&t=b[2];

4)int&top=*newint;

5)constint*p=∑

6)constchar*consts1;

7)constfloat*consts2=b;

8)constfloat*consts3=&b;

9)enumgrade{math,eng,phy,com};

10)enmgrade=math;

11)gradesum=math;

问题一:

以上正确的说明语句是:

(11)

问题二:

含有正确表示引用类型说明的语句是:

(12)

问题三:

正确的常量说明语句是:

(13)

问题四:

正确说明枚举变量的语句是:

(14)

4.阅读程序后回答问题。

#include

voidmain()

{

charch[2][5]={"693","825"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];//A

for(i=0;i<2;i++)

for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2)

s=10*s+p[i][j]-'0';

cout<<"\n"<

}

A行语句执行完毕后,指针p[0]和p[1]分别指向_(26)_和_(27)_;

该程序的执行结果为:

_(28)_。

5.阅读程序后回答问题。

#include

fut(int**s,intp[2][3])//A

{return**s=p[1][1];//B}

voidmain()

{inta[2][3]={1,3,5,7,9,11},*p;

p=newint;

fut(&p,a);

cout<<"\n"<<*p<

该程序A行形参表中**S表示将变量S定义为_(29)_指针。

该程序B行中赋值语句的左值**S表示__(30)__。

该程序运行后,输出结果是:

(31)。

6.以下程序运行后,输出结果是:

(32)。

#include

#include

voidfun(char*w,intn)

{chart,*s1,*s2;

s1=w;s2=w+n-1;

while(s1

{t=*s1++;

*s1=*s2;

*s2=t;

s2--;

}

}

voidmain()

{charp[]="1234567";

fun(p,strlen(p));

cout<

7.以下程序运行后,如果从键盘上输入:

book<回车>

book<空格><回车>

则输出结果是:

(33)。

如果从键盘上输入:

book<回车>

book<回车>

则输出结果是:

(34)。

#include

#include

voidmain()

{chara1[10],a2[10],*s1=a1,*s2=a2;

cin.getline(s1,10);cin.getline(s2,10);

if(!

strcmp(s1,s2))cout<<"*";

elsecout<<"#";

cout<

8.下面程序的输出结果是:

(35)。

#include

#include

charb[]="ABCD";

voidmain()

{char*chp;

for(chp=b;*chp;chp++)cout<

cout<<"\n";

}

三、完善程序(每空1分,共35分)

1.下列程序是对数组元素中的数据进行排序。

#include

#defineSIZE10

voidmain()

{inta[SIZE],i,j,t;

for(i=0;i>a[i];

for(i=0;

(1);

(2))

for((3);j

if(a[i]

for((5);(6);i++)

cout<

}

2.本程序中的函数find用于判断数组a中的整数是升序、降序还是无序。

如果是升序就返回1,降序返回2,无序返回3。

函数find中的形参n为数组a中有效整数的个数,a从a[1]~a[n]中包含待判断的整数,

intfind(int(7),intn)

{ints,i;

if(a[1]

elses=2;

if(s==1)

{i=2;

while(i

{if((8))

{s=3;

break;}

(9);}}

if(s==2)

for(i=2;(10);i++)

if(a[i]

{(11);

break;

}

return(12);}

3.下列程序功能是:

在给定的学生信息结构体数组a中添加和删除学生信息。

程序说明:

1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;

2)添加,删除后count数据要相应变化。

#include

#include

structstudent{

charname[20];floatmath;};

voidadd(studentb[10],(13),studentx){

inti,j;

number+=1;

for(i=0;(14)i++){

if(((15)){

for(j=number;j>i;--j)

b[j]=(16);

b[i]=(17);break;}

}

}

voiddel((18),int&number,studentx)//如数组中有重名,则此算法不能全部删掉

{inti=0,j,flag=0;

for(i=0;i

if(strcmp(d[i].name,x.name)==0){

flag=1;

for((19);j

number-=1;

}

if(flag==0)cout<<"noresult!

"<

voidmain()

{

studenta[10]={{"张三",90},{"李四",85},{"王五",73}};

studenta1={"赵二",96};

intcount=3,i;

add(a,count,a1);

for(i=0;i

cout<

del(a,count,a1);

for(i=0;i

cout<

}

4.下列程序的功能是:

将字符串中连续出现的数字作为一个整数取出依次存入b数组中。

如,若字符串的值为“45as8hgyu86trfg2356hfg877df”,则b数组中的各元素值分别是整数45、8、86、2356、8。

函数的返回值为所提取整数的个数。

#include

intselect(char*a,int*b);

voidmain()

{inti,count,b[10];

chara[100];

cout<<"pleaseinputasting:

";

cin.getline((20));

count=select((21));

cout<<"count="<

for(i=0;i

cout<

}

intselect(char*a,int*b){

char*p=(22);

intj=0;

while((23)){

b[j]=0;

while((*p<='0'||*p>='9')&&*p!

=0)

p++;

while((24)&&*p!

=0)

b[j]=(25);

j++;

}

returnj-1;

}

5.以下程序的功能是:

从给出的字符串中依次取出被空格隔开的子串,将各子串分别存入动态分配的内存空间,让一维指针数组的各指针依次指向各个动态空间中的子串。

例如:

给出的字符串为“copyfile.datfile2.dat”,则p指针数组分别指向子串“copy”,“file.dat”、“file2.dat”。

#include

intfun(char*s,char*p[]);

voidmain()

{char*p[5],s[100]="copyfile.datfile2.dat";

intn;

n=fun(s,p);

cout<<"n="<

for(inti=0;i

for(i=0;i

intfun(char*s,char*p[]){

inti=0;

char*ps,*ts;

while(*s){

while(*s=='')s++;//跳过子串前的空格

ps=  (28) ; 

while(*s!

=''&&*s!

=0)s++;//扫描子串

if(ps

p[i]=ts=(29);

while(ps

*ts=0;i++;}}

return(31);}

6.下列程序的功能是:

将两个已升序排好的数组合并为一个升序排序的数组(归并)。

程序说明:

两数组合并时,从第一个元素开始比较两数组对应元素,小的取下来,顺序放入新的数组;取下所指元素的下标后移,再比较,依此类推;直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。

#include

voidmain()

{inta[5]={1,3,5,7,9},b[5]={2,4,6,8,10},c[10],i,k,j=0;

for(i=0,k=0;i<5&&k<5;)

{if(a[i]

elsec[j]=b[k],k++,j++;}

if((34))

for(;k<5;k++)c[j++]=b[k];

else

for(;i<5;i++)c[j++]=(35);for(j=0;j<10;j++)//输出

{cout<

if((j+1)%5==0)cout<

7.下面程序先建立一条单向链表,其中第一个结点包含产品名称和产品类别。

然后对链表中的结点按产品类别进行分类,将同类型产品的结点放到一起。

具体实现过程为:

依次从已已建立的单向链表中取下一个结点,根据该结点的产品类别值插入到新的链表中。

插入过程为:

若新链表上已有该产品类别的结点,则将该结点插入到同类别结点的最后一个结点的后面;否则,将该结点插入到新链表的最后一个结点的后面。

最后输出分类后链表上各个结点的信息。

[程序](5分)

#include

#include

structnode{

charproduct[20];//产品名称

charcategory[10];//产品类别

nude*next;

}

(16)create(void){//创建链表

nodetemp,*p2=&temp;

charproduct[20],category[10];

while

(1){

cout<<"输入产品名称和类别,当输入产品名称为end时,表示结束:

";

cin>>product>>category;

if(strcmp(product,"end")==0)break;

p2->next=newnode;

p2=p2->next;

strcpy(p2->product,product);

strcpy(p2->category,category);

}

(17)

returntemp.next;

}

voidprint(node*h){

while(h){

cout<product<<'\t'<category<

h=h->

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

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1