文章教程

全国计算机等级考试二级C语言11.6综合自测

8/22/2020 10:24:52 PM 人评论 次浏览

11.6 综合自测

一、选择题

1.在16位的PC上使用C语言,若有以下定义:

struct data

{ int i;

char ch;

double f;

}b;

则结构变量b占用内存的字节数是( )。

A.1    B.2    C.8    D.11

2.设有以下说明和定义语句,则下面表达式中值为3的是(  )。

struct s

{ int i;

struct s *i2;

};

static struct s a[3] ={1,&a[1],2,&a[2],3,&a[0]};

static struct s *ptr;

ptr=&a[1];

A.ptr->i++   B.ptr++->I    C.*ptr->i    D.++ptr->i

3.有以下程序:

main()

{ union {

unsigned int n;

unsigned char c;

}u1;

u1.c= 'A';

printf("% c\n",u1.n);

执行后输出结果是(  )。

A.产生语法错误  B.随机值    C.A    D.65

4.设有以下说明语句:

struct stu

{ int a;

float b;

}stutype;

则下面的叙述,正确的是( )。

A.struct是结构体类型名    B.structstu是用户定义的结构体变量名

C.stutype是用户定义的结构体变量名   D.a和b都是结构体变量名

5.以下程序输出的结果是(  )。

#include <stdio.h>

typedef union

{ long i;

int k[5];

char c;

}DATE;

struct date

{ int cat;

DATE cow;

double dog;

}too;

DATE max;

main()

{ printf("% d\n",sizeof(struct date)+sizeof(max));

A.25    B.30    C.18    D.8

6.以下对结构体变量stu1中成员age的非法引用是(  )。

struct student

{ int age;

int num;

}stu1,*p;

p=&stu1;

A.stu1.age    B.student.age   C.p->age    D.(*p).age

7.下列程序中,结构体变量a所占内存字节数是(  )。

union U

{ char st[4];

int i;

long l;

};

struct A

{ int c;

union U u;

}a;

A.4    B.5    C.6    D.8

8.设有以下说明语句:

struct ex {

int x;float y;char z;

}example;

则下面的叙述中,不正确的是( )。

A.struct是结构体类型的关键字    B.example是结构体类型名

C.x,y,z都是结构体成员名    D.structex是结构体类型名

9.若有下面的说明和定义:

struct test {

int ml;char m2;float m3;

union uu {

char ul[5];

int u2[2];

}ua;

}myaa;

则sizeof(structtest)的值是(  )。

A.12    B.16    C.14    D.9

10.已知:

union

{ int i;

char c;

float a;

}test;

则sizeof(test)的值是( )。

A.4    B.5    C.6    D.7

11.以下对C语言中联合类型数据的正确叙述是(  )。

A.一旦定义了一个联合变量后,即可引用该变量或该变量中的任意成员

B.一个联合变量中可以同时存放其所有成员

C.一个联合变量中不能同时存放其所有成员

D.联合类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在联合类型定义中

二、操作题

1.下列给定程序是建立一个带头节点的单向链表,并用随机函数为各节点赋值。函数fun()的功能是将单向链表节点(不包括头节点)数据域为偶数的值累加起来,并且作为函数值返回。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

typedef struct aa

{ int data;

struct aa *next;

}NODE;

int fun(NODE *h)

{ int sum=0;

NODE *p;

p=h->next;

/*****found*****/

while(p->next)

{ if(p->data% 2==0)

sum+ =p->data;

/*****found*****/

p=h->next;

return sum;

NODE *creatlink(int n)

{ NODE *h,*p,*s;

int i;

h=p=(NODE*)malloc(sizeof(NODE));

for(i=1;i<n;i++)

{ s=(NODE*)malloc(sizeof(NODE));

s->data=rand()% 16;

s->next=p->next;

p->next=s;

p=p->next;

p->next=NULL;

return h;

outlink(NODE *h)

{ NODE *p;

p=h->next;

printf("\n\nTHE LIST:\n\n HEAD");

while(p)

{ printf("->% d",p->data);

p=p->next;

printf("\n");

main()

{ NODE *head;

int sum;

head=creatlink(10);

outlink(head);

sum=fun(head);

printf("\nSUM=% d",sum);

2.下列给定程序中已建立了一个带头节点的单向链表,链表中的各节点按数据域递增有序链接。函数fun()的功能是:删除链表中数据域值相同的节点,使之只保留一个。

请在标号处填入正确的内容,使程序得出正确的结果。

注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdio.h>

#include <stdlib.h>

#define N 8

typedef struct list

{ int data;

struct list *next;

}SLIST;

void fun(SLIST *h)

{ SLIST *p,*q;

p=h->next;

if(p!=NULL)

{ q=p->next;

while(q!=NULL)

{ if(p->data==q->data)

{ p->next=q->next;

free(【1】);

q=p->【2】;

else

{ p=q;

q=q->【3】;

SLIST *creatlist(int *a)

{ SLIST *h,*p,*q;

int i;

h = p =(SLIST *)malloc(sizeof (SLIST));

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

{ q =(SLIST *)malloc(sizeof (SLIST));

q->data=a[i];p->next=q;p=q;

p->next=0;

return h;

void outlist(SLIST *h)

{ SLIST *p;

p=h->next;

if(p==NULL)

printf("\nThe list is NULL!\n");

else

{ printf("\nHead");

do

{ printf("->% d",p->data);p=p->next;

} while(p!=NULL);

printf("->End\n");

main()

{ SLIST *head;

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

head=creatlist(a);

printf("\nThe list before deleting:\n");

outlist(head);

fun(head);

printf("\nThe list after deleting:\n");

outlist(head);

教程类别