C语言习题集合(指针).doc
《C语言习题集合(指针).doc》由会员分享,可在线阅读,更多相关《C语言习题集合(指针).doc(23页珍藏版)》请在冰豆网上搜索。
第七章指针·23·
第七章指针
7.1选择题
1.若有说明:
inta=2,*p=&a,*q=p;,则以下非法的赋值语句是()。
A.p=q;B.*p=*q;C.a=*q;D.q=a;
2.若定义:
inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为:
A.无确定值B.a的地址C.512D.511
3.已有定义 inta=2,*p1=&a,*p2=&a;下面不能正确执行的赋值语句是()。
A.a=*p1+*p2;B.p1=a;C.p1=p2;D.a=*p1*(*p2);
4.变量的指针,其含义是指该变量的()。
A.值B.地址C.名D.一个标志
5.若有说明语句:
inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()。
A.scanf("%d%d%d",&a,&b,d);
B.scanf("%d%d%d",a,b,d);
C.scanf("%d%d%d",&a,&b,&d);
D.scanf("%d%d%d",a,b,*d);
6.若已定义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。
7.若有语句int*p,a=10;p=&a;下面均代表地址的一组选项是()。
A.a,p,*&aB.&*a,&a,*p
C.*&p,*p,&aD.&a,&*p,p
0.2345
p
x
8.若需要建立如图所示的存储结构,且已有说明double*p,x=0.2345;则正确的赋值语句是()。
A.p=x;B.p=&x;
C.*p=x;D.*p=&x;
9.若有说明:
int*p,a=1,b;以下正确的程序段是()。
A.p=&b;B.scanf("%d",&b);
scanf("%d",&p);*p=b;
C.p=&b;D.p=&b;
scanf("%d",*p);*p=a;
10.有如下语句:
intm=6,n=9,*p,*q;p=&m;q=&n;如图1所示,若要实现下图所示的存储结构,可选用的赋值语句是()。
m
p
n
q
p
m
q
n
A.*p=*q;B.p=*q;
C.p=q;D.*p=q;
11.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()。
#include
main()
{
int*p,*q,a,b;
p=&a;
printf("inputa:
");
scanf("%d",*p);
…
}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
12.下面程序的功能是从输入的十个字符串中找出最长的那个串。
请在________处填空。
#include"stdio.h"
#include"string.h"
#defineN10
main()
{
chars[N][81],*t;
intj;
for(j=0;jgets(s[j]);
t=*s;
for(j=1;jif(strlen(t)printf("themaxlengthoftenstringsis:
%d,%s\n",strlen(t),t);
}
A.t=s[j]B.t=&s[j]C.t=s++D.t=s[j][0]
13.下面判断正确的是()。
A.char*s="girl";等价于char*s;*s="girl";
B.chars[10]={"girl"};等价于chars[10];s[10]={"girl"};
C.char*s="girl";等价于char*s;s="girl";
D.chars[4]="boy",t[4]="boy";等价于 chars[4]=t[4]="boy"
14.设char*s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。
A.9B.5C.6D.7
15.下面程序段中,for循环的执行次数是()。
char*s="\ta\018bc";
for(;*s!
='\0';s++)printf("*");
A.9B.5C.6D.7
16.以下不能正确进行字符串赋初值的语句是()。
A.charstr[5]="good!
";
B.char*str="good!
";
C.charstr[]="good!
";
D.charstr[5]={'g','o','o','d'};
17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。
A.p=2*(int*)malloc(sizeof(int));
B.p=(int*)malloc(2*sizeof(int));
C.p=(int*)malloc(2*2);
D.p=(int*)calloc(2,sizeof(int));
18.下面程序段的运行结果是()。
char*s="abcde";
s+=2;
printf("%d",s);
A.cdeB.字符'c'C.字符'c'的地址D.无确定的输出结果
19.设有如下的程序段:
chars[]="girl",*t;t=s;则下列叙述正确的是()。
A.s和t完全相同
B.数组s中的内容和指针变量t中的内容相等
C.s数组长度和t所指向的字符串长度相等
D.*t与s[0]相等
20.以下正确的程序段是()。
A.chars[20];B.char*s;
scanf("%s",&s);scanf("%s",s);
C.chars[20];D.chars[20],*t=s;
scanf("%s",&s[2]);scanf("%s",t[2]);
21.下面程序段的运行结果是()。
#include"stdio.h"
main()
{
intm=10,n=20;
char*format="%s,m=%d,n=%d\n";
m*=n;
printf(format,"m*=n",m,n);
}
A.format,"m*=n",m,nB.format,"m*=n"
C.m*=n,m=200,n=20D.以上结果都不对
22.以下与库函数strcpy(char*p,char*q)功能不相等的程序段是()。
A.strcpy1(char*p,char*q)
{while((*p++=*q++)!
='\0');
}
B.strcpy2(char*p,char*q)
{while((*p=*q)!
='\0')
{p++;q++;}
}
C.strcpy3(char*p,char*q)
{while(*p++=*q++);
}
D.strcpy4(char*p,char*q)
{while(*p)
*p++=*q++;
}
23.下面程序段的运行结果是()。
#include"stdio.h"
main()
{
chars[]="example!
",*t;
t=s;
while(*t!
='p')
{printf("%c",*t-32);
t++;}
}
A.EXAMPLE!
B.example!
C.EXAMD.example!
24.以下正确的程序段是()。
A.chars[]="12345",t[]="6543d21";strcpy(s,t);
B.chars[20],*t="12345";strcat(s,t);
C.chars[20]="",*t="12345";strcat(s,t);
D.char*s="12345",*t="54321";strcat(s,t);
25.以下与库函数strcmp(char*s,chat*t)的功能相等的程序段是()。
A.strcmp1(char*s,chat*t)
{for(;*s++==*t++;)
if(*