程序设计基础人民邮电出版社答案第10章指针.docx
- 文档编号:2441444
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:14
- 大小:18.57KB
程序设计基础人民邮电出版社答案第10章指针.docx
《程序设计基础人民邮电出版社答案第10章指针.docx》由会员分享,可在线阅读,更多相关《程序设计基础人民邮电出版社答案第10章指针.docx(14页珍藏版)》请在冰豆网上搜索。
程序设计基础人民邮电出版社答案第10章指针
一、单项选择
1.设有定义doublea[10],*s=a;,以下能代表数组元素a[3]的是(B)。
A)(*s)[3]B)*(s+3)C)*s[3]D)*s+3
2.设有定义:
intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是(A)。
A)*p=*qB)p=qC)*p=&n1;D)p=*q
3.若有定义:
intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是(B)。
A)随机值B)0C)x的地址D)p的地址
4.下述程序的输出结果是(B)。
voidmain()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;
printf("%d\n",*p+*q);
}
A)16B)10C)8D)6
5.下面程序段的运行结果是(B)。
charstr[]="ABC",*p=str;
printf("%d\n",*(p+3));
A)67B)0C)随机值D)'0'
二、阅读程序写结果
1.
#include
voidmain()
{
inta[]={2,4,6,8,10};
inty=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf("%d\n",y);
}
答案:
19
2.
#include
voidmain()
{char*s="121";
intk=0,a=0,b=0;
do
{k++;
if(k%2==0){a=a+s[k]-'0';continue;}
b=b+s[k]-'0';
a=a+s[k]-'0';
}while(s[k+1]);
printf("k=%da=%db=%d\n",k,a,b);
}
答案:
k=2a=4b=3
3.
#include
intb=2;
intfunc(int*a)
{b+=*a;return(b);}
voidmain()
{
inta=2,res=2;
res+=func(&b);
printf("%d\n",res);
}
答案:
6
4.
#include
intsub(int*s);
voidmain()
{inti,k;
for(i=0;i<4;i++)
{k=sub(&i);
printf("%2d",k);
}
printf("\n");
}
intsub(int*s)
{staticintt=0;
t=*s+t;
returnt;
}
答案:
0136
三、程序填空
1.以下程序先输入数据给数组a赋值,然后按照从a[0]到a[4]的顺序输出各元素的值,最后再按照从a[4]到a[0]的顺序输出各元素的值。
请填空。
#include
voidmain()
{inta[5];
inti,*p;
p=a;
for(i=0;i<5;i++)
scanf("%d",p++);
(1)
for(i=0;i<5;i++,p++)
printf("%d",*p);
printf("\n");
(2)
for(i=4;i>=0;i--,p--)
printf("%d",*p);
printf("\n");
}
答案:
(1)p=a;
(2)p=a+4;或p--
2.以下程序的功能是:
将无符号八进制数字构成的字符串转换为十进制整数。
例如,
输入的字符串为:
556,则输出十进制数366。
请填空。
#include"stdio.h"
voidmain()
{char*p,s[6];
intn;
(1)
gets(p);
n=*p-'0';
while(____
(2)___!
='\0')n=n*8+*p-'0';
printf("%d\n",n);
}
答案:
(1)p=s;
(2)++p
3.以下程序调用findmax函数求数组中最大的元素在数组中的下标,请填空。
#include
voidfindmax(int*s,intn,int*k)
{intp;
for(p=0,*k=p;p if(s[p]>s[*k]) (1); } voidmain() {inta[10],i,k; for(i=0;i<10;i++)scanf("%d",&a[i]); (2); printf("%d,%d\n",k,a[k]); } 答案: (1)*k=p (2)findmax(a,10,&k) 4.下面程序的功能是将字符串b复制到字符串a中,请填空。 #include voids(char*s,char*t) {while( (1)) (2); *s=’\0’; } voidmain() {chara[20],b[10]; scanf("%s",b); s((3)); puts(a); } 答案: (1)*t! ='\0'或*t (2)*(s++)=*(t++)或*s++=*t++ (3)a,b 5.下面程序是将p指向的常字符串中大写字母取出依次放到b数组中,小写字母取出依次放在a数组中。 请填空。 #include voidmain() {chara[80],b[80],*p="lYoOvUe"; inti=0,j=0; while( (1)) {if(*p>='a'&&*p<='z') (2); elseb[j++]=*p; p++; } (3); puts(a);puts(b); } 答案: (1)*p! ='\0'或*p (2)a[i++]=*p (3)a[i]='\0';b[j]='\0'或a[i]=b[j]='\0' 四、程序问答 1. #include #include voidmain() { char b1[8]="abcdefg",b2[8],*pb=b1+3; while (--pb>=b1) strcpy(b2,pb); printf("%d\n",strlen(b2)); } 问题1: 该程序运行结果如何? 问题2: 当while循环结束时,pb指向了哪里? 答案: (1)7 (2)首地址 2. #include voidswap(int*pt1,int*pt2) {inttemp; temp=*pt1; *pt1=*pt2; *pt2=temp; } voidexchange(int*q1,int*q2,int*q3) {if(*q1<*q2)swap(q1,q2); if(*q1<*q3)swap(q1,q3); if(*q2<*q3)swap(q2,q3); } voidmain() {inta,b,c; scanf("%d%d%d",&a,&b,&c); exchange(&a,&b,&c); printf("%d,%d,%d\n",a,b,c); } 问题1: 程序运行时若输入了1296,会输出什么结果? 问题2: 程序的功能是什么? 问题3: 若把swap函数体中的所有*pt1改为pt1,*pt2改为pt2,结果会如何? 请分析原因。 答案: (1)12,9,6 (2)从大到小排序(降序排列) (3)结果仍是12,9,6,但此处输出结果不是排序后的结果,输出的是输入顺序的数字。 3. #include voidfun1(char*s,char*c) {char*p,*q; for(p=s;*p! ='\0';p++) if(*p==*c) {for(q=p;*q! ='\0';q++) *q=*(q+1); p--; } } voidmain() {charstr[20]="attactet",c1='t'; fun1(str,&c1); puts(str); } 问题1: 程序运行结果? 问题2: 函数fun1的功能是什么? 问题3: 如果将函数fun1中的语句p--;去掉,程序结果又怎样? 分析该语句的作用。 答案: (1)aace (2)把字符数组中的t删除掉 (3)atace 五、程序改错 1.输入5个字符串,输出其中最大的字符串。 #include voidmain() {inti; charstr[80],max[80]; **********found************* scanf("%s",&str); **********found************* max=str; for(i=1;i<5;i++) {scanf("%s",str); **********found************* if(max **********found************* max=str; } printf("maxis%s\n",max); } 答案: (1)scanf("%s",str); (2)strcpy(max,str); (3)strcmp(max,str); (4)strcpy(max,str); 2.下面程序将给定字符串循环左移1位,首字符移动到字符串的末尾。 如输入"abcde",输出结果为bcdea。 #include voidmove1(char*s) {char*p,t; p=s+1; *********found******** t=s; while(*p) *********found********* {*p=*(p-1); p++;} *******found******** *p=t; } voidmain() {char*p,str[10]="abcde"; move1(str); printf("%s\n",str); } 答案: (1)t=*s; (2)*(p-1)=*p; (3)*(p-1)=t; 3.以下程序用来删除字符串s中所有空格字符,如输入"thisisatest! ",输出结果为: thisisatest! #include voidmain() {chars[80],*p,*q; *********found********* scanf("%s",s); for(p=q=s;*p! ='\0';p++) if(*p! ='') **********found********** {q=p; q++; } *********found************ *(q-1)='\0'; puts
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计基础人民邮电出版社答案第10章 指针 程序设计 基础 人民邮电 出版社 答案 10