C语言习题十指针Word文档格式.docx

上传人:b****6 文档编号:19521276 上传时间:2023-01-07 格式:DOCX 页数:14 大小:23.91KB
下载 相关 举报
C语言习题十指针Word文档格式.docx_第1页
第1页 / 共14页
C语言习题十指针Word文档格式.docx_第2页
第2页 / 共14页
C语言习题十指针Word文档格式.docx_第3页
第3页 / 共14页
C语言习题十指针Word文档格式.docx_第4页
第4页 / 共14页
C语言习题十指针Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言习题十指针Word文档格式.docx

《C语言习题十指针Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言习题十指针Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

C语言习题十指针Word文档格式.docx

n代表的是变量n的地址,将一个地址赋给一个值是不正确的,所以选项B错误;

指针p代表存储单元的地址,前面不需要再加&

,所以选项C错误;

选项D是将一个地址进行输出,所以也是错误的。

除了给指针变量赋地址值外,还可以给指针变量赋NULL值,选项A正确。

故本题答案选A。

3.有以下程序

string.h>

main(intargc,char*argv[])

{inti=1,n=0;

while(i<

argc){n=n+strlen(argv[i]);

i++;

n);

该程序生成的可执行文件名为:

proc.exe。

若运行时输入命令行:

proc1234567

则程序的输出结果是______。

A、3B、5C、7D、11

解析:

本题考查的是带有参数的main函数。

main()可以带有参数,并且参数只能有两个,第一个参数(argc)类型为整型用来记下命令行的参数个数,第二个参数(argv)为一个字符型指针数组,其各个元素用来记下命令行各参数字符串的首地址。

此题执行时,argc的值为4,在循环中依次使用strlen()函数求出argv

(1)、argv

(2)、argv(3)指向的字符串(123、45、67)的长度并把他们加到变量n中,得到n的值为7。

故本题答案为C。

4.若有以下函数首部

intfun(doublex[10],int*n)

则下面针对此函数的函数声明语句中正确的是______。

A、intfun(doublex,int*n);

B、intfun(double,int);

C、intfun(double*x,intn);

D、intfun(double*,int*);

本题考查的是函数的声明。

函数声明可以照写已定义的函数的首部,再加一个分号就成为了对函数的声明,在函数声明中也可以不写形参名,而只写形参的类型,但要保证与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参数顺序相同。

字符数组可用指针来表示,所以选项D正确。

故本题答案为D。

5.有以下程序

{chars[]={"

aeiou"

},*ps;

ps=s;

%c\n"

*ps+4);

}

程序运行后输出的结果是______。

A、aB、eC、uD、元素s[4]的地址

本题考查的是指针变量的运算。

此题中先定义一个指针变量ps,并将s的首地址赋给此指针变量,*ps+4相当于先从指针变量ps指向的地址中取出相应数据"

a"

后,对此数据加4,a的ASCII码为32,32+4=36,对应于字符e。

故本题答案选B。

6.有以下程序

voidchange(intk[]){k[0]=k[5];

{intx[10]={1,2,3,4,5,6,7,8,9,10},n=0;

while(n<

=4)

{change(&

x[n]);

n++;

for(n=0;

n<

n++)printf("

x[n]);

\n"

A、678910B、13579C、12345D、62345

解析:

本题考查的是数组名作函数参数。

当n=0时,把x[0]的地址传给被调函数change,即将形参k与实参x指向同一个存储单元x[0],执行被调函数后,k[0]=6,即x[0]=6;

当n=1时,形参k指向x数组的第1个数组元素所在单元,即k[0]与x[1]共用同一存储单元,执行被调函数后,k[0]=7,即x[1]=7,依次类推得出x[0]到x[4]的值分别为6、7、8、9、10。

故本题答案为A。

7.有以下程序

intadd(inta,int{return(a+b);

main()

{intk,(*f)(),a=5,b=10;

f=add;

…}

则以下函数调用语句错误的是______。

A、k=(*f)(a,b);

B、k=add(a,b);

C、k=*f(a,b);

D、k=f(a,b);

此题定义了指向函数的指针变量f指向了函数add的入口地址,所以,要调用函数,可以通过函数名(选项B的形式)或函数指针变量(选项A、D的形式)调用即可,而选项C中是先进行函数调用,然后对调用后返回的整型值求其指针值,是不合理的。

故本题答案为C。

8.有以下程序

{inta=1,b=3,c=5;

int*p1=&

a,*p2=&

b,*p=&

c;

*p=*p1*(*p2);

c);

执行后的输出结果是______。

A、1B、2C、3D、4

本题考查的是通过指针引用数据进行计算。

p1=&

a表示指针变量p1指向元素1的地址;

p2=&

b表示指针变量p2指向元素3的地址;

p=&

c表示指针变量p指向元素5的地址;

执行*p=*p1*(*p2)=1*3=3,所以最后的结果为:

3。

9.在16位编译系统上,若有定义inta[]={10,20,30},*p=&

a;

,少逗号当执行p++;

后,下列说法错误的是______。

A、p向高地址移了一个字节B、p向高地址移了一个存储单元

C、p向高地址移了两个字节D、p与a+1等价

本题考查的是指针的应用。

题目中p=&

a表示指针p指向第一个元素a[0],执行p++是指使p指向下一个数据对象的地址,也就是向高地址移了一个存储单元;

因为int数据占两个字节,所以p相当于向高地址移了两个字节,所以选项A错误。

10.有以下程序

voidswap(char*x,char*y)

{chart;

t=*x;

*x=*y;

*y=t;

{char*s1="

abc"

*s2="

123"

;

swap(s1,s2);

%s,%s\n"

s1,s2);

程序执行后的输出结果是______。

A、123,abcB、abc,123C、1bc,a23D、321,cba

本题考查的是指针变量值的交换。

C语言中,字符串常量在内存中是以字符数组的形式进行存放的,因此字符指针x和y指向的是各字符串的首地址,也就是字符串第一个字符的地址,则*x与*y交换的是字符串的第一个字符,即字符"

与"

1"

的交换,而字符串中其它字符保持不变。

11.有以下程序

voidfun1(char*p)

{char*q;

q=p;

while(*q!

='

\0'

{(*q)++;

q++;

}}

{chara[]={"

Program"

},*p;

p=&

a[3];

fun1(p);

%s\n"

a);

A、ProhsbnB、PrphsbnC、ProgsbnD、Program

本题考查的是指向数组的指针作为函数的参数及指针的运算。

如果形参数组中的元素发生变化,实参也将发生相应变化。

指针p指向数组的第三位地址(即字符"

g"

的地址),q=p也就相当于指针q指向数组的第三位地址。

表达式(*q)++,首先根据()的优先级得到a[3]的值"

,再进行加1运算,所以g也就变成了h;

表达式q++是将地址加1,也就是指向下一个地址a[4]。

然后再执行while()语句,直到遇到'

结束循环,返回形参。

故本题答案为A。

12.有以下程序

{char*p[]={"

3697"

"

2548"

};

inti,j;

longnum=0;

2;

i++)

{j=0;

while(p[i][j]!

{if((p[i][j]-'

0'

)%2)num=10*num+p[i][j]-'

j+=2;

}}

num);

程序执行后的输出结果上______。

A、35B、37C、39D、3975

本题考查的是指针数组。

题目中定义的指针数组"

*p[]"

相当于一个两行四列的数组。

执行for()语句i=0,j=0,p[i][j]=p[0][0]=3,满足while循环条件,执行循环体中的if语句得num=3,j=2,此时p[i][j]=p[0][2]=9,满足循环条件,执行while循环体得num=39,j=4,判断while条件且不符合并退出while循环;

再次执行for()语句i=1,j=0,p[i][j]=p[1][0]=2,满足while条件,执行循环体中的if语句,但不符合if条件,所以num不进行运算,j进行加2运算j=2,此时p[i][j]=p[1][2]=4,if条件还是为假,num不进行运算,j进行加2运算j=4,再执行while语句,条件不符合退出循环。

所以结果为39。

13.设有定义:

intn1=0,n2,*p=&

n2,*q=&

n1;

,以下赋值语句中与n2=n1;

语句等价的是______。

A、*p=*q;

B、p=q;

C、*p=&

D、p=*q;

本题考查的是指针变量的赋值。

本题答案为A。

14.有以下程序

voidsum(inta[])

{a[0]=a[-1]+a[1];

{inta[10]={1,2,3,4,5,6,7,8,9,10};

sum(&

a[2]);

printf("

a[2]);

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

本题考查的是函数参数的传递。

15.有以下程序

main()

{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&

a[3],*q=p+2;

*p+*q);

A、16B、10C、8D、6

本题考查的是指向数组的指针变量。

数组a各元素a[0]~a[9]的值依次为1~10;

在程序的说明部分,指针变量p初始化为&

a[3],即*p的值为4;

指针变量q初始化为p+2,即&

a[3]+2,所以*q的值为6,所以*p+*q的值为10。

故本题答案为B。

16.有以下程序,其中函数f的功能是将多个字符串按字典顺序排序

voidf(char*p[],intn)

{char*t;

for(i=0;

n-1;

for(j=i+1;

j<

j++)

if(strcmp(p[i],p[j])>

0){t=p[i];

p[i]=p[j];

p[j]=t;

{char*p[5]={"

aabdfg"

abbd"

dcdbe"

cd"

f(p,5);

strlen(p[1]));

A、2B、3C、6D、4

本题经过排序后,得到第二个字符串是"

,所以输出结果是4。

17.有以下程序

voidf(char*s,char*t)

{chark;

k=*s;

*s=*t;

*t=k;

s++;

t--;

if(*s)f(s,t);

{charstr[10]="

abcdefg"

*p;

p=str+strlen(str)/2+1;

f(p,p-2);

str);

A、abcdefgB、gfedcbaC、gbcdefaD、abedcfg

本程序的作是将字符串str倒序。

故本题答案为B。

18.有以下程序

voidswap1(intc0[],intc1[])

{intt;

t=c0[0];

c0[0]=c1[0];

c1[0]=t;

voidswap2(int*c0,int*c1)

t=*c0;

*c0=*c1;

*c1=t;

{inta[2]={3,5},b[2]={3,5};

swap1(a,a+1);

swap2(&

b[0],&

b[1]);

%d%d%d%d\n"

a[0],a[1],b[0],b[1]);

A、3553B、5335C、3535D、5353

解析:

函数swap1、swap2的作用均为交换两个数。

主调函数"

swap1(a,a+1)"

使得数组a的首地址赋给形参c0[],使得c0指向a[0]所在的存储单元,a[1]的地址赋给形参c1[],使得c1指向a[1]所在的存储单元,故交换c0[0]与c1[0]后,a[0]与a[1]值也发生了变化;

swap2(&

起着同样的作用,使得指针变量c0指向了b[0]存储单元,c1指向了b[1]存储单元,并在swap2函数中发生了交换,所以b[0]、b[1]的值也发生变化,故本程序输出的结果是5353。

故本题答案为D。

19.有以下程序

{

inta[3][2]={0},(*ptr)[2],i,j;

i++){ptr=a+i;

ptr);

ptr++;

}

3;

i++)

{for(j=0;

j++)printf("

%2d"

a[i][j]);

}}

若运行时输入:

123<

回车>

,则输出结果是______。

A、产生错误信息B、10C、12D、10

203020

000030

本题定义了一个二维数组a,又定义了一个指针变量ptr,它用于指向包含2个元素的一维数组,在第一个for循环中,语句"

ptr=a+i;

用于将指针变量ptr指向第i行的数组元素,通过两次循环,分别给二维数组a的第0行的第1个元素和第1行的第1个元素赋了值1和2。

20.有以下程序

point(char*p){p+=3;

}

{charb[4]={'

a'

'

b'

c'

d'

},*p=b;

point(p);

*p);

A、aB、bC、cD、d

本题考查的是指针变量对数组的引用。

21.若有以下说明和语句

intc[4][5],(*p)[5];

p=c;

能够正确引用c数组元素的是______。

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

本题考查的是数组元素的引用。

本题答案为D。

22.有以下程序

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;

*q=*(p+5);

%d%d\n"

*p,*q);

A、运行后报错B、66C、611D、510

此题考查的是指针变量赋值。

本题将指针q赋值为空,即指向了空地址,而对空地址所对应的内容赋值*q=*(p+5)是会出错的,所以输出结果会报错。

所以此题答案为A。

23.有以下程序

{inta=7,b=8,*p,*q,*r;

q=&

b;

r=p;

p=q;

q=r;

%d,%d,%d,%d\n"

*p,*q,a,b);

A、8,7,8,7B、7,8,7,8C、8,7,7,8D、7,8,8,7

此题考的是指针变量。

本题答案为C。

24.有以下程序

{charstr[][10]={"

China"

Beijing"

},*p=str;

p+10);

A、ChinaB、BejingC、ngD、ing

此题考的是指向数组元素的指针变量。

p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。

25.设有如下的程序段

charstr[]="

Hello"

char*ptr;

ptr=str;

执行完上面的程序段后,*(ptr+5)的值为______。

A、'

o'

B、'

C、不确定的值D、'

的地址

本题的考查点是字符数组的结束标志。

26.若已定义:

inta[9],*p=a;

并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是______。

A、p+1B、a+1C、a++D、++p

本题的考查点是数组地址的表示。

选项C中,数组名所表示的数组地址不能被重新赋值。

27.已定义以下函数

fun(char*p2,char*p1)

{while((*p2=*p1)!

='

){p1++;

p2++;

}}

函数的功能是______。

A、将p1所指字符串复制到p2所指内存空间B、将p1所指字符串的地址赋给指针p2

C、对p1和p2两个指针所指字符串进行比较

D、检查p1和p2两个指针所指字符串中是否有'

while((*p2=*p1)!

表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。

在这里“*P2=*p1”是赋值操作,而不是比较是否相等,比较应当为双等号“==”。

所以B,C,D都不对。

28.若有定义:

int*p[3];

,则以下叙述中正确的是______。

A、定义了一个基类型为int的指针变量p,该变量具有三个指针

B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C、定义了一个名为*p的整型数组,该数组含有三个int类型元素

D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

int*p[3]表示此数组是指针类型的,每个数组元素(指针变量)都可指向一个整型的指针变量。

29.设有定义:

inta,*pa=&

以下scanf语句中能正确为变量a读入数据的是___。

A、scanf("

pa);

B、scanf("

C、scanf("

pa);

D、scanf("

*pa);

scanf函数可以用来输入任何类型的多个数据。

30.有以下程序

{charch[]="

uvwxyz"

*pc;

pc=ch;

*(pc+5));

A、zB、0C、元素ch[5]的地址D、字符y的地址

本题中定义了一个字符串数组和指针,并将指针pc指向该数组的首地址,语句中的*(pc+5)指的就是pc[5]的值,所以最后输出的结果为z。

31.有以下函数

intfun(char*s)

{char*t=s;

while(*t++);

return(t-s);

该函数的功能是______。

A、比较两个字符串的大小B、计算s所指字符串占用内存字节的个数

C、计算s所指字符串的长度D、将s所指字符串复制到字符串t中

本题考查的是通过字符指针进行字符长度的计算。

故本题答案选C。

32.若有定义:

char*x="

abcdefghi"

以下选项中正确运用了strcpy函数的是____。

A、chary[10];

strcpy(y,x[4]);

B、chary[10];

strcpy(++y,&

x[1]);

C、chary[10],*s;

strcpy(s=y+5,x);

D、chary[10],*s;

strcpy(s=y+1,x+1);

本题考查的是用于字符串处理的函数strcpy。

33.设有以下定义和语句

charstr[20]="

Program"

p=str;

则以下叙述中正确的是______。

A、*P与str[0]中的值相等B、str与p的类型完全相同

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

D、数组str中存放的内容和指针变量p中存放的内容相同

34.以下语句或语句组中,能正确进行字符串赋值的是______。

A、char*sp;

*sp="

right!

B、chars[10];

s="

C、chars[10];

*s="

D、char*sp="

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

当前位置:首页 > 医药卫生 > 临床医学

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

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