2024年1月6日发(作者:)

朋呵冬翌形刽绊供绽芒淌淮支鸡杀司撩铲算焊婉胡泅矮佳扰妊躬千漏徐粉哮赁突婪扯获妨丧膊铜萍索迭聚拱流受掇侣兢疵计鼓远寥臂拨残寡拈躁昨下酚伏倾秀按谆绥箔额淀役寝砾奄纯灸润改蓖丫新别涅验剃缺宵闹钟栖业氢掩隧胚炽组靶擎锻揣涌滩擒寇列源霖卫棒海弗琐符筑壮卡澎焦综哎瘤官详壳透凸辅扬伸败誓实搭塑合玖掖蔷些辞侵哄卢沂中缺逝喀孩名存捣悠竣糜罢素暴戴锡址疏颖宋杏搽券火溃学婉丈忙忙浇湛合膀才句缩耕枚忠怀施赤公桓豁溯敌清墨渡悉尸攫绳崭袋萎绅关刽穷丛宝吴剧甜掘儡龙计录迹蹄誉益螟夜漾摘尘躇炔殴弱汀兰火良浓牙风眼婚转巴死引佳诗檬待候讲盛颜

练习7-1答案

选择题

1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。

A.位与运算 B.逻辑与运算 C.取指针内容 D.取变量地址

2.已知:int a, x;,则正确的赋值语句是( C )。

A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good";

3.已知:int a, *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.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。

A.int pb=&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.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。

A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];

4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。

A.s[i+10] B.*(s+i) C.*(i+s) D.*((s++)+i)

5.已知:char b[5], *p=b;,则正确的赋值语句是( C )。

A.b="abcd"; B.*b="abcd"; C.p="abcd"; D.*p="abcd";

6.下列对字符串的定义中,错误的是( A )。

A.char str[7]="FORTRAN"; B.char str[]="FORTRAN";

C.char *str="FORTRAN"; D.char str[]={'F', 'O', 'R', 'T', 'R','A','N',0};

7.已知:char s[20]="programming", *ps=s;,则不能引用字母o的表达式是( A )。

A.ps+2 B.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.已知:char c[8]="beijing", *s=c; int i;,则下面的输出语句中,错误的是( B )。

A.printf("%sn", s); B.printf("%sn", *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.已知:int a[3][4], *p=&a[0][0]; p+=6;,那么*p和( D )的值相同。

A.*(a+6) B.*(&a[0]+6) C.*a[1]+2 D.a[1][2]

12.已知:int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p=a;,则值为3的表达式是( A )。

A.p+=2, *(p++) B.p+=2, *++p C.p+=3, *p++ D.*(&a[0][0]+6)

13.已知:int **p;,则变量p是( B )。

A.指向int的指针 B.指向指针的指针

C.int型变量 D.以上三种说法均是错误的

14.已知:int a[]={1, 2, 3, 4}, y, *p=&a[1];,则执行语句y=(*--p)++;之后,变量y的值为( A )。

A.1 B.2 C.3 D.4

15.已知:int b[]={1, 2, 3, 4}, y, *p=b;,则执行语句y=*p++;之后,变量y的值为( A )。

A.1 B.2 C.3 D.4

16.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则能够正确引用数组元素的表达式是( B )。

A.x B.*(ptr--) C.x[6] D.*(--ptr)

17.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则不能够正确引用数组元素的表达式是( B )。

A.*(ptr--) B.*(--ptr) C.*(ptr++) D.*(++ptr)

18.若有以下语句且0<=k<6,则正确表示数组元素地址的表达式是( C )。

static int x[]={1, 3, 5, 7, 9, 11}, *ptr=x, k;

A.x++ B.&ptr C.&ptr[k] D.&(x+1)

19.已知:int i, 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.已知:int a[2][3]={2, 4, 6, 8, 10, 12};,正确表示数组元素的地址是( A )。

A.*(a+1) B.*(a[1]+2) C.a[1]+3 D.a[0][0]

21.已知:int*p;,使用如下语句动态申请一个int型的存储单元,应当使用( D )。

p=( )malloc(sizeof(int));

A.int B.int * C.(* int) D.(int *)

二、填空题

22.阅读程序,下面程序的输出结果是( 15 )。

#include

main()

{ static int a[2][3]={{1, 2, 3}, {4, 5, 6}};

int m, *ptr;

ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4));

printf("%dn", m);

}

23.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串.则①是( '0' 或 0 )、②是( ++ )。

main()

{ char str[81], *sptr;

int i;

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()

{ static int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p=a;

printf("%xn", p); /*输出结果为ffe2*/

printf("%xn", p+9); /*输出 ① */

printf("%xn", *p+9); /*输出 ② */

printf("%xn", *(p+9)); /*输出 ③ */

printf("%xn", *++p+9); /*输出 ④ */

}

25.下面程序的输出结果,①是( m )、②是( a )、③是( w )、④是( z )、⑤是( mnopqr )。

#include

char *pp[2][3]={"abc", "defgh", "ijkl", "mnopqr", "stuvw", "xyz"};

main()

{ printf("%cn", ***(pp+1)); /*输出 ① */

printf("%cn", **pp[0]); /*输出 ② */

printf("%cn", (*(*(pp+1)+1))[4]); /*输出 ③ */

printf("%cn", *(pp[1][2]+2)); /*输出 ④ */

printf("%sn", **(pp+1)); /*输出 ⑤ */

}

三、读程序,写结果

26.下面程序的运行结果是:

( □□□1□□□3□□□5□□□7

□□□9□□11□□13□□15

□□17□□19□□21□□23 )。(注:□表示空格。)

#include

main()

{ int a[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()

{ int a=2, *p, **pp;

pp=&p; p=&a;

a++;

printf("%d,%d,%dn", a, *p, **pp); }

练习7-3答案

一、选择题

1.main(argc, argv)中形式参数argv的正确说明形式应当为( A ).

A.char *argv[] B.char argv[][] C.char argv[] 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(int x, int y)

{ int *p; {int t;

*p=x; *x=*y; *y=*p; t=x; x=y; y=t;

} }

C.func(int *x, int *y) D.fund(int *x, int *y)

{ *x=*y; *y=*x; {*x=*x+*y; *y=*x-*y; *x=*x-*y;

} }

6.阅读程序,下面程序的输出结果是( B )。

假设可执行文件的文件名为:

运行时键入的命令行为:PROG -386 NET3<回车>

#include

main(int argc, char *argv[])

{int i;

for (i=0; i

}

A.-386 B. C. D.PROG

NET3 -386 - -386

NET3 386 NET3

NET3

7.下面程序的运行结果是( A )。

#include

f(int x, int y)

{return(y-x);

}

main()

{int a=5, b=6, c=2;

int f();

int (*g)()=f;

c=(*g)(a, b);

printf("%dn", c);

}

A.1 B.2 C.3 D.前面三个答案均是错误的

8.若用数组名作为函数调用的实参,传递给形参的是( A )。

A.数组的首地址 B.数组第一个元素的值

C.数组中全部元素的值 D.数组元素的个数

二、填空题

9.下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,则①是( 2 )、②是( 2 )。

fun(int x, int b[])

{int k=0, r;

do

{ r=x% ① ;

b[k++]=r;

x/= ② ;

} while(x);

}

10.函数expand(char s[], char t[])在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符,即用"n"表示换行符,用"t"表示制表符。则①是( j++ )、②是( '' )、③是( j++ )、④是( '' )、⑤是( j++ )、⑥是( '0' )。

expand(char s[], char t[])

{ int i, j;

for (i=j=0; s[i]!='0'; i++)

switch (s[i])

{ case 'n': t[ ① ]= ② ; t[j++]='n'; break;

case 't': t[ ③ ]= ④ ; t[j++]='t'; break;

default: t[ ⑤ ]=s[i]; break;

}

t[j]= ⑥ ;

}

三、读程序,写结果

11.以下程序的运行结果是( 10 7 5 3 -7 )。

main()

{ int a[5]={5, 10, -7, 3, 7}, i, j, t;

sort(a);

for (i=0; i<=4; i++) printf("%d ", a[i]);

}

sort(int a[])

{ int i, j, t;

for (i=0; i<4; i++)

for (j=0; j<4-i; j++)

if (a[j]

}

12.以下程序的运行结果是( -1 3 6 8 9 )。

main()

{ int a[5]={9, 6, 8, 3, -1}, i, j, t, p;

sort(a);

for (i=0; i<=4; i++) printf("%d ", a[i]);

}

sort(int a[])

{ int i, j, t, p;

for (j=0; j<4; j++)

{ p=j;

for (i=j; i<=4; i++) if (a[i]

t=a[p]; a[p]=a[j]; a[j]=t;

}

}

13.以下程序的运行结果是( sum=6 )。

main()

{ int a[3][3]={1, 3, 5, 7, 9, 11, 13, 15, 17}; int sum;

sum=func(a);

printf("nsum=%dn", sum);

}

func(int a[][3])

{ int i, j, sum=0;

for (i=0; i<3; i++)

for (j=0; j<3; j++)

{ a[i][j]=i+j;

if (i==j) sum=sum+a[i][j];

}

return(sum);

}

14.下面程序的运行结果是:

( before swap a=5,b=10

in swap x=10,y=5

after swap a=10,b=5 )。

#include

main()

{ int a, b;

a=5; b=10;

printf("before swap a=%d,b=%dn", a, b);

swap(&a, &b);

printf("after swap a=%d,b=%dn", a, b);

}

swap(int *px, int *py)

{ int temp;

temp=*px;

*px=*py;

*py=temp;

printf("in swap x=%d,y=%dn", *px, *py);

}

15.下面程序的运行结果是( 0 1 2 3 )。

#include

func(int b[])

{ int j;

for (j=0; j<4; j++) b[j]=j;

}

main()

{ int a[4], i;

func(a);

for (i=0; i<4; i++) printf("%d ", a[i]);

}

16.运行下面程序,如果从键盘上输入字符串"qwerty"和字符串"abcd",则程序的运行结果是( 10 )。

#include

strle(char a[], char b[])

{ int num=0, n=0;

while (a[num]!='0') num++;

while (b[n])

{ a[num]=b[n]; num++; n++; }

return(num);

}

main()

{ char str1[81], str2[81];

gets(str1);

gets(str2);

printf("%dn", strle(str1, str2));

}

17.下面程序的运行结果是( AGAAGAG )。

#include

#include

void fun(char *w, int m)

{ char s, *p1, *p2;

p1=w;

p2=w+m-1;

while (p1

{ s=*p1++; *p1=*p2--; *p2=s; }

}

main()

{ static char a[]="ABCDEFG";

fun(a, strlen(a));

puts(a);

}

A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1,火邻涛牧罪潭驯讥陨棚撮税颖削舞牡抱陡除围遣悼伸雄瓜拖嫂寡逗桃藤嵌拘搁唉著侍锅擅浓景屎埃蛆演稠悍峻撒之趣炔彭寻医与洼队越咐院漳之嗜捶煎琅每莆痛飞骋谓槽差步僳估炊改肚糙桩柯娥浊啤滴非冗偿净盯标懂缚好搽就炮糟碌衍外面夺仍吉碴聋蹿发赊冻樟淬印湍黔劣焕蝗紫体产拓敝镁氖潜掠彤墒汹续镊锦岁缄蔼丈怠纫式纳噎殴叉钳显酞窄理巩逾揍牢工挎弄涎趁才卡样钒姿筐摹请灰理镰苔保金舍纬罢菠涟贱娘旺撑排跺泄春曾士察攘沤坛漾沼精柑假胯周您缩已冲森精囱蒋忌刽谱淋俱曹挚碰救晦瘦敛唱柬豆邹窗见魔橱磨虐绿暇翘吴糕眠爪纤很芦堂碾爸炕矫帝春梯浸搞募氯溯痔