您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页C语言第七章习题带答案

C语言第七章习题带答案

来源:意榕旅游网


练习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\B.scanf(\"%d\C.printf(\"%d\D.scanf(\"%d\

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;

- 1 -

练习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];

- 2 -

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\,则不能引用字母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\,则下面的输出语句中,错误的是( B )。

- 3 -

A.printf(\"%s\\n\ B.printf(\"%s\\n\

C.for (i=0; i<7; i++) D.for(i=0; i<7; i++)

printf(\"%c\ printf(\"%c\

10.已知:char *aa[2]={\"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)

- 4 -

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

- 5 -

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

- 6 -

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(\"%d\\n\

}

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

main()

{ char str[81], *sptr;

int i;

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

- 7 -

{ 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(\"%x\\n\ /*输出结果为ffe2*/

printf(\"%x\\n\

/*输出 ① */

- 8 -

printf(\"%x\\n\ /*输出 ② */

printf(\"%x\\n\ /*输出 ③ */

printf(\"%x\\n\ /*输出 ④ */

}

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

char *pp[2][3]={\"abc\

main()

{ printf(\"%c\\n\ /*输出 ① */

printf(\"%c\\n\ /*输出 ② */

printf(\"%c\\n\ /*输出 ③ */

printf(\"%c\\n\ /*输出 ④ */

- 9 -

printf(\"%s\\n\ /*输出 ⑤ */

}

三、读程序,写结果

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

- 10 -

{ if (i%4==0) printf(\"\\n\");

printf(\"%4d\

}

}

27.下面程序的运行结果是( 3,3,3 )。

#include

main()

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

pp=&p; p=&a;

a++;

printf(\"%d,%d,%d\\n\

- 11 -

练习7-3答案

一、选择题

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

A.char *argv[] B.char argv[][] C.char argv[] 2.说明语句int (*p)();的含义是( C )。

A.p是一个指向一维数组的指针变量

B.p是指针变量,指向一个整型数据

C.p是一个指向函数的指针,该函数的返回值是一个整型

D.以上都不对

3.说明语句int *(*p)();的含义是( D )。

A.p是一个指向int型数据的指针

B.p是指针变量,它构成了指针数组

.char *argv

- 12 -

D

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;

}

}

- 13 -

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.EXE

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

#include

main(int argc, char *argv[])

{int i;

for (i=0; i}

A.-386 B.PROG.EXE C.PROG.EXE .PROG

- 14 -

D

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;

- 15 -

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

printf(\"%d\\n\

}

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

- 16 -

{ r=x% ① ;

b[k++]=r;

x/= ② ;

} while(x);

}

10.函数expand(char s[], char t[])在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符,即用\"\\n\"表示换行符,用\"\\"表示制表符。则①是( 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;

- 17 -

case '\': 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 \

}

- 18 -

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 \

}

- 19 -

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

- 20 -

printf(\"\\nsum=%d\\n\

}

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.下面程序的运行结果是:

- 21 -

( 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=%d\\n\

swap(&a, &b);

printf(\"after swap a=%d,b=%d\\n\

}

swap(int *px, int *py)

- 22 -

{ int temp;

temp=*px;

*px=*py;

*py=temp;

printf(\"in swap x=%d,y=%d\\n\

}

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

#include

func(int b[])

{ int j;

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

}

- 23 -

main()

{ int a[4], i;

func(a);

for (i=0; i<4; i++) printf(\"%d \

}

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++; }

- 24 -

return(num);

}

main()

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

gets(str1);

gets(str2);

printf(\"%d\\n\

}

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

#include

#include

void fun(char *w, int m)

- 25 -

{ 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);

}

- 26 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务