指针经典练习题含答案版一.doc
- 文档编号:238266
- 上传时间:2022-10-07
- 格式:DOC
- 页数:4
- 大小:32.50KB
指针经典练习题含答案版一.doc
《指针经典练习题含答案版一.doc》由会员分享,可在线阅读,更多相关《指针经典练习题含答案版一.doc(4页珍藏版)》请在冰豆网上搜索。
指针一.填空题(20分)
1.指针变量是把内存中另一个数据的地址作为其值的变量。
2.能够直接赋值给指针变量的整数是0。
3.如果程序中已有定义:
intk;
1) 定义一个指向变量k的指针变量p的语句是int*p=&k;。
2) 通过指针变量,将数值6赋值给k的语句是*p=6;。
3) 定义一个可以指向指针变量p的变量pp的语句是int**pp;。
4) 通过赋值语句将pp指向指针变量p的语句是pp=&p;。
5) 通过指向指针的变量pp,将k的值增加一倍的语句是*(*pp)*=2;。
4.当定义某函数时,有一个形参被说明成int*类型,那么可以与之结合的实参类型可以是int型指针、int型数组等。
4.以下程序的功能是:
将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:
556,则输出十进制整数366。
请填空。
45*8
#include
main()
{char*p,s[6];intn;p=s;gets(p);n=*p-'0';
while(*++p!
='\0')//先++,后*
n=n*8+*p-'0';
printf("%d\n",n);
}
二.选择题(22分)
1.以下count函数的功能是统计substr在母串str中出现的次数。
intcount(char*str,char*substr)
{inti,j,k,num=0;
for(i=0;①B;i++)
{for(②B,k=0;substr[k]==str[j];k++,j++)
if(substr[③C]==’\0’)
{num++;break;}
}
returnnum;
}
①A)str[i]==substr[i]B)str[i]!
=‘\0’
C)str[i]==‘\0’D)str[i]>substr[i]
②A)j=i+1B)j=iC)j=i+10D)j=1
③A)kB)k++C)k+1D)++k
2.以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。
voidDelblank(char*s)
{inti,t;
charc[80];
for(i=0,t=0;A①;i++)
if(!
isspace(D②))c[t++]=s[i];
c[t]=‘\0’;
strcpy(s,c);
}
①A)s[i]B)!
s[i]C)s[i]=‘\0’D)s[i]==‘\0’
②A)s+iB)*c[i]C)*(s+i)=‘\0’D)*(s+i)
3.以下conj函数的功能是将两个字符串s和t连接起来。
char*conj(char*s,char*t)
{char*p=s;
while(*s)①B;
while(*t)
{*s=A②;s++;t++;}
*s=‘\0’;
C③;
}
①A)s--B)s++C)sD)*s
②A)*tB)tC)t--D)*t++
③A)returnsB)returntC)returnpD)returnp-t
4.下列程序的输出结果是B。
#include
main()
{int**k,*a,b=100;a=&b;k=&a;printf(“%d\n”,**k);}
A)运行出错B)100C)a的地址D)b的地址
5.下列程序的输出结果是D。
#include
fun(int*a,int*b)
{int*w;
*a=*a+*a;
*w=*a;
*a=*b;
*b=*w;}
main()
{intx=9,y=5,*px=&x,*py=&y;fun(px,py);printf(“%d,%d\n”,x,y);}
A)出错B)18,5C)5,9D)5,18
6.若定义了以下函数:
voidf(……)
{……
p=(double*)malloc(10*sizeof(double));
……
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是A。
A)double*p B)float**pC)double**p D)float*p
三.编程题
1.编写函数实现,计算字符串的串长。
(10分)
intmyLength(char*ps)
{
intLength=0;
while(*ps)
{
Length++;
ps++;
}
returnLength;
}
2.编写函数实现,计算一个字符在一个字符串中出现的次数。
(20分)
#include
#include
intOccur(char*s,charc);
intOccur(char*s,charc)
{
intcount=0;
while(*s)
{
if(*s==c)
count++;
s++;
}
returncount;
}
3.有n个人围成一圈,顺序排号。
由用户从键盘输入报数的起始位置,从该人开始报数(计数从0开始),凡报数为3的倍数出圈。
问最后剩下的是几号?
(28分)
intmain()
{
int*arr;
intn,start;
cout<<"请输入总共人数N(位置编号从开始):
";
cin>>n;
cout<<"请输入开始位置(不大于N):
";
cin>>start;
arr=newint[n+1];
for(inti=0;i arr[i]=0; intj=0,count=0; for(inti=1;i<=n;i++) { if(arr[i]==0) { if(j%3==0) { arr[i]=1; count++; } j++; if(count==n-1) break; } if(i==n) i=0; } for(inti=1;i<=n;i++) if(arr[i]==0) { cout< break; } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 经典 练习题 答案