CH6指针练习题及答案Word格式文档下载.docx
《CH6指针练习题及答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《CH6指针练习题及答案Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
7、下面程序段的运行结果是()
char*s1="
AbcdEf"
*s2="
aB"
s1++;
t=(strcmp(s1,s2)>
0);
t);
8、下面程序段的运行结果是()
charstr[]="
abc\0def\0ghi"
char*p=str;
%s"
p+5)
9、若有以下定义和语句:
inta[4]={0,1,2,3},*p;
p=&
a[1];
则++(*p)的值是()。
10、若有定义:
inta[2][3]={2,4,6,8,10,12};
则*(&
a[0][0]+2*2+1)的值是(),*(a[1]+2)的值()。
11、若有定义:
inta[]={2,4,6,8,10,12},*p=a;
则*(p+1)的值是(),*(a+5)的值是()。
12、若有以下定义和语句:
a[2];
则*--p的值是()。
13、若有以下定义和语句:
ints[2][3]={0},(*p)[3];
则(*(p+1)+2)的值是()。
14、若有定义:
则a[1][0]的值是(),*(*(a+1)+0)的值是()。
15、若有定义:
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];
q[2][3]);
16、若有以下输入:
1,2<
CR>
(<
代表回车),则下面程序的运行结果是()。
{inta[2][3]={2,4,6,8,10,12},(*p)[3],i,j;
p=a;
scanf("
%d,%d"
&
i,&
j);
*(*(p+i)+j);
)
17、下面程序的运行结果是()。
{char*a[]={"
P"
"
C"
B"
L"
},(**p)[];
intj;
p=a+3;
for(j=3;
j>
=0;
j--)printf("
*(p--));
18、以下程序的执行结果是()。
{char*p1,*p2,str[20]="
xyz"
p1="
abcd"
p2="
ABCD"
strcpy(str+1,strcat(p1+1,P2+1));
str);
19、若输入的值分别是135,下面程序的运行结果是()
{inta=0,i,*p,sum;
a;
for(i=0;
=2;
i++){scanf("
p);
sum=s(p);
sum=%d,"
sum);
}}
s(int*p)
{intsum=10;
sum=sum+*p;
return(sum);
20、下面程序段的运行结果是()
chars[20]="
char*sp=s;
sp++;
puts(strcat(sp,"
));
21、下面程序段的运行结果是()
chara[]="
12345"
*p;
ints=0;
for(p=a;
*p!
='
\0'
p++)s=10*s+*p-'
0'
s);
22、下面程序段的运行结果是()
123456789"
inti=0;
p=a;
while(*p){if(i%2==0)*p='
*'
p++;
i++;
}puts(a);
23、下面程序的运行结果是()。
{char*str[]={"
Pascal"
Clanguage"
Dbase"
Cobol"
};
char**p;
intk;
p=str;
k++)printf("
%s,"
*(p++));
二、选择题
1、以下程序的运行结果是()
voidsub(intx,inty,int*z)
{*z=y-x;
{inta,b,c;
sub(10,5,&
a);
sub(7,a,&
b);
sub(a,b,&
c);
%4d,%4d,%4d\n"
a,b,c);
A)5,2,3B)-5,-12,-7
C)-5,-12,-17D)5,-2,-7
2、执行以下程序后,b的值为()
{intb,k=4,m=6,*p1=&
k,*p2=&
m;
b=(-*p1)/(*p2)+7;
b);
A)5B)6C)7D)10
3、下面程序应能对两个整型变量的值进行交换。
以下正确的说法是()
{inta=10,b=20;
a,b);
swap(&
a,&
swap(intp,intq)
{intt;
t=p;
p=q;
q=t;
A)该程序完全正确
B)该程序有错,只要将语句swap(&
中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句为变)即可
D)以上说法都不正确
4、设*p,i;
以下正确的语句是()。
A)*p=&
i;
B)i=p;
C)i=*p;
D)p=2*p+1;
5、设chars[10];
inti=1;
以下正确的表达式是()。
A)[i+2]B)*(s+i)C)*(&
s+i)D)*((s++)+i)
6、设有语句:
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
以下对a数组的元素值不正确的引用是()。
A)a[p-a]B)*(&
a[i])C)p[i]D)*(a[0]+1)
7、设有说明int(*ptr)[M];
其中ptr是()。
A)M个指向整型变量的指针B)指向M个整型变量的函数指针
C)一个指向具有M个整型元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每一元素只能指向整型量
8、如下程序的执行结果是()。
main()
{inti;
char*s="
a\\\\\n"
s[i]!
\n'
i++)printf("
%c"
*(s+i));
A)aB)a\C)a\\D)a\\\\
9、有四组对指针变量进行操作的语句,以下判断正确的选项是()
(1)int*p,*q;
q=p;
inta,*p,*q;
*p=*q=&
(2)inta,*p,*q;
q=&
p=*q;
inta=20,*p;
*p=a;
(3)inta=b=0,*p;
p=&
b=*p;
inta=20,*p,*q=&
*p=*q;
(4)inta=20,*p,*q=&
intp,q;
p;
A)
(1)正确,其余错B)
(1),(4)正确,其余错
C)(3)正确,其余错D)以下结论都不正确
10、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()
{int*p,*q,a,b;
*p);
........}
A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址
C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
11、若有以下定义,则*(p+5)表示()。
inta[10],*p=a;
A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值
12、若有定义:
int*p[4];
则标识符p()。
A)是一个指向整型变量的指针B)是一个指针数组
C)是一个指针,它指向一个含有四个整型元素的一维数组。
D)说明不合法
13、若有以下定义,且0<
=i<
6,则正确的赋值语句是()。
ints[4][6],t[6][4],(*p)[6];
A)p=t;
B)p=s;
C)p=s[i];
D)p=t[i];
inta[4][6];
则能正确表示a数组中任一元素a[i][j](此处0<
4,0<
=j<
6)地址的表达式是()
A)&
a[0][0]+6*i+jB)&
a[0][0]+4*j+IC)&
a[0][0]+4*i+jD)&
a[0][0]+6*j+i
15、以下选项中,对指针变量p的正确操作是()
A)inta[5],*p;
B)inta[5],*p;
C)inta[5];
int*p=a=1000D)inta[5];
int*p1,*p2=a;
*p1=*p2;
16、若有以下定义,且0<
5,则对数组a元素的非法引用是()
inta[5],*p=a;
A)a[i]B)*(a+i)C)*(p+i)D)*(&
a+i)
17、设有以下定义:
char*cc[2]={"
1234"
5678"
则正确的叙述是()
A)cc数组的两个元素中各自存放了字符串"
和"
的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc数组元素的值分别是"
18、若有以下定义:
intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*p)[3]=x;
则能够正确表示数组元素x[1][2]的表达式是()
A)*((*p+1)[2])B)(*p+1)+2C)*(*(p+5))D)*(*(p+1)+2)
19、以下正确的叙述是()
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定。
B)C语言允许main函数带形参,形参名只能是argc和argv。
C)当main函数带有形参时,传给形参的值只能从命令行中得到。
D)若有说明,main(intargc,char*argv),则形参argc的值必须大于1。
20、main函数的正确说明形式是()
A)main(intargc,char**argv[])
B)main(intabc,char*abv)
C)main(intargc,charargv)
D)main(intc,char*v[])
21、以下程序能找出数组x中的最大值和该值所在的元素下标,数组元素值从键盘输入。
{
intx[10],*p1,*p2,k;
10;
k++)scanf("
x+k);
for(p1=x,p2=x;
p1-x<
p1++)if(*p1>
*p2)p2=p1;
MAX=%d,INDEX=%d\n"
*p2,《 》);
A)p1-xB)p1
C)p2-xD)x-p2
22、若有说明:
char*language[]={"
FORTRAN"
BASIC"
PASCAL"
JAVA"
则表达式*language[1]>
*language[3]比较的是()
A)字符F和字符PB)字符串BASIC和字符串JAVA
C)字符B和字符JD)字符串FORTRAN和字符串PASCAL
23、若有说明:
则language[2]的值是()
A)一个字符B)一个地址C)一个字符串D)一个不定值
24、语句int(*ptr)();
的含义是()
A)ptr是指向一维数组的指针变量B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值的指向int型数据的指针
25、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是()
A)(*p)max(a,b);
B)*pmax(a,b);
C)(*p)(a,b);
D)*p(a,b);
26、已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()
A)p=maxB)*p=max;
C)p=max(a,b)D)*p=max(a,b)
27、已有定义int(*p)();
指针p可以()。
A)代表函数的返回值B)指向函数的入口地址
C)表示函数的类型D)表示函数返回值的类型
28、若要对a进行++运算,则a应具有下面说明()
A)inta[3][2];
B)char*a[]={"
12"
ab"
C)char(*a)[3];
D)intb[10],*a=b;
29、下面正确的程序段是()
A)charstr[20];
str);
B)char*p;
C)charstr[20];
str[2]);
D)charstr[20],*p=str;
p[2]);
30、下面程序段的运行结果是()charstr[]="
ABC"
*p=str;
*(p+3));
A)67B)0C)字符'
C'
的地址D)字符'
31、下面程序段的运行结果是()
char*p="
abcdefgh"
p+=3;
strlen(strcpy(p,"
)));
A)8B)12C)4D)7
32、下面说明不正确的是()
A)chara[10]="
china"
B)char[10],*p=a;
p="
C)char*a;
a="
D)chara[10],*p;
p=a="
33、若有说明语句
Itismine"
则以下不正确的叙述是()
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
34、若已定义chars[10];
则在下面表达式中不表示s[1]的地址是()
A)s+1B)s++C)&
s[0]+1D)&
s[1]
35、下面程序段的运行结果是()
chars[6];
strcpy(s,"
\"
%s\"
A)"
B)"
abcd"
C)\"
abcd\"
D)编译出错
36、若有说明:
A)language[2]表示字符串"
pascal"
B)*language[2]的值是字母P
C)language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针
D)language是一个字符型指针数组,它包含5个元素,其初值分别是:
37、设chars[10],*p=s;
以下不正确的表达是()
A)p=s+5;
B)s=p+s;
C)s[2]=p[4];
D)*p=s[0];
38、设char**s;
A)s="
computer"
B)*s="
C)**s="
D)*s='
c'
39、选择i的正确结果()。
inti;
a\045+045\'
b"
*s++;
i++);
A)7B)8C)11D)12
40、如下程序的执行结果是()。
a\nn35\b"
i=%d\n"
i);
A)i=5B)i=6C)i=7D)i=8
41、如下程序的执行结果是()。
A)\"
B)"
C)"
D)不正确
42、如下程序的执行结果是()。
\\\"
B)a"
43、如下执行的程序结果是()。
{staticinta[]={1,2,3,4,5,6};
int*p;
*(p+3)+=2;
%d,%d\n"
*p,*(p+3));
A)1,3B)1,6C)3,6D)1,4
44、以下正确的说明语句是()
A)int*b[]={1,3,5,7,9};
B)inta[2];
int*num[2]={&
a[0],&
a[1]};
C)inta[]={1,2};
int*num[2]={a[0],a[1]};
D)inta[3][4],(*num)[4];
num[1]=&
a[1][3];
45、若有以下定义,且0<
4,则不正确的赋值语句是()
intb[4][6],*p,*q[4];
A)q[i]=b[i];
B)p=b;
C)p=b[i];
D)q[i]=&
b[0][0];
46、若有定义:
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;
则下面程序段的输出是()
a[k*3];
q[3][0]);
A)8B)16C)20D)结果不确定
47、若有以下定义,则数值不为3的表达式是()intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;
A)x[3]B)p1=x+3,*p1++C)p1=x+2,*(p1++)D)p1=x+2,*++p1
48、下面程序的运行结果是()
{intx[5]={2,4,6,8,10},*p,**pp;
p=x;
pp=&
%3d\n"
**pp);
A)44B)24C)22D)46
49、若有以下说明和语句:
char**q;
q=language+2;
则语句printf("
%o\n"
*q);
A)输出的是language[2]元素地址B)输出的是字符串PASCAL
C)输出的是language[2]元素的值,它是字符串PASCAL的首地址
D)格式说明不正确,无法得到确定的输出
50、下面程序段的运行结果是()
char*format="
%s,a=%d,b=%d\n"
inta=1,b=10;
a+=b;
printf(format,"
a+=b"
A)for,"
abB)format,"
C)a+=b,a=11,b=10D)以下结果都不对
三、编程题
1、有3个学生,每人考5门课,求每个学生的平均分和每门课的平均分数
2、输入一个字符串,内有数字和非数字字符,如:
a123x4561760?
302ab567,将其中连续的数字作为一个整数依次存放到一数组a中,如123存放到a[0]中,456存放到a[1]中。
3、求定积分:
计算[0,1]之间函数1+x2、[0,2]之间函数1+x+x2+x3、[0,3.5]之间函数x/(1+x2)的定积分。
附录:
答案
一、填空题
1、22、f3、6543214、12
5、one:
two:
three6、HELLO!
7、18、of
9、210、121211、41212、1
13、014、8815、2416、12
17、LBCP18、xbcdBCD23、Pascal,Clanguage,Dbase,Cobol
二、选择题
1—5BCCCB6—10DBCCB11—15BCBCB
16—20DADCD21—25BCBDC26—30ABDCB
31—35ADDBA36—40CBBBB41—45DABBA
46—50CBBCC
1、
main()
floatstu_ave(float(*p)[5]);
floatcour_ave(float*pt);
floatscore[3][5]={{100,60,70,80,67},{62,71,98,45,57},{90,39,89,39,90}};
intI;
for(I=0;
I<
I++)
printf(“%f”,stu_ave(score+i));
5;
printf(“%f”,cour_ave(score[0]+i));
floatstu_ave(float(*p)[5])
{
intj;
floatsum;
floatsum=0,ave;
for(j=0;
j<
j++)
sum=sum+*(*p+j);
re