第8章补充作业.docx
《第8章补充作业.docx》由会员分享,可在线阅读,更多相关《第8章补充作业.docx(18页珍藏版)》请在冰豆网上搜索。
![第8章补充作业.docx](https://file1.bdocx.com/fileroot1/2023-8/13/acce0239-1b59-49df-95b1-4dda4bc2e0d6/acce0239-1b59-49df-95b1-4dda4bc2e0d61.gif)
第8章补充作业
第8章补充作业
1、选择题序号:
1)变量的指针,其含义是指该变量的。
姓名:
A.值B.地址C.名D.一个标志学号:
2)若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是。
A.a,point,*&aB.&*a,&a,*point
C.*&point,*point,&aD.&a,&*point,point
3)若已定义a为int型变量,则是对指针p的正确说明和初始化。
A.int*p=a;B.int*p=*a;
C.intp=&a;D.int*p=&a;
4)下面判断正确的是。
A.char*a=“china”;等价于char*a;*a=“china”;
B.charstr[10]={“china”};等价于charstr[10];str[]={“china”};
C.char*s=“china”;等价于char*s;s=“china”;
D.charc[4]=“abc”,d[4]=“abc”;等价于charc[4]=d[4]=“abc”;
5)以下合法的定义是。
A.staticstr[]={“china”};B.char*p=“china”;
C.char*p;strcpy(p,”china”);D.charstr[13];str[]=“china”;
6)若有定义:
inta[4][6];则能正确表示a数组中任一元素a[i][j](此处0≤i<4,0≤j<6)地址的表达式是。
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
7)若有以下定义,则数值不为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
8)若有说明语句:
intx[3][4];则以下关于x,*x,x[0],&x[0][0]的正确描述是。
A.x,*x,x[0],&x[0][0]均表示元素x[0][0]的地址
B.只有x,x[0],&x[0][0]表示的是元素x[0][0]的地址
C.只有x[0]和&x[0][0]表示的是元素x[0][0]的地址
D.只有&x[0][0]表示的是元素x[0][0]的地址
9)若有以下说明语句:
staticinti,a[2][3]={1,3,5,7,9,11};
intm,n;
且0≤m≤1,0≤n≤2,则是对数组元素的正确引用。
A.a[m]+nB.*(a+5)
C.*(*(a+m)+3)D.*(*(a+m)+n)
10)以下程序运行的结果是。
#include
#include
main()
{char*p1,*p2,str[50]=“abc”;
p1=“abc”;p2=“abc”;
strcpy(str+1,strcat(p1,p2));
printf(“%s\n”,str);}
A.abcabcabcB.bcabcabcC.aabcabcD.cabcabc
11)下面程序的运行结果是C。
#include
main()
{intb,a=28;
chars[10],*p;
p=s;
do{
b=a%16;
if(b<10)
*p=b+48;
else
*p=b+55;
p++;
a=a/5;
}while(a>0);
*p=’\0’;
puts(s);}
A.10B.2C.51D.\0
12)下面程序的运行结果是A。
#include
main()
{staticchara[]=“Language”,b[]=“programe”;
char*p1,*p2;
intk;
p1=a;p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k))
printf(“%c”,*(p1+k));}
A.gaeB.gaC.LanguageD.有语法错误
13)以下程序中调用scanf函数给变量a输入数值的方法是错误,其错误原因是。
main()
{int*p,*q,a,b;
p=&a;
printf(“inputa:
”);
scanf(“%d”,*p);
…}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
14)以下程序运行的结果是C。
#include
main()
{inta[]={2,4,6,8,10},y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf(“%d\n”,y);}
A.17B.18
C.19D.20
15)有如下程序:
#include
main()
{charch[2][5]={“6937”,“8254”},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)
p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]!
=’\0’;j+=2)
s=10*s+p[i][j]-’0’;
printf(“%d\n”,s);}
该程序的输出结果是C。
A.69825B.63825
C.6385D.693825
16)已有定义:
intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A.k=*ptr1+*ptr2;
B.ptr2=k;
C.ptr1=ptr2
D.k=*ptr1*(*ptr2);
17)若有说明:
int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是。
A.p1=&m;p2=&p1;
B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;p2=p1;
D.p1=&m;*p2=*p1;
18)以下正确的程序段是。
A.charstr1[]=“12345”,str2[]=“abcdef”;strcpy(str1,str2);
B.charstr[10],*st=“abcde”;strcat(str,st);
C.charstr[10]=““,*st=“abcde”;strcat(str,st);
D.char*st1=“12345”,*st2=“abcde”;strcat(st1,st2);
19)下面程序段的运行结果是。
char*p=“abcdefgh”;
p+=3;
printf(“%d\n”,strlen(strcpy(p,”ABCD”)));
A.8B.12
C.4D.7
20)下面程序段的运行结果是C。
chara[]=“language”,*p;
p=a;
while(*p!
=’u’)
{printf(“%c”,*p-32);
p++;}
A.LANGUAGE
B.language
C.LANG
D.langUAGE
2、填空题
1)若p已指向存储单元a[1]。
通过指针p给s赋值,使s指向最后一个存储单元a[4]的语句是。
2)若有以下定义和语句:
则*--p的值是。
inta[4]={0,1,2,3},*p;
p=&a[2];
3)若有定义:
inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是;*(a[1]+2)的值是。
4)若有定义:
intm[10][6];在程序中引用数组元素m[i][j]的四种形式是:
,
,和。
(假设i、j已正确说明并赋值)。
5)下面程序可通过行指针p输出数组a中任一行任一列元素的值。
请填空。
main()
{inta[2][3]={2,4,6,8,10,12};
int(*p)[3],i,j;
p=a;
scanf(“%d,%d”,&i,&j);/*0≤i<2,0≤j<3*/
printf(“a[%d][%d]=%d\n”,i,j,);}
6)下面程序的运行结果是sum=25。
main()
{intx[]={0,1,2,3,4,5,6,7,8,9};
ints,i,*p;
s=0;
p=&x[0];
for(i=1;i<10;i+=2)
s+=*(p+i);
printf(“sum=%d”,s);}
7)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。
请填空。
intmystrlen(char*str)
{char*p;
for(p=str;!
=’\0’;p++);
return();}
8)下面程序段的运行结果是12345。
chara[]=“12345”,*p;
ints=0;
for(p=a;*p!
=’\0’;p++)
s=10*s+*p-‘0’;
printf(“%d\n”,s);
9)下面程序的运行结果是
main()
{intva[10],vb[10],*pa,*pb,i;
pa=va;pb=vb;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);}
pa=&va[0];pb=&vb[0];
for(i=0;i<3;i++)
{*pa=*pa+i;*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);
}}
10)若输入的值分别是1,3,5,下面程序的运行结果是111315
main()
{inta=0,i,*p,sum;
p=&a;
for(i=0;i<=2;i++)
{scanf(“%d”,p);
sum=s(p);
printf(“sum=%d\n”,sum);
}}
s(int*p)
{intsum=10;
sum=sum+*p;
return(sum);}
11)以下程序的运行结果是0136。
#include
main()
{inti,k;
for(i=0;i<4;i++)
{k=sub(&i);
printf(“%3d”,k);}
printf(“\n”);}
intsub(int*s)
{staticintt=0;
t=*s+t;
returnt;}
12)以下程序的输出结果是abcdeedcba。
#include
main()
{char*ptr1,*ptr2;
ptr1=ptr2=“abcde”;
while(*ptr2!
=’\0’)
putchar(*ptr2++);
while(--ptr2>=ptr1)
putchar(*ptr2);
putchar(‘\n’);}
13)有以下程序,若从键盘输入:
abcdef↙,则输出结果是def↙def↙。
#include
#include
main()
{char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf(“%s%s”,p,q);
printf(“%s%s”,p,q);}
14)以下程序的输出结果是c/bc/abc
#include
main()
{charstr[]=“abc”,*ps=str;
while(*ps)
ps++;
for(ps--;ps-str>=0;ps--)
puts(ps);}
15)设有以下程序:
#include
main()
{inti,*p=&i;
i=10;
*p=i+5;
i=2*i;
printf(“%d\n”,*p);}
程序执行的结果是30。
16)设有两个字符串a、b,下面程序是将a、b的对应字符中的较大者存放在数组c的对应位置上。
请填空。
#include
#include
main()
{intk=0;
chara[80],b[80],c[80]={‘\0’},*p,*q;
p=a;q=b;gets(a);gets(b);
while()
{if()
c[k]=*q;
else
c[k]=*p;
p++;q++;k++;}
if(*p!
=’\0’)
strcat(c,p);
else
strcat(c,q);
puts(c);}
17)以下程序的功能是:
将无符号八进制数字字符串转换为十进制整数。
例如,输入的字符串为556,则输出十进制整数366。
请填空。
#include
main()
{char*p,s[6];
intn;
p=s;
gets(p);
n=*p-‘0’;
while(=’\0’)
n=n*8+*p-‘0’;
printf(“%d\n”,n);}
18)假设a数组中的数据已按从小到大的顺序存放,以下程序可把a数组中相同的数据删得只剩下一个,然后以每行4个数据的格式输出a数组。
请填空。
#defineM10
main()
{inta[M],i,j,n;
for(i=0;iscanf(“%d”,a+i);
n=i=M-1;
while(i>=0)
{if(*(a+i)==*(a+i-1))
{for(j=;j<=n;j++)
*(a+j-1)=*();
n--;}
i--;}
for(i=1;i<=n+1;i++)
{printf(“%4d”,*());
if(i%4==0)
printf(“\n”);}
printf(“\n”);}
19)下面程序是判断输入的字符串是否是”回文”,(顺读和倒读都一样的字符串称”回文”,如level)。
请填空。
#include
#include
main()
{chars[81],*p1,*p2;
intn;
gets(s);
n=strlen(s);
p1=s;
p2=;
while()
{if(*p1!
=*p2)
break;
else
{p1++;
;
}}
if(p1printf(“NO\n”);
else
printf(“YES\n”);}
20)下面程序的运行结果是abcdefg/ADGH
#include
main()
{chara[80],b[80],*p=“aAbcdDefgGH”;
inti=0,j=0;
while(*p!
=’\0’)
{if(*p>=’a’&&*p<=’z’)
{a[i]=*p;i++;}
else
{b[j]=*p;j++;}
p++;}
a[i]=b[j]=’\0’;
puts(a);puts(b);}
21)以下程序的执行结果是8。
#include
main()
{staticinta[]={1,3,5,7};
int*p[3]={a+2,a+1,a};
int**q=p;
printf(“%d\n”,*(p[0]+1)+**(q+2));}
22)以下程序能找出数组x中的最大值和该值所在的元素下标,数组元素值从键盘输入,请填空。
main()
{intx[10],*p1,*p2,k;
for(k=0;k<10;k++)
scanf(“%d”,x+k);
for(p1=x,p2=x;p1-x<10;p1++)
if(*p1>*p2)
p2=;
printf(“MAX=%d,INDEX=%d\n”,*p2,);}
23)以下程序的执行结果是Thesentencescanmakestatementaboutthetopic。
#include
#include
#defineP(x)printf(“%s”,x)
main()
{staticchar*c[]={“youcanmakestatement”,“forthetopic”,
“Thesentences”,“Howabout”};
staticchar**p[]={c+3,c+2,c+1,c};
char***pp=p;
P(**++pp);
P(*--*++pp+3);
P(*pp[-2]+3);
P(pp[-1][-1]+3);
printf(“\n”);}
24)下面程序的功能是将字符串a的所有字符传送到字符串b中,要求每传送三个字符后再存放一个空格,例如字符串a为”abcdefg”,则字符串b为”abcdefg”,请选择填空。
#include
main()
{inti,k=0;
chara[80],b[80],*p;
p=a;
gets(p);
while(*p)
{for(i=1;【1】;p++,k++,i++)
b[k]=*p;
if(【2】)
{b[k]=’‘;k++;}
}
b[k]=’\0’;
puts(b);}
【1】A.i<3B.i<=3C.i<3&&*p!
=’\0’D.i<=3&&*p
【2】A.i==4B.*p==’\0’C.!
*pD.i!
=4
25)下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前面的原字符往后顺序移动,如chyab变成ychab。
请选择填空。
#include
main()
{charstr[80],*p,max,*q;
p=str;gets(p);max=*(p++);
while(*p!
=’\0’)
{if(max<*p)
{max=*p;
【1】;}
p++;}
p=q;
while(【2】)
{*p=*(p-1);
【3】;}
*p=max;
puts(p);}
【1】A.p++B.p=qC.q=pD.q++
【2】A.p>strB.p>=strC.*p>str[0]D.*p>=str[0]
【3】A.p++B.str--C.p--D.i--
26)下面程序的功能从终端读入一行字符作为字符串放在字符数组中,然后输出请填空。
inti;
chars[80],*p;
for(i=0;i<79;i++)
{s[i]=getchar();
if(s[i]==’\n’)
break;}
s[i]=;
p=;
while(*p)
putchar(*p++);
27)下面程序的运行结果是bcdABCD。
chars[20]=“abcd”;
char*sp=s;
sp++;
puts(strcat(sp,”ABCD”));
28)下面程序段的运行结果是*2*4*6*8*。
chara[]=“123456789”,*p;
inti=0;
p=a;
while(*p)
{if(i%2==0)*p=’*’;
p++;i++;}
puts(a);
29)下面程序的输出结果是24681012。
main()
{intb[2][3]={2,4,6,8,10,12};
int*a[2][3]={*b,*b+1,*b+2,*(b+1),*(b+1)+1,*(b+1)+2};
int**q,k;
q=a[0];
for(k=0;k<6;k++)
{printf(“%4d”,**q);
q++;}}