C语言程序设计 第九章 指针.docx
- 文档编号:16226624
- 上传时间:2023-07-11
- 格式:DOCX
- 页数:16
- 大小:21.81KB
C语言程序设计 第九章 指针.docx
《C语言程序设计 第九章 指针.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 第九章 指针.docx(16页珍藏版)》请在冰点文库上搜索。
C语言程序设计第九章指针
一、 选择题
1、 指针是一种____
A、 标识符B、 变量C、 内存地址D、 运算符
2、 显示指针变量P中的值,可以使用命令_____
A、 Printf(“%d”,p);B、 Printf(“%d”,*p);
C、 Printf(“%d”,*p);D、 Printf(“%d”,p);
3、 为指针变量P输入整型变量i的地址,可以使用命令____
A、 Scanf(“%p”,&p);B、 *p=i;C、 P=&I;D、 *p=&I;
4、 若有定义void*p;int*q;float*r,下面操作不对的是____
A、 p=q;B、 q=r;C、 p=r;D、 r=p;
5、 若有说明#definem20intn=10;下面定义不正确的是______
A、 Floats[m];B、 Floats[m*10];C、 Floats[m+n];D、 Floats[m+10];
6、 若有定义inta[]={1,2,0};请问a[a[a[0]]]=______
A、 0 B、1 C、2 D、3
7、 若有chars[10],*p=s;则下面表达式正确的是_____
A、 s=p+s;B、 p=s+10;C、 s[2]=p[4];D、 p=s[0];
8、 定义整型指针变量p和q,下面操作不正确的是_______
A、 Int*p,q=null;B、 Int*p,q=null,null;C、 Int*p,*q=null,null;
D、 Int*p,*q=null;
9、 若有定义inta[]={1,2,3},b[3]={1,2,3};,请问a==b_______
A、 不能比较B、 结果为真C、 结果为假D、 结果不确定
10、以下程序有错,错误的原因是()。
main()
{int*p,i;char*q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
.
.
.}
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句
C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句
11、已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。
A)k=*ptr1+*ptr2;B)ptr2=k;C)p1=*p2;D)*p1=p2;
12、变量的指针,其含义是指该变量的()。
A)值B)地址C)名D)一个标志
13、若已定义inta=5;下面对
(1),
(2)两个语句的正确解释是()。
(1)int*p=&a;
(2)*p=a;
A)语句
(1)和
(2)中的*p含义相同,都表示给指针变量p赋值
B)
(1)和
(2)语句的执行结果,都是把变量a的地址值赋给指针变量p
C)
(1)在对p进行说明的同时进行初始化,使p指向a
(2)将变量a的值赋给指针变量p
D)
(1)在对p进行说明的同时进行初始化,使p指向a
(2)将变量a的值赋于*p
14、若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是()。
A)a,point,*&aB)&*a,&a,*pointC)*&point,*point,&aD)&a,&*point,point
15、以下程序输出的结果是()
voidmain()
{inta=5,*p1,**p2;
p1=&a,p2=&p1;
(*p1)++;
printf(“%d\n”,**p2);}
A)5B)4C)6D)不确定
16、若有说明:
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
17、若有说明:
int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是()。
A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;C)p1=&m;p2=p1D)p1=&m;*p2=*p1;
18、已有变量定义和函数调用语句:
inta=25;print_value(&a);下面函数的正确输出结果是()。
voidprint_value(int*t)
{print(“%d\n”,++*x);}
A)23B)24C)25D)26
19、下面判断正确的是()。
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”;
20、设char*s=”\ta\017bc”;则指针变量s指向的字符串所占的字节数是()。
A)9B)5C)6D)7
21、下面程序段中,for循环的执行次数是()。
char*s=”\ta\018bc”;
for(;*s!
=’\0’;s++)printf(“*”);
A)9B)5C)6D)7
22、下面能正确进行字符串赋值操作的是()。
A)chars[5]={“ABCDE”};B)char[5]={‘A’,’B’,’C’,’D’,’E’};
C)char*s;s=”ABCDE”;D)char*s;scanf(“%s”,s);
23、下面程序段的运行结果是()。
char*s=”abcde”;
s+=2;printf(“%d”,s);
A)cdeB)字符’c’C)字符’c’的地址D)无确定的输出结果
24、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是()。
A)c=*p1+p2;B)p2=cC)p1=p2D)c=*p1*(*p2);
25、有下面的程序段:
chats[]=”china”;char*p;p=s;
则下列叙述正确的是()。
A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等
26、下面程序的运行结果是()。
#include
#include
main()
{char*p1,*p2,str[50]=”abc”;
p1=”abc”;p2=”abc”;
strcpy(str+1,strcat(p1,p2));
printf(“%s\n”,str);}
A)abcabcabcB)bcabcabcC)aabcabcD)cabcabc
27、下面程序的运行结果是()。
#include
main()
{charstr[]=”cdalb”;
abc(str);
puts(str);}
abc(char*p)
{inti,j;
for(i=j=0;*(p+i)!
=’\0’;i++)
if(*(p+i)>=’d’){*(p+j)=*(p+i);j++;}
*(p+j)=’\0’;}
A)dalbB)cdC)dlD)c
28、下面程序运行结果是()。
#include
fun(char*p)
{inti,j;charts[81];
for(i=0,t=0;p[i]!
=’\0’;i+=2)
if(!
isspace(*p+i)&&(*(p+i)!
=’a’))
ts[t]=’\0’;
strcpy(p,ts);}
main()
{charstr[81]={“abcdefg”};
fun(str);
puts(str);}
A)abcdegB)bcdeC)ABCDED)BCDE
29、若有以下定义,则对a数组元素的正确引用是()。
inta[5],*p=a;
A)*&a[5]B)a+2C)*(p+5)D)*(a+2)
30、若有以下定义,则对a数组元素地址的正确引用是()。
inta[5],*p=a;
A)p=5B)*a+1C)&a+1D)&a[0]
31、若有定义:
inta[2][3];则对数组a的第i行第j列(假设i,j已正确说明并赋值)元数值的正确引用为()。
A)*(*(i+j)+j)B)(a+i)[j]C)*(a+i+j)D)*(a+i)+j
32、若有定义:
inta[2][3];则对数组a的第i行第j列(假设i,j已正确说明并赋值)元数地址的正确引用为()。
A)*(a[i]+j)B)(a+i)C)*(a+j)D)a[i]+j
33、若有以下定义和语句,则对a数组元素地址的正确引用是()。
inta[2][3],(*p)[3];
p=a;
A)*(p+2)B)p[2]C)p[1]+1D)(p+1)+2
34、若有以下定义和语句,则对a数组元素地址的正确引用是()。
inta[2][3],(*p)[3];
p=a;
A)(p+1)[0]B)*(*(p+2)+1)C)*(p[1]+1)D)p[1]+2
35、若有定义:
inta[5];则a数组中首元素的地址可以表示为()。
A)&aB)a+1C)aD)&a[1]
36、若有定义:
int(*p)[4];则标识符p()。
A)是一个指向整型变量的指针B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组D)定义不合法
37、若有以下定义和赋值语句,则对s数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为()。
ints[2][3]={0},(*p)[3];
p=s;
A)*(*(p+i)+j)B)*(p[i]+j)C)(p+i)+jD)(*(p+i))[j]
38、若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的非法引用为()。
intb[2][3]={0},(*p)[3];
p=b;
A)*(*(p+i)+j)B)*(p[i]+j)C)(p+i)+jD)(*(p+i))[j]
39、以下与int*q[5];等价的定义语句是()。
A)intq[5]B)int*qC)int*(q[5]);D)int(*q)[5]
40、设有以下程序段:
charstr[4][10]={“first”,“second”,“third”,“fourth”},*strp[4];
intn;
for(n=0;n〈4;n++)strp[n]=str[n];
若k为int型变量且0〈=k〈4,则对字符串的不正确引用是()。
A)strpB)str[k]C)strp[k]D)*strp
二 、填空题
1、 二级指针是存放一级指针的__________
2、 指针变量虽然都是存放指针,但____不同
3、 空指针名称是_______,表示没有指针的一种状态
4、 函数名和_______名可以作为指针常量
5、 不同类型的指针变量的赋值必须________
6、以下的运行结果是【】。
#include
main()
{intI,k;
for(I=0;I<4;I++);
{k=sub(&I);
printf(“%3d”,K);}
printf(“\n”);}
sub(int*s)
{staticintt=0;
t=*s+t;}
7、以下的运行结果是【】。
#include”string.h”
int*P;
main()
{inta=1,b=2,c=3;
p=&b;
pp(a+c,&b);
printf(“(!
)%d%d%d\n”,a,b,*p);}
pp(inta,int*b)
{intc=4;
p=*b+c;
a=*p-c;
printf(“
(2)%d%d%d\n”,a,*b,*p);}
8、下面程序段的运行结果是【】。
chars[80],*sp=”HELLO!
”;
sp=strcpy(s,sp);
s[0]=’h’;
puts(sp);
9、下面程序运行结果是【】。
chars[20]=”abcd”;
char*ssp=s;
sp++;
puts(strcat(sp,”ABCD”));
10、下面程序段的运行结果是【】。
chars1=”AbcdEf”,s2=”aB”;
s1++;
t=(strcmp(s1,s2)>0);
print(“%d\n”,t);
11、下面程序段的运行结果是【】。
char[]=”12345’,*p;
ints=0;
for(p=a;*p!
=`\0`;p++)s=10*s+*p-`0`;
printf(“%s”,P+5);
12、下面程序段的运行结果是【】。
harstr[]=”abc\0def\0ghi”,*p=str;
printf(“%s”,p+5);
13、下面程序段的运行结果是【】。
char*p=”PDP1-0”;
inti,d;
for(i=0;i<7;i++)
{d=isdigit(*(p+ii));
if(d!
=0)printf(“%c*(p+i));}
14、当运行以下程序时,从键盘输入book
(
chara1[80],a2[80],*s1=a1,*s2=a2;
gets(s1);gets(s2);
if(!
strcmp(s1,s2))printf(“*”);
elseprintf(“#”);
printf(“%d”,strlen(strcat(s1,s2)));
15、下面程序段的运行结果是【】。
chara[]=”123456789”,*p;
inti=0;
p=a;
while(*p)
{if(i%2==0)p=’*’;
p++;i++;}
puts(a)
16、下面程序的运行结果是【】。
#include
s(char*s)
{char*p=s;
while(*p)p++;
return(p-s);}
main()
{char*a=”abcd”;
inti;
i=s(a);
printf(“%d”,i);}
17、下面程序的运行结果是【】。
#include
main()
{char*strc(charstr1,charstr2);
chars1[80]=”computer”,s2[]=”language”*p;
pt=strc(s1,s2);
printf(”%s\n”,pt);
char*strc(char*strl,char*str2)
{char*p;
for(p=strl;*p!
=’\0’}P++);
do{‘p++=*str2++;}while(“str2!
=‘\o’);
*p=’\o’;
return(strl);}
18、当运行以下程序时.从键盘输入thisisatext.
#include
#defineTURE1
#defineFALSE0
intchange(char0c,intstatus)
main()
{intflag=TURE;
charch;
do{ch=getchar();
flag=change(&ch,flag);
putchar(ch);
}while(ch!
’.’);
printf(“\n”);}
{intchange(char*c,intstatus)
{if(*c==’’)returnTRUE
else
{if(status8&*c<=’z’&&*c>=’a’)*c+=’A’-‘a’;}
returnFALSE;}
19、若有定义:
inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是【】,
*(a[1]+2)的值是【】。
20、若有以下定义和语句:
inta[4]={0,1,2,3},*p;
p=&a[2];
则*--p的值是【】,
21、若有以下定义和语句:
ints[2][3]={0},(*p)[3];
p=s;则p+1表示数组【】。
22、若有定义:
inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是【】,*(*(a+1)+0))的值是【】。
23、若有以下定义和语句:
int*p[3],a[6],I;
for(i=0;i<3;i++)p[i]=&a[2*i];
则*p[0]引用的是a数组元素【】;*(p[1]+1)引用的是a数组元素【】。
24、若有定义:
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k;则下面程序段的输出是【】。
for(k=0;k<3;k++)q[k]=&a[k*4];
printf(“%d)\n”q[2][3]);
25、若m数组的元素和它们的值如下所示:
数组元素:
m[0]m[1]m[2]m[3]m[4]m[5]m[6]m[7]m[8]m[9]元素中的值:
941282107513
则数组元素m[m[4]+m[8]]的值是【】,*m+m[9]的值是【】,m[*(m+4)]的值是【】。
26、若有以下定义和语句,则下面各个符号的正确含义分别是:
(例如对于符号&a[2][1],应该写成:
是数组元素a[2][1]的地址)。
inta[3][4],(*q)[4];
q=a;
*(q+2):
【】,*(q+1)+2:
【】,*(*q+2):
【】
27、若有以下定义和语句,在程序中引用数组元素x[i]的四种形式是:
【】,【】,【】和【】(假设i已正确说明并赋值)。
intx[10],*p;p=x;
28、若有定义:
intm[10][6];在程序中引用数组元素m[i][j]的四种形式是:
【】,【】,【】和【】(假设i、j已正确说明并赋值)。
29、若有以下定义和语句,在程序中可通过指针数组p,用*(p[i]+j)等四种形式引用数组元素s[i][j](假设i、j已正确说明并赋值);另三种形式分别是:
【】,【】和【】。
ints[10][6],*p[10];
for(i=0;i<10;i++)p[i]=s[i];
30、设main函数的说明为:
main(intargc,char*argv[]),且有命令行为:
FILE1123
31、若有以下输入(
2
main()
{inta[2][3]={2,4,6,8,10,12};
int(*p)[3],i,j;
p=a;
scanf(“%d,%d”,&i,&j);
printf(“a[%d][%d]=%d\n”,i,j,*(*(p+i)+j));}
三、 编程
1、 输入3个整数,按由小到大的顺序输出。
2、 写一个函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
参考答案
一、 选择题
题号
1
2
3
4
5
6
7
8
9
10
答案
C
D
C
B
C
A
C
D
D
D
题号
11
12
13
14
15
16
17
18
19
20
答案
B
B
D
D
C
D
C
D
C
C
题号
21
22
23
24
25
26
27
28
29
30
答案
C
C
C
B
D
C
C
D
D
D
题号
31
32
33
34
35
36
37
38
39
40
答案
A
D
C
C
C
C
A
C
C
A
二、填空题
1、 单元地址2、 基类型3、 Null4、 数组5、 显式类型变换
6、01367、266,1668、hELLO!
9、bcdABCD10、111、12345
12、ef13、1*0*14、#915、*2*4*6*8*16、517、compuerlanguage
18、ThsISATest19、12,1220、121s[1][0]的地址22、8,823、a[0],a[3]24、2425、8,12,1226、是数组元意a[2][0]地址,是数组元意a[1][2]地址,是数组元素a[0][2]的值27、*p(p+i),p[i],*(x+i),x[i]28、(*(m+i))[j],*(m[i]+j),*(&m[0][0]+6*i+j),*(*(m+i)+j)29、p[i][j](*(p+i))[j]*(*(p+i)+j)30、4,131、a[1][2]=12
三、 编程题
1、 main()
{intn1,n2,n3;
int*p1,*p2,*p3;
printf(“inputthreeintegersn1,n2,n3:
”);
scanf(“%d,%d,%d”,&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n1>n3)swap(p2,p3);
printf(“now,theorderis:
%d,%d,%d\n”,n1,n2,n3); }
swap(int*p1,int*p2)
{intp; p=*p1;*p1=*p2;*p2=p; }
2、 main()
{intlen;
char*str[20];
printf(“inputstring:
”);
scanf(“%s”,str);
len=le
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 第九章 指针 语言程序设计 第九