printf("\n");
}
A.024681012141618B.01234
01234024681012141618
C.0123456789D.024681012141618
01234024681012141618
5.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为(A)。
A.自动(auto)B.静态(static)C.外部(extern)D.寄存器(register)
6.以下程序的正确运行结果是(D)。
main()
{inta=2,i;
for(i=0;i<3;i++)printf("%4d",f(a));
}
f(inta)
{intb=0;staticintc=3;
b++;c++;
return(a+b+c);
}
A.777B.71013C.7911D.789
二、读程序,写结果
7.写出下面程序的运行结果,①是(8)、②是(17)。
#include
main()
{intk=4,m=1,p;
p=fun(k,m);printf("%d",p);/*①*/
p=fun(k,m);printf("%d",p);/*②*/
}
fun(inta,intb)
{staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
8.下面程序的运行结果是(84)。
#include
intd=1;
fun(intp)
{intd=5;
d+=p++;
printf("%d",d);
}
main()
{inta=3;
fun(a);
d+=a++;
printf("%d",d);
}
第7章
练习7-1答案
选择题
1.已知:
int*p,a;,则语句“p=&a;”中的运算符“&”的含义是(D)。
A.位与运算B.逻辑与运算C.取指针内容D.取变量地址
2.已知:
inta,x;,则正确的赋值语句是(C)。
A.a=(a[1]+a[2])/2;B.a*=*a+1;C.a=(x=1,x++,x+2);D.a="good";
3.已知:
inta,*p=&a;,则下列函数调用中错误的是(D)。
A.scanf("%d",&a);B.scanf("%d",p);C.printf("%d",a);D.scanf("%d",*p);
4.已知:
char*p,*q;,选择正确的语句(C)。
A.p*=3;B.p/=q;C.p+=3;D.p+=q;
5.已知:
intx;,则下面的说明指针变量pb的语句(C)是正确的。
A.intpb=&x;B.int*pb=x;C.int*pb=&x;D.*pb=*x;
练习7-2答案
一、选择题
1.设有说明int(*ptr)[M];,其中的标识符ptr是(C)。
A.M个指向整型变量的指针
B.指向M个整型变量的函数指针
C.一个指向具有M列的二维数组的一行的指针
D.具有M个指针元素的一维数组的指针
2.已知:
double*p[6];,它的含义是(C)。
A.p是指向double型变量的指针B.p是double型数组
C.p是指针数组D.p是数组指针
3.已知:
chars[10],*p=s,则在下列语句中,错误的语句是(B)。
A.p=s+5;B.s=p+s;C.s[2]=p[4];D.*p=s[0];
4.已知:
chars[100];inti;,则在下列引用数组元素的语句中,错误的表示形式是(D)。
A.s[i+10]B.*(s+i)C.*(i+s)D.*((s++)+i)
5.已知:
charb[5],*p=b;,则正确的赋值语句是(C)。
A.b="abcd";B.*b="abcd";C.p="abcd";D.*p="abcd";
6.下列对字符串的定义中,错误的是(A)。
A.charstr[7]="FORTRAN";B.charstr[]="FORTRAN";
C.char*str="FORTRAN";D.charstr[]={'F','O','R','T','R','A','N',0};
7.已知:
chars[20]="programming",*ps=s;,则不能引用字母o的表达式是(A)。
A.ps+2B.s[2]C.ps[2]D.ps+=2,*ps
8.已知:
char**s;,正确的语句是(B)。
A.s="computer";B.*s="computer";C.**s="computer";D.*s='A';
9.已知:
charc[8]="beijing",*s=c;inti;,则下面的输出语句中,错误的是(B)。
A.printf("%s\n",s);B.printf("%s\n",*s);
C.for(i=0;i<7;i++)D.for(i=0;i<7;i++)
printf("%c",c[i]);printf("%c",s[i]);
10.已知:
char*aa[2]={"abcd","ABCD"};,则以下说法正确的是(D)。
A.aa数组元素的值分别是"abcd"序列和"ABCD"序列
B.aa是指针变量,它指向含有两个数组元素的字符型一维数组
C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D.aa数组的两个元素中各自存放了字符'a'和'A'的地址
11.已知:
inta[3][4],*p=&a[0][0];p+=6;,那么*p和(D)的值相同。
A.*(a+6)B.*(&a[0]+6)C.*a[1]+2D.a[1][2]
12.已知:
inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;,则值为3的表达式是(A)。
A.p+=2,*(p++)B.p+=2,*++pC.p+=3,*p++D.*(&a[0][0]+6)
13.已知:
int**p;,则变量p是(B)。
A.指向int的指针B.指向指针的指针
C.int型变量D.以上三种说法均是错误的
14.已知:
inta[]={1,2,3,4},y,*p=&a[1];,则执行语句y=(*--p)++;之后,变量y的值为(A)。
A.1B.2C.3D.4
15.已知:
intb[]={1,2,3,4},y,*p=b;,则执行语句y=*p++;之后,变量y的值为(A)。
A.1B.2C.3D.4
16.已知:
intx[]={1,3,5,7,9,11},*ptr=x;,则能够正确引用数组元素的表达式是(B)。
A.xB.*(ptr--)C.x[6]D.*(--ptr)
17.已知:
intx[]={1,3,5,7,9,11},*ptr=x;,则不能够正确引用数组元素的表达式是(B)。
A.*(ptr--)B.*(--ptr)C.*(ptr++)D.*(++ptr)
18.若有以下语句且0<=k<6,则正确表示数组元素地址的表达式是(C)。
staticintx[]={1,3,5,7,9,11},*ptr=x,k;
A.x++B.&ptrC.&ptr[k]D.&(x+1)
19.已知:
inti,x[3][4];,则不能将x[1][1]的值赋给变量i的语句是(C)。
A.i=*(*(x+1)+1);B.i=x[1][1];C.i=*(*(x+1));D.i=*(x[1]+1);
20.已知:
inta[2][3]={2,4,6,8,10,12};,正确表示数组元素的地址是(A)。
A.*(a+1)B.*(a[1]+2)C.a[1]+3D.a[0][0]
21.已知:
int*p;,使用如下语句动态申请一个int型的存储单元,应当使用(D)。
p=()malloc(sizeof(int));
A.intB.int*C.(*int)D.(int*)
二、填空题
22.阅读程序,下面程序的输出结果是(15)。
#include
main()
{staticinta[2][3]={{1,2,3},{4,5,6}};
intm,*ptr;
ptr=&a[0][0];
m=(*ptr)*(*(ptr+2))*(*(ptr+4));
printf("%d\n",m);
}
23.下面程序的功能是:
从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串.则①是('\0'或0)、②是(++)。
main()
{charstr[81],*sptr;
inti;
for(i=0;i<80;i++)
{str[i]=getchar();
if(str[i]=='\n')break;
}
str[i]=①;
sptr=str;
while(*sptr)putchar(*sptr②);
}
24.在下面的程序中若第一个printf语句的输出为ffe2,则其余语句的输出结果分别为:
①是(fff4)、②是(a)、③是(0)、④是(b)。
main()
{staticshorta[]={1,2,3,4,5,6,7,8,9,0},*p=a;
printf("%x\n",p);/*输出结果为ffe2*/
printf("%x\n",p+9);/*输出①*/
printf("%x\n",*p+9);/*输出②*/
printf("%x\n",*(p+9));/*输出③*/
printf("%x\n",*++p+9);/*输出④*/
}
25.下面程序的输出结果,①是(m)、②是(a)、③是(w)、④是(z)、⑤是(mnopqr)。
#include
char*pp[2][3]={"abc","defgh","ijkl","mnopqr","stuvw","xyz"};
main()
{printf("%c\n",***(pp+1));/*输出①*/
printf("%c\n",**pp[0]);/*输出②*/
printf("%c\n",(*(*(pp+1)+1))[4]);/*输出③*/
printf("%c\n",*(pp[1][2]+2));/*输出④*/
printf("%s\n",**(pp+1));/*输出⑤*/
}
三、读程序,写结果
26.下面程序的运行结果是:
(□□□1□□□3□□□5□□□7
□□□9□□11□□13□□15
□□17□□19□□21□□23)。
(注:
□表示空格。
)
#include
main()
{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int*p,i;
for(p=a,i=0;p<&a[0][0]+12;p++,i++)
{if(i%4==0)printf("\n");
printf("%4d",*p);
}
}
27.下面程序的运行结果是(3,3,3)。
#include
main()
{inta=2,*p,**pp;
pp=&p;p=&a;
a++;
printf("%d,%d,%d\n",a,*p,**pp);}
练习7-3答案
一、选择题
1.main(argc,argv)中形式参数argv的正确说明形式应当为(A).
A.char*argv[]B.charargv[][]C.charargv[]D.char*argv
2.说明语句int(*p)();的含义是(C)。
A.p是一个指向一维数组的指针变量
B.p是指针变量,指向一个整型数据
C.p是一个指向函数的指针,该函数的返回值是一个整型
D.以上都不对
3.说明语句int*(*p)();的含义是(D)。
A.p是一个指向int型数据的指针
B.p是指针变量,它构成了指针数组
C.p是一个指向函数的指针,该函数的返回值是一个整型
D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针
4.已知函数说明语句void*f();,则它的含义是(A)。
A.函数f的返回值是一个通用型指针
B.函数f的返回值可以是任意的数据类型
C.函数f无返回值
D.指针f指向一个函数,该函数无返回值
5.函数的功能是交换变量x和y中的值,并且通过正确调用返回交换的结果。
能正确执行此功能的函数是(D)。
A.funa(int*x,int*y)B.funb(intx,inty)
{int*p;{intt;
*p=x;*x=*y;*y=*p;t=x;x=y;y=t;
}}