C语言指针习题及问题详解.docx

上传人:b****8 文档编号:23756225 上传时间:2023-05-20 格式:DOCX 页数:13 大小:19.13KB
下载 相关 举报
C语言指针习题及问题详解.docx_第1页
第1页 / 共13页
C语言指针习题及问题详解.docx_第2页
第2页 / 共13页
C语言指针习题及问题详解.docx_第3页
第3页 / 共13页
C语言指针习题及问题详解.docx_第4页
第4页 / 共13页
C语言指针习题及问题详解.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言指针习题及问题详解.docx

《C语言指针习题及问题详解.docx》由会员分享,可在线阅读,更多相关《C语言指针习题及问题详解.docx(13页珍藏版)》请在冰豆网上搜索。

C语言指针习题及问题详解.docx

C语言指针习题及问题详解

指针主要容的习题与答案

一.选择题

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

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

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

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

3.假设有说明:

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

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);下面函数的输出结果是D。

voidprint_value(int*x)

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

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

5.假设有说明:

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

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;下面均代表地址的一组选项是D。

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

C。

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循环的执行次数是C。

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

for(;*s!

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

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

C。

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

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

C。

char*s=〞abcde〞;

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

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

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

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

12.设有程序段:

chars[]=〞china〞;char*p;p=s;如此下面表示正确的答案是D。

A〕s和p完全一样

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

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

D〕*p与s[0]相等

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

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++;}

C。

chara[]=〞language〞,*p;

p=a;

while(*p!

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

A〕LANGUAGEB〕languageC〕LANGD〕langUAGE

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

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);

}

D。

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〞;如此以下不正确的表示是D。

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

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

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

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

19.假设已定义chars[10];如此在下面表达式中不表示s[1]的地址是B。

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

20.假设有定义:

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

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

21.假设有定义:

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

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

22.假设有定义:

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

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

23.假设有定义:

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

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数组元素的正确引用是C。

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

26.假设有定义:

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

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

27.假设有定义:

int(*p)[4];如此标识符pC。

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

B〕是一个指针数组名

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

D〕定义不合法

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

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

B。

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,如此不正确的赋值语句是D。

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

32.假设要对a进展自减运算,如此a应有下面说明D。

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

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

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

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的表达式是C。

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

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

C。

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应具有下面说明D。

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〕&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

B。

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]的表达式是D。

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]的值是B。

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

41.设有定义:

char*cc[2]={“1234〞,〞5678〞};如此正确的表示是A。

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

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

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

D〕cc元素的值分别维〞1234〞和〞5678〞

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

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

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

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

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

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

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

C。

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

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

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

D〕假设有说明:

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

三.程序阅读题

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

5

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));

}

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

6

fun(char*s)

{char*p=s;

while(*p)p++;

return(p-s);

}

main()

{char*a=〞abcdef〞;

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

}

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

abcdefglkjih

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〞);

}

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

976531

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);

}

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

Java

dBase

CLanguage

Pascal

main()

{char*a[]={“Pascal〞,〞CLanguage〞,〞dBase〞,〞Java〞};

char(**p)[];intj;

p=a+3;

for(j=3;j>=0;j--)

printf(“%s\n〞,*(p--));

}

四.程序填空题

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

(2)空使程序完整。

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

{inti;

*sp=【1str[0]】;

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

if(strlen(*sp)

}

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

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

intchnum(char*p)

{intnum=0,k,len,j;

len=strlen(p);

for(;【1*p!

=’\0’】;p++){

k=【2*p-‘0’】;j=(--len);

while(【3j--!

=0】)k=k*10;

num=num+k;

}

return(num);

}

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

intcount(char*str,char*substr)

{inti,j,k,num=0;

for(i=0;【1str[i]!

=’\0’】;i++)

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

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

num++;break;

}

return(num);

}

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

(2)空使程序完整。

voidconj(char*s1,char*s2)

{

while(*s1)【1s1++】;

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

*s1=’\0’;

}

五.编程题

1.定义3个整数与整数指针,仅用指针方法按由小到大的顺序输出。

2.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

写三个函数:

①输入10个数;②进展处理;③输出10个数。

所有函数的参数均用指针。

3.编写一个求字符串的函数〔参数用指针〕,在主函数中输入字符串,并输出其长度。

4.编写一个函数〔参数用指针〕将一个3×3矩阵转置。

5.写函数原型为intstrcmp(char*s1,char*s2);的函数,该函数实现两个字符串的比拟〔函数功能描述参见教材P137,strcmp字符串处理函数〕。

×3数组各行元素之和。

 

教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。

教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。

 

教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。

教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。

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

当前位置:首页 > 农林牧渔 > 农学

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

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