10章指针练习答案.docx
- 文档编号:10417852
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:9
- 大小:16.69KB
10章指针练习答案.docx
《10章指针练习答案.docx》由会员分享,可在线阅读,更多相关《10章指针练习答案.docx(9页珍藏版)》请在冰豆网上搜索。
10章指针练习答案
一、选择题
1.变量的指针,其含义是指该变量的____。
B
A)值B)地址C)名D)一个标志
2.设有语句:
inta=5,*p1=&a,*p2=p1;则下面错误的赋值语句是。
B
A)a=*p1+*p2;B)p2=a;C)p1=p2;D)a=*p1*(*p2);
3.若有语句inta,*p=&a;下面正确的语句是_____。
C
A)scanf("%d",&p);B)scanf("%d",a);
C)scanf("%d",p);D)scanf("%d",*p);
4.若有定义:
inta[5],*p=a;则对a数组元素的正确引用是____。
D
A)*&a[5]B)a+2C)*(p+5)D)*(a+2)
4.若有定义:
inta[5],*p=a;则对a数组元素地址的正确引用是____。
D
A)p+5B)*a+2C)&a+1D)&a[0]
5.若有语句inta=4,*p=&a;下面均代表地址的一组选项是_____。
D
A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p
6.设有语句:
inta=3,b,*p=&a;则下列语句中使b不为3的语句是。
D
A)b=*&a;B)b=*p;C)b=a;D)b=*a;
7.设有语句:
inta,b=7,*p=&a;则与a=b;等价的语句是。
B
A)a=*p;B)*p=*&b;C)a=&b;D)a=p;
8.若有定义:
inta[5],*p=a;则*(p+3)表示_____。
B
A)元素a[3]的地址B)元素a[3]的值
C)元素a[4]的地址D)元素a[4]的值
9.若有定义:
inta[5],*p=a;则p+3表示_____。
A
A)元素a[3]的地址B)元素a[3]的值
C)元素a[4]的地址D)元素a[4]的值
10.执行语句段:
inta=25,*p=&a;
printf("%d,",(*p)++);
printf("%d",a);
则输出的结果是________。
B
A)25,25B)25,26C)26,26D)26,25
11.执行语句段:
inta=25,*p=&a;
printf("%d,",++*p);
printf("%d",a);
则输出的结果是________。
C
A)25,25B)25,26C)26,26D)26,25
二、填空
1."*"称为___指针_______运算符,"&"称为___取地址____运算符。
2.设inta[10],*p=a;则对a[3]的引用可以是____*(p+3)或_____*(a+3)。
3.&后面跟变量名,表示该变量的___地址______。
*后面跟指针变量名,表示该指针变量的____内容_。
4.设有char*a="ABCD",则printf("%s",a);的输出是______;ABCD
而printf("%c",*a);的输出是______;A
而printf("%c",*(a+3));的输出是______;D
5.设有定义和语句:
inta[3][2]={10,20,30,40,50,60},(*p)[2];p=a;
则printf("%d",*(*(p+2)+1));的值为________。
答案:
60
6.下面函数要求计算两个整数x,y之和,并通过形参z传回该和值,请填空。
voidadd(intx,inty,________z)答案:
int*
{________=x+y;return;}答案:
*z
6.以下程序的功能是从键盘输入若干字符(以回车键结束)组成一个字符串
存入一个字符数组,然后输出该字符数组中的字符串。
请填空。
#include
main()
{charstr[20],*strp;
inti;
for(i=0;i<20;i++)
{str[i]=getchar();
if(str[i]=='\n')break;}
str[i]=_________;答案:
'\0'
strp=str;
while(*strp)putchar(*strp________);答案:
++
}
三、程序分析题
1.阅读函数,写出函数的主要功能。
swap(int*p1,int*p2)
{intt;
if(*p1>*p2){t=*p1;*p1=*p2;*p2=t;}
}
答案:
若指针变量p1所指向的变量的值大于指针变量p2所指向的变量的值
则交换指针变量所指向的变量的值。
2.阅读函数,写出函数的主要功能。
floatav(floata[],intn)
{inti;
floats=0;
for(i=0;i return(s/n); } 答案: 求一数组中n个数的平均数并返回这个平均值。 3.若输入的值分别是10,20,则下列程序的运行结果是_____。 voidmain() {inta,b,*p1=&a,*p2=&b,*t; scanf("%d,%d",&a,&b); if(a {t=p1;p1=p2;p2=t;} printf("%d,%d\n",a,b); printf("%d,%d\n",*p1,*p2); } 答案: 10,20 20,10 4.阅读程序,写出程序的运行结果。 voidmain() {inta[5]={3,5,9,2},*p=&a[4]; for(;p>=a;p--) printf("%3d",*p); } 答案: 02953(可以运用到逆序中。 ) 5.阅读程序,写出程序的运行结果。 voidmain() {chars[]="ABCD",*p; for(p=s;p printf("%s\n",p); } 答案: ABCD BCD CD D 四、编程题: 本章编程题均要求用指针方法实现。 1.输入一个字符串,编一个函数统计其中大写字母的个数、小写字母、 数字,要求用指针作为形参,用数组名作实参。 答案: #include intAletter=0,aletter=0,num=0; voidcount(char*p) {for(;*p! ='\0';p++) if(*p>='A'&&*p<='Z') Aletter++; elseif(*p>='a'&&*p<='z') aletter++; elseif(*p>='0'&&*p<='9') num++; } voidmain() {chars[20]; gets(s); count(s); printf("%2d,%2d,%2d\n",Aletter,aletter,num); } 2.编一程序,将数组a[7]={1,2,3,4,5,6,7}中的数按相反顺序存放后输出。 答案 (1)算法: 交换指针变量所指向的变量的值。 #include voidmain() { inta[]={1,2,3,4,5,6,7},*p=a,*q=a+6,i,t; for(i=0;i<7/2;i++,p++,q--) {t=*p;*p=*q;*q=t;} for(i=0;i<7;i++) printf("%3d",a[i]); } 答案 (2)算法: 函数形参用指针。 #include inv(int*b,intn) { int*i=b,*j=b+n-1,t; for(;i {t=*i;*i=*j;*j=t;} } voidmain() {inta[]={1,2,3,4,5,6,7},i; inv(a,7); for(i=0;i<7;i++) printf("%3d",a[i]); } 3.编一程序,将字符串"1234567"赋给一字符数组,然后从第一个字母开始 间隔地输出该串(1357)。 答案: #include voidmain() {chars[]="1234567",*p; for(p=s;p printf("%c",*p); } 4.编一程序,将字符数组a[7]="abcdefg"中的字符按相反顺序输出。 答案: #include #include inv(char*p,intn) {char*end=p+n-1; inti=n; while(i>0)//i用来控制循环交数 {printf("%c",*end); end--; i--; } } voidmain() {intl;charstr[]="abcdefg"; l=strlen(str); inv(str,l); } 5.编一程序,用函数实现,将数组a[5]={6,-2,3,4,7}中的最大和最小值。 答案: #include intmax,min; voidmax_min(intb[],intn) { int*p; max=min=*b; for(p=b+1;p if(*p>max)max=*p; elseif(*p } voidmain() { inta[5]={6,-2,3,4,7}; max_min(a,5); printf("max=%3d,min=%3d\n",max,min); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 指针 练习 答案