指针练习题答案(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C.cc是指针值,它指向含有两个数组元素的字符型一维数组
D.cc数组元素的值分别是“1234”和“5678”
36.下面程序的运行结果是()
main()
{int x[5]={2,4,6,8,10},*p,**pp;
p=x;
pp=&p;
printf(“%d”,*(p++));
printf(“%3d\n”,**pp);}
D.q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句
5.已有定义:int k=2; int *ptr1,*ptr2;且ptr1和ptr2均指向变量k,下面不能正确执行的赋值语句是()
A.k=*ptr1+*ptr2;B.ptr2=k;C.ptr1=ptr2;D.k=*ptr1*(*ptr2);
15.下列程序段的运行结果是()
char *format=”%s,a=%d,b=%d\n”;
int a=1,b=10;
a+=b;
printf(format ,“a+=b”,a,b);
A.for,”a+=b”,abB.format ,”a+=b”C.a+=b,a=11,b=10D.以上结果都不对
16.下面程序段的运行结果是()
2.执行以下程序后,a的值为(),b的值为()
main(0
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1= =&m;
b=(- *p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);}
[1]A.-1B.1C.0D.4
[2]A.5 B.6C.7D.10
C.char *s;s=“ABCDE”;D.char *s; scanf(“%s”,s);
12.下面程序段的运行结果是()。
char *s=”abcde”;
s+=2;printf(“%d”,s);
A.cdeB.字符’c’C.字符’c’的地址D.无确定的输出结果
13.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是()
char a[ ]=“123456789”,*p;
int i=0;
p=a;
while(*p)
{if(i%2= =0) *p=‘*’;
p++;
i++;
}
put(a);
5.下面程序的功能是将字符串中的数字字符删除后输出,请填空:
# include <stdio.h>
delnum(char *s)
{int i,j;
char *p1,*p2;
int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)= =*(p2+k))printf(“%c”,*(p1+k));
}
A.gaeB.gaC.LangugeD.有语法错
20.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
指针单元练习题
一、选择题:
1.以下程序的运行结果是()
sub(int x,int y,int *z)
{*z=y-x;}
main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf(“%4d,%4d,%4d\n”,a,b,c);}
A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-7
D.说明不合法
30.若有以下定义,则*(p+5)表示()
int a[10],*p=a;
A.元素a[5]的地址B.元素a[5]的值
C.元素a[6]的地址D.元素a[6]的值
31.若对a进行- -运算,则a应具有下面的说明()
A.int p[3];
int *a=p;
B.int k;
int *a=&k;
C.char *a[3];
ptr1=&a; ptr2=&b;
swap(ptr1,ptr2);
printf(“*ptr1=%d,*ptr2=%d\n”,*ptr1,*ptr2);
printf(“a=%d,b=%d\n”,a,b);}
2.下面程序段的运行结果是__hELLO!________
char s[80],*sp=”HELLO!”;
3.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是()
main()
{int *p,*q,a,b;
p=&a;
printf(“input a:”);
scanf(“%d’,*p);…….}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
fun(char *w ,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2){t=*s1++;*s2--;*s2=t;}}
main()
{char *p;
p=”1234567”;
fun(p,strlen(p));
puts(p);}
A.7654321B.1714171C.1711717D.7177171
Dint b[10];
int *a=b+1;
32.若有以下定义和语句,则能正确表示a数组元素地址的表达式是()
double a[5],*p1;
p1=a;
A.aB.p1+5C.*p1D.&a[5]
33.若有以下定义,则数值不为3的表达式是()
int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;
{int num=0;
while(*(str+num)!=‘\0’) num++;
return(num);}
A.7B.6C.5D.10
19.下面程序的运行结果是()
# include <stdio.h>
main( )
{static char a[ ]=“Language”,b[ ]=“programe”;
sp=strcpy(s,sp);
s[0]=‘h’;
puts(sp);
3.下面程序段的运行结果是___bcd ABCD________
chars[20]=“abcd”;
char *sp=s;
sp++;
puts(strcat(sp,“ABCD”));
4.下面程序段的运行结果是____*2*4*6*8*________
28.若有定义:int (*p)[4];则标识符p( )
A.是一个指向整型变量的指针
B.是一个指针数组名
C.是一个指针,它指向一个含有四个整型元素的一位数组
D.定义不合法
29.若有定义:int *p[4];则标识符p( )
A.是一个指向整型变量的指针
B.是一个指针数组名
C.是一个指针,它指向一个含有四个整型元素的一位数组
A.9B.5C.6D.7
10.下面程序段中,for循环的执行次数是()
char *s=“\ta\018bc”;
for( ;*s!=‘\0’;s++) printf(“*”);
A.9B.5C.6D.7
11.下面能正确进行字符串赋值的操作是()
A.char s[5]={“ABCDE”};B.char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’};
fun(char *s)
{char a[7];
s=a;
strcpy(a,”look”);}
main()
{char *p;
fun(p);
puts(p);}
A.lookB.lookC.lookD.不确定的值
21.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
int a[2][3], (*p)[3];
p=a;
A.*(p+2)B.p[2]C.p[1]+1D.(p+1)+2
27.若有以下定义和语句,则对a数组元素的正确引用为()
int a[2][3], (*p)[3];
p=a;
A.(p+1)[0]B.*(*(p+2)+1)C.*(p[1]+1)D.p[1]+2.
D.*p只能用来说明p是一个指针变量
4.以下程序有错,错误原因是()
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没有实际意义
for(i=0,j=0;s[i]!=‘\0’;i++)
22.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
main( )
{char *p1,*p2,str[50]=”abc”;
p1=”abc”;p2=”abc”;
strcpy(str+1,strcat(p1,p2));
printf(“%s\n”,str);}
A.4 4B.24C.2 2D.4 6
二、填空题:
1.下列程序的运行结果是__________*ptr1=7,*ptr2=5
swap(int *p1,int *p2)a=7,b=5
{int p;
p=*p1;*p1=*p2; *p2=p;}
main( )
{int a=5,b=7,*ptr1,*ptr2;
8.若有说明:int *p,m=5,n;以下正确的程序段是()
A.p=&n;
scanf(“%d”,&p);
B.p=&n;
scanf(“%d”,*p);
C.scanf(“%d”,&n);
*p=n;
D.p=&n;
*p=m;
9.设char *s=“\ta\017bc”;则指针变量s指向的字符串所占的字节数是()
6.变量的指针,其含义是指该变量的()
A.值B.地址C.名D.一个标志
7.若有语句:int *point ,a=4;point=&a;下面均代表地址的一组选项是()
A.a, point ,*&aB.&*a,&a,*pointC.*&point ,*point ,&aD.&a,&*point,point
A.c=*p1+*p2;B.p2=c;C.p1=p2;D.c=*p1*(*p2);
14.设有下面的程序段:
char a[]=”china”; char *p; p=s;则下列叙述正确的是()
A.s和p完全相同B.数组s中的内容和指针变量p中的内容相等C.s数组长度和p所指向的字符串长度相等D.*p与s[0]相等
char a[ ]=“language”,*p;
p=a;
while(*p!=‘u’) {printf(“%c”,*p-32);p++;}
A.LANGUAGEB.languageC.LANGD.langUAGE
17.若已定义:char s[10];则在下面表达式中不表示s[1]的地址的是()
A.s+1B.s++C.&s[0]+1D.&s[1]
A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j
25.若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为()
A.*(a[i]+j)B.(a+i)C.*(a+j)D.a[i]+j
26.若有以下定义和语句,则对a数组元素地址的正确引用为()
若第一个printf输出的是ffca,则第二个printf语句的输出是()
A.ffddB.ffdcC.ffdeD.ffcd
35.设有以下定义:
char *cc[2]={“1234”,“5678”};则正确的叙述是()
A.cc数组的两个元素中各自存放了字符串“1234”和“5678”的首地址
B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
18.当运行以下程序时,从键盘输入Happy<CR>,则下面程序的运行结果是()
#include <stdio.h>
#include <string.h>
main( )
{char str[10],*p=str;
gets(p);
printf(“%d\n”,stre(p));}
stre(char str[ ])
A.x[3];B.p1=x+3,*p1++C.p1=x+2,*(p1++)D.p1=x+2,*++p1
34.阅读以下程序:
main()
{int a[10]={2,4,6,8,10,12,14,16,18,20},*p;
p=a;
printf(“%x\n”,p);
printf(“%x\n”,p+9);
}
A.abcabcabcB.bcabcabcC.aabcabcD.
23.若有以下定义,则对a数组元素地址的正确引用是()
int a[5],*p=a;
A.Baidu Nhomakorabea&a[5]B.a+2C.*(p+5)D.*(a+2)
24.若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为()
D.cc数组元素的值分别是“1234”和“5678”
36.下面程序的运行结果是()
main()
{int x[5]={2,4,6,8,10},*p,**pp;
p=x;
pp=&p;
printf(“%d”,*(p++));
printf(“%3d\n”,**pp);}
D.q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句
5.已有定义:int k=2; int *ptr1,*ptr2;且ptr1和ptr2均指向变量k,下面不能正确执行的赋值语句是()
A.k=*ptr1+*ptr2;B.ptr2=k;C.ptr1=ptr2;D.k=*ptr1*(*ptr2);
15.下列程序段的运行结果是()
char *format=”%s,a=%d,b=%d\n”;
int a=1,b=10;
a+=b;
printf(format ,“a+=b”,a,b);
A.for,”a+=b”,abB.format ,”a+=b”C.a+=b,a=11,b=10D.以上结果都不对
16.下面程序段的运行结果是()
2.执行以下程序后,a的值为(),b的值为()
main(0
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1= =&m;
b=(- *p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);}
[1]A.-1B.1C.0D.4
[2]A.5 B.6C.7D.10
C.char *s;s=“ABCDE”;D.char *s; scanf(“%s”,s);
12.下面程序段的运行结果是()。
char *s=”abcde”;
s+=2;printf(“%d”,s);
A.cdeB.字符’c’C.字符’c’的地址D.无确定的输出结果
13.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是()
char a[ ]=“123456789”,*p;
int i=0;
p=a;
while(*p)
{if(i%2= =0) *p=‘*’;
p++;
i++;
}
put(a);
5.下面程序的功能是将字符串中的数字字符删除后输出,请填空:
# include <stdio.h>
delnum(char *s)
{int i,j;
char *p1,*p2;
int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)= =*(p2+k))printf(“%c”,*(p1+k));
}
A.gaeB.gaC.LangugeD.有语法错
20.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
指针单元练习题
一、选择题:
1.以下程序的运行结果是()
sub(int x,int y,int *z)
{*z=y-x;}
main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf(“%4d,%4d,%4d\n”,a,b,c);}
A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-7
D.说明不合法
30.若有以下定义,则*(p+5)表示()
int a[10],*p=a;
A.元素a[5]的地址B.元素a[5]的值
C.元素a[6]的地址D.元素a[6]的值
31.若对a进行- -运算,则a应具有下面的说明()
A.int p[3];
int *a=p;
B.int k;
int *a=&k;
C.char *a[3];
ptr1=&a; ptr2=&b;
swap(ptr1,ptr2);
printf(“*ptr1=%d,*ptr2=%d\n”,*ptr1,*ptr2);
printf(“a=%d,b=%d\n”,a,b);}
2.下面程序段的运行结果是__hELLO!________
char s[80],*sp=”HELLO!”;
3.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是()
main()
{int *p,*q,a,b;
p=&a;
printf(“input a:”);
scanf(“%d’,*p);…….}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
fun(char *w ,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2){t=*s1++;*s2--;*s2=t;}}
main()
{char *p;
p=”1234567”;
fun(p,strlen(p));
puts(p);}
A.7654321B.1714171C.1711717D.7177171
Dint b[10];
int *a=b+1;
32.若有以下定义和语句,则能正确表示a数组元素地址的表达式是()
double a[5],*p1;
p1=a;
A.aB.p1+5C.*p1D.&a[5]
33.若有以下定义,则数值不为3的表达式是()
int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;
{int num=0;
while(*(str+num)!=‘\0’) num++;
return(num);}
A.7B.6C.5D.10
19.下面程序的运行结果是()
# include <stdio.h>
main( )
{static char a[ ]=“Language”,b[ ]=“programe”;
sp=strcpy(s,sp);
s[0]=‘h’;
puts(sp);
3.下面程序段的运行结果是___bcd ABCD________
chars[20]=“abcd”;
char *sp=s;
sp++;
puts(strcat(sp,“ABCD”));
4.下面程序段的运行结果是____*2*4*6*8*________
28.若有定义:int (*p)[4];则标识符p( )
A.是一个指向整型变量的指针
B.是一个指针数组名
C.是一个指针,它指向一个含有四个整型元素的一位数组
D.定义不合法
29.若有定义:int *p[4];则标识符p( )
A.是一个指向整型变量的指针
B.是一个指针数组名
C.是一个指针,它指向一个含有四个整型元素的一位数组
A.9B.5C.6D.7
10.下面程序段中,for循环的执行次数是()
char *s=“\ta\018bc”;
for( ;*s!=‘\0’;s++) printf(“*”);
A.9B.5C.6D.7
11.下面能正确进行字符串赋值的操作是()
A.char s[5]={“ABCDE”};B.char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’};
fun(char *s)
{char a[7];
s=a;
strcpy(a,”look”);}
main()
{char *p;
fun(p);
puts(p);}
A.lookB.lookC.lookD.不确定的值
21.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
int a[2][3], (*p)[3];
p=a;
A.*(p+2)B.p[2]C.p[1]+1D.(p+1)+2
27.若有以下定义和语句,则对a数组元素的正确引用为()
int a[2][3], (*p)[3];
p=a;
A.(p+1)[0]B.*(*(p+2)+1)C.*(p[1]+1)D.p[1]+2.
D.*p只能用来说明p是一个指针变量
4.以下程序有错,错误原因是()
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没有实际意义
for(i=0,j=0;s[i]!=‘\0’;i++)
22.下面程序的运行结果是()
#include<stdio.h>
#include<string.h>
main( )
{char *p1,*p2,str[50]=”abc”;
p1=”abc”;p2=”abc”;
strcpy(str+1,strcat(p1,p2));
printf(“%s\n”,str);}
A.4 4B.24C.2 2D.4 6
二、填空题:
1.下列程序的运行结果是__________*ptr1=7,*ptr2=5
swap(int *p1,int *p2)a=7,b=5
{int p;
p=*p1;*p1=*p2; *p2=p;}
main( )
{int a=5,b=7,*ptr1,*ptr2;
8.若有说明:int *p,m=5,n;以下正确的程序段是()
A.p=&n;
scanf(“%d”,&p);
B.p=&n;
scanf(“%d”,*p);
C.scanf(“%d”,&n);
*p=n;
D.p=&n;
*p=m;
9.设char *s=“\ta\017bc”;则指针变量s指向的字符串所占的字节数是()
6.变量的指针,其含义是指该变量的()
A.值B.地址C.名D.一个标志
7.若有语句:int *point ,a=4;point=&a;下面均代表地址的一组选项是()
A.a, point ,*&aB.&*a,&a,*pointC.*&point ,*point ,&aD.&a,&*point,point
A.c=*p1+*p2;B.p2=c;C.p1=p2;D.c=*p1*(*p2);
14.设有下面的程序段:
char a[]=”china”; char *p; p=s;则下列叙述正确的是()
A.s和p完全相同B.数组s中的内容和指针变量p中的内容相等C.s数组长度和p所指向的字符串长度相等D.*p与s[0]相等
char a[ ]=“language”,*p;
p=a;
while(*p!=‘u’) {printf(“%c”,*p-32);p++;}
A.LANGUAGEB.languageC.LANGD.langUAGE
17.若已定义:char s[10];则在下面表达式中不表示s[1]的地址的是()
A.s+1B.s++C.&s[0]+1D.&s[1]
A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j
25.若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为()
A.*(a[i]+j)B.(a+i)C.*(a+j)D.a[i]+j
26.若有以下定义和语句,则对a数组元素地址的正确引用为()
若第一个printf输出的是ffca,则第二个printf语句的输出是()
A.ffddB.ffdcC.ffdeD.ffcd
35.设有以下定义:
char *cc[2]={“1234”,“5678”};则正确的叙述是()
A.cc数组的两个元素中各自存放了字符串“1234”和“5678”的首地址
B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
18.当运行以下程序时,从键盘输入Happy<CR>,则下面程序的运行结果是()
#include <stdio.h>
#include <string.h>
main( )
{char str[10],*p=str;
gets(p);
printf(“%d\n”,stre(p));}
stre(char str[ ])
A.x[3];B.p1=x+3,*p1++C.p1=x+2,*(p1++)D.p1=x+2,*++p1
34.阅读以下程序:
main()
{int a[10]={2,4,6,8,10,12,14,16,18,20},*p;
p=a;
printf(“%x\n”,p);
printf(“%x\n”,p+9);
}
A.abcabcabcB.bcabcabcC.aabcabcD.
23.若有以下定义,则对a数组元素地址的正确引用是()
int a[5],*p=a;
A.Baidu Nhomakorabea&a[5]B.a+2C.*(p+5)D.*(a+2)
24.若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为()