指针结构体.docx

上传人:b****7 文档编号:9352411 上传时间:2023-02-04 格式:DOCX 页数:19 大小:23.45KB
下载 相关 举报
指针结构体.docx_第1页
第1页 / 共19页
指针结构体.docx_第2页
第2页 / 共19页
指针结构体.docx_第3页
第3页 / 共19页
指针结构体.docx_第4页
第4页 / 共19页
指针结构体.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

指针结构体.docx

《指针结构体.docx》由会员分享,可在线阅读,更多相关《指针结构体.docx(19页珍藏版)》请在冰豆网上搜索。

指针结构体.docx

指针结构体

指针、结构体练习题

一、选择题

1.变量的指针,其含义是指该变量的。

A)值B)地址C)名D)一个标志

2.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。

A)k=*ptr1+*ptr2B)ptr2=kC)ptr1=ptr2D)k=*ptr1*(*ptr2)

3.若有说明:

int*p,m=5,n;以下程序段正确的是。

A)p=&n;B)p=&n;

scanf(“%d”,&p);scanf(“%d”,*p);

C)scanf(“%d”,&n);D)p=&n;

*p=n;*p=m;

4.已有变量定义和函数调用语句:

inta=25;print_value(&a);下面函数的输出结果是。

voidprint_value(int*x)

{printf(“%d\n”,++*x);}

A)23B)24C)25D)26

5.若有说明:

int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是。

A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;

C)p1=&m;p2=p1;D)p1=&m;*p1=*p2;

6.若有语句:

int*p,a=4;和p=&a;下面均代表地址的一组选项是。

A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p

7.下面判断正确的是。

A)char*a=”china”;等价于char*a;*a=”china”;

B)charstr[10]={“china”};等价于charstr[10];str[]={“china”;}

C)char*s=”china”;等价于char*s;s=”china”;

D)charc[4]=”abc”,d[4]=”abc”;等价于charc[4]=d[4]=”abc”;

8.下面程序段中,for循环的执行次数是。

char*s=”\ta\018bc”;

for(;*s!

=’\0’;s++)printf(“*”);

A)9B)7C)6D)5

9.下面能正确进行字符串赋值操作的是。

A)chars[5]={“ABCDE”};B)chars[5]={‘A’,’B’,’C’,’D’,’E’};

C)char*s;s=”ABCDE”;D)char*s;scanf(“%s”,s);

10.下面程序段的运行结果是。

char*s=”abcde”;

s+=2;printf(“%d”,s);

A)cdeB)字符’c’C)字符’c’的地址D)不确定

11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。

A)c=*p1+*p2B)p2=cC)p1=p2D)c=*p1*(*p2)

12.设有程序段:

chars[]=”china”;char*p;p=s;则下面叙述正确的是。

A)s和p完全相同

B)数组s中的内容和指针变量p中的内容相等

C)s数组长度和p所指向的字符串长度相等

D)*p与s[0]相等

13.以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是。

A)strcpy1(char*p1,char*p2)

{while((*p1++=*p2++)!

=’\0’);}

B)strcpy2(char*p1,char*p2)

{while((*p1=*p2)!

=’\0’){p1++;p2++}}

C)strcpy3(char*p1,char*p2)

{while(*p1++=*p2++);}

D)strcpy4(char*p1,char*p2)

{while(*p2)*p1++=*p2++;}

14.下面程序段的运行结果是。

chara[]=”language”,*p;

p=a;

while(*p!

=’u’){printf(“%c”,*p-32);p++;}

A)LANGUAGEB)languageC)LANGD)langUAGE

15.若有语句:

chars1[]=”string”,s2[8],*s3,*s4=”string2”;则库函数strcpy的错误调用是。

A)strcpy(s1,”string2”);B)strcpy(s4,”string1”);

C)strcpy(s3,”string1”);D)strcpy(s1,s2);

16.以下与库函数strcmp(char*s,char*t)功能相等的程序段是。

A)strcmp1(char*s,char*t)

{for(;*s++=*t++;)

if(*s==’\0’)return0;

return(*s-*t);

}

B)strcmp2(char*s,char*t)

{for(;*s++=*t++;)

if(!

*s)return0;

return(*s-*t);

}

C)strcmp3(char*s,char*t)

{for(;*t==*s;)

{if(!

*t)return0;t++;s++;}

return(*s-*t);

}

D)strcmp4(char*s,char*t)

{for(;*s==*t;s++,t++)

if(!

*s)return0;

return(*t-*s);

}

17.以下说明不正确的是。

A)chara[10]=”china”;B)chara[10],*p=a;p=”china”;

C)char*a;a=”china”;D)chara[10],*p;p=a=”china”;

18.设有说明语句:

chara[]=”Itismine”;char*p=”Itismine”;则以下不正确的叙述是。

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制

C)p变量中存放的地址值可以改变

D)a中只能存放10个字符

19.若已定义chars[10];则在下面表达式中不表示s[1]的地址是。

A)s+1B)s++C)&s[0]+1D)&s[1]

20.若有定义:

inta[5],*p=a;则对a数组元素的正确引用是。

A)*&a[5]B)a+2C)*(p+5)D)*(a+2)

21.若有定义:

inta[5],*p=a;则对a数组元素地址的正确引用是。

A)p+5B)*a+1C)&a+1D)&a[0]

22.若有定义:

inta[2][3];则对a数组的第i行第j列元素值的正确引用是。

A)*(*(a+i)+j)B)(a+i)[j]C)*(a+i+j)D)*(a+i)+j

23.若有定义:

inta[2][3];则对a数组的第i行第j列元素地址的正确引用是。

A)*(a[i]+j)B)(a+i)C)*(a+j)D)a[i]+j

24.若有程序段:

inta[2][3],(*p)[3];p=a;则对a数组元素地址的正确引用是。

A)*(p+2)B)p[2]C)p[1]+1D)(p+1)+2

25.若有程序段:

inta[2][3],(*p)[3];p=a;则对a数组元素的正确引用是。

A)(p+1)[0]B)*(*(p+2)+1)C)*(p[1]+1)D)p[1]+2

26.若有定义:

inta[5];则a数组中首元素的地址可以表示为。

A)&aB)a+1C)aD)&a[1]

27.若有定义:

int(*p)[4];则标识符p。

A)是一个指向整型变量的指针

B)是一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组

D)定义不合法

28.以下与int*q[5];等价的定义语句是。

A)intq[5]B)int*qC)int*(q[5])D)int(*q)[5]

29.以下正确的说明语句是。

A)int*b[]={1,3,5,7,9};

B)inta[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};

C)inta[]={1,3,5,7,9};int*num[5]={a[0],a[1],a[2],a[3],a[4]};

D)inta[3][4],(*num)[4];num[1]=&a[1][3];

30.若有定义:

intb[4][6],*p,*q[4];且0≤i<4,则不正确的赋值语句是。

A)q[i]=b[i];B)p=b;C)p=b[i];D)q[i]=&b[0][0]

31.已有定义int(*p)();指针p可以。

A)代表函数的返回值B)指向函数的入口地址

C)表示函数的类型D)表示函数返回值的类型

32.若要对a进行自减运算,则a应有下面说明。

A)intp[3];B)intk;C)char*a[3]D)intb[10];

int*a=p;int*a=&k;int*a=b+1;

33.以下选项中,对指针变量p的正确操作是。

A)inta[3],*p;B)inta[5],*p;C)inta[5];D)inta[5]

p=&a;p=a;int*p=a=100;int*p1,*p2=a;

*p1=*p2;

34.若有定义:

intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是。

A)x[3]B)p1=x+3,*p1++

C)p1=x+2,*(p1++)D)p1=x+2,*++p1

35.下面程序段的输出是。

inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;

for(k=01;k<4;k++)q[k]=&a[k*3];

printf(“%d\n”,q[3][0]);

A)8B)16C)20D)输出不合法

36.若要对a进行自增运算,则a应具有下面说明。

A)inta[3][2];B)char*a[]={“12”,”ab”};

C)char(*a)[3]D)intb[10],*a=b;

37.若有定义inta[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式。

A)&a[0][0]+6*i+jB)&a[0][0]+4*j+i

C)&a[0][0]+4*i+jD)&a[0][0]+6*j+I

38.下面程序的运行结果是。

main()

{intx[5]={2,4,6,8,10},*p,**pp;

p=x,pp=&p;

printf(“%d”,*(p++));

printf(“%3d”,**pp);

}

A)44B)24C)22D)46

39.若有定义intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[3]=x;则能够正确表示数组元素x[1][2]的表达式是。

A)*((*p+1)[2])B)(*p+1)+2

C)*(*(p+5))D)*(*(p+1)+2)

40.若有说明:

char*language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是。

A)一个字符B)一个地址C)一个字符串D)一个不定值

41.设有定义:

char*cc[2]={“1234”,”5678”};则正确的叙述是。

A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址

B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

C)cc是指针变量,它指向含有两个数组元素的字符型一维数组

D)cc元素的值分别维”1234”和”5678”

42.已有定义int(*p)();指针p可以。

A)代表函数的返回值B)指向函数的入口地址

C)表示函数的类型D)表示函数返回值的类型

43.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是。

A)p=max;B)p=max(a,b);C)*p=max;D)*p=max(a,b);

44.若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是。

A)(*p)max(a,b)B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);

45.以下正确的叙述是。

A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定

B)C语言允许main函数带形参,形参名只能是argc和argv

C)当main函数带有形参时,传给形参的值只能从命令行中得到

D)若有说明:

intmain(intargc,char**argv),则argc的值必须大于1

46.当说明一个结构体变量时,系统分配给它的内存是_______。

A.各成员所需内存量的总和。

B.结构中第一个成员所需内存量。

C.成员中占内存量最大者所需的容量。

D.结构中最后一个成员所需内存量。

47.以下说法中正确的是_______。

A.两个结构的变量不可以进行比较B.不同结构中的长成员不能有相同的成员名

C.一个数据结构只能包含一种数据类型D.关键字typedef用于定义新的数据类型

48.以下说法中正确的是_______。

A.一个数据结构只能包含一种数据类型

B.不同结构中的成员不能有相同的成员名

C.两个结构的变量不可以进行比较

D.关键字typedef用于定义新的数据类型

49.下列程序的输出结果是______。

structabc

{inta,b,c;};

main()

{structabcs[2]={{1,2,3},{4,5,6}};

intt;

t=s[0].a+s[1].b;

printf("%d\n",t);}

A.5  B.7  C.6  D.8

50.设有以下说明和语句,则值为210的表达式是_______。

structs

{inta;int*b;};

intx0[]={110,120},x1[]={210,220};

structsx[]={{100,x0},{200,x1}},*p=x;

x[0].b=x0;x[1].b=x1;

A.*p->bB.(++p)->aC.*(p++)->bD.*(++p)->b

51.若有以下说明和语句:

structstudent

{intage;

intnum;

}std,*p;p=&std;

则以下对结构体变量std中成员age的引用方式不正确的是_______。

A.std.ageB.p->ageC.(*p).ageD.*p.age

52.以下关于typedef的叙述中错误的是_______。

A.用typedef可以增加新的类型

B.用typedef可以定义各种类型名,但不能用来定义变量

C.用typedef只是将已有的类型用新的标识符来代表

D.使用typedef有利于程序的通用和移植

53.以下选项中,能定义s为合法的结构体变量的是。

A. typedefstructabcB. struct

{doublea;{doublea;

charb[10];charb[10];

}s;}s;

C. structABCD. typedefABC

{doublea;{doublea;

charb[10];charb[10];

}}ABCs;

ABCs;

54.若有如下定义,则下面在scanf函数调用语句中对结构体成员的引用不正

确是。

structpupil

{charname[20];

intage;

intsex;

}pup[5],*p;

A.scanf("%d",p->age);B.scanf("%s",pup[0].name);

C.scanf("%d",&pup[0].age);D.scanf("%d",&(pup[1].sex));

55.下列命令或语句中,正确的是__________。

A.#defineMYNAME=”ABC”B.#includestdio.h

C.for(i=0;i<10;i--);D.structstudent{intnum};

56.下列对枚举类型的正确定义形式。

A.enuma={one,two,three};B.enuma{one=9,two=1,three};

C.enuma={“one”,”two”,”three”};D.enuma{“one”,“two”,“three”};

57.若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是。

A.ptr->a  B.(++ptr)->a C.x[1].a  D.x[0].b->a

structs

{inta;structs*b;}x[3]={{5,&x[1]},{7,&x[2]},{9,0}},*ptr=&x[0];

58.设有如下定义。

structss{charnumber[10];

intage;charsex;}s[2],*p=s;

下面各输入语句中错误的是。

A.scanf("%d",&(p).age)B.scanf("%d",&s.number)

C.scanf("%c",&s[0].sex)D.scanf("%c",&(p->sex))

59.设有如下定义,若要使p指向date中的a域,正确的赋值语句是。

structs

{floata;intb;}d;

float*p;

A.p=&a;B.p=d.a

C.p=&d.a;D.p=&d

60.有以下程序程序运行后的输出结果是.

structstudent

{charnumber[10];floatscore[3];};

main()

{structstudents[3]={{"1001",70,70,80},{"1002",75,80,75},{"1003",90,90,90}},*p=s;

inti;floatsum=0;

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

sum+=p->score[i];

printf("5.1f\n",sum);}

A.220.0B.230.0C.240.0D.250.0

二、填空题

下面函数的功能是从输入的十个字符串中找出最长的那个串,请填

(2)空使程序完整。

voidfun(charstr[10][81],char**sp)

{inti;

*sp=【1】;

for(i=1;i<10;i++)

if(strlen(*sp)

}

下面函数的功能是将一个整数字符串转换为一个整数,例如:

”-1234”转换为1234,请填(3)空使程序完整。

intchnum(char*p)

{intnum=0,k,len,j;

len=strlen(p);

for(;【1】;p++){

k=【2】;j=(--len);

while(【3】)k=k*10;

num=num+k;

}

return(num);

}

下面函数的功能使统计子串substr在母串str中出现的次数,请填(3)空使程序完整。

intcount(char*str,char*substr)

{inti,j,k,num=0;

for(i=0;【1】;i++)

for(【2】,k=0;substr[k]==str[j];k++;j++)

if(substr[【3】]==’\0’){

num++;break;

}

return(num);

}

下面函数的功能是将两个字符串s1和s2连接起来,请填

(2)空使程序完整。

voidconj(char*s1,char*s2)

{

while(*s1)【1】;

while(*s2){*s1=【2】;s1++,s2++;}

*s1=’\0’;

}

 

11.写出下面程序的运行结果。

func(char*s,chara,intn)

{intj;

*s=a;j=n;

while(*s

returnj;

}

main()

{charc[6];

inti;

for(i=1;i<=5;i++)*(c+1)=’A’+i+1;

printf(“%d\n”,func(c,’E’,5));

}

12.写出下面程序的运行结果。

fun(char*s)

{char*p=s;

while(*p)p++;

return(p-s);

}

main()

{char*a=”abcdef”;

printf(“%d\n”,fun(a));

}

13.写出下面程序的运行结果。

sub(char*a,intt1,intt2)

{charch;

while(t1

ch=*(a+t1);*(a+t1)=*(a+t2);*(a+t2)=ch;

t1++;t2--;

}

}

main()

{chars[12];

inti;

for(i=0;i<12;i++)s[i]=’A’+i+32;

sub(s,7,11);

for(i=0;i<12;i++)printf(“%c”,s[i]);

printf(“\n”);

}

14.当运行以下程序时,写出输入6↙的程序运行结果。

sub(char*a,charb)

{while(*(a++)!

=’\0’);

while(*(a-1)

*(a--)=*(a-1);

*(a--)=b;

}

main()

{chars[]=”97531”,c;

c=getchar();

sub(s,c);puts(s);

}

15.写出下面程序的运行结果。

main()

{char*a[]={“Pascal”,”CLang

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

当前位置:首页 > 高等教育 > 文学

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

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