DS作业0-C语言基础知识复习(含指针与链表)

判断题:

1.直接访问就是直接利用变量的地址直接进行访问。T

2.可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。T

3.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。F
(是int类型数组,里面有4个指针变量元素)

4.结构体变量可以作数组元素。T

5.函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。T

6.结构体成员的类型必须是基本数据类型。F
(可有指针变量)

7.指针数组的每个元素都是一个指针变量。T

8.结构体类型本身不占用内存空间,结构体变量占用内存空间。T

9.char *s=”C Language”;表示s是一个指向字符串的指针变量,把字符串的首地址赋予s。T

10.结构体成员的类型必须是基本数据类型。F

单选题:

1.若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, ( )是正确的。
A.p2 = p1;

B.p2 = **p1;

C.p2 = &p1;

D.p2 = *p1;

2.设变量定义为 int a[2]={1,3}, *p=&a[0]+1;,则*p的值是( )。

A.2
B.3

C.4

D.&a[0]+1

3.根据声明int a[10], *p=a; ,下列表达式错误的是( )。

A.a[9]

B.p[5]
C.a++

D.*p++

4.已知表头元素为c的单链表在内存中的存储状态如下表所示:

现将f存放于1014H处,并插入到单链表中,若f在逻辑上位于a和e之间,则a、e、f的“链接地址”依次是:

A.1010H, 1014H, 1004H

B.1010H, 1004H, 1014H

C.1014H, 1010H, 1004H

D.1014H, 1004H, 1010H

5.根据声明int (*p)[10], p是一个( )。

A.数组
B.指针

C.函数

D.数组的元素

6.若定义pf为指向float类型变量f的指针,下列语句中__是正确的。

A.float f, *pf = f;
B.float f, *pf = &f;

C.float *pf = &f, f;

D.float f, *pf =0.0;

7.若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。

A.p++
B.x++

C.*(p++)

D.&x++

8.若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, ____是正确的。
A.p2=p1

B.p2=**p1

C.p2=&p1

D.p2=*p1

9.链表不具有的特点是:

A.插入、删除不需要移动元素
B.方便随机访问任一元素

C.不必事先估计存储空间

D.所需空间与线性长度成正比

10.设h为不带头结点的单向链表。在h的头上插入一个新结点t的语句是:

A.h=t; t->next=h->next;

B.t->next=h->next; h=t;

C.h=t; t->next=h;
D.t->next=h; h=t;

11.在单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行

A.s->next=p; p->next=s;

B.s->next=p->next; p=s;
C.s->next=p->next; p->next=s;

D.p->next=s; s->next=p;

12.线性表若采用链式存储结构时,要求内存中可用存储单元的地址

A.必须是连续的
B.连续或不连续都可以

C.部分地址必须是连续的

D.一定是不连续的

13.线性表L在什么情况下适用于使用链式结构实现?
A.需不断对L进行删除插入

B.需经常修改L中的结点值

C.L中含有大量的结点

D.L中结点结构复杂

14.以下scanf函数调用语句中不正确的是__。

struct pupil {

    char name[20];

    int age;

    int sex;

} pup[5], *p=pup;

A.scanf(“%s”, pup[0].name);

B.scanf(“%d”, &pup[0].age);
C.scanf(“%d”, p->age);

D.scanf(“%d”, &(p->sex));

15.下列程序段的输出是____。

int c[]={1, 3, 5};

int *k=c+1;

printf(“%d”, *++k);

A.3

B.4
C.5

D.6

16.对于如下说明,语法和语义都正确的赋值是_____。

int c, *s, a[]={1, 3, 5};

A.c=*s;

B.s[0]=a[0];
C.s=&a[1];

D.c=a;

17.设有如下定义的链表,则值为7的表达式是()。

struct st{

      int n;

      struct st  *next;

} a[3] = {5, &a[1], 7, &a[2], 9, NULL}, *p = &a;

A.p->n

B.(p->n)++

C.++p->n
D.p->next->n

18.下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。

A.int a, *x = a;
B.int a, *x = &a;

C.int *x = &a, a;

D.int a, x = a;

19.若有以下说明,且0<=i<10,则对数组元素的错误引用是()。

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

A.*(a+i)

B.a[p-a+i]
C.p+i

D.*(&a[i])

20.下面定义结构变量的语句中错误的是()。

A.struct student{ int num; char name[20]; } s;

B.struct { int num; char name[20]; } s;

C.struct student{ int num; char name[20]; }; struct student s;
D.struct student{ int num; char name[20]; }; student s;

21.设有如下定义,则对data中的a成员的正确引用是()。

struct sk{ int a; float b; } data, *p=&data;

A.(*p).data.a
B.(*p).a

C.p->data.a

D.p.data.a

22.对于以下变量定义,正确的赋值是()。

int *p[3], a[3];

A.p = a

B.*p = a[0]

C.p = &a[0]
D.p[0] = &a[0]

23.有如下说明:

int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *P=a;

则数值为 9 的表达式是( )。

A.*P+9
B.*(P+8)

C.*P+=9

D.P+8

 

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/80343427f7.html