C语言指针习题及答案文档格式.docx
《C语言指针习题及答案文档格式.docx》由会员分享,可在线阅读,更多相关《C语言指针习题及答案文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![C语言指针习题及答案文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/3/6e903aa4-b30b-4031-9aad-a777a8901bdd/6e903aa4-b30b-4031-9aad-a777a8901bdd1.gif)
6.若有语句:
int*p,a=4;
和p=&
a;
下面均代表地址的一组选项是
D。
A)a,p,*&
aB)&
*a,&
a,*pC)*&
p,*p,&
aD)&
a,&
*p,p
7.下面判断正确的是__C。
A)char*a=”china”;
等价于char*a;
*a=”china”;
B)charstr[1O]={china”};
等价于charstr[1O];
str[]={china”;
}
C)char*s=”china”;
等价于char*s;
s=”china”;
D)charc[4]=”abc'
d[4]=”abc”;
等价于charc[4]=d[4]=”abc;
8.下面程序段中,for循环的执行次数是C。
char*s=”\ta\018bc”;
for(;
*s!
='
\0'
;
s++)printf(*”);
A)9B)7C)6D)5
9.下面能正确进行字符串赋值操作的是__C。
A)chars[5]={ABCDE”};
B)chars[5]={A\'
B\'
C\'
D\'
E'
};
C)char*s;
s=”ABCDE”;
D)char*s;
scanf(%s”,s);
10.下面程序段的运行结果是__C。
char*s=”abcd6'
s+=2;
printf(%d”,s);
A)cdeB)字符c'
C)字符'
c'
的地址D)不确
疋
11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正
确执行的赋值语句是__B。
A)c=*p1+*p2B)p2=cC)p仁p2D)
c=*p1*(*p2)
12.设有程序段:
chars[]=”china”;
char*p;
p=s;
则下面叙述正确的是
A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等
D)*p与s[0]相等
13.以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是
A)strcpy1(char*p1,char*p2)
{while((*p1++=*p2++)!
\0\;
B)strcpy2(char*p1,char*p2)
{while((*p仁*p2)!
){p1++;
p2++}}
C)strcpy3(char*p1,char*p2)
{while(*p1++=*p2++);
D)strcpy4(char*p1,char*p2)
{while(*p2)*p1++=*p2++;
14.下面程序段的运行结果是__C。
chara[]=”anguagW'
*p;
p=a;
while(*p!
'
){printf(%c”,*p-32);
p++;
A)LANGUAGEB)IanguageC)LANGD)
IangUAGE
16.以下与库函数strcmp(char*s,char*t)功能相等的程序段是
A)strcmp1(char*s,char*t)
{for(;
*s++=*t++;
)
if(*s=='
return0;
return(*s-*t);
B)strcmp2(char*s,char*t)
if(!
*s)return0;
C)strcmp3(char*s,char*t)
*t==*s;
{if(!
*t)return0;
t++;
s++;
D)strcmp4(char*s,char*t)
*s==*t;
s++,t++)
return(*t-*s);
17.以下说明不正确的是D。
A)chara[10]=”china”;
B)chara[10],*p=a;
p=”china”;
C)char*a;
a=”china”;
D)chara[10],*p;
p=a=china;
18.设有说明语句:
chara[]=”Itismine”;
char*p=”Itismine”;
则以下
不正确的叙述是__D。
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
19.若已定义chars[10];
则在下面表达式中不表示s[1]的地址是
B。
A)s+1B)s++C)&
s[0]+1D)&
s[1]
20.若有定义:
inta[5],*p=a;
则对a数组元素的正确引用是D。
A)*&
a[5]B)a+2C)*(p+5)D)*(a+2)
21.若有定义:
则对a数组元素地址的正确引用是
A)p+5B)*a+1C)&
a+1D)&
a[0]
22.若有定义:
inta[2][3];
则对a数组的第i行第j列元素值的正确引用是—
A。
A)*(*(a+i)+j)B)(a+i)[j]C)*(a+i+j)D)
*(a+i)+j
23.
若有定义:
则对a数组的第i行第j列元素地址的正确引用是_
A)*(p+2)
(p+1)+2
25.若有程序段:
inta[2][3],(*p)[3];
p=a;
则对a数组元素的正确引用是
A)(p+1)[0]B)*(*(p+2)+1)C)*(p[1]+1)D)
p[1]+2
26.若有定义:
inta[5];
则a数组中首元素的地址可以表示为__C。
A)&
aB)a+1C)aD)
&
a[1]
27.若有定义:
int(*p)[4];
则标识符pC。
A)是一个指向整型变量的指针
B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组
D)定义不合法
28.以下与int*q[5];
等价的定义语句是__C。
A)intq[5]B)int*qC)int*(q[5])D)int
(*q)[5]
29.以下正确的说明语句是__B。
A)int*b[]={1,3,5,7,9};
B)inta[5],*num[5]={&
a[0],&
a[1],&
a[2],&
a[3],&
a[4]};
C)inta[]={1,3,5,7,9};
int*num[5]={a[0],a[1],a[2],a[3],a[4]};
D)inta[3][4],(*num)[4];
num[1]=&
a[1][3];
30.若有定义:
intb[4][6],*p,*q[4];
且0Wi<
4,则不正确的赋值语句是
A)q[i]=b[i];
B)p=b;
C)p=b[i];
D)
q[i]=&
b[0][0]
32.若要对a进行自减运算,则a应有下面说明__D。
A)intp[3];
B)intk;
C)char*a[3]D)int
b[10];
int*a=&
k;
int*a=p;
int*a=b+1;
33.以下选项中,
对指针变量p的正确操作是
Bo
A)inta[3],*p;
B)inta[5],*p;
C)inta[5];
D)int
a[5]
p=&
a;
p=a;
int*p=a=100;
int
*p1,*p2=a;
*卩仁*p2;
34.若有定义:
intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;
则数值不为3的表达式是
A)x[3]B)p1=x+3,*p1++
C)p1=x+2,*(p1++)D)p1=x+2,*++p1
35.下面程序段的输出是C。
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;
for(k=01;
k<
4;
k++)q[k]=&
a[k*3];
printf(%d\n”q[3][0]);
A)8B)16C)20D)输
出不合法
36.若要对a进行自增运算,则a应具有下面说明__D。
A)inta[3][2];
B)char*a[]={12””ab”;
C)char(*a)[3]D)intb[10],*a=b;
37.若有定义inta[4][6];
则能正确表示a数组中任一元素a[i][j](i,j均在
有效范围内)地址的表达式Ao
A)&
a[0][0]+6*i+jB)&
a[0][0]+4*j+i
C)&
a[0][0]+4*i+jD)&
a[0][0]+6*j+I
38.下面程序的运行结果是__Bo
main()
{intx[5]={2,4,6,8,10},*p,**pp;
p=x,pp=&
p;
printf(%d”*(p++));
printf(%3d”**pp);
A)44B)24C)22D)46
39.若有定义intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*p)[3]=x;
则能够正确表
示数组元素x[1][2]的表达式是__D。
A)*((*p+1)[2])B)(*p+1)+2
C)*(*(p+5))D)*(*(p+1)+2)
40.若有说明:
char
*language[]={FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};
J则Ianguage[2]
的值是B。
A)一个字符B)一个地址C)一个字符串D)一
个不定值
41.设有定义:
char*cc[2]={1234”,”5678”};
则正确的叙述是_A。
A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc元素的值分别维”1234”和”5678”
42.已有定义int(*p)();
指针p可以B。
A)代表函数的返回值B)指向函数的入口地址
C)表示函数的类型D)表示函数返回值的类型
43.已有函数max(a,b),为了让函数指针变量p指向函数max正确的赋值方法
是A。
A)p=max;
B)p=max(a,b);
C)*p=max;
*p=max(a,b);
44.若有函数max(a,b),并且已使函数指针变量p指向函数max当调用该函数
时,正确的调用方法是C或p(a,b)。
A)(*p)max(a,b)B)*pmax(a,b);
C)(*p)(a,b);
D)*p(a,b);
45.以下正确的叙述是C。
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定
B)C语言允许main函数带形参,形参名只能是argc和argv
C)当main函数带有形参时,传给形参的值只能从命令行中得到
D)若有说明:
intmain(intargc,char**argv),则argc的值必须大于1三.程序阅读题
1.写出下面程序的运行结果。
5
func(char*s,chara,intn)
{intj;
*s=a;
j=n;
while(*s<
s[j])j--;
returnj;
main()
{charc[6];
inti;
for(i=1;
i<
=5;
i++)*(c+1)='
A'
+i+1;
printf(“%d\n”,func(c,'
5));
2.写出下面程序的运行结果。
6
fun(char*s)
{char*p=s;
while(*p)p++;
return(p-s);
{char*a=”abcdef”;
printf(“%d\n”,fun(a));
3.写出下面程序的运行结果。
abcdefglkjih
sub(char*a,intt1,intt2)
{charch;
while(t1<
t2){
ch=*(a+t1);
*(a+t1)=*(a+12);
*(a+t2)=ch;
t1++;
t2--;
{chars[12];
inti;
for(i=0;
12;
i++)s[i]='
+i+32;
sub(s,7,11);
i++)printf(%c”,s[i]);
printf(\h”;
4.
976531
当运行以下程序时,写出输入6/的程序运行结果
sub(char*a,charb)
{while(*(a++)!
);
while(*(a-1)<
b)
*(a--)=*(a-1);
*(a--)=b;
{chars[]=”97531”c;
c=getchar();
sub(s,c);
puts(s);
5.写出下面程序的运行结果。
Java
dBase
CLanguage
Pascal
{char*a[]={Pascal"
”CLanguag6‘,”dBase'
Java'
char(**p)[];
intj;
p=a+3;
for(j=3;
j>
=0;
j--)
printf(%s\n”,*(p--));
四•程序填空题
1.下面函数的功能是从输入的十个字符串中找出最长的那个串,请填
(2)空使程
序完整。
voidfun(charstr[10][81],char**sp)
{inti;
*sp=【1str[0]】;
10;
i++)
if(strlen(*sp)<
strlen(str[i]))【2】;
2.下面函数的功能是将一个整数字符串转换为一个整数,例如:
”-1234”转换为
1234,请填(3)空使程序完整。
intchnum(char*p)
{intnum=0,k,len,j;
len=strlen(p);
for(;
【1】;
p++){
k=【2*p-0'
】;
j=(--len);
while(【3j--!
=0】)k=k*10;
num=num+k;
return(num);
3.下面函数的功能使统计子串substr在母串str中出现的次数,请填⑶空使程序完整。
intcount(char*str,char*substr)
{inti,j,k,num=0;
for(i=0;
【1】;
i++)
for(【2j=i],k=0;
substr[k]==str[j];
k++;
j++)
if(substr[【3k】]=='
){
num++;
break;
return(num);
6.下面函数的功能是将两个字符串s1和s2连接起来,请填
(2)空使程序完整。
voidconj(char*s1,char*s2)
{
while(*s1)【1s1++】;
while(*s2){*s1=【2*s2】;
s1++,s2++;
*s仁'
1.定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出
2.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写三个函数:
①输入10个数;
②进行处理;
③输出10个数。
所有函数的参数均用指针。
3.编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。
4.编写一个函数(参数用指针)将一个3X3矩阵转置
5.写函数原型为intstrcmp(char*s1,char*s2);
的函数,该函数实现两个字
符串的比较(函数功能描述参见教材P137,strcmp字符串处理函数)。
6.利用指向行的指针变量求5X3数组各行元素之和。