人人范文网 范文大全

C语言

发布时间:2020-03-02 01:10:11 来源:范文大全 收藏本文 下载本文 手机版

第十章 结构体与共用体

10.1 选择题

【题10.1】已知学生记录描述为 struct student {int no; char name[20]; char set; struct {int year; int month; int day; }birth; }; struct student s; 设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是(D).A)year=1984; B)birth.year=1984; month=11; birth.month=11; day=11; birth.day=11; C)s.year=1984; D)s.birth.year=1984; s.month=11; s.birth.month=11; s.day=11; s.birth.day=11;

【题10.2】当说明一个结构体变量时系统分配给它的内存是(A).A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量

【题10.3】以下对结构体类型变量的定义中不正确的是(D).A)#define STUDENT struct student STUDENT {int num; float age; }std1; B)struct student {int num; float age; }std1; C)struct {int num; float age; }std1; D)struct int num; float age; }student; struct student std1;

【题10.4】设有以下说明语句 struct stu {int a; float b; }stutype; 则下面的叙述不正确的是(C).A)struct是结构体类型的关键字

B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名

【题10.5】C语言结构体类型变量在程序执行期间(A)..A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中

【题10.6】在16位IBM-PC机上使用C语言,若有如下定义: struct data {int i; char ch; double f; }b; 则结构变量b占用内存的字节数是(D). A)1 B)2 C)3 D)4

题【10。7】以下程序的运行结果是(A).#include “stdio.h” main() {struct data {int year,month,day; }today; printf(“%d\\n”,sizeof(struct data)); } A)6 B)8 C)10 D)12

【题10.8】根据下面的定义,能打印出字母M的语句是(D).Struct person{char name[9]; int age; }; struct person cla[10]={“John”,17, “Paul”,19, “Mary”,18, “adam”,16 }; A)printf(“%c\\n”,cla[3].name); B)printf(“%c\\n”,cla[3].name[1]); C)printf(“%c\\n”,cla[2].name[1]); D)printf(“%c\\n”,cla[2].name[0]);

【题10.9】下面程序的运行结果是(D).main() { struct cmplx {int x; int y; } cnum[2]={1,3,2,7}; printf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x); } A)0 B)1 C)3 D)6

【题10.10】 若有以下定义和语句;

struct student {int age; int num ; }; struct student stu [3]={{1001,20 },{1002,19},{1003,21}}; main() {struct student *p; p=stu; „.. } 则以下不正确的引用是(D)。

A)(P++)—》 num B)p++ C)(*p).num D)p=&stu.age

【题10.11】以下scanf函数调用语句中对结构体 变量成员的不正确引用是(D)。

Stuct pupil {char name[20 ]; int age ; int sex; }pup[5,]*p; p=pup; A) scanf(“%s”,pup[0].name); B) scanf(“”%d),&pup[0].age; C) scanf(“%d”,&sex));(p D) scanf(“%d”,P->age);

【题10.12】有以下定义和语句,则以下引用形式不合法的是(D)。

Struct s {int i1; struct s*i2,i0; }; static struct s a[3 ]={2,&a[1],’\\0’,4,%a[2],&a[0],6,’\\0’,&a[1]}, *ptr; ptr=a; A) ptr->i1++ B)*ptr->i2 C)++ptr->i0 D)ptr->i1

【题10.13】设有如下定义:

struct sk {int n; float x; }data,*p; 若要使P指向data中的n域, 正确的负值语句的是(C)。 A) p=&data.n; B) *p=data.n; C) p=(struct sk*)&data.n; D) p=(struct sk*)data.n;

【题10.14】若哟于以下说明和语句:

struct student {int age; int num; }std,*p; p=&std; 则以下对结构体变量std中成员age的引用方式不正确的是(D)。 A)std.age B)p->age C)(*p).age D)*p.age

【题10.15 】若以下程序段:

struct dent { int n; int*m; }; int a=1, b=2,c=3; struct dent s[3]={{101

A)(p++)->m B)*(P++)->m C)(*p).m D)*(++p)->m

【题10.16】若有以下说明和语句,则 对中域的正确引用方式是(D)。

Struct pupil {char name [20 ; int sex; }pup,*p; p=&pup; A)p.pup.sex B)p->pup.sex C)(*p).pup.sex D)(*p).sex

【题10.17】设有以下语句:

struct st {int n; struct st *next; }; static struct st a[3 ] ={5,&a[1] ,7,&a[2],9,’\\0’},*p; p=&a=[0]; 则以下表达式的值为6的是(D)。 A)p++->n B)p->n++ C)(*P).n++ D)++p->n

【题10.18】以下程序的输出结果是(C)。

Struct stu {int x; int*y; } *p; int dt[4] ={10,20,30,40}; struct stu a[4]={50,&dt[0],60,&dt[1], 70,&dt[2],80,&dt[3] }; main() {p=a; printf(“%d,”,++p->x); printf(“%d,”,(++p)->x); printf(“%d\\n”,++(*p ->y)); } A)10,20,20 B)50,60,21 C)51,60,21 D)60,70,31

【题10.19】若有以下说明和语句,则下面表达式中值为1002的是( D )。 Struct student {int age; int num; }; struct student stu[3]={{1001,20},{1002,19},{1003,21}; struct student *p; p=stu; A)(p++)—>num B)(p++)—>age C)(*p).num D)(*++p).age

【题10.20 】以下对结构体变量stul 中成员age 的非法引用是(B)。 Struct student {int age; int num; }stul,*p; p=&stul; A)stul.age B)student.age C)p—>age D)(*p).age

【题10.21】设有以下说明和定义语句,则下面表达式中值为3的是( D )。 Struct s {int i1; struct s*i2; }; static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr; ptr=&a[1]; A)ptr—>i1++ B)ptr++—>i1

【题10.22 】以下程序的功能是:读入一行字符(如:a,„.y,z),按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。请选择正确的内容填入[ ]中。 #include #define getnode(type)[B]malloc(sizeof(type)) main() {struct node {char info; struct node*link; }*top,*p; char c; top=NULL; while((c=getchar())[D]) {p=getnode(struct node); p—>info=c; p—>link=top; top=p; } while(top) {[B]; top=top—>link; putchar(p—>info); free(p); } } [1]A)(type) B)(type*) C)type D)type*[B ] [2]A)= =’\\0’ B)!=’\\0’ C)= =’\\n’ D)=’\\n’[D] [3]A)top=p B)p=top C)= =top D)= =p [B]

【题10.23】若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则[ ]中应填入的内容是( D )。 Int*p; P=[ ]malloc(sizeof(int)); A)int B)int* C)(*int) D)(int*)

【题10.24】当说明一个共用体变量时系统分配给它的内存是( C )。 A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量

【题10.25 】以下对C语言中共用体类型数据的叙述正确的是( C )。 A)可以对共用体变量名直接赋值

B)一个共用体变量中可以同时存放其所有成员 C)一个共用体变量中不可能同时存放其所有成员 D)共用体类型定义中不能出现结构体类型的成员

【题10.26】若有以下定义和语句: union data {int i; char c; float f; }a; int n; 则以下语句正确的是( B )。

A)a=5; B)a={2,’a’,1.2}; C)printf(“%d\\n”,a); D)n=a;

【题10.27】设有以下说明,则下面不正确的叙述是( C )。 Union data { int i; char c; float f; }un; A)un所占的内存长度等于成员f的长度 B)un的地址和它的各成员地址都是同一地址 C)un可以作为函数参数

D)不能对un赋值,但可以在定义un时对它初始化

【题10.28 】C语言共用体型变量在程序运行期间 ( B ) 。 A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中

【题10.29】以下程序的运行结果是 ( B ) 。 #include “stdio.h” main() { union {long a; int b; char c; }m; printf(“%d\\n”,sizeof(m)); } A) 2 B)4 C)6 D)8

【题10.30】对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。

#include “stdio.h” main() {union {int a[2]; long b; char c[4]; }s; s.a[0]=0x39; s.a[1]=0x38; printf(“%lx\\n”,s.b); /*【B】*/ printf(“%c\\n”,s.c[0]); /*【B】*/ } 【1】A)390038 B)380039 C)3938 D)3839 【2】A)39 B)9 C)38 D)8

【题10.31】对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果. #include “stdio.h” main() {int j; union {int a; long b; unsigned char c; }m m.b=0x12345678; printf(“%x\\n”,m.a;) /*【B】*/ printf(“%x\\n”,m.c;) /*【B】*/ } 【1】A)1234 B)5678 C)12345678 D)0 【2】A)12 B)78 C)1234 D)5678

【题10.32】在16位IBM-PC机上使用C语言,若有如下定义: union data {int i; char ch; double f; }b; 则共用体变量 占用内存的字节数是(C).. A)1 B)2 C)8 D)11

【题10.33】以下程序的运行结果是 (A ) .#include “stdio.h” union pw {int I char ch[2]; }a; main() { ch[0]=13; ch[1]=0; printf(“%d\\n”,a,i); } A)13 B)14 C)208 D)209

【题10.34】使用typedef定义一个新类型的正确步骤是( C) . A)2,4,1,3 B)1,3,2,4 C)2,1,4,3 D)4,2,3,1 1.把变量名换成新类型名.2.按定义变量的方法写出定义体.3.用新类型名定义变量.4.在最前面加上关键字 .

【题10.35】下面对typedef的叙述中不正确的是 ( B ) .A)用typedef可以定义各种类型名,但不能用来定义变量 B)用typedef可以增加新类型

C)用typedef只是将已存在的类型用一个新的标识符来代表 D)使用typedef有利于程序的通用和移植

【题10.36】以下程序的运行结果是 ( C )... typedef union {long a[2]; int b[4]; char c[8]; }TY TY our; main() {printf (“%d\\n”,sizeof(our)); } A)32 B)16 C)8 D)24

10.2

【题10.37】以下程序的运行结果是 【10,x 】.. struct n{ int x; char c; }; main() struct n a={10,‘x’};

func(a); printf(%d,%c,a.x,a.c); } func(struct n b) {b.x=20; b.c=’y’; }

填空 题 【题10.38】 以下程序的运行结果是【2,3】.main() {struct EXAMPLE{struct{ int x; inty; }in; int a; int b; }e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(“%d,%d”,e.in.x,e.in.y); }

【题10.39】 以下程序用以输出结构体变量bt所占内存单元的字节数,请在( )内填上适当内容.struct ps { double i; char arr[20]; }; main() { struct ps bt; printf(“bt size : %d\\n”,(sizeof(struct ps )); }

【题10.40】以下程序用来按学生姓名查询其排名和平均成绩.查询可连续进行,直到键入 0 时结束,请在( )内填入正确内容.#include #include #define NUM 4 struct student { int rank; char * name; float score; }; (struct student)stu[]={ 3,”Tom”,89.3, 4,”Mary”,78.2 , 1,”Jack”,95.1, 2,”Jim”,90.6, }; main() { char str[10]; int I; do { printf(“Entre a name:”); scanf(“%s”,str); for(i=0;i=NUM) printf(“Not found\\n”); } while(strcmp(str,”0”)! = 0); }

【题10.41】设有三人的姓名和年龄存在结构数组中,以下程序输入三人中年龄居中者的姓名和年龄,请在( )内填入正确内容.Static struct man { char name[20]; int age; } person[]={“li-ming”,18, “wang-hua”,19, “zhang-ping”,20 }; main(0 { int I,j,max,min; max=min=person[0].age; for(i=1;i

【题10.42】以下程序用”比较计数”法对结构数组 a 按字段 num 进行降序排列.” 比较计数”法的基本思想是:通过另一字段 con 记录 a 中小于某一特定关键字的元素的个数.待算法结束,a[i].con 就是a[i].num 在 a 中的排序位置.请在( )内填入正确内容.#define N 8 struct c { int num; int con; } a[16]

main() {int i,j; for(i=0;i=1;i--) for(j=i-1;j>=0;j--) if(a[i].num

【题10.43】 若已定义: struct num {int a; int b; float f; } n={1,3,5.0}; struct num * pn = &n; 则表达式 pn ->b/n.a*++pn->b的值是【12】,表达式 (*pn).a+pn->f的值是【6.0】

【题10.44】以下程序的功能是计算并打印复数的差。请在【】内填入正确内容。 struct comp {float re; float im; }; struct comp *m(x,y) struct comp *x,*y; {【struct comp*z】; z=(struct comp * )malloc(sizeof(struct comp)); z->re=x->re-y->re; z->im=x->im-y->im; return(【z】); } main() {struct comp *t; struct comp a,b; a.re=1; a.im=2; b.re=3; b.im=4; t=m(【&a&b】); printf(“z.re=%f , z.im=%f”,t->re,t->im); }

【题10.45】以下程序调用readrec函数把10名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组里,学生的学号、姓名、和四项成绩由键盘输入,然后计算出平均分放在结构体对应的域中,调用writerec函数输出10名学生的记录.请在【 】内填入正确内容. #include struct stud { char num[5] , name[10]; int s[4]; int ave; }; main() {struct stud st[30]; int i , k; for(k=0;knum); gets(rec->name); for(i=0;is[i]】); ch=getchar(); sum=0; for(i=0;is[i]】; rec->ave=sum/4.0; } writerec(struct stud * s) { int k,j; for(k=0;k

【题10.46】以下程序的运行结果是【7,3】。 struct ks {int a; int *b; } s[4],*p;

main() { int n=1 , i; printf(“\\n”); for(i=0;ia,(p++)->a); }

【题10.47】结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄 。请在【 】内填入正确内容。 static struct man { char name[20]; int age; } person[ ]={“li-ming”,18, “wang-hua”,19, “zhang-ping”,20 };

main() { struct man *p,*q; int old=0; p=person; for(;p【dt[leap][i]】; p++) if (oldage) {q=p;【d】;} printf(“%s%d”,【p】); } 【题10.48】 以下程序运行结果为【 19 83.5 zhang l9 83.5zhang y hang】. struct s{ int a; float b; char *c; } main() { static struct s x={19,83.5,”zhang”}; struct s *px=&x; printf(“%d%.1f%s\\n”,x.a,x.b,x.c); printf(“%d%.1f%s\\n”,px―>a,(*px ).b, px―>c); printf(“%c%s\\n”,*px―>c―1,&px―>c[1]); }

【题10.49】 以下程序是用来统计学生成绩。其功能包括输入学生姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(pa),而后30%的学生定为不合格(fail)。请在【】内填入正确内容. #include #include typedef struct { char name[30]; int grade; }student; student cla[40]; void sortcla(); void swap(); main() { int ns,cutoff,I; printf(“number of student: \\n”); scanf(“%d”,&ns); printf(“Enter name and grade for each student: \\n”); for(i=0;i

C语言

C语言

c语言

c语言

c语言

C语言

C语言

C语言

c语言

C语言

C语言
《C语言.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档