当前位置:文档之家› 第8章 结构体与共用体

第8章 结构体与共用体

第8章 结构体与共用体
第8章 结构体与共用体

一、程序改错

1、

/*下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m<=10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

试题程序:*/

#include

#include

#include

#include

#define N 10

typedef struct ss

{ char num[10];

int s;

} STU;

STU *fun(STU a[], int m)

{ STU b[N],*t;

int i, j,k;

/**********ERROR**********/

*t=calloc(m,sizeof(STU)); 【参考答案】

t=calloc(m,sizeof(STU));

for(i=0;i

for(k=0;k

{ for (i=j=0;i

if(b[i].s>b[j].s) j=i;

/**********ERROR**********/

t[k].num=b[j].num; 【参考答案】t[k]=b[j];

t[k].s=b[j].s;

b[j].s=0;

}

return t;

}

outresult(STU a[],FILE *pf)

{ int i;

for(i=0;i

fprintf(pf, "No=%s Mark=%d\n ", a[i].num, a[i].s);

fprintf(pf, "\n\n ");

}

void main()

{ STU a[N]={{ "A01 ",81},{ "A02 ",89},{ "A03 ",66},{ "A04 ",87},{ "A05 ",77},

{ "A06 ",90},{ "A07 ",79},{ "A08 ",61},{ "A09 ",80},{ "A10 ",71}};

STU *pOrder;

int i, m;

printf("*****THE RESULT*****\n");

outresult(a,stdout);

printf("\nGive the number of the students who have better score: "); scanf("%d",&m);

while(m>10)

{ printf("\nGive the number of the students who have better score: ");

scanf("%d",&m);

}

pOrder=fun(a,m);

printf("***** THE RESULT*****\n");

printf("The top :\n");

for(i=0;i

printf("%s %d\n",pOrder[i].num, pOrder[i].s);

free(pOrder);

}

2、

/*下列给定程序的功能是:建立一个带头节点的单向链表,并用随机函数为各节点数据域赋值。函数fun的作用是求出单向链表节点(不包括头节点)数据域中的最大值,并且作为函数值返回。

试题程序: */

#include

#include

typedef struct aa

{ int data;

struct aa *next;

} NODE;

fun (NODE *h)

{ int max=-1;

NODE *p;

/**********ERROR**********/

p=h; 【参考答案】p=h->next;

while(p)

{ if(p->data>max)

max=p->data;

/**********ERROR**********/

p->next=h; 【参考答案】p=p->next;

}

return max;

}

outresult(int s, FILE *pf)

{ fprintf(pf, "\nThe max in link :%d\n",s);

}

NODE *creatlink(int n, int m)

{ NODE *h,*p,*s;

int i;

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

h->data=9999;

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

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

s->data=rand()%m; s->next=p->next;

p->next=s; p=p->next;

}

p->next=NULL;

return h;

}

outlink(NODE *h,FILE *pf)

{ NODE *p;

p=h->next;

fprintf(pf, "\n The LIST :\n\n HEAD");

while(p)

{

fprintf(pf, "->%d",p->data);

p=p->next;}

fprintf(pf, "\n");

}

main()

{ NODE *head; int m;

head=creatlink(12,100); outlink(head,stdout);

m=fun(head);

printf("\nThe RESULT :\n"); outresult(m,stdout);

}

3、

/*下列给定程序中的函数Creatlink的功能是:创建带头节点的单向链表,并为各节点数据域赋0到m-1的值。

试题程序: */

#include

#include

typedef struct aa

{ int data;

struct aa *next;

} NODE;

NODE *Creatlink(int n, int m)

{ NODE *h=NULL,*p,*s;

int i;

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

h=s;

/**********ERROR**********/

p->next=NULL; 【参考答案】p=s;

for(i=1;i

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

/**********ERROR**********/

s->data=rand()%m; 【参考答案】

s->data=rand()%(m-1);

s->next=p->next;p->next=s; p=p->next;

}

s->next=NULL;

/**********ERROR**********/

return p; 【参考答案】return h;

}

outlink(NODE *h)

{ NODE *p;

p=h->next;

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

while(p)

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

p=p->next;}

printf("\n");

}

main()

{ NODE *head;

head=Creatlink(8,22);

outlink(head);

}

二、程序填空

1、

/*已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。

本题程序: */

#include

#include

#define N 10

typedef struct ss /*定义结构体*/

{ char num[10];

int s;

} STU;

fun(STU a[], STU *s)

{

/**********FILL**********/

【1】h; 【参考答案】STU

int i;

h=a[0];

for(i=1;i

if(a[i].s

/**********FILL**********/

【2】=a[i]; 【参考答案】h

/**********FILL**********/

*s=【3】; 【参考答案】h

}

main()

{

STU a[N]={{ "A01",81},{ "A02",89},

{ "A03",66},{ "A04",87},{ "A05",77},

{ "A06",90},{ "A07",79},{ "A08",61},

{ "A09",80},{ "A10",71}},m;

int i;

printf("*****The original data*****");

for(i=0;i

printf("No=%s Mark=%d\n", a[i].num,a[i].s); fun(a,&m);

printf("*****THE RESULT*****\n");

printf("The lowest :%s, %d\n",m.num,m.s);

}

2、

/*人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。

试题程序: */

#include

#include

#define N 8

typedef struct

{

char num[10];

int year,month,day;

}STU;

/**********FILL**********/

【1】fun(STU *std,char *num) 【参考答案】STU

{

int i;

STU a={"",9999,99,99};

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

/**********FILL**********/

if(strcmp(【2】,num)==0) 【参考答案】std[i].num

/**********FILL**********/

return (【3】); 【参考答案】std[i] return a;

}

main()

{

STU

std[N]={{"11111",1984,2,15},{"22222",1983,9,21},{"33333",1984,9,1}, {"44444",1983,7,15},

{"55555",1984,9,28},{"666666",1983,11,14},{"77777",1983,6,22},{"88 888",1984,8,18}};

STU p;

char n[10]="666666";

p=fun(std,n);

if(p.num[0]==0)

{

printf("\nNot found!\n");

}

else

{

printf("\nSucceed!\n");

printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);

}

/*请补充函数fun,该函数的功能是:建立一个带头结点的单向链表并输出到文件"out70.dat"和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序: */

#include

#include

typedef struct ss

{

int data;

struct ss *next;

}NODE;

void fun(int n,char*filename)

{

NODE *h,*p,*s;

FILE *pf;

int i;

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

h->data=0;

for(i=1;i

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

/**********FILL**********/

s->data=【1】; 【参考答案】i

/**********FILL**********/

【2】; 【参考答案】p->next=s;

/**********FILL**********/

p=【3】; 【参考答案】p->next }

p->next=NULL;

if((pf=fopen(filename,"w"))==NULL)

{

printf("Can not open out98.dat!");

exit(0);

}

p=h;

fprintf(pf,"\n***THE LIST***\n");

printf("\n***THE LIST***\n");

while(p)

{

fprintf(pf,"%3d",p->data);

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

if(p->next!=NULL)

{

fprintf(pf,"->");

printf("->");

}

p=p->next;

}

fprintf(pf,"\n");

printf("\n");

fclose(pf);

p=h;

while(p)

{

s=p;

p=p->next;

free(s);

}

}

void main()

{

char *filename="out98.dat";

int n;

printf("\nInput n:");

scanf("%d",&n);

fun(n,filename);

}

4、

/*给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序: */

#include

typedef struct

{

char name[10];

int age;

}STD;

STD fun(STD std[],int n)

{

STD max;

int i;

/**********FILL**********/

max=【1】; 【参考答案】std[0] 或者 *std

for(i=1;i

/**********FILL**********/

if(max.age<【2】) 【参考答案】std[i].age

max=std[i];}

return max;

}

main()

{

STD std[5]={"aaa",17,"bbb",16,"ccc",18,"eee",15};

STD max;

max=fun(std,5);

printf("\nThe result is: \n ");

/**********FILL**********/

printf("\nName :%s,Age :%d\n",【3】,max.age); 【参考答案】https://www.doczj.com/doc/008996133.html,

}

三、程序设计

1、

/*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。

请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:*/

#include

#include

#define N 8

struct slist

{ double s;

struct slist *next;

};

typedef struct slist STREC;

double fun(STREC *h)

{

/***********Begin***************/

double av=0.0;

第8章练习 结构体与共用体

第十一章习题结构体与共用体 1.以下C语言共用体类型数据的描述中,不正确的是( ) A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存 B) 共用体类型可以出现在结构体类型定义中 C) 在定义共用体变量的同时允许对第一个成员的值进行初始化 D) 同一共用体中各成员的首地址不相同 2.下列对结构体类型变量定义不正确的是( ) A)struct teacher B) struct { int num; { int num; int age; }teach1; int age; }teach1,teach2; C) struct D) struct teacher { int num; { int num; int age; }teacher; int age; }; struct teacher teach1; struct teacher teach1; 3.若有定义: struct teacher { int num; char name[10]; char sex; int age; float score;}teacher1; 则变量teacher1所占用的内存字节数是( ) A) 5 B)14 C) 19 D) 20 4.以下程序的运行结果是( ) #include union Utype { int i; float y; }u[2]; void main() { printf("sizeof(u):%d\n",sizeof(u)); } A)2 B) 4 C) 6 D) 8 5.设有以下定义语句: struct student { int num; char name[10]; float score; }wang,zhang; 则变量wang所占的内存字节数是( ) A) 14 B) 16 C)18 D) 20 6.设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d",sizeof(struct str_type));”的输出结果是( ) A)100 B) 116 C) 120 D) 200 第 1 页共2 页

第8章 结构体与共用体

一、程序改错 1、 /*下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m<=10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 试题程序:*/ #include #include #include #include #define N 10 typedef struct ss { char num[10]; int s; } STU; STU *fun(STU a[], int m) { STU b[N],*t; int i, j,k; /**********ERROR**********/ *t=calloc(m,sizeof(STU)); 【参考答案】 t=calloc(m,sizeof(STU)); for(i=0;i

for(k=0;kb[j].s) j=i; /**********ERROR**********/ t[k].num=b[j].num; 【参考答案】t[k]=b[j]; t[k].s=b[j].s; b[j].s=0; } return t; } outresult(STU a[],FILE *pf) { int i; for(i=0;i

C语言题库第8章 结构体和共同体

第八章结构体和共同体 一、单项选择 1. 若有以下定义: struct link { int data; struct link *next; }a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。 则能把c插入到a和b之间形成新的链表的语句是( C ) 2. 若有以下程序段: int a=1,b=2,c=3; struct dent { int n ; int *m ; } s[3] = {{101,&a},{102,&b},{103,&c}}; struct dent *p=s ; 则以下表达式中值为2的是( D )。 3. 下面程序的运行结果是( D )。 #iunclude int main ( ) { struct complx { int x; int y ;

}cnum[2]={1,3,2,7} ; printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; return 0; } 二、程序设计 1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun, 它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #define N 16 typedef struct { char num[10]; int s ; }STREC; void fun (STREC a[]) { /*********Begin*********/ /*********End**********/ } int main () { FILE *wf,*in; STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; int i; fun(s); printf("The data after sorted :\n"); for (i=0; i

结构体和共用体习题

习题六 1. 从下列四个选项中选择一个正确的填入括号中。 (1)在说明一个结构体变量时系统分配给它的存储空间是(D)。 A该结构体中第一个成员所需存储空间 B该结构体中最后一个成员所需存储空间 C该结构体中占用最大存储空间的成员所需存储空间 D该结构体中所有成员所需存储空间的总和 (2)在说明一个共用体变量时系统分配给它的存储空间是(D )。 A该共用体中第一个成员所需存储空间 B该共用体中最后一个成员所需存储空间 C该共用体中占用最大存储空间的成员所需存储空间 D该共用体中所有成员所需存储空间的总和 (3)共用体类型在任何给定时刻, (B)。 A所有成员一直驻留在内存中 B只有一个成员驻留在内存中 C部分成员驻留在内存中 D没有成员驻留在内存中 (4)以下定义结构体类型的变量st1,其中不正确的是(A ) A typedef stuct student { int num; int age; }STD; STD st1; B struct student { int num,age; }st1; C struct { int num; float age; }st1; D struct student { int num; int age; }; struct student st1; (5)已知职工记录描述为: struct workers {

int no; char name[20]; char sex; struct { int day; int month; int year; }birth; }; struct workers w; 设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是(C)。 A day=25; month=10; year=1993; B w.day=25w.month=10; w.year=1993; C w.birth.day=25; w.birth.month=10; w.birth.year=1993; D birth.day=25; birth.month=10; birth.year=1993; (6)设有如下定义: struct sk { int a; float b; }data,*p; 若有p=&data;则对data中的a成员的正确引用是(B)。 A (*p).data.a B (*p).a C p->data.a D p.data.a 2.填空 (1)若有以下说明和定义且数组w和变量k已正确赋值,则对w数组中第k个元素中各成员的正确引用形式是w[k-1].b、w[k-1].c 、w[k-1].d 。 struct aa { int b; char c; double d; }; struct aa w[10]; int k=3; (2)若有以下说明和定义,则对x.b成员的另外两种引用形式是x->b-> 和p.b. 。 struct st { int a; struct st *b; }*p, x;

结构体与共用体

试卷编号:825 所属语言:C语言 试卷方案:结构体与共用体 试卷总分:90分 共有题型:5种 一、填空共5题(共计10分) 第1题(2.0分)题号:205 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体【1】,再说明结构体变量. 答案: =======(答案1)======= 类型 第2题(2.0分)题号:208 将函数funl 的入口地址赋给指针变量p的语句是【1】. 答案: =======(答案1)======= p=funl; 第3题(2.0分)题号:232 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案: =======(答案1)=======

第4题(2.0分)题号:345 若在程序中用到"strlen()"函数时,应在程序开头写上包含命令# include "【1】". 答案: =======(答案1)======= string.h 第5题(2.0分)题号:803 预处理命令行都必须以【1】号开始. 答案: =======(答案1)======= # 二、单项选择共20题(共计40分) 第1题(2.0分)题号:464 以下描述中,正确的是()。 A:预处理是指完成宏替换和文件包含中指定的文件的调用 B:预处理指令只能位于C源文件的开始 C:C源程序中凡是行首以#标识的控制行都是预处理指令 D:预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备答案:C 第2题(2.0分)题号:472 下列程序运行结果为: #define P 3 #define S(a) P*a*a main() {int ar; ar=S(3+5); printf("\n%d",ar); } A:192 B:29

第八章 文 件

第八章文件 一、单项选择题 1.C语言中,文件由(A)。 A.字符(字节)序列组成B.记录组成 C.数据行组成D.数据块组成 2.若文件型指针fp中指向某文件的末尾,则函数feof(fp)的返回值是(C)。 A.0 B.-1 C.非零值D.NULL 3. 下列语句将输出(B) #include printf(“%d %d %d”, NULL,’\0’,EOF); A. 0 0 1 B. 0 0 –1 C. NULL EOF D. 1 0 EOF 4.下列语句中,将fp定义为文件型指针的是(B)。 A.FILE fp; B.FILE *fp;C.file fp; D.file *fp; 5. 定义FILE *fp; 则文件指针fp指向的是(D)。 A. 文件在磁盘上的读写位置 B. 文件在缓冲区上的读写位置 C. 整个磁盘文件 D. 文件类型结构体 6. 缓冲文件系统的缓冲区位于(C )。 A. 磁盘缓冲区中 B. 磁盘文件中 C. 内存数据区中 D. 程序中 7. 以“只读”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的( D)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”a”); C、fp=fopen(”a:\aa.dat”,”wb”); D、fp=fopen(”a:\aa.dat”,”r”); 8. 以“追加”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的( B)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”a”); C、fp=fopen(”a:\aa.dat”,”r+”); D、fp=fopen(”a:\aa.dat”,”w”); 9. 如果二进制文件a.dat已存在,现要求写入全新的数据,应以什么方式打开(A)。 A. “w” B. “wb” C. “w+” D. “wb+” 10. 为读写建立一个新的文本文件a:\aa.dat,下列语句中哪一个是正确的( B)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”w+”); C、fp=fopen(”a:\aa.dat”,”wb”); D、fp=fopen(”a:\aa.dat”,”rb+”); 11.以读写方式打开一个已有的二进制文件filel,并且定义FILE *fp,下面fopen函数正确 的调用方式是(B )。 A.fp=fopen (“file1”, ”r”) B.fp=fopen (“file1”, ”rb+”) C.fp=fopen (“file1”, ”rb”) D.fp=fopen (“file1”, ”w b+”) 12.标准库函数fputs (p1,p2)的功能是(C)。 A.从p1指向的文件中读一个字符串存入p2指向的内存 B.从p2指向的文件中读一个字符串存入p1指向的内存 C.从p1指向的内存中读一个字符串写到p2指向的文件中 D.从p2指向的内存中读一个字符串写到p1指向的文件中

第9章结构体类型与共用体类型习题及答案

第九章结构体类型与公用体类型习题及其答案9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。 解:#include "stdio.h" struct date { char month[10] ; int daynumber ; } main() { int i ; date a[12] ={{"January",31},{"February",29},{"March",31},{"Aprial",30}, {"May",31},{"June",30},{"july",31},{"August",31},{"September",30} ,{"October",31},{"November",30},{"December",31}} ; for(i=0;i<12;i++); printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ; } 思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用? 9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include "stdio.h" #include "math.h" struct point { float x ; float y ; float z ; } void main() { double d1,d2,d ;

point p1,p2 ; printf("请输入第一个点的坐标:"); scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z); printf("请输入第二个点的坐标:"); scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z); d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z); d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z)); printf("第一个点到原点的距离:%f\n",d1); printf("第二个点到原点的距离:%f\n",d2); printf("两点间的距离:%f\n",d); } 9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。 解:#include "stdio.h" struct AddressBook { char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; } void main() { int i ; AddressBook fd[10] ; for(i=0;i<10;i++) { printf("请输入第%d个朋友的信息:\n",i+1); printf("姓名:");

结构体与共同体

[课程]C语言一日一学第11课——结构体与共用体(2) 11.7 用指针处理链表 11.7.1 链表概述 链表是一种常见的重要的数据结构,是动态地进行存储分配的一种结构。链表的组成:头指针:存放一个地址,该地址指向一个元素 结点:用户需要的实际数据和链接节点的指针 用结构体建立链表: Code: struct student { int num; float score; struct student *next ; }; 其中成员num和score用来存放结点中的有用数据(用户需要用到的数据),next是指针类型的成员,它指向struct student类型数据(这就是next所在的结构体类型) 11.7.2 简单链表 Code: #include #define NULL 0 struct student {

long num; float score; struct student *next; }; main() { struct student a,b,c,*head,*p; a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do { printf("%ld %5.1f\n",p->num,p->score); p=p->next; } while(p!=NULL); } 运行结果: Code: 1010189.5 1010390.0 1010785.0 程序分析: 开始时使head指向a结点,a.next指向b结点,b.next指向c结点,这就构成链表关系。“c.next=NULL” 的作用是使c.next不指向任何有用的存储单元。在输出链表时要借助p,先使p指向a结点,然后输出a 结点中的数据,“p=p->next” 是为输出下一个结点作准备。p->next的值是b结点的地址,因此执行 “p=p->next”后p就指向b结点,所以在下一次循环时输出的是b结点中的数据。 库函数提供动态地开辟和释放存储单元的 有关函数: (1) malloc函数 其函数原型为 Code: void *malloc(unsigned int size); 其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即“返回值”)是一个指向分配域起始地址的指针(类型为void)。如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL)。

复杂数据类型(结构体与共同体)

《程序设计语言 C1》随机作业题 做作业时间:2013-5-13 8:30:00至2013-6-30 22:00:00 1、在C语言中,下面那种数据类型不属于构造类型( ) (3分) A A、B、C、D、 A、枚举类型 B、数组类型 C、结构体类型 D、共用体类型 2、C语言结构体类型变量在程序执行期间 (3分) A A、B、C、D、 A、所有成员一直驻留在内存中 B、只有一个成员驻留在内存中 C、部分成员驻留在内存中 D、没有成员驻留在内存中 3、在下列定义中的共用体所占内存字节数是( ) union {char k[6]; struct {intm;float f; }a; double d; }b; (3分) A A、B、C、D、 A、8 B、14 C、18 D、10 4、当说明一个结构体变量时系统分配给它的内存是 (3分) A

A、B、C、D、 A、各成员所需内存量的总和 B、结构中第一个成员所需内存量 C、成员中占内存量最大者所需的容量 D、结构中最后一个成员所需内存量 5、变量a所占内存字节数是 union U { char st[4]; inti; long l; }; struct A { int c; union U u; }a; (3分) C A、B、C、D、 A、4 B、5 C、6 D、8 6、设有以下语句 typedefstruct S { int g; char h;} T; 则下面叙述中正确的是 (3分) D A、B、C、D、 A、可用S定义结构体变量 B、可以用T定义结构体变量 C、S是struct类型的变量 D、T是struct S类型的变量 7、设有以下说明语句 structstu {int a; float b; }stutype; 则下面的叙述不正确的是 (3分) C A、B、C、D、

第八章结构体、共用体与枚举实验报告

一、实验目的(参见实验指导书P159) 二、实验内容(参见课本及实验指导书) 实验内容提要:结构体、共用体、枚举类型、typedef使用具体内容: 1、有以下程序,程序运行后的输出结果是()。 struct s { int x, y; } data[2] = { 10, 100, 20, 200 } ; main ( ) { struct s *p = data; printf ( "%d\n", ++ ( p->x ) ) ; } 2、有以下程序,程序运行后的输出结果是()。 struct STU { char num[10]; float score[3]; } ; main ( ) { struct STU s[3] = { { "201201", 90, 95, 85 } , { "201202", 95, 80, 75 } , { "201203", 100, 95, 90 } }, *p = s; int i; float sum = 0; for ( i = 0;i<3;i++ ) sum = sum+p->score[i]; printf ( "%6.2f\n", sum ) ; } 3、下面程序的输出结果是( ) typedef struct{ float x ;

char z ; }mytype; mytype a ; main() { printf("%d",sizeof(a)); } 4、下面程序的输出结果是( ) typedef union{ long a[1] ; char y ; char c[10]; }S; S a ; main() { printf("%d",sizeof(a)); } 5、下面程序的输出结果为() #include "stdio.h" main() { union{unsigned int t; unsigned char c; }u; u.c='a'; printf("%c\n",u.t); getch(); } 结论:一个共用体中可能有若干个不同类型的成员,但在任何时刻,只有一个成员的值被存储。 这就是最后赋给它的值。 6、设有以下语句 char x=3,y=6,z; z=x^y<<2; 则z的二进制值是多少?提示,左移的优先级高于^ 三、实验结果与思考

c第八章 结构体与共用体

第八章结构体与共用体 一、选择题: 1.下面正确的叙述的是()。 A)结构一经定义,系统就给它分配了所需的内存单元 B)结构体变量和共用体变量所占内存长度是各成员所占内存长度之和 C)可以对结构类型和结构类型变量赋值、存取和运算 D)定义共用体变量后,不能引用共用体变量,只能引用共用体变量中的成员2.结构体类型变量在程序执行期间()。 A)所有成员驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中D)没有成员驻留在内存中 3.设有以下定义 struct date { int cat; char c; int a[4]; long m; }mydate; 则在VC6.0中执行语句: printf("%d", sizeof(struct date)); 的结果是()。 A)25B)28C)18D)8 4.在说明一个共用体变量时系统分配给它的存储空间是() A)该共用体中第一个成员所需存储空间 B)该共用体中最后一个成员所需存储空间 C)该共用体中占用最大存储空间的成员所需存储空间 D)该共用体中所有成员所需存储空间的总和 5.共用体类型变量在程序执行期间的某一时刻()。 A)所有成员驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中 6.对于下面有关结构体的定义或引用,正确的是()。 struct student { int no; int score; }student1; A)student.score=99; B)student LiMing; LiMing.score=99; C)stuct LiMing; LiMing.score=99; D)stuct student LiMing; LiMing.score=99;

相关主题
文本预览
相关文档 最新文档